Translate small print on a pack: edit the panel crop, paste it back

For ingredient-panel small print, crop the panel, send only the crop to an Ideogram 4.5 edit at high quality, and paste it back with Pillow. Proof every word.

4 min readSume
All posts

Do not ask an image model to translate a whole pack photo when the hard part is the ingredient panel. Crop the panel, edit only the crop at quality: high, then paste it back over the original with Pillow. The small print gets the full output size of the model, and the rest of the pack is never touched.

Why the crop helps

Small print is a few pixels tall on a full pack shot. In a crop, the same text fills the frame, so there are more pixels per letter for the model to read and to redraw. An edit with no aspect_ratio keeps the source shape (Image API docs), so the edited crop comes back at the size you sent and drops straight into the same box.

The Ideogram API says unedited pixels are copied exactly from the original in its own edit endpoint (read 2026-10-05). I have not verified that the Sume route preserves them byte for byte, so the paste-back is also your safety: only the panel box can change.

Pick the quality from the cost

Quality sets the price on Ideogram 4.5. The fal list prices are $0.03, $0.06 and $0.22 per image for low, medium and high, and Sume bills list x 1.25.

Ideogram 4.5 quality tiers on Sume, per image (read 2026-10-05)
QualityFal listBilled on Sume
low$0.03$0.0375
medium (default)$0.06$0.075
high$0.22$0.275

Crop, edit, paste

Upload the crop to a URL you control, send it as the first input_references entry with the target language in the prompt, and download the result. Then paste it back.

from PIL import Image

pack = Image.open("pack.png").convert("RGB")
box = (120, 640, 920, 1180)  # left, top, right, bottom
pack.crop(box).save("panel.png")

# ...edit panel.png through POST /v1/images, save as panel_de.png...

w, h = box[2] - box[0], box[3] - box[1]
panel = Image.open("panel_de.png").convert("RGB")
if panel.size != (w, h):
    panel = panel.resize((w, h), Image.Resampling.LANCZOS)
pack.paste(panel, box[:2])
pack.save("pack_de.png")

Limits you should respect

Never ship translated ingredient or allergen text without a person who reads the language checking every word. A model can misspell, drop a line or change a number, and a label is a legal document in most markets. Translations are often longer than the English too, so tell the prompt to keep the same font size and to shorten line breaks rather than shrink the text.

Check the pasted seam. If the panel background is a flat colour it will be invisible. On a textured or gradient background, crop slightly larger than the text block and feather the paste edge, or retouch the seam by hand.

Checklist before the batch

Run one language end to end first, and print it at final size. Small print that looks fine on a monitor can fail at label size, so look at the printed proof.

Keep the prompt identical across languages except for the language name, so a difference in the output is the language and not the wording. Save each crop, each edit and the pasted result, because a reviewer will ask for the panel on its own.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume