Storyboard · Character-Lock Showcase

龙舟小波 · Bo's Dragon Boat Race

端午赛龙舟, told as a 6-beat cartoon — and starring one chibi dragon who looks exactly the same in every shot. The whole reel is locked to a single character picture. The part most AI video gets wrong, done right with primitives that exist today.

Format
9:16 vertical
Beats
6 + end-card
Runtime
~51 sec
Cost
~$2.70
Wall time
~15 min

The story a complete arc in 6 beats

Dawn mist on the river → the crew boards and Bo lights the drum → the race explodes off the line → a rival pulls ahead → Bo breathes a rainbow gust and the boat lunges to the line → fireworks, zongzi, victory. It reads in one watch, it's funny, and it's unmistakably the same dragon throughout.

Caption-ready: 祝大家端午安康 🐲🚣 #端午 #龙舟 #DragonBoatFestival

The one image that locks it 小波 — Bo's character sheet

Everything starts here. A single character sheet of 小波 (Bo) — the carved dragon-head prow come to life: jade-green scales, a gold water-drop belly spot, two little curved horns, a red neck ribbon, big mascot eyes. This image is the only identity input. Every one of the 6 beats is generated by carrying Bo's identity forward from this sheet (subject-preservation), not by re-drawing him each time — which is exactly why his horns, belly-spot and ribbon stay put.

Bo character sheet

This is the same idea as VibePaper's "draw a character sheet, then connect it into every shot" — done here with place_subject, which fans one subject across N scenes with the preservation prompt applied automatically. gpt-image drew the sheet; nano-banana placed Bo into each beat.

Want the lock declared once on a canvas and reused across a whole series? That's the Wire Graph version of this same reel — see the comparison below.

The 6 beats Bo, consistent, scene to scene

Beat 1
BEAT 01
Dawn on the prow
Beat 2
BEAT 02
Lighting the drum
Beat 3
BEAT 03
The start
Beat 4
BEAT 04
Falling behind
Beat 5
BEAT 05
The rainbow climax
Beat 6
BEAT 06
Fireworks victory

How it was made primitives that exist today

gpt-image → Bo sheet place_subject → 6 keyframes seedance-i2v → 6 clips (9:16, 8s) music (festival bed) ffmpeg → concat · 端午安康 end-card · mux

No LoRA, no fine-tuning — pure reference conditioning. The end-card text ("端午安康") is a clean overlay rendered with a CJK font, never baked by the image model (AI text rendering is the one thing to never trust). Total spend ≈ $2.70: one sheet + seven keyframes (one re-render) + eight i2v clips (two retries) + a music bed.

Honest verdict what held, what needed a nudge

✓ What held

  • Bo held 6/6. Same horns, belly-spot, ribbon and proportions across every beat — the one-image lock worked.
  • The arc reads in a single watch; it's legible and fun.
  • The festival end-card text is crisp (overlay, not generated).

⚠ What needed a nudge

  • 2 of 6 i2v clips failed on the first pass ("fetch failed" — fal-side latency, not the orchestrator). One retry each fixed them.
  • Beat 4's first keyframe had a stray artifact + clutter; re-rendered once (~$0.04) before animating.
  • Fast-water motion can thin fine details — premium seedance-i2v held them better than the fast tier would.

The same reel, two ways manual lock vs Wire Graph

This reel was made the manual reference-passing way — Bo's sheet hand-fed into each shot. The forthcoming Wire Graph produces the identical reel by wiring Bo's node into all 6 beats once (VibePaper-style), which is what pays off for multi-character series.

 Manual (this reel)Wire Graph
Where the lock livesper step (re-passed each beat)once, on the graph
Multi-characterfiddly (track who's in which shot)native (draw another line)
Re-run one beatre-pass the sheetsurgical — re-pull that node's wires only
Surfacesplaybook the agent runsone schema on CLI · MCP · webapp
Availabletodayafter Wire Graph Phase 1