상품 사진 한 장으로 광고 사이즈 세 개를 만들려면 실제 상품을 그대로 잘라내고 주변 배경만 생성하세요. 사이즈마다 별도 배경을 만들고 원본 봉투를 위에 올린 뒤 헤드라인은 편집기에서 입력합니다. 봉투를 다시 그리는 모델은 라벨의 글자를 휘게 만들 수 있지만, 합성하면 촬영된 픽셀이 그대로 유지됩니다. 2026년 10월 현재 카탈로그와 견적 확인 결과, 세 사이즈 전체 생성 비용은 약 $0.21 입니다.
예는 차콜색 라벨과 구리색으로 접힌 윗부분, 그리고 「RIVER NOTES / WHOLE BEAN / 250 g」 문구가 있는 크림색 커피 봉투입니다. 1:1 (1080 × 1080), 4:5 (1440 × 1800), 9:16 (1080 × 1920)으로 납품합니다.
무엇을 그대로 지킬지로 경로를 고르세요
| 그대로 지킬 것 | 경로 | 세 사이즈 전체 비용 |
|---|---|---|
| 라벨, 형태, 인쇄된 모든 글자 | GPT Image 2로 배경을 생성하고 원본 봉투를 합성 | $0.2021, 컷아웃에 $0.0048 추가 |
| 동일하되 빛과 그림자가 봉투를 따라야 함 | 봉투를 캔버스에 놓고 GPT Image 2 Edit가 마스크를 통해 둘레를 그리게 한 다음 원본을 다시 위에 올림 | $0.2316, 컷아웃에 $0.0048 추가 (사이즈별 원본 이미지 1장) |
| 봉투의 조명을 다시 바꾸거나 다시 그려도 무방 | Nano Banana Pro Edit에 사진을 입력 | $0.2004 (이미지당 $0.0668, 공식 경로로 폴백 시 최대 $0.3242) |
모든 수치는 2K, medium 품질, 사이즈당 출력 1개, 재시도 없는 기준입니다. 가장 단순한 경로에는 2K를 쓰세요. 1K 정사각형은 1024 px로 렌더링되어 1080 캔버스보다 작습니다. 1K는 대략 절반 비용(세 장 합쳐 $0.101)이지만, 그러면 모든 파일에 2K 업스케일(장당 $0.012)이 필요하고 바로 그 추가 단계에서 부드러움이 생깁니다. Nano Banana Pro는 1K와 2K 가격이 같습니다.
새로운 모양만 필요하고 다시 그려진 모서리를 받아들일 수 있다면 아웃페인팅 가이드가 이미지당 $0.024의 한 번 호출 경로를 다룹니다. 그 출력은 긴 변 기준 최대 1536 px라서 4:5와 9:16은 업스케일이 필요합니다.
세 개의 캔버스 설정
| 캔버스 | 봉투 | 카피 영역 | 이유 |
|---|---|---|---|
| 1080 × 1080 | x=760 중앙, 바닥 y=940, 높이 약 640 px | 왼쪽 열 x=80–480, 헤드라인은 y=250 부근 | Meta가 권장하는 1:1 최소값은 1080 × 1080 |
| 1440 × 1800 | x=720 중앙, 바닥 y=1600, 높이 약 930 px | 상단 띠 y=140–500 | Facebook Feed의 Meta 4:5 최소값은 1440 × 1800이며(Instagram Feed는 너비 1080으로 안내), 1080 × 1350은 그보다 작습니다 |
| 1080 × 1920 | x=540 중앙, 바닥 y=1230, 높이 약 680 px | 헤드라인 y=300–470 | 봉투와 텍스트를 y≈270부터 y≈1250 사이에 유지합니다 |
Instagram Feed의 1:1과 4:5 광고에서 Meta는 하단과 측면 가장자리에 핵심 요소를 두지 말라고 요청합니다. 약 100 px면 안전한 여백입니다. 9:16에서는 Meta가 위아래와 양옆을 비우도록 요청하며, Ads Manager의 안전 영역 오버레이가 정확한 상자를 그려 줍니다. 이를 측정하는 가이드들은 여백을 상단 약 14%, 하단 약 35%, 측면 약 6%로 제시하며, 1080 × 1920에서 약 270, 670, 65 px에 해당합니다. 이 때문에 스토리 사이즈에서는 봉투를 처음 생각한 것보다 높게 두어야 합니다. 플랫폼마다 오버레이가 다르니 내보내기 전에 각 게재 위치의 미리보기를 확인하세요.
정사각형은 카피를 상품의 왼쪽과 오른쪽으로 나누고, 세로형은 카피를 상품 위에 쌓으며, 9:16은 모든 것을 가운데 띠 안에 넣습니다. 봉투는 균일하게 확대·축소하세요. 캔버스를 꽉 채우도록 늘리면 패키지 비율이 바뀝니다. 세 가지 모두에서 사진의 촬영 각도를 유지하세요. 정면 촬영은 뒷면 패널이나 옆면 이음선을 보여줄 수 없고, 생성된 측면은 실제 패키지가 아니라 목업입니다.

세 비율을 AI로 생성한 삽화. 각 비율에 커피 봉투를 하나씩 배치했으며, 실제 레이아웃은 위 좌표표를 따릅니다.
Playground에서 해 보기
다음 단계를 Playground에서 수행하세요. 코드와 Agent 경로는 아래에 있습니다.
- Background Remover를 열고 Playground 탭의 Form 뷰를 그대로 사용하세요(실행하려면 잔액이 있는 계정으로 로그인합니다). Input image 아래에 봉투 사진을 넣고 실행합니다. 투명 PNG를 저장하세요.
- 1:1 프롬프트가 채워진 GPT Image 2 text to image를 여세요. Aspect ratio를
1:1, Resolution을2k, Quality를medium으로(조정 중에는low), Output format을png로 설정하고 가격 예상값을 확인한 뒤 실행하세요. 4:5와9:16으로 같은 과정을 반복하되 아래 프롬프트의 배치 문장으로 바꿔 넣고, 그다음 편집기에서 원본 봉투를 합성하세요.
봉투는 한 번만 잘라내세요
봉투 전체가 보이고 라벨을 읽을 수 있는 가장 좋은 사진을 Background Remover로 보내세요. 입력은 이미지 URL 하나, 출력은 원본 크기의 투명 PNG이며 비용은 $0.0048 입니다. 배경 제거 가이드에 가장자리 점검 방법이 있습니다. 가장자리를 200%로 확대해 어두운 배경과 밝은 배경 양쪽에서 확인하고, 봉투를 직사각형으로 납작하게 만드는 대신 구리로 접힌 부분과 접힌 안쪽의 작은 그림자를 남기세요.
원본 파일은 컷아웃과 따로 보관하세요. 원본에 단단한 접촉 그림자가 있으면 봉투를 새 면에 놓기 전에 흐리게 처리하거나 제거하세요. 그렇지 않으면 합성 결과에 서로 충돌하는 그림자 두 개가 보입니다. 계획한 봉투 크기에 비해 사진이 너무 작다면 레이아웃에서 봉투를 작게 만들거나 더 큰 사진을 확보하세요. 생성된 라벨이 더 선명하더라도 그것은 인쇄된 라벨이 아닙니다.
배경 생성하기
위 Playground 단계와 같은 설정으로 GPT Image 2 text to image를 열고 사이즈별로 화면 비율을 고르세요. 각 프롬프트에 사진의 조명 방향을 적으세요. 예시 봉투는 아래 프롬프트처럼 왼쪽 위에서 비춰집니다. 1:1에는 다음을 사용하세요:
Photographic still-life advertising background, empty warm stone tabletop in the lower third, softly lit charcoal wall, gentle window light from upper left, subtle warm copper accents far in the background. Leave the right half of the tabletop clear for a coffee bag to be composited later. Leave the left half of the wall quiet and low-detail for editable copy. No product, no lettering, no logo, no cup in the reserved product area.
4:5에서는 배치 문장을 다음으로 바꿉니다:
Leave the lower centre clear for a coffee bag to be composited later; keep the upper third as a simple charcoal wall for editable copy.
9:16에는 다음을 사용하세요:
Vertical photographic background with a broad clear tabletop below the centre. Reserve the central lower-middle area for a coffee bag, with quiet charcoal wall above and uncluttered space below. No lettering, no product, no foreground props.
생성된 가짜 패키지가 원본과 경쟁하지 않도록 봉투는 배경에서 제외하세요. 커피콩은 나중에 별도 요소로 라벨과 봉투의 접촉 가장자리에서 떨어진 곳에 추가할 수 있습니다. 프롬프트를 다듬는 동안 비용을 아끼려면 먼저 Quality를 low로 실행하세요(2K에서 세 장 합계 약 $0.024). 빈 영역이 레이아웃이 원하는 위치에 오면 medium으로 전환합니다. 전달된 픽셀 크기를 캔버스와 비교하세요. 부족하다면 편집기에서 늘이지 말고 Image Upscaler의 2K 단계($0.012, 업스케일 가이드 참고)로 확대하세요.
봉투 합성하고 카피 설정하기
컷아웃을 위 좌표에 배치하세요. 바닥 바로 아래에 부드러운 접촉 그림자(흐리게 처리한 어두운 타원을 multiply 모드로 약 30–40% 정도)를 넣고, 빛에서 멀어지는 방향으로 더 옅고 넓은 그림자를 추가하세요. 봉투가 오른쪽에서, 배경이 왼쪽에서 비춰진다면 인쇄된 패키지 위에 서로 충돌하는 하이라이트를 그리지 말고 오른쪽 조명으로 배경을 다시 생성하세요. 봉투 둘레에 옅은 테두리가 보인다면 컷아웃의 가장자리 문제입니다. 무언가를 다시 생성하지 말고 선택 영역을 1~2 px 줄이세요.
헤드라인과 행동 문구를 편집기에 입력하세요. 「250 g」 같은 상품 정보는 제공된 그대로 사용하고, 근거 없는 주장은 덧붙이지 마세요.
Pillow로 하는 같은 단계. 1080 × 1080 캔버스 기준입니다(봉투는 표처럼 바닥 기준으로 배치):
from PIL import Image, ImageFilter
bg = Image.open("bg-1x1.png").convert("RGBA").resize((1080, 1080))
bag = Image.open("bag-cutout.png").convert("RGBA")
h = 640
bag = bag.resize((round(bag.width * h / bag.height), h), Image.LANCZOS)
x, base_y = 760 - bag.width // 2, 940
shadow = Image.new("L", bg.size, 0)
shadow.paste(90, (x + 20, base_y - 12, x + bag.width - 20, base_y + 12))
shadow = shadow.filter(ImageFilter.GaussianBlur(14))
dark = Image.new("RGBA", bg.size, (20, 12, 8, 255))
bg = Image.composite(dark, bg, shadow)
bg.alpha_composite(bag, (x, base_y - h))
bg.convert("RGB").save("ad-1x1.png")배경, 상품, 그림자, 텍스트를 각각 별도 레이어로 둔 마스터 파일을 저장하고 각 사이즈를 그곳에서 내보내세요. 그러면 새 가격이나 새 헤드라인은 추가 생성 비용 없이 반영되며 라벨이 바뀔 수도 없습니다.
모델이 봉투 둘레를 그리게 하기
합성 결과가 붙여 놓은 것처럼 보이면 GPT Image 2 Edit이 주변을 그리게 하세요. 마스크의 투명 영역은 편집할 위치를 알려 주지만, 그 밖의 픽셀이 변하지 않는다고 보장하지는 않습니다. 4단계에서 원본 상품을 덮어 올리면 촬영된 라벨이 그대로 유지됩니다.
- 컷아웃을 출력과 같은 비율의 평평하고 중립적인 캔버스에 놓고 원본 이미지로 내보내세요. 2K에서 모델은 정사각형의 긴 변 기준으로 2048 px를 반환하므로 그 크기로 만드세요(1:1이면 2048 × 2048이며 봉투는 캔버스 표와 같은 계수로 확대합니다). 또는 마지막 덮기 전에 결과를 캔버스 크기로 줄이세요.
- 상품 레이어만 내보내세요. 봉투는 불투명하게, 나머지는 모두 투명하게, 원본과 같은 픽셀 크기로 만듭니다.
- Playground에서 GPT Image 2 Edit를 여세요. Images 아래에 캔버스를 추가하고 Advanced parameters를 열어 Mask 아래에 상품 레이어를 추가합니다(투명 픽셀은 다시 칠해지고 불투명 픽셀은 유지됩니다). Aspect ratio를 캔버스와 맞추고, Resolution을
2k, Input Fidelity를high로 설정한 뒤 다음과 같은 프롬프트를 사용하세요: “Paint a warm stone tabletop and charcoal wall around the existing coffee bag. Keep the bag unchanged. Soft window light from the left with a natural contact shadow under the bag. Leave the upper third as quiet wall for copy.” - 텍스트를 넣기 전에, 모델이 둘레에 칠한 바로 그 픽셀 위치에 원본 컷아웃을 결과 위에 올리세요. 가장자리에서 뭐가 일어나든 라벨이 촬영된 것으로 남게 하기 위해서입니다.
모델은 그리는 동안 봉투를 보므로 빛과 그림자가 봉투를 따라갈 수 있습니다. 원본 이미지는 요청당 $0.0098을 추가합니다. 2K medium 기준 1:1은 $0.0959, 4:5는 $0.0778, 9:16은 $0.0579 입니다.
봉투 자체가 바뀌어도 되는 경우
봉투를 새 장면에서 다시 조명하고 접힌 부분과 라벨, 실루엣의 변화를 검토할 수 있다면 Nano Banana Pro Edit을 고르세요. Images 아래에 상품 사진을 추가하고 Resolution을 2k로, Aspect ratio를 고른 뒤 다음을 사용하세요:
Place the coffee bag from the supplied photograph on a warm stone tabletop against a charcoal wall. Preserve its cream package, copper folded top, charcoal label and overall proportions. Soft window light from the left. Leave clear space above for copy. Do not add claims, extra logos or extra products.
승인된 라벨 자료를 두 번째 이미지로 첨부한다면 어느 이미지가 봉투이고 어느 것이 라벨인지 말해 주세요. 보존을 요청해도 보장되지는 않습니다. 「250 g」가 다른 수량으로 바뀌면 최종 합성에서 승인된 자료로 라벨을 교체하거나, 배경만 사용하는 경로로 돌아가세요.
코드로 호출하기
9:16 사이즈를 위한 동일한 배경 호출입니다(pip install spicyapi로 설치하고 SPICY_API_KEY를 설정하세요). 이후 위의 Pillow 단계가 봉투를 배치합니다. 이미지당 약 $0.048 입니다.
import uuid
from spicyapi import SpicyClient, output_assets
client = SpicyClient() # reads SPICY_API_KEY from the environment
task = client.create_task(
model="openai/gpt-image-2/text-to-image",
input_data={
"prompt": "Vertical photographic background with a broad clear tabletop below the centre. Reserve the central lower-middle area for a coffee bag, with quiet charcoal wall above and uncluttered space below. No lettering, no product, no foreground props.",
"aspect_ratio": "9:16",
"resolution": "2k",
"quality": "medium",
"output_format": "png",
},
idempotency_key=str(uuid.uuid4()), # new key per new request; reuse only to retry the same one
)
print("Resume task:", task["taskId"], flush=True)
final = client.wait_for_terminal(task["taskId"])
if final["state"] != "succeeded":
raise RuntimeError(f"Task {task['taskId']} ended as {final['state']}")
assets = output_assets(final)
if not assets or any(a.get("pending") or a.get("unavailable") or not a.get("url") for a in assets):
raise RuntimeError(f"Task {task['taskId']} has no ready output; check this task before a new run")
print(assets[0]["url"])나머지는 Python SDK 레퍼런스에서 다룹니다.
Agent에게 맡기기
input 필드를 input.json으로 저장한 다음 npx @spicyapi/cli tasks create --model openai/gpt-image-2/text-to-image --input-file input.json --wait를 실행하세요(CLI). MCP 서버를 쓰면 어시스턴트가 spicyapi_task_create를 호출하고, 그때 표시되는 가격을 확인한 뒤 spicyapi_task_wait를 호출합니다. 또는 npx skills add spicyapi-ai/spicy-skill로 Agent Skill을 설치할 수도 있습니다.
흔한 문제 해결
| 문제 | 해결 |
|---|---|
| 최종 사이즈에서 라벨이 뭉개져 보인다 | 봉투를 더 작게 만들거나 해상도가 높은 사진을 사용하세요. 라벨의 원본 픽셀을 유지해야 합니다. |
| 봉투가 떠 있는 것처럼 보인다 | 접촉 그림자를 실제 바닥으로 옮기고 빈틈을 없애세요. |
| 상품과 배경의 조명이 어긋난다 | 사진의 조명 방향을 배경 프롬프트에 넣거나 마스크 편집을 사용하세요. |
| 카피가 구리 접힌 부분과 겹친다 | 카피를 예약 영역으로 옮기세요. 봉투를 눌러서 줄이지 마세요. |
| 세로 버전이 바닥을 잃거나 UI 영역에 걸린다 | 9:16 좌표로 레이어에서 다시 만드세요. 정사각형을 잘라내지 마세요. |
| 생성된 장면이 패키지 글자를 바꾼다 | 배경만 사용하는 합성으로 돌아가거나 승인된 자료에서 라벨을 복원하세요. |
납품 전에 내보낸 각 파일의 라벨을 최대 확대해 원본 사진과 비교하세요.
대부분의 작업에서는 배경만 생성하고 원본 봉투를 합성하세요. 합성이 붙여 놓은 것처럼 보일 때 마스크 편집으로 전환하세요.








