商品写真1枚から3種類の広告サイズを得るには、実物の商品を切り抜いたままにし、周囲の風景だけを生成してください。 サイズごとに別々の背景を作り、元の袋をその上に配置し、見出しは編集ツールで入力します。袋を描き直すモデルはラベルの文字を曲げてしまうことがあります。合成であれば撮影されたピクセルはそのまま残ります。2026年10月の現行カタログと見積に関する検証によると、3サイズ分をまとめて生成する費用は約 $0.21 です。
例は、チャコール色のラベル、銅色の折り返した上部、そして「RIVER NOTES / WHOLE BEAN / 250 g」という文言を持つクリーム色のコーヒー袋です。1:1(1080 × 1080)、4:5(1440 × 1800)、9:16(1080 × 1920)で納品します。
正確に保ちたいものでルートを選ぶ
| 正確に保ちたいもの | ルート | 3サイズすべての費用 |
|---|---|---|
| ラベル、形状、印字されたすべての言葉 | GPT Image 2 で背景を生成し、元の袋を合成する | $0.2021、カットアウトに $0.0048 |
| 同じで、光と影も袋に従うこと | 袋をキャンバスに置き、GPT Image 2 Edit にマスク経由で周囲を塗らせてから、元の切り抜きをもう一度重ねる | $0.2316、カットアウトに $0.0048(サイズごとに元画像1枚) |
| 袋を光で照らし直したり描き直したりしてよい | Nano Banana Pro Edit に写真を入力 | $0.2004(1枚あたり $0.0668。公式ルートにフォールバックした場合は最大 $0.3242) |
すべての数値は 2K、medium 品質、サイズごとに1出力、再試行なしの場合です。最も単純な方法には 2K を使ってください。1K の正方形は 1024 px でレンダリングされ、1080 のキャンバスより小さくなります。1K は約半額(3枚分で $0.101)ですが、その場合どのファイルにも 2K アップスケール(1枚あたり $0.012)が必要になり、柔らかさが生じるのはまさにその追加手順です。Nano Banana Pro は 1K でも 2K でも同じ料金です。
新しい形だけが必要で、描画されたエッジを許容できる場合は、outpainting ガイドが画像1枚あたり $0.024 の1回呼び出しのルートを扱っています。その出力は長辺で最大 1536 px までなので、4:5 と 9:16 はアップスケールが必要になります。
3つのキャンバスを設定する
| キャンバス | 袋 | テキスト領域 | 理由 |
|---|---|---|---|
| 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 はすべてを中央の帯の中に収めます。袋は均一に拡大縮小してください。キャンバスいっぱいまで引き伸ばすとパッケージの比率が変わります。3サイズすべてで写真の視点角を保ってください。正面からの撮影では背面パネルや側面の縫い目は写りません。生成された側面は実際のパッケージではなくモックアップです。

3つの比率の AI 生成によるイラスト。各比率にコーヒー袋を1つずつ配置しています。実際のレイアウトは上記の座標表に従います。
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 1 つ、出力は元のサイズの透過 PNG で、$0.0048 です。背景除去ガイドにエッジの確認方法が載っています。エッジを 200 % で暗い塗りと明るい塗りの両方で確認し、袋を長方形に潰すのではなく、銅色の折り返しと折り目の中の小さな影を残してください。
元のファイルは切り抜きとは別に保存します。写真に硬い接触影が写っている場合は、袋を新しい面に置く前にぼかすか取り除いてください。そうしないと合成に2つの矛盾した影が出ます。想定した袋の大きさに対して写真が小さすぎる場合は、レイアウト内で袋を小さくするか、大きめの写真を入手してください。生成されたラベルのほうが鮮明でも、それは印字されたラベルではありません。
背景を生成する
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 で3枚とも約 $0.024)。空の領域がレイアウトの求める位置に落ちてから medium に切り替えます。返ってきたピクセルサイズとキャンバスを比較してください。足りない場合は、編集ツールで伸ばすのではなく Image Upscaler の 2K 段階($0.012、アップスケールガイド を参照)で拡大してください。
袋を合成して文字を組む
切り抜きを上記の座標に配置します。基部のすぐ下に柔らかい接触影(不透明度約 30–40 % のぼかした暗い楕円を multiply で設定)と、光から反対側へ落ちる淡く広い影を追加します。袋が右から、背景が左から照らされているなら、印字されたパッケージの上に矛盾したハイライトを塗るのではなく、右からの光で背景を再生成してください。袋の周囲に出る淡い縁は切り抜きのエッジ問題です。何も再生成せず、選択範囲を1〜2 px 縮めてください。
見出しと行動喚起(CTA)は編集ツールで入力します。「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.
承認済みのラベルのアートワークを2枚目の画像として添付する場合は、どちらが袋でどちらがラベルかを明示してください。保持を求める指示は保持を保証しません。「250 g」が別の分量になる場合は、最終合成で承認済みアートワークにラベルを差し替えるか、背景だけのルートに戻ってください。
コードから呼び出す
9:16 サイズ向けの同じ背景呼び出しです(pip install spicyapi でインストールし、SPICY_API_KEY を設定してください)。その後の Pillow の手順が袋を配置します。1枚あたり約 $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 の座標でレイヤーから組み立て直す。正方形を切り抜かない。 |
| 生成シーンでパッケージの文言が変わる | 背景だけの合成に戻すか、承認済みアートワークからラベルを復元する。 |
納品前に、書き出した各ファイルのラベルを最大倍率で元写真と比較してください。
ほとんどの作業では、背景だけを生成して元の袋を合成してください。合成が貼って見えるときに、マスクを使った編集へ切り替えます。








