Napkin sketch to product render: one reference on GPT Image 2.5
Turn a photographed napkin sketch into a product render with one input reference on GPT Image 2.5. Set aspect_ratio auto to keep the shape. Code and prices.

To turn a napkin sketch into a product render, host a photo of the sketch at a public HTTPS URL, pass it as one input_references entry to GPT Image 2.5, and describe materials, color and lighting in the prompt. Set aspect_ratio to auto so the render keeps the sketch's proportions.
The Sume docs say aspect_ratio: "auto" on an edit call matches the reference. Without it, a wide napkin photo can come back in the default shape, and you lose the layout you drew.
What the sketch carries and what the prompt must add
A pencil sketch fixes shape, layout and proportion. It cannot say matte or glossy, steel or wood, studio light or daylight. Put those in the prompt. Also say which marks are noise, for example "ignore the arrows, notes and the coffee ring", because the model cannot know that a ring on a napkin is not part of the product.
Per the OpenAI guide and the fal pages, GPT Image 2.5 ships as Flare, the fast generator, and Sunburst, the variant tuned for edit precision. On Sume both take up to 16 references, mask_url and background. Draft on Flare, and move to Sunburst when you only need to change details.
| Field | Value | Why |
|---|---|---|
| model | openai/gpt-image-2.5 or openai/gpt-image-2.5-sunburst | Both accept references, mask_url, background |
| input_references | 1 to 16 public HTTPS image URLs | The sketch goes first |
| aspect_ratio | auto | Matches the reference on edit calls |
| quality | low, medium, high (default), xhigh, max | Draft low, finish high |
| n | 1 | One concept per call keeps cost clear |
Request
Reference URLs must be public HTTPS, and Sume answers 400 input_media_unreachable when it cannot download one. A file on your laptop needs a public upload first, for example through the assets upload flow.
import os, requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
def generate(body):
r = requests.post("https://api.sume.com/v1/images", headers=H, json=body, timeout=60)
if r.status_code != 200: # 202 = still running, read data.status_url
raise SystemExit(f"{r.status_code}: {r.text[:300]}")
return r.json()["data"][0]["url"]
from io import BytesIO
from PIL import Image
url = generate({
"model": "openai/gpt-image-2.5",
"prompt": "Turn this pencil sketch into a clean studio product render of a matte steel water bottle with a wooden cap on a soft grey backdrop. Ignore the arrows and notes.",
"input_references": [{"type": "image_url", "image_url": {"url": "https://example.com/napkin-sketch.jpg"}}],
"aspect_ratio": "auto",
"quality": "medium",
})
Image.open(BytesIO(requests.get(url, timeout=60).content)).save("render.png")
print("saved render.png")Cost of a concept round
GPT Image 2.5 is billed on tokens. The fal pages list $30 per million output image tokens, $8 per million image input tokens and $5 per million text input tokens. Sume bills the provider list price times 1.25. The table is output-only, so reference and prompt tokens add a little on top of it.
| Quality | Provider list | Sume at list x 1.25 |
|---|---|---|
| low | $0.0059 | $0.0073 |
| medium | $0.0132 | $0.0165 |
| high | $0.0527 | $0.0658 |
A short loop that works
Keep the sketch as the first reference on every call so the layout does not drift.
- Round one:
lowquality, three prompt variants on the same sketch. - Round two: pick one, move to
high, and add the detail you found missing. - Round three: to move one part only, send a mask with
mask_urlinstead of re-rolling the whole picture.
If the call returns 202
POST /v1/images waits up to 30 seconds and returns 200 with the images. A slow job falls back to a 202 job envelope, and you read the images from GET /v1/jobs/{id}/result. The code above exits on any non-200 so you notice, and a failed synchronous job returns 502 and is not billed.
Photo tips for the sketch
Shoot the napkin flat and in even light, with the lines dark against the paper. Crop away the table so the reference holds only the drawing. A blurred, tilted photo gives the model a blurred, tilted product.
Sources
Related posts
More in Use cases
- New Year countdown video music: build to midnight with a timed prompt
Write a timed Lyria 3.5 prompt that builds for 50 seconds and hits at midnight. $0.125 a take on Sume, then a Timeline render at $0.10 under your countdown.
- Nine product angles as references: MiniMax H3 Max on Sume
How to send up to nine product photos as reference images to minimax-h3-max on Sume, what the vendor limit is, and where Sume's own limits live.
- One 90-second ad, three voice beats: three TTS jobs and a concat
Splitting a 1,350-character read into hook, proof and call-to-action jobs costs 8 cents plus 1 cent to join, against 7 for one job. When that is worth it.
- One Black Friday master, three markets: EU, UK, Australia cards
One clean master, a different price card per market: EU prior price, UK total with delivery, Australian end date. Three $0.20 jobs. Read 2026-10-05.
Written by Sume