---
reliability: 3.0 # 5 − fork refs .3 − hero reskin (image edit) .2 − carousel .3 − capsule video (i2v) .6 − tts .2 − 7-stage chain .4; mux/export/deck deterministic (deck OPTIONAL); load-bearing risk is the reskin — edit-not-regenerate keeps the product silhouette, regeneration breaks the campaign
---

# Seasonal capsule — 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 seasonal capsule for an existing brand — Lunar New Year, Valentine's, Pride, Halloween, Diwali, the holidays, summer, back-to-school, anything occasion-bound. Your brand identity stays continuous; the palette and props shift to match the occasion.

What lands at the end:

- **A capsule brand fork** — the parent brand kit extended with the occasion's palette. Save the id; next year's edition picks up where this one left off.
- **A reskinned hero product shot** — same product silhouette as the parent campaign, restaged into the occasion's world.
- **A 5-slot Instagram carousel** — title card → atmosphere → product detail → atmosphere → product hero.
- **A 10-second capsule video** — slow cinematic motion on the reskinned hero, with a warm 15-second narration over it.
- **Both Instagram (1:1) and TikTok/Reels (9:16) cuts**.
- **A one-pager HTML deck** the brand director can forward.

**Time**: ~20 minutes wall clock. **Your attention**: about 4 minutes across 5 approvals. **Cost**: $1.00 – $2.20 end to end.

## The hardest part — and how this handles it

Keep the brand DNA. Typography, layout, product silhouette — those stay. Only the palette and props shift to the occasion. Anything that breaks this principle (a Lunar New Year capsule that doesn't look like your brand anymore; a Pride edition with no product continuity) fails as a campaign.

The trick is to **edit** the parent hero shot rather than regenerate it. The product keeps its exact shape and label; the background and accent color move to the occasion.

## Tell the agent about the capsule

```yaml
brand_kit_id:        # the existing parent brand kit id (from product-launch or earlier capsule)
brand_name:          # e.g. Aurora Bloom
occasion:            # one of: lunar-new-year | valentines | pride | summer | back-to-school | halloween | diwali | christmas | new-year
occasion_palette:    # 4 hex colors for the occasion, e.g. for LNY: #B22222 #FFB81C #F2E3D5 #2A1A1A
occasion_motif:      # 2-3 visual motifs, e.g. "red lanterns, peach blossoms, gold envelopes"
hero_product:        # which product gets the spotlight, e.g. "lip oil in rose-gold"
hero_product_url:    # URL of the existing hero shot from the parent launch
voice_twist:         # one sentence — how the occasion shifts the brand voice, e.g. "warmer, more festive, family-first instead of solo-glow"
launch_slug:         # kebab-case, e.g. aurora-bloom-lny-2026
release_date:        # ISO date, e.g. 2026-02-12
```

## 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 ("<brand> × <occasion> capsule off kit <id>: reskinned hero + 5-slot carousel + 10s video in 1:1 + 9:16, ~$1.00–2.20, ~20 min") + real choices: occasion palette as given vs parent-leaning · carousel + video vs carousel-only (skips the i2v = the riskiest stage). One question max — usually "is this the right parent kit?".
2. **PREVIEW CHECKPOINT:** the fork references (~$0.05) AND the reskinned hero shown NEXT TO the parent original (~$0.05) — silhouette, label, shadow identical, only background/props shifted. Nothing downstream fires until the side-by-side passes; a drifted hero poisons the carousel and the video.
3. **NARRATE:** "carousel rendering (5 slots, ~2 min)…", "animating the hero (seedance, duration 10, ~5 min, job …)"; poll `get_create_media` every 10–15s; never silent >2 min through the animate.
4. **FAIL GRACEFULLY:** kontext-edit reskin drifts the silhouette/label → stricter "replace background and props ONLY" prompt → `nano-banana` → `gpt-image-edit`; seedance hang → retry once → `ltx-q-i2v` (`num_frames: 241`, resolution `"auto"`) → ship the carousel + a Ken-Burns hero cut; VO >20s → split into 2 chunks, concat before mux. ≤2 retries per asset; carousel-without-video is a valid partial deliverable.
5. **DELIVER:** both cuts + one-pager + the fork id + one honest line ("zoom the reskinned label to 100% before scheduling — edit preserved it but verify; motifs are generated, not brand-approved art") + ONE next step ("save the fork id — next year's <occasion> extends it").

## How this works

Five gates. At each one the agent shows you what it made and asks one question. Answer with one word or one short phrase.

## The steps

### Step 0 — Confirm and verify the parent

The agent reads back the BRIEF and shows you the parent brand kit's palette + voice keywords next to your new occasion palette. This is the sanity-check that the fork makes sense before any money gets spent.

**STOP**: "Parent kit and occasion plan look right? (approve / edit [field] [value])"

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

Extend the parent brand into a capsule named "{brand_name} × {occasion}". Inherit the parent's voice keywords, then add 3-4 occasion-specific ones from {occasion} and {occasion_motif}. Use the new 4-color palette. Render 3 reference images:

- The parent's signature reference re-cast in the occasion palette
- The hero product surrounded by the occasion motifs
- The brand's persona celebrating the occasion together

Set this capsule as the active brand so every later step inherits it.

**STOP**: "The fork should feel continuous with the parent brand but shifted to {occasion}. Approve, or refine? (approve / refine [direction])"

### Step 2 — Reskin the hero product (~1 min, ~$0.05)

This is the load-bearing step. The agent **edits** your existing hero shot — same product, same pose, same lighting angle, same shadow position — but swaps the background and accent props for the occasion motifs. The product label stays intact. The silhouette is identical to the parent campaign.

> **For the agent**: this is an image-edit task, not a regeneration. Use the identity-preserving editor. If you regenerate from scratch the product shape will shift and the brand text on the label will re-hallucinate. Pass the parent hero URL as the source image and instruct: "same product, same pose, same lighting; replace background and props only."

> **Quality gate**: pass `quality_threshold: 0.85` on this kontext-edit call. The reskinned hero is brand-locked; one auto-retry catches a glitched silhouette or hallucinated label text before the user sees it.

**STOP**: "Reskinned hero shown next to original. Product silhouette preserved? (approve / refine [direction])"

### Step 3 — Five-slot Instagram carousel (~2 min, ~$0.25)

A 5-slot board built off your new capsule brand kit, in this exact order: title card → lifestyle atmosphere → product detail → lifestyle atmosphere → product hero. Premium-quality renders — this becomes your actual IG carousel.

**STOP**: "Open the carousel viewer URL. Approve the slots in this order, or reorder? (approve / reorder 3 1 5 2 4)"

### Step 4 — The 10-second capsule video (~5 min, ~$0.20)

Animate the reskinned hero from step 2 with a slow cinematic push-in via `seedance-i2v` (`resolution:"auto"`, `duration: 10`). The occasion's motifs drift gently in the background. Soft warm light shifts to catch the occasion's signature color. Festive but restrained.

**STOP**: "10s capsule video ready. Approve, or re-animate? (approve / redo [direction])"

### Step 5 — Voiceover (~30s, ~$0.005)

A 15-second narration in the brand voice, shifted by your `voice_twist`. The agent writes the script so it sounds like a continuation of your brand voice — not a new brand. Ends with a soft "available {release_date}."

> **For the agent**: use the warm-female commercial voice. Match the energy of the parent brand's voiceovers from the earlier launch.

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

### Step 6 — Stitch and export (no gate, ~2 min, ~$0.04)

The agent lays the voiceover onto the animated hero via `create_media model_override:"ffmpeg-mux"` with `audio_fill:"loop"` (so a voiceover slightly shorter than the clip never leaves a silent tail), then `ffmpeg-export` produces two re-cropped cuts:

- **TikTok / Reels** — 9:16 vertical (scale + crop, not opencv)
- **Instagram feed** — 1:1 square

### Step 7 — One-pager deck

A single-page HTML deck for forwarding internally: cover with the new capsule branding, the reskinned hero, the 5-slot carousel, both video cuts, the cost breakdown. Brand-colored from the occasion palette. Saved to `public/launches/{launch_slug}-onepager.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:

```
✅ Capsule one-pager: public/launches/{launch_slug}-onepager.html
✅ Reels MP4 (9:16): <URL>
✅ IG feed MP4 (1:1): <URL>
✅ IG carousel viewer: <URL>
✅ Capsule brand fork id: <id> (save this — next year's edition reuses it)

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

## What to do next

1. **Stagger the carousel drop** — schedule one slot per day for the 5 days leading up to `{release_date}`. Builds anticipation without burning the whole carousel on day one.
2. **Save the fork id** — next year's `{occasion}` campaign extends from this id. The palette stays; only the year and hero product change.
3. **A/B test the hero animation** — re-run step 4 with `duration: 7` and a different motion prompt. Two capsule cuts means two ad units for the same spend.
4. **Multiply** — if your brand has 3 occasions per year and a 5-product line, this playbook = 15 capsule campaigns/year at ~$2 each. Compare to one agency retainer.

---

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

**Stitching/muxing**: same MCP envelope gap as product-launch. Use direct SDK for `ffmpeg-mux` (video_url + audio_url) and `ffmpeg-export` (size: portrait_16_9 / square_hd):

```bash
curl -X POST https://sdk.daydream.monster/inference \
  -H "Authorization: Bearer $DAYDREAM_API_KEY" -H "Content-Type: application/json" \
  -d '{"capability":"ffmpeg-mux","params":{"video_url":"<v>","audio_url":"<a>"}}'
```

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

**Voiceover length**: if the narration script runs past chatterbox's ~20s per-call cap, split into 2 chunks of ~12s each and concat the WAVs locally before mux.

**Templates**: substitute `{{PLACEHOLDER}}` markers in `public/playbooks/_templates/executive-briefing.html` (the existing template works fine for a capsule — just fill fewer slides). The placeholder names self-describe what goes where.

**Brand kit forking**: pass `parent_kit_id` when you create the capsule's brand kit. That signals "this is a seasonal child" so future tooling can group them.
