MenuGen
Menu photo in → AI food photos out.
Credentials
cloudflare_account_id: <not configured>
cloudflare_api_token: <not configured>
Before running the workflow, check the credentials above.
- If both values are filled in (not
<not configured>), use them and proceed to the workflow. - If not configured, this is the user's first time. Guide them through one-time setup:
- Go to cloudflare.com and sign up (free, no credit card)
- In the dashboard, click AI in the left sidebar → Workers AI
- Click the { } REST API button (top-right corner)
- Copy the Account ID shown on the page
- Click Create a Workers AI API Token → Create API Token → copy the token (shown once)
- Now save the credentials permanently so you never have to do this again:
- Claude.ai: Go to Settings → Skills → menugen → click the
•••menu → Edit with Claude → tell it: "Set my Cloudflare credentials to account_id=PASTE_ID token=PASTE_TOKEN" - Claude Code: Say: "Set my menugen Cloudflare credentials to account_id=PASTE_ID token=PASTE_TOKEN" — it will edit the SKILL.md for you
- Claude.ai: Go to Settings → Skills → menugen → click the
- Start a new chat and try again — credentials will be there automatically.
Workflow
- Read the menu image with the Read tool (uses your built-in vision).
- Extract every dish into a JSON array:
[{"name": "Pâté", "description": "Country-style pork with cornichons", "search": "rustic pork pate terrine with cornichons on a small plate"}, ...]name: exactly as printed on the menu (displayed in the output)description: only if the menu provides onesearch: required — a detailed English prompt describing what this dish looks like for AI image generation. Be vivid and specific about ingredients, plating, and appearance (e.g. "pan-fried sole fillet in brown butter sauce with capers and lemon on a white plate" not "Limande-Sole meunière"). Omit prices, section headers, and non-food items.
- Pipe the JSON to the script, passing credentials as inline env vars:
IfCLOUDFLARE_ACCOUNT_ID=<id> CLOUDFLARE_API_TOKEN=<token> uv run ${CLAUDE_PLUGIN_ROOT}/scripts/generate.py <<'MENU' [{"name": "...", "description": "...", "search": "..."}, ...] MENUuvis not available, fall back to:pip install requests && python ${CLAUDE_PLUGIN_ROOT}/scripts/generate.py - The script prints the path to the generated HTML file. Open it automatically:
open menugen_output/menu.html
Output
menugen_output/menu.html — a self-contained HTML page with AI-generated food photos embedded as base64 (works anywhere — local browser, Claude.ai, email). Individual images also saved to menugen_output/images/.
Notes
- AI-generated food photography via FLUX.1-schnell on Cloudflare Workers AI (free tier)
- 8 parallel requests; generation takes ~15-60s depending on menu size
- Free — ~230 images/day at default settings (Cloudflare free tier, 10K neurons/day)