AI Food Photography API — Restaurant Menu Photos Programmatically
A restaurant chain rolling out a seasonal menu across 40 locations, or a food delivery app onboarding a new merchant with 60 unlisted SKUs, faces the same bottleneck: every dish needs a clean, consistent photo before it can go live, and booking a food photographer for that volume on a launch deadline isn't realistic. Menu items also change often enough — seasonal swaps, discontinued dishes, new promotions — that a one-time photoshoot goes stale within a quarter.
This guide covers model selection for food photography, a text-to-image code pattern for generating a single dish photo, a reference-guided pattern for keeping plating style consistent across a menu, a batch pattern for a full menu launch, and cost math for a typical rollout.
Which Image Model Fits Food and Menu Photography?
Nano Banana Pro is the stronger default for food photography because it holds up better on fine texture — sauce sheen, char marks, garnish detail — at the resolutions menus and delivery-app listings actually use. GPT-image-2 is the cheaper choice when the task is editing an existing photo (swapping a garnish, changing the plate, adjusting lighting) rather than generating a new dish from scratch. Nano Banana 2 sits between the two on price when 4K output isn't required.
| Model | Best for | 1K price | 4K price | Editing support |
|---|---|---|---|---|
| Nano Banana Pro | New dish photos, fine texture detail | $0.030 | $0.042 | Reference-guided generation |
| Nano Banana 2 | Budget dish photos, non-print use | $0.020 | $0.036 | Reference-guided generation |
| GPT-image-2 | Editing existing photos (garnish, plate, lighting swaps) | $0.014/pic (flat) | $0.014/pic (flat) | Instruction-based edits |
Definition: reference-guided generation means passing one or more existing images alongside a text prompt so the model matches a specific style, plating, or camera angle rather than generating a photo from the text prompt alone.
For a menu launch generating dishes that don't exist yet as photos, start with Nano Banana Pro at 1K — the same $0.030 as 2K, so there's no reason to default to a lower tier unless the destination is thumbnail-only. Reserve GPT-image-2 for touch-up work on photos a location already has.
How Do I Generate a Menu Item Photo From a Text Description?
Submit a detailed prompt describing the dish, plating, angle, and lighting — vague prompts like "a nice pasta dish" produce inconsistent results across a batch.
import requests
API_KEY = "YOUR_GENRELAY_KEY"
BASE_URL = "https://genrelay.ai/v1"
def generate_dish_photo(prompt, resolution="1K"):
r = requests.post(
f"{BASE_URL}/images/generations",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "nano-banana-pro",
"prompt": prompt,
"resolution": resolution,
},
timeout=60,
)
return r.json()["data"][0]["url"]
url = generate_dish_photo(
"Overhead shot of grilled salmon fillet with charred skin, "
"roasted asparagus, lemon wedge, white ceramic plate, "
"natural window light, shallow depth of field, restaurant menu style"
)
print(url)
How Do I Keep Plating Style Consistent Across a Full Menu?
Pass an approved dish photo as a reference image so new dishes match its plate, lighting, and camera angle instead of drifting in style from item to item.
def generate_with_reference(prompt, reference_url, resolution="1K"):
r = requests.post(
f"{BASE_URL}/images/generations",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "nano-banana-pro",
"prompt": prompt,
"reference_images": [reference_url],
"resolution": resolution,
},
timeout=60,
)
return r.json()["data"][0]["url"]
url = generate_with_reference(
"Same white ceramic plate, same overhead angle and window light as reference, "
"roasted chicken thigh with root vegetables",
reference_url="https://cdn.example.com/menu/approved-salmon-shot.jpg",
)
print(url)
See the visual consistency guide for prompt patterns that hold style across a larger batch than a single reference pair.
How Do I Batch-Generate Photos for a Full Menu Launch?
Queue every menu item as a prompt paired with the same approved reference photo, then submit with bounded concurrency so the batch finishes without tripping rate limits.
from concurrent.futures import ThreadPoolExecutor
REFERENCE = "https://cdn.example.com/menu/approved-salmon-shot.jpg"
MENU_ITEMS = [
"Roasted chicken thigh with root vegetables, same plate and lighting as reference",
"Pan-seared scallops with pea puree, same plate and lighting as reference",
"Braised short rib with mashed potatoes, same plate and lighting as reference",
"Wild mushroom risotto, same plate and lighting as reference",
]
with ThreadPoolExecutor(max_workers=4) as pool:
urls = list(pool.map(
lambda p: generate_with_reference(p, REFERENCE),
MENU_ITEMS,
))
for u in urls:
print(u)
What Does a Full Menu Photo Shoot Cost via API?
As of September 2026, GenRelay pricing: Nano Banana Pro $0.030 at 1K/2K and $0.042 at 4K; Nano Banana 2 $0.020 at 1K and $0.036 at 4K; GPT-image-2 $0.014 per image regardless of resolution.
A 60-item menu generated at 1K on Nano Banana Pro costs 60 × $0.030 = $1.80. Adding a 4K hero shot for the top 10 bestsellers, used on the website and in paid ad creative, adds 10 × $0.042 = $0.42. A full launch — 60 standard photos plus 10 hero shots — totals $1.80 + $0.42 = $2.22.
| Photo set | Composition | Cost |
|---|---|---|
| Full menu at 1K | 60 × Nano Banana Pro 1K | $1.80 |
| Hero shots at 4K | 10 × Nano Banana Pro 4K | $0.42 |
| Combined launch | Both above | $2.22 |
| Budget menu at 1K | 60 × Nano Banana 2 1K | $1.20 |
| Touch-up edits | 20 × GPT-image-2 edits | $0.28 |
For a chain running the same rollout across 40 locations with only minor regional menu variations, generating the base 60-item set once and reusing it across locations — rather than regenerating per location — keeps the marginal cost near zero for every additional location.
Internal Links
- Nano Banana Pro on GenRelay
- GPT-image-2 on GenRelay
- How to maintain visual consistency in AI-generated images
- E-commerce product image generation API
FAQ
Can the API generate a photo of a dish that doesn't exist as a real photo yet?
Yes. Text-to-image generation with Nano Banana Pro or Nano Banana 2 produces a plausible dish photo from a detailed prompt alone, which covers new menu items before a physical version has been plated and shot.
How do I keep garnish and plating consistent across dozens of dishes?
Pass one approved photo as a reference image on every subsequent generation call. The model matches plate, lighting, and camera angle from the reference while varying the dish itself based on the prompt.
What resolution should menu photos use?
1K is sufficient for delivery-app listings and most website menu grids. Reserve 4K for print menus, large website hero banners, or paid ad creative where the image is displayed larger than a thumbnail.
Can I edit an existing food photo instead of generating a new one?
Yes — GPT-image-2 takes an existing photo plus an instruction ("swap the garnish to mint", "brighten the lighting") and returns an edited version at a flat $0.014 per image, which is cheaper than a full regeneration.
Is there a free tier to test image quality before committing to a full menu shoot?
Yes. GenRelay includes free credits on signup, enough to generate and compare a handful of dish photos across Nano Banana Pro and GPT-image-2 before running a full menu batch.
As of September 2026. Pricing subject to change — verify current rates at genrelay.ai.