---
title: "Recipe Anatomy Infographic — one plated dish, every ingredient labeled"
tier: hero
format: infographic
theme: food | recipe | culinary | how-to | social
persona: food creator, recipe developer, cookbook author, restaurant marketer, culinary educator
duration: "1 dish → anatomy card (still or 15–25s reel) in ~5–10 min"
budget_usd: "$0.35–$1.80 (hero plate still + hyperframes callout overlay; +$0.40–$1.20 if you add steam/pour i2v)"
caps: ["create_media", "gpt-image", "mai-image-2.5", "flux-dev", "hyperframes-render", "pixverse-i2v", "ltx-i2v", "ffmpeg-mux", "music"]
skills: ["hyperframes-overlays", "short-form-video"]
showcases: ["/chapters/recipe-anatomy-infographic-example.html"]
status: "live (2026-08-03) — Wave 1 showcase rendered E2E via MCP. See /chapters/recipe-anatomy-infographic-example.html"
reliability: 3.9 # first E2E showcase; curated (≥4.0) deferred until a second successful run
---

# Recipe Anatomy Infographic — one plated dish, every ingredient labeled

Point this at any finished dish — *"shakshuka with feta, herbs, and warm pita"* — and Livepeer Agent builds a **recipe anatomy card**: a hero overhead or three-quarter plate shot with **every ingredient callout-labeled** — name, quantity, prep note — connected by clean leader lines. This is **not** a spoken food reel (that's `local-food-short`). There is no voice-over, no six-beat cooking montage, no native-language narration. The deliverable is a **shareable anatomy poster** or a **15–25s loop** where optional steam/pour motion sells freshness while the labels stay pixel-perfect in an HTML overlay.

AI image models cannot spell "doubanjiang" or place "2 tbsp" legibly on a frame. Every label lives in **`hyperframes-render`** — the same moat as broadcast tickers and product-card prices.

## What you'll get

- **One hero plated-dish still** — overhead 90° or three-quarter, styled for the recipe's cuisine, no in-frame text
- **An ingredient callout layer** — 5–12 labeled items with leader lines, quantities, and optional prep notes (HTML, always legible)
- **Optional motion** — a gentle steam rise, sauce pour, or herb sprinkle via fast i2v on the hero still (not required for the card to work)
- **A finished asset** — 4:5 or 9:16 PNG/MP4 ready for Pinterest, Instagram carousel, or a recipe blog hero
- **An editable overlay** — change "200g tofu" to "250g tofu" and re-render only the callout layer, not the plate

## Fill in your BRIEF

```yaml
dish_name:             # e.g. "Shakshuka with Feta"
cuisine:               # e.g. "North African / Levantine"
plate_style:           # overhead | three-quarter — default overhead for anatomy clarity
ingredients:           # 5–12 lines: "name · quantity · prep note"
                       # e.g. "Eggs · 4 · poached in sauce" / "Feta · 80g · crumbled"
                       # / "Harissa · 1 tbsp · stirred into base"
hero_prompt:           # OPTIONAL styling nudge — e.g. "cast-iron skillet, rustic wood table,
                       # morning light from upper-left, steam wisps"
aspect_ratio: 4:5      # 4:5 (Pinterest / IG feed) | 9:16 (Stories) | 1:1 (square card)
motion: off            # off (DEFAULT — still anatomy card) | steam | pour | sprinkle
                       # steam/pour adds optional i2v (~$0.40–$1.20)
dish_slug:             # kebab-case for output paths, e.g. shakshuka-anatomy
launch_slug:           # same as dish_slug unless part of a campaign series
```

## CONVENTIONS

1. **HITL gates:** at every STOP, ask exactly one specific question with concrete options. Never proceed without an answer. Never bundle multiple decisions into one STOP.
2. **Cost ceiling:** total < $10. After each stage, print running cost. If approaching $10 cumulatively, halt and ask "approaching $10. continue / stop?".
3. **Output paths:** write HTML(s) to `public/launches/{launch_slug}-anatomy.html`. Print full absolute paths at end.
4. **Brand stickiness:** if the user supplies a brand kit or palette, call `brand_kit_create` (or reuse an existing kit) in Stage 1, then `set_active_brand_kit`. All downstream prompts inherit palette keywords.
5. **MCP envelope gaps:** `ffmpeg-concat` (`clips:[]`) and `ffmpeg-mux` (`video_url`+`audio_url`) need direct SDK POST to `https://sdk.daydream.monster/inference` with Bearer auth when the MCP envelope drops array params.
6. **On capability failure:** retry once after 5s. On second failure, ask user "<step> failed: <error>. retry / skip / abort?". Never silently retry forever.
7. **Polling:** when a `job_id` returns, poll `get_create_media` every 8–15s until status is `done` or `failed`. Never assume completion.
8. **Bearer token:** user's Daydream API key. In cowork, the MCP host injects it. For direct SDK curl, read from `~/.daydream/credentials`.

## The cap chain (PROVEN recipe)

```
dish_name + ingredients list
  → create_media action:"generate"              # hero plated-dish still, NO text in the image
       gpt-image | mai-image-2.5 | flux-dev
       prompt: overhead/three-quarter, styled plate, warm directional light,
               "no signs, no labels, no text, no watermarks"
  → hyperframes-render                          # THE ANATOMY LAYER — one HTML doc:
       • hero still as background (or background_video_url if motion path)
       • leader lines + callout chips per ingredient (name · qty · note)
       • dish title strip + optional cuisine tag
       • aspect_ratio from brief
  → (OPTIONAL) create_media action:"animate"    # only if motion ≠ off
       pixverse-i2v | ltx-i2v — SMALL motion: steam rise, sauce pour, herb sprinkle
       keep duration 4–6s; do NOT animate the labels (they live in hyperframes)
  → (OPTIONAL) music                            # ambient loop for reel format only
  → ffmpeg-mux                                  # if motion + music path
```

**Distinction from `local-food-short`:** no script, no TTS, no captions, no six-scene narrative arc. One plate, one label map.

## STAGE 0 — Confirm the brief (~0 min, $0)

Read back `dish_name`, ingredient count, `plate_style`, `aspect_ratio`, and `motion` setting. Restate the deliverable shape: "anatomy card — labeled still" vs "15–25s loop with steam/pour".

**STOP:** "Brief looks right? (approve / edit [field] [new value])"

## STAGE 1 — Lock the look (~30s, ~$0.05)

If the user supplied palette or brand cues, build or activate a brand kit. Otherwise infer 3–4 palette hex values from the cuisine (warm terracotta for Mediterranean, muted sage for Nordic, etc.) and show swatches.

**STOP:** "Approve the palette, or refine? (approve / refine [direction])"

## STAGE 2 — Hero plate still (~1–2 min, ~$0.08–$0.15)

Generate one tack-sharp plated-dish image matching `plate_style` and `hero_prompt`. Use the photoreal food model — it holds plating detail and ingredient texture. Explicitly forbid all text in the prompt.

Show the still full-size. This is the canvas every callout will anchor to.

**STOP:** "Keep this plate, or re-shoot? (approve / reshoot [direction — e.g. tighter overhead, more steam wisps in still])"

## STAGE 3 — Preview the callout map (~30s, $0)

Before spending on the overlay render, show the ingredient list as the callout map: each item's label text, quantity, leader-line anchor (clock position on the plate — e.g. "feta → 2 o'clock", "eggs → center"). Let the user fix a typo or swap a label now — a wrong "200g" in HTML is trivial; a wrong quantity baked into pixels is impossible to fix.

**STOP:** "Callout map correct? (approve / fix [ingredient#] [correction])"

## STAGE 4 — Render the anatomy overlay (~1–2 min, ~$0.15–$0.35)

Composite the callout layer over the hero still with the HTML compositor. One document: title strip, leader lines, callout chips, optional cuisine tag. For reels ≤15s, use the standard create path; for longer loops, call the compositor directly with an explicit duration.

Show a static preview frame of the finished card.

**STOP:** "Approve the anatomy card, or tweak labels? (approve / tweak [which label])"

## STAGE 5 — Optional motion pass (~2–4 min, ~$0.40–$1.20)

**Only if `motion` ≠ off.** Animate the approved still with small motion — steam wisps, a slow sauce pour, a herb sprinkle. Use the fast image-to-video tier; keep duration 4–6s. Re-composite the same callout HTML over the motion clip so labels stay crisp.

If `motion: off`, skip this stage entirely.

**STOP:** "Approve the motion loop, or keep the still? (approve / keep-still / redo-motion [direction])"

## STAGE 6 — Package the deliverable (~30s, ~$0.02)

Write a shareable HTML page to `public/launches/{launch_slug}-anatomy.html` embedding the card (still or loop), the full ingredient list, and a one-line recipe credit. Optionally mux a soft ambient bed under a reel with `audio_fill:"loop"`.

**STOP:** "Ship as still PNG, MP4 loop, or both? (still / loop / both)"

## Quality bar (definition of done)

- ✅ Every ingredient from the brief appears as a **legible callout** — none baked into the generated image.
- ✅ Leader lines point to the correct region of the plate (approximate is fine; exact pixel anchoring is editable in HTML).
- ✅ The hero plate has **zero in-frame text** — no fake menu typography, no garbled spice labels.
- ✅ The card matches `aspect_ratio` without letterboxing.
- ✅ If motion was requested, movement is subtle (steam/pour) and labels remain crisp in the overlay.

## Watch-outs

- **Never put ingredient names or quantities in the image prompt.** AI text rendering is the hardest known failure mode — a melted "harissa" label destroys the anatomy card instantly.
- **This is not a cooking reel.** If the user wants voice-over, captions, and a six-beat narrative, route them to `local-food-short`.
- **Overhead reads best for anatomy.** Three-quarter works for hero dishes with height; overhead gives the cleanest leader-line geometry.
- **Motion is optional garnish.** The still anatomy card is the core deliverable; steam/pour i2v is a nice-to-have, not a requirement.
- **Re-render is cheap for label edits.** Change quantities in the HTML overlay and re-run Stage 4 only — do not regenerate the plate.

## FINAL OUTPUT

When the run completes, print exactly:

```
✅ Recipe anatomy card: public/launches/{launch_slug}-anatomy.html
✅ Hero still: <URL>
✅ Anatomy overlay: <URL> (still or MP4)
✅ Ingredients labeled: {N}/{N}

Total spent: $X.XX
Total wall-clock: MM:SS
```

## AFTERCARE

1. **Carousel expansion** — run the same dish with a "steps" variant: swap `ingredients` for prep steps (mise → cook → plate) using the same hero still.
2. **Series board** — batch three dishes from one cuisine with a shared palette; tile into a 2×2 grid reel via the grid compositor.
3. **Print-ready PDF** — export the anatomy HTML at 2× resolution for a cookbook spread or menu insert.
4. **Motion upgrade** — if you shipped a still, come back with `motion: steam` for a 15s loop without re-shooting the plate.

---

## Notes for the agent (only read if a step fails)

**Hyperframes duration:** reels >15s exceed the standard create envelope — call the compositor directly with `duration:N`.

**i2v fallback chain:** pixverse-i2v (fast) → ltx-i2v (`resolution:"auto"`) → Ken-Burns zoompan on the still (deterministic, zero fal risk).

**Polling:** poll `get_create_media` every 8–15s until `done` or `failed`.
