# Webtoon → anime adaptation trailer — agent playbook ⭐ flagship

> Paste this whole file (with the BRIEF filled in) into Claude cowork, chat, or Code. **This is the adaptation-pipeline flagship for serial IP creators.** A 60-second animated trailer for a Netflix-tier adaptation pitch — built from a webtoon creator's own published canon. Train the protagonist LoRA on published panels (canon-by-construction), storyboard the trailer, animate keyframes with shot-to-shot continuity, beat-lock to a temp music bed, export a complete press kit in one pass.

## What you'll get

A pitch-reel-grade deliverable, structured the way a pre-vis house feeds a Netflix executive:

- **Canon-trained character LoRAs** — the protagonist + 1-2 supporting cast trained on the creator's OWN published panels. On-model by construction; fans see continuity with the source IP.
- **14-shot trailer storyboard** — cinematic 2.35:1 anamorphic widescreen, key-frame per shot, beat structured for a 60-sec pitch arc.
- **Shot-to-shot motion continuity** — end frame of shot N → start frame of shot N+1 for any motion-continuous cut. Top-5 pre-vis cinematic bar.
- **Beat-locked climax** — second half of the trailer locked to a licensed temp track at your BPM. Cuts on the downbeat without an NLE.
- **5 key-art stills** — hero shots from the strongest beats, rendered at press-kit quality (1920×1080).
- **6-frame contact sheet** — pitch-deck-ready visual at 3000×2000 (printable).
- **3-aspect export** — 2.35:1 cinematic hero, 16:9 streaming-platform cut, 9:16 socials. Same brand chain, one command.
- **Press-kit HTML** — single shareable URL with the trailer, the key art, the contact sheet, the logline, and the canon citation. Hand this to an executive.

**Time**: 1-2 days for the first trailer (heavy canon-train + shot continuity), 4-6 hours for follow-on adaptations of the same IP. **Cost**: $40-60 per trailer (seedance-i2v dominates the bill). *This is the IP-adaptation flagship* — designed for the Netflix / Crunchyroll / Toho pre-vis brief.

## Tell the agent about the trailer

```yaml
webcomic_title:      # The published source IP. e.g. "The Tea-House Detective".
webcomic_url:        # OPTIONAL — the live webcomic URL for canon citation in the press kit.
webcomic_panels:     # A folder / URL list of ~100 published panels (chapters 1-3 ideal).
adaptation_pitch:    # e.g. "Netflix anime adaptation, 12-episode season 1". Sets the press-kit tone.
adaptation_logline:  # 1-sentence pitch (the executive's first read). Used in press-kit + trailer overlay.
protagonist_name:    # The lead. Becomes LoRA 1 (canon-trained).
supporting_1_name:   # OPTIONAL — first supporting cast LoRA (canon-trained).
supporting_2_name:   # OPTIONAL — second supporting cast LoRA (canon-trained).
trailer_arc:         # 1-paragraph synopsis of THIS trailer's beat structure (cold-open → escalation → climax → tag).
visual_style:        # The target anime adaptation style. e.g. "WIT Studio cinematic, Ufotable particle work, Toei classical".
music_track_url:     # Licensed temp track for beat-lock. REQUIRED.
music_bpm:           # The track's BPM. REQUIRED.
music_climax_starts_at: # Timestamp (sec) where the trailer's climax should land. e.g. 30.
brand_kit_slug:      # kebab-case. e.g. teahouse-detective-pitch.
trailer_slug:        # kebab-case for press-kit URL + filename. e.g. teahouse-detective-pitch-v1.
```

---

## Quality controls (auto-applied)

The full quality loop, tuned for press-kit-tier cinematic fidelity:

- **Cost upfront.** The agent surfaces canon-training cost + per-shot animation cost + finishing chain before any spend. Press kit-grade is the highest per-call cost in any playbook.
- **Canon-cropping pre-train.** The `canon-cropping` skill auto-crops each published panel to protagonist-centric frames, strips overlaid text/SFX, and masks background to maximize LoRA training signal-to-noise. Result: a LoRA that encodes the fan-recognized canon, not a generic anime face.
- **Shot-to-shot continuity in animate.** The `shot-to-shot-continuity` skill enforces: where two cuts are motion-continuous (camera doesn't change subject), the END frame of shot N feeds as the START frame of shot N+1's animate call. Pixar / WIT pre-vis bar.
- **Motion-acting prompt prefixes.** The `motion-acting` skill injects per-shot motion intent (anticipation, follow-through, weight) into the animate prompt. Reads as acting, not as "AI moved a still."
- **Beat-locked climax.** The `beat-driven-edit` skill drives the music sync. The agent surfaces a beat-grid visualization so you can see where each cut lands relative to the downbeat.
- **3-aspect export from one master.** Cinematic hero (2.35:1), streaming cut (16:9), social (9:16). Same brand chain on all three.

## How this works

Four phases. **Canon-train** (Week 0) imports published panels and trains the cast LoRAs on the existing canon. **Storyboard** plans the 14 shots. **Animate** runs the keyframes + chained continuity + music sync. **Press kit** assembles every deliverable.

## The steps

### Step 0 — Confirm the brief + canon import

The agent ingests the panel folder / URL list. Counts unique panels, surfaces a sample, asks for confirmation.

**STOP**: "Imported N panels from '{webcomic_title}'. Continue to canon-train? (continue / browse [sample] / cancel)"

### Step 1 — Canon-cropping pre-train (~5 min, ~$0)

The `canon-cropping` skill drives a preprocessing pipeline built on real caps: for each panel, run `yolo-detect` to find the protagonist + supporting cast (face detection + named-character match), crop to a protagonist-centric tight frame via `ffmpeg-export` (scale+crop), and run `obscura-extract-text` to locate overlaid speech-bubble text + SFX so they can be masked out. Result: a clean training set of ~25-40 protagonist-only panels.

> **For the agent**: surface a sample 3-up: original panel + cropped + text-stripped. The user confirms the crop quality before training fires. The skill encodes the rules — don't override them with custom crop instructions unless the user explicitly asks.

**STOP**: "Canon-cropping complete. Sample 3-up shown. Approve for LoRA training? (approve / refine [direction] / re-crop)"

### Step 2 — Train the canon cast (~5-15 min wall clock, ~$8-15)

The agent fires `submit_lora_train` on the cropped canon: protagonist (always) + supporting_1 + supporting_2 if named. Each LoRA's trigger phrase is the character's `_name`. Training runs in parallel; poll with `get_lora_train`. Once ready, `attach_lora_to_project` binds each LoRA so every later render auto-injects it.

> **For the agent**: surface each training job's loss curve. Once ready, do a sample render of each character in the adaptation visual_style to confirm fan-recognized canon transfers through the visual-style shift.

**STOP**: "Canon LoRAs ready. Sample renders in target visual_style? (sample [character] / continue)"

### Step 3 — Brand kit + finishing chain (~2 min, ~$0.10)

The agent builds the pitch-trailer brand kit: cinematic 2.35:1 letterboxing, film-grain LUT calibrated to the visual_style, title-card typography using the source webcomic's font (if available), end-card with the source IP citation + the studio pitch URL, finishing chain (cinematic export + 3-aspect fanout + key-art-stills + contact-sheet).

**STOP**: "Brand kit + finishing chain shown. Approve, or tune one element? (approve / tune [element] [direction])"

### Step 4 — 14-shot storyboard (~3 min, ~$0.05)

The agent reads `trailer_arc` and proposes a 14-shot structure: cold-open (1-2), title card (3), escalation (4-7), midpoint reveal (8), climax build (9-12), climax landing (13), tag (14). Each shot: 1-sentence description + cast tags + 1-2 line camera-language (push-in, pan, dolly, hold, jump-cut).

> **For the agent**: the `animated-series-pipeline` skill informs camera-language — pitch trailers use more push-ins (intimacy with hero) and fewer pans (avoids "tourism" feel) than a series episode. Shot 13 (climax landing) gets the longest hold; shot 14 (tag) is always a hard cut.

**STOP**: "14-shot storyboard shown. Approve, refine, or rewrite a shot? (approve / refine [#] [direction] / rewrite [#] [new]"

### Step 5 — Render the 14 key frames (~10 min, ~$8)

The agent renders the 14 key frames via `generate_project({ aspect_ratio: "21:9", consistency_priority: "high" })` at premium quality, with the canon LoRAs attached (Step 2). Each frame is a still at cinematic widescreen (cropped to true 2.35:1 in finishing). Drift gate at `quality_threshold: 0.88` (pitch-tier). Cross-asset critique after the batch.

> **For the agent**: when multi-LoRA blend is needed (2+ canon characters in one frame), the `multi-character-blocking` skill drives composition (eyeline geometry, depth, panel-edge weight). Surface per-frame critic verdict; pause on drift.

**STOP**: "14 key frames + critic verdict shown. Approve all, redo specific, or accept drift on [#]? (approve / redo [#] [direction] / accept [#])"

### Step 6 — Animate with shot-to-shot continuity (~20 min, ~$25)

For each shot, the agent runs `create_media(action:"animate", model_override:"seedance-i2v", source_url:<key frame>, resolution:"auto", duration:4)`. The `shot-to-shot-continuity` skill enforces: where shot N+1 is camera-continuous with shot N (no scene cut, just camera motion), auto-extract the LAST frame of shot N (via `ffmpeg-trim`/frame-grab) and use it as the `source_url` for shot N+1's animate call. The `motion-acting` skill injects the right motion intent into each shot's animate prompt (a "swing-the-sword" needs anticipation; a "lock-eyes" needs hold-then-react). `seedance-i2v` is the default for cinematic anime motion; fall back to `ltx-q-i2v`.

> **For the agent**: surface the continuity graph — show which shots are chained (motion-continuous) and which are hard cuts. The user can override the chain decision before the batch fires. The animate pass is the most expensive step in the playbook; verify the storyboard is locked before approval.

**STOP**: "Animation plan: X chained, Y hard-cut, total ~$XX. Approve animate batch? (approve / cap-at [$amount] / refine [shot #] [chain or cut])"

### Step 7 — Music sync + beat-lock (~3 min, ~$0.20)

The agent `ffmpeg-concat`s the animated shots, then runs `director_beat_lock({ project_id, bpm: music_bpm, beats_per_scene: 8 })` to stamp uniform beat-synced durations on shots 9-14 (8 beats/shot for climax build → tighten to 4 at the climax landing), aligning the climax landing (shot 13) to `music_climax_starts_at`. Then lay the track under the cut with `create_media(action:"mux_audio", model_override:"ffmpeg-mux", source_url:<cut>, audio_url:<music_track_url>, audio_fill:"pad")` (pad, not loop — a trailer should end on the track, not repeat it). The `beat-driven-edit` skill informs the beats-per-shot curve.

> **For the agent**: surface a beat-grid visualization — show every cut + the audio waveform + where they line up. The user can shift any cut ±half a beat for taste.

**STOP**: "Beat-locked cut shown. Approve, shift specific cut, or restart sync? (approve / shift [shot #] [direction] / restart)"

### Step 8 — Cinematic + key-art + contact sheet (~5 min, ~$0.50)

The agent runs the brand kit's `finishing_chain` via `director_export`. Outputs:
- **Cinematic hero (2.35:1)** — `ffmpeg-export` crop + film-grain LUT (`ffmpeg-overlay`), title card + end card.
- **Streaming cut (16:9)** — `ffmpeg-export` re-crop of the 2.35:1 master (keeps central focus).
- **Social cut (9:16)** — `ffmpeg-export` with `crop:"center-crop"` from the strongest 30 sec. (Use `ffmpeg-export` scale+crop for aspect changes — `opencv-smart-crop` is NOT registered on production BYOC.)
- **5 key-art stills (1920×1080)** — strongest beats re-rendered via `create_media(action:"generate", model_override:"gpt-image")` at `quality_threshold: 0.9`.
- **6-frame contact sheet (3000×2000)** — `create_media(model_override:"ffmpeg-grid", params:{ columns: 3, rows: 2 })` over 6 representative frames, for pitch decks.

**STOP**: "All exports shown. Approve, or restart any? (approve / restart [cinematic/streaming/social/keyart/contact])"

### Step 9 — Press-kit HTML + scorecard (~1 min)

The agent writes `public/press-kits/{trailer_slug}.html` containing the cinematic trailer (embedded video), the streaming + social cuts (download links), the 5 key-art stills (gallery), the contact sheet (download), the logline + canon citation, and a "request" CTA (mailto / contact). Calls the scorecard.

## Final output

```
✅ Press-kit HTML:         public/press-kits/{trailer_slug}.html
✅ Cinematic hero (2.35:1): <URL>
✅ Streaming cut (16:9):    <URL>
✅ Social cut (9:16):       <URL>
✅ 5 key-art stills:        <URL × 5>
✅ 6-frame contact sheet:   <URL>
✅ Brand kit (reusable):    ckit_{brand_kit_slug}
✅ Cast LoRAs (reusable):   N × lora_{character}_canon
✅ Project viewer:          <project URL>

Total spent: $X.XX of $60 ceiling
Canon-training (Week 0 only): $X one-time
Total wall-clock: HH:MM
Critic verdict: SHIP — cast canon-recognition 0.XX · shot continuity 0.YY · beat lock 0.ZZ
```

## What to do next

- **Hand the press-kit URL to an executive.** It's a one-link complete pitch artifact — trailer, key art, contact sheet, logline, canon citation.
- **Run this playbook again for a different cut** — same IP, different angle (romance cut, action cut, character-study cut). Canon LoRAs are reused; Week 0 is skipped.
- **For licensing conventions / festivals**: the cinematic hero (2.35:1) is the festival submission file; the contact sheet is the press packet; the key-art is the booth printout.
- **For Patreon / Kickstarter funding announcements**: the social cut + the contact sheet + the logline are the social-asset trio; the press kit URL is the campaign hub.
- **For a Webtoon → animation green-light pitch**: pair this trailer with a `manga-monthly-chapter.md` Chapter 1 (B5 PDF). Combination = "we have the IP + we can deliver the animation."

---

> *"A pre-vis reel doesn't have to be a finished trailer. It has to make me feel the show in 60 seconds."* — every Netflix anime exec. This playbook is built around exactly that 60-second feel.

## Execution mode (autopilot / director / auto)

This is a multi-scene project, so pass a `mode` to `generate_project` to control the **pre-finish gate** (after every scene renders, before delivery): `autopilot` (certain brief → ship in one call, no pause), `director` (always pause for a human pick/steer before delivery), or `auto` (recommended — ship UNLESS the auto-critic is unsure: score < `confidence_threshold` (default 0.8), verdict `iterate`, or a flagged shot). Setting `mode` runs the project async (returns a `job_id`); resume a director/auto pause with `review_checkpoint` + `resume_from_checkpoint` (decision `continue` to deliver / `abort` to discard). Omit `mode` for legacy straight-through behavior.
