---
reliability: 2.5 # 5 − brand kit .3 − hero shots .3 − moodboard .3 − place-in-scene (edit) .2 − tts .2 − animate (i2v) .6 − 8-gen-stage chain .6; concat/mux/export + deck/walkthrough deterministic (deck + walkthrough OPTIONAL); longest playbook in the set — partial progress is the norm, gates keep it recoverable
---

# Product launch — agent playbook

> Paste this whole file (with the BRIEF filled in) into Claude cowork, chat, or Code. The agent walks through it with you and stops for your approval at every step that matters.

## What you'll get

A complete launch package for one product or product set:

- **Brand kit** — palette, voice, three reference renders. Stays consistent across everything below.
- **5 hero product shots** — clean, golden-hour lifestyle photography. One per product.
- **12-slot moodboard** — the visual world. You'll pick 4 slots for the campaign.
- **4 lifestyle scenes** — the hero product placed in 4 of those slots. Same product across 4 mood beats.
- **A 30-second cinematic ad** — narration over the 4 scenes. Exported in both Instagram square (1:1) and TikTok/Reels vertical (9:16).
- **Caption pack** — IG, TikTok, and X copy plus hashtags.
- **Two HTML deliverables** — an executive briefing deck (6 slides) and a campaign walkthrough page. Both email-friendly.

**Time**: ~25 minutes wall clock. **Your attention**: about 6 minutes across 8 quick approvals. **Cost**: $1.40 – $3.40 end to end.

## Tell the agent about the launch

```yaml
product_name:     # e.g. Aurora Bloom
product_set:      # e.g. 5-piece Gen-Z makeup launch — lip oil, blush stick, lightweight foundation, mascara, highlighter
target_persona:   # e.g. 16-24 yo women, college / first-job, "soft glam meets clean girl"
aesthetic:        # e.g. dewy skin, peach + rose gold + cream, golden-hour daylight, candid not posed, lo-fi film grain
palette_hex:      # 4 hex colors space-separated, e.g. #FFC2A8 #F4A6B8 #F2E3D5 #4A2C2A
launch_slug:      # kebab-case (used in filenames), e.g. aurora-bloom
launch_date:      # ISO date for the deck cover, e.g. 2026-06-15
```

## Quality controls (new — auto-applied)

This playbook leverages the closed quality loop. The agent applies these by default; you don't have to ask:

- **Cost upfront.** Before any multi-step batch fires, the agent calls `submit_plan` with `confirm:false` and shows you the proposed steps + total cost. Nothing runs until you approve.
- **Auto-retry on weak shots.** The server default is `quality_threshold: 0.7`. For hero shots and brand-locked images the playbook step tells the agent to pass `quality_threshold: 0.85` so a low-confidence first try gets one auto-retry before you see it.
- **Critic verdict on the result.** When a multi-scene step finishes, the agent reads the `critique` field on the response (verdict: ship / iterate, plus issues / missing items) and surfaces it for your review.
- **One-click recovery.** If a step fails, `get_plan` returns a `recovery` hint pointing at `replan({plan_id})` — the agent classifies the failure and proposes a recovery plan you can approve.
- **End-of-project scorecard.** The final wrap-up calls `get_scorecard({project_id})` with succeeded count, mean quality score, critic verdict, total cost, and wall time.

You can override any of these per step: pass `quality_gate: false` on cost-sensitive tries, `quality_threshold: 0.6` for stylized/abstract work where strict adherence isn't the point, or `submit_plan({plan_id, confirm:true})` to skip the cost-preview pause when you trust the chain.

## How the agent should run this (interaction contract)

1. **CONFIRM (one message, ≤1 question):** restate in 1 line ("full launch kit for <product>: 5 heroes + 12-slot board + 4 scenes + 30s ad in 1:1 + 9:16, ~$1.40–3.40, ~25 min") + real choices: full kit vs stills-only (skip the ad = half the cost and risk) · mai-image-2.5 (branded packaging text) vs flux-dev (fast) · deck/walkthrough yes/no. One question max.
2. **PREVIEW CHECKPOINT:** brand-kit references (~$0.05) gate everything; the moodboard slot-pick gates the video — the user's 4 picked slots are the LAST cheap decision before the ~$0.50 animate batch. Never start Step 6 until slots are picked and the VO is approved.
3. **NARRATE:** per wave: "animating 4 scenes (seedance, ~2–4 min each, ≤4 in flight), job …"; poll `get_create_media` every 10–15s; post a 1-liner at least every 2 min through the animate batch.
4. **FAIL GRACEFULLY:** hero/packaging text garbles → `mai-image-2.5` retry → drop the label text + overlay in post; seedance hang/"fetch failed" → retry once → `ltx-q-i2v` (`num_frames: 241`, resolution `"auto"`) → Ken-Burns drift on the still; place-in-scene drifts the product → `kontext-edit` → `nano-banana` / `gpt-image-edit`. ≤2 retries per asset; a 3-scene ad with one Ken-Burns cut still ships.
5. **DELIVER:** both cuts + deck + one honest line ("scene 2's label is soft at 100% — packaging text is the cap ceiling; product silhouette held across all 4 scenes") + ONE next step ("email the deck for sign-off, or schedule the captions via Publora").

## How this works

Eight gates. At each one the agent shows you what it made and asks one question. You answer in one word or one short phrase. "approve" → next step. "refine [direction]" → redo this step.

You're never locked in. Costs add up only on what you've already approved.

## The steps

### Step 0 — Confirm the brief

The agent reads back the BRIEF values so you can spot typos before any money gets spent.

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

### Step 1 — Lock the brand kit (~30s, ~$0.05)

Build a brand kit from the palette and aesthetic. The agent infers 6-8 voice keywords from your aesthetic + persona ("dewy", "candid", "lo-fi film", "golden hour"…) and writes 3 reference prompts that capture the brand world. It renders those three references and shows them next to the palette swatches.

This brand kit gets set as the active one. Every later step inherits its palette and voice without re-prompting.

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

### Step 2 — Five hero product shots (~2 min, ~$0.20)

One photo of each product on cream linen with a soft silk drape, golden-hour window light, dewy reflections, square format, no model. Clean lifestyle catalog feel.

> **For the agent**: use `mai-image-2.5` for these — photoreal product photography with readable branding text on the bottle/packaging. Generic photoreal generators hallucinate the letters; `mai-image-2.5` is the cap tuned for branded surfaces.

> **For the agent**: pass `quality_threshold: 0.85` on each hero shot — these are non-negotiable. Auto-retry will fire once on any shot Gemini Vision grades below 0.85.

**STOP**: "Which products to keep? (keep all / redo [product] [direction])"

If you say redo, only that product runs again with your refinement added to the prompt.

### Step 3 — Twelve-slot moodboard (~3 min, ~$0.50)

A board you can share with the client. Twelve slots in this mix: 2 hero shots, 4 lifestyle moments, 3 product details, 2 surface textures, 1 typographic poster. Premium quality — this is what your client sees.

**STOP**: "Open the moodboard URL. Pick 4 slots for the campaign scenes. (e.g. '3 5 9 11')"

> **Critic verdict** — the moodboard response includes a `critique` field. If verdict=iterate, surface the issues here before the user picks 4 slots so they don't pick a slot the critic flagged as drifted.

### Step 4 — Place the product in 4 lifestyle scenes (~2 min, ~$0.20)

The hero product from step 2, now living inside the 4 moodboard slots you picked. Same product across 4 mood beats — same shape, same color, same label. This is the "product in context" cut that becomes the campaign.

**STOP**: "Approve the 4 scenes, or swap one? (approve / swap [slot#] [reason])"

### Step 5 — Write and voice the 30-second ad (~1 min, ~$0.02)

A four-beat narration: one sentence per scene, ~7 seconds each. Tone is warm, peer-to-peer, playful confidence. Not "buy this" — more "I want to look like that." The agent also writes a 15-second short cut of the strongest two beats.

Then it voices the 30s narration with a warm female voice that matches the persona.

> **For the agent**: voice the narration with `gemini-tts` (or `inworld-tts`) using a warm-female commercial timbre — not the chatterbox default. If the BRIEF supplies a reference audio URL, clone it first with `voice_create` then `voice_attach` to the project so the narration uses that voice.

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

### Step 6 — Animate + stitch + export (one approval gate)

Before step 6, the agent calls `submit_plan` with steps {animate × 4, ffmpeg-concat, ffmpeg-export × 2} and shows the total cost (~$0.50 typical). You approve once for the whole video pipeline. The previous per-step pauses are folded in here.

#### Step 6a — Animate (~5 min, ~$0.40)

Each scene becomes a 7-second slow cinematic drift — soft light shifting, candid lifestyle motion, gentle parallax. The agent animates each lifestyle still with `create_media(action:"animate", model_override:"seedance-i2v", source_url:<scene>, resolution:"auto", duration:7)` — prefer `ltx-q-i2v` for higher fidelity. The four together are 28 seconds. The agent runs them in parallel.

**STOP**: "Approve the 4 cuts, or redo one? (approve / redo [#] [direction])"

### Step 7 — Stitch, mux audio, export (no gate, ~3 min, ~$0.05)

The agent stitches the 4 animated scenes with `ffmpeg-concat` (transition: cut) into one ~28s cut, then lays the voiceover under it with `ffmpeg-mux` (`audio_fill: "loop"` so audio covers the full cut with no silent tail). Then two re-cropped exports via `ffmpeg-export`:

- **TikTok / Reels** — `size: "portrait_9_16"` vertical
- **Instagram feed** — `size: "square_hd"` 1:1

Both files are ready to upload.

> **For the agent**: trim the music/voice with `lyrics_prompt:"[Instrumental]"` if a music bed is added under the VO; mux order is concat → mux → export (export last so the crop applies to the muxed video).

### Step 8 — Caption pack (~30s, ~$0.001)

Three platform captions plus 8 hashtags. Each caption matches the ad's tone but adapts to platform posture (IG warmer + product-focused, TikTok hookier + casual, X witty + tight).

**STOP**: "Captions approved, or refine one? (approve / refine [which one] [direction])"

### Step 9 — Executive briefing deck

The agent writes a 6-slide HTML deck — cover, product set, moodboard + lifestyle, hero creative (both cuts embedded), caption pack, cost breakdown. Brand-colored from your palette. Scroll-snap layout. Self-contained (just open in a browser). Saved to `public/launches/{launch_slug}-briefing.html`.

### Step 10 — Campaign walkthrough page

A single-page landing version of the same material — hero video, product row, lifestyle scenes, side-by-side TikTok/IG mocks, the pipeline summary, CTA. Open Graph tags so when you share the URL it previews nicely. Saved to `public/launches/{launch_slug}-walkthrough.html`.

### Final step — scorecard wrap-up

After all deliverables ship, call:

```
get_scorecard({ project_id: "{the project id from earlier steps}" })
```

The response is a one-page report card:

```
Scorecard for cjob_xxx
{N}/{N} scenes shipped — critic: SHIP (or ITERATE)
Title: <your project name>
Steps: N/N succeeded (100%)
Quality: mean X.XX · M/N passed · K retries
Critic: SHIP/ITERATE
  • issue: <only present if iterate>
  • missing: <only present if iterate>
Cost: $X.XX actual (est $Y.YY) · Ts wall time
Viewer: <project URL>
```

Paste the scorecard into Slack or the project channel so reviewers see the actual quality numbers, not vibes.

## When you're done

The agent prints:

```
✅ Executive briefing: public/launches/{launch_slug}-briefing.html
✅ Campaign walkthrough: public/launches/{launch_slug}-walkthrough.html
✅ TikTok / Reels MP4 (9:16): <URL>
✅ IG feed MP4 (1:1): <URL>
✅ Moodboard viewer: <URL>

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

## What to do next

1. **Email the deck** to your client or founder for sign-off — it's a self-contained HTML attachment.
2. **Share the walkthrough URL** with your agency or social team.
3. **Schedule the captions** to IG and TikTok through your normal scheduling tool. (Storyboard has Publora integration if you want the agent to schedule them in a follow-up — just ask.)
4. **Save the brief** — next season's drop can re-use the same brand kit. Just change the product set.

---

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

**Stitching multiple clips**: the standard MCP envelope drops array params. For ffmpeg-concat with 3+ clips, fall back to direct SDK:

```bash
curl -X POST https://sdk.daydream.monster/inference \
  -H "Authorization: Bearer $DAYDREAM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"capability":"ffmpeg-concat","params":{"clips":[<url1>,<url2>,<url3>,<url4>],"transition":"cut"}}'
```

Note: `crossfade-300` only works for exactly 2 clips. For 4 clips, use `"transition": "cut"`. Same direct-SDK pattern applies to `ffmpeg-mux` (video_url + audio_url) and `ffmpeg-export` (size: portrait_16_9 / square_hd).

**Polling**: when a tool returns `{job_id, status: pending}`, poll every 8-15s until `done` or `failed`.

**On capability failure**: retry once after 5s. On second failure, ask: "Step X failed: [error]. retry / skip / abort?"

**Bearer token**: in cowork, the MCP host injects it. For direct SDK curl, read `DAYDREAM_API_KEY` from `~/.daydream/credentials`.

**Templates**: substitute `{{PLACEHOLDER}}` markers in:
- `public/playbooks/_templates/executive-briefing.html` (step 9)
- `public/playbooks/_templates/campaign-walkthrough.html` (step 10)

The placeholder names are self-describing. Fill them from the run state (URLs from steps 2-7, narration from step 5, captions from step 8, palette from BRIEF).
