Translate a restaurant menu image into Spanish and French on Sume
Translate the text in a menu image with Ideogram 4.5: one edit call per language from the original, with prices and dish names kept. Python loop included.

To translate a menu image into Spanish and French, make two separate edit calls to POST /v1/images, each starting from the original image and each naming one target language. Do not translate the English image into Spanish and then the Spanish result into French: every pass starts from a changed image, and a mistake in pass one is baked into pass two.
Ideogram's launch post (read 2026-10-05) says 4.5 is built for precise edits and multi-turn use. A partner page, Morphic, lists translating text in an image among the things the model does. Sume's docs say ideogram/ideogram-v4.5 edits the first reference image when you send references.
Why one call per language
Each call is independent, so you can run them at the same time and a failed Spanish job does not block the French one. The docs say failed or cancelled generations are not charged; a completed generation is billed in full. That makes the count simple: two languages are two billed edits per menu page, plus any re-runs you choose to make.
Menu-specific traps
Menus are dense, and dense text is where translation edits fail first. Plan for the traps before you run a batch:
The image keeps its shape because the call has no aspect_ratio; the docs say an edit without it keeps the source image shape. A tall menu stays tall. If you send a menu as a photo of a printed page, the paper edges and background come along unchanged, which is usually what you want for a table tent or a screen at the counter. If you need a clean version for a PDF, start from the original design file instead of a photo.
Quality tiers are low, medium (the default) and high. For a dense page, run one language at low to see the layout behavior before you commit to high for all of them.
- Dish names often stay in the source language on purpose (a French dish on a Spanish menu). Put those names in a do-not-translate list.
- Menu sections like "Starters" and "Desserts" are short and safe; long ingredient lines are where wrapping breaks.
- Currency formats differ: a comma or a dot as decimal separator. If your market needs a different format, say so, or keep prices exactly and change them in a design tool.
- Allergen icons and abbreviations (GF, V) are not words in every language. Say "keep abbreviations as they are" if they are your own codes.
A loop for it
The script reuses one function and one source URL. It prints the result URL, or the status_url when the call returns 202.
import os, requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
SRC = "https://example.com/menu-en.png"
def edit(prompt):
body = {"model": "ideogram/ideogram-v4.5", "quality": "medium", "prompt": prompt,
"input_references": [{"type": "image_url", "image_url": {"url": SRC}}]}
r = requests.post("https://api.sume.com/v1/images", headers=H, json=body, timeout=60)
r.raise_for_status()
if r.status_code == 202:
return "202 poll " + r.json()["data"]["status_url"]
return r.json()["data"][0]["url"]
for lang in ["Spanish", "French"]:
p = (f"Translate all text on this menu into {lang}. Keep prices, "
"numbers, layout, fonts and photos identical.")
print(lang, edit(p))What to keep out of the translation
Menus mix text that should change with text that should not. Decide before you run:
- Prices and currency symbols: say "keep all prices exactly".
- Restaurant name and logo: say "do not translate the restaurant name".
- Dish names that are the same in every language: list them.
- Allergen codes and footnotes: check them by eye, because a translated footnote can change meaning.
Review and cost
Have someone who reads each language check the output. Translated text is often longer than the English, so look for lines that run into a photo or off the edge. If a line does not fit, shorten that line in the prompt and re-run only that language.
Check the live per-image price from the endpoint record before a batch: GET /v1/images/models/ideogram/ideogram-v4.5/endpoints returns the pricing lines that Sume bills.
Sources
Related posts
More in Use cases
- Travel Agency Destination Teaser With an AI Avatar: Cost
A destination teaser narrated by a reusable AI avatar: scene script, per-scene seconds, request JSON and Sume Avatar 1.0 cost on each quality tier.
- Score travel and drone footage with three moods and one concat
Make three Lyria 3.5 cues for a travel reel, join them with Timeline audio concat at $0.01, and render under drone footage. About $0.69 for 3 minutes.
- Blog post to a 45-second Short that is not the article aloud
Reading an article over stock clips is the pattern YouTube warns about. Pull one claim, add your own angle, and build the Short with Sume Timeline.
- Turn a help article into a 45-second avatar script and render it
Cut a help article to one task of about 100 words and render it as a Sume avatar clip. A 45-second Standard clip is $8.28; the article stays the truth.
Written by Sume