Crayon Picture Book — our demo

One example among many. Don't reuse its story, arc, shots, props or timings.

Demo: The Moon Can't Sleep (52 s) · crayon-book.mp4 · source in demo/

Story & structure

A bedtime story on one page: the moon can't sleep; she tries counting sheep and fails; a girl at a lit window sees her, climbs a ladder that draws itself rung by rung, and a sweep of watercolour reveals the stars that were drawn in white crayon all along. The moon is tucked in under a quilt; the camera pulls back to the book on a table and turns the page to "The End".

The demo follows the rule "the act of drawing and colouring is the plot" and spends all six native moves, with the strongest (wax resist) at the emotional peak: the 250 white-wax stars are on the page from the first frame and are uncovered by the wash on the song.

Arc (45–55 s): blank page → a character is drawn and wakes up (hook in 3 s) → a small comic problem (failed sheep count) → a second character (the girl) → a small brave act (the ladder) → the wash reveal on the song (peak, no narration) → everyone sleeps → pull back to the book, page turn.

How the native moves map onto this story:

Native move How the demo used it
Wax resist Hid the payoff (the stars) in plain sight from the first frame; a sweep of watercolour uncovered it at the climax.
Drawn live Opened on a blank page; the ladder grew rungs under the girl's hands.
Colouring is an action Pulling up a blanket = scribbling a quilt over the moon; night falling = the wash.
Boil Calmed to half amplitude when the story went to sleep.
Child logic A face on the moon; numbers written in the sky while counting sheep.
It is a book Ended by pulling back to the physical book on a table, the crayons beside it, and turning to "The End". A one-take film over one page is explained by that reveal.

Adaptation examples (a product drawn in outline and a wash revealing the hidden feature; a history page coloured in event by event; a thank-you film with names in white crayon) are the "Fits content like" lines in STYLE.md §8.

Shots

One continuous camera over one page (world 3200×1800; full page = scale 0.6).

Beat Camera
Opening Locked full page, flat: the audience sees the paper before anything is drawn
Title leaves Push toward the moon instead of fading the title (you can't fade crayon)
Comic beat Locked medium close-up; substitution poses do the comedy (tossing = a scrunched face rotated 35°, on the beat)
Discovery Tilt along the moon's gaze (the camera is the moon looking down)
Two-shot The moon peeking in from the frame edge, the girl small in a lit window
Brave act Tight follow tilt; the ladder draws itself just ahead of her; climbing alternates two key drawings per rung
Wash reveal Held wide. The brush and the music do the motion. Small figure, huge sky
Resolution Slow push-in on the moon falling asleep, then tilt to the girl
Ending Pull out until the page becomes a book on a table; page turn; glide onto "The End"

Why this route, for this story: a bedtime story wants one uninterrupted page; the locked blank page put paper before drawing; the held wide at the reveal let the material be the motion; the pull-back explained the one-take. Each of these is one choice from STYLE.md §6, not the style's default.

Sleep grammar used on the moon: eyelids come down as yellow scribbles, a nightcap is drawn on, a quilt is coloured up from below with the folded edge appearing first, a tiny hand tucks it in.

Score structure

Music first, in 3/4 at 72 BPM (bar = 2.5 s). Music box (lead), toy piano (comic waltz, one note per sheep / per rung), flute as the singing voice, clarinet for bass and humour, glockenspiel for every star the wash uncovers (driven by glint events). No strings, no grand piano. The lullaby theme appears in full exactly once, at the wash; the opening music-box motif is its first phrase. It ends with the music box winding down (ritardando + slight pitch droop).

Silences: a full beat of silence after the failed sheep count; a 0.3 s breath before the song.

Foley specific to this film: sheep landing = felt puff; tossing = blanket swish; page turn = lift / whoosh / flap. Night = very faint crickets; the desk = warm room tone and a distant clock.

Mix: music −7 dB under narration, +4 dB for the wordless song; music-box and glockenspiel stems +3 dB with a gentle 3–7 kHz lift.

Voice: Kokoro af_heart, speed 0.86–0.90 (not bf_emma, which reads too bright and hard), 6–8 short lines. Chain: high-pass 75 Hz → compress first (thr 0.2, 2.5:1, 8 ms / 140 ms) → low shelf +1.5 dB @220 Hz, −2 dB dip @3.2 kHz, high shelf −4 dB @6 kHz → split-band de-esser (4.8–10 kHz, 4:1) → per-line RMS match → warm near-field reverb (12 ms pre-delay, early reflections, 0.7 s low-passed tail, wet ~−17 dB). Music ducks ~7 dB and foley ~4 dB under it; voice ~7–10 dB over the bed. Avoid "Goodnight, Moon", a famous-book phrase ("Night, night." instead).

Palette & props

End card

Title: hand-lettered on the page in two lines in a corner (Gaegu Bold), written on letter by letter while the colours are scribbled in. Subtitles: Patrick Hand 54 px, indigo crayon.

End card: the next page of the book — "The End" (Gaegu Bold), a small crescent doodle, the style name and credit in Patrick Hand. The "LemoLab × Claude Opus 5.5" sign-off belongs to this library's demo only; a user's film carries no LemoLab credit and no copy of this card.

Build notes

styles/crayon-book/demo/
  gl.js      WebGL2 compositor: paper, wax adhesion, knock-out, watercolour + resist, image pass, final emboss/vignette/lamp
  crayon.js  stroke engine: line (ribbons, taper, streaks, boil), fill (zig-zag hatching, overshoot), text, shapes
  rig.js     parts with occlusion + knock-out, limb tubes, curves
  chars.js   the girl (views × expressions × poses), the sheep, the moon (expressions, nightcap, quilt, crescent face)
  world.js   the page: house, tree, grass, ladder, 250 white-wax stars, 3 wash bands
  film.js    timeline, one-take camera, events, subtitles     end.js  book on a crayon desk, page turn, The End
  sheet.js   model sheets (?test=model&page=girl|moon)        lines.json, mix.py, music/score.py, build.sh
  1. node core/render/still.mjs styles/crayon-book/demo 0.5 --q 'test=model&page=girl' — model sheet first; iterate the character before any shot.
  2. core/tts/tts.py lines.json voices → asr_check.py until all OK.
  3. Build the timeline in film.js; review with still.mjs --range 0.5:51.5:1 + sheet.py (two rounds minimum).
  4. node core/render/events.mjs → music/score.py (cues on the 72 BPM grid, glockenspiel from glint events) → mix.py.
  5. node core/render/video.mjs styles/crayon-book/demo --fps 24 --workers 3 (1248 frames ≈ 80 s on an M-series Mac).
  6. CRF=26 sh demo/tools/mux.sh out/video24.mp4 mix.wav crayon-book.mp4 24 0 — no added grain (the paper is the grain); the local mux copy exposes CRF. demo/build.sh runs the whole chain from TTS to the finished film.

File size: anchor the tooth, don't boil background fills, add no extra grain and use CRF 26: the film is 74 MB with no visible loss (screen-fixed tooth makes it 190 MB).

Pitfalls tied to this demo's props: