Colored-Pencil Science Illustration — our demo

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

Demo: The Other Half 《樹的另一半》 (50.8 s) · colored-pencil.mp4 · source in demo/

A question that circulates widely, "Do the trees in a forest feed each other?", taken underground. The camera sinks below a meadow, a magnifier opens on one root tip wrapped in fungus, a grain of sugar leaves the root along a fungal thread while water and nutrients come back the other way, the thread reaches the next tree, and the film says honestly that whether trees pass food to each other is still argued over. It ends on what is solid: pulled back over a whole wood, a white network joins every tree underground. English narration (Kokoro bf_emma), Chinese and English subtitles. Sources in demo/FACTS.md.

Story & structure

Logline: one question, followed all the way down and back out.

Native moves spent: the blank half, the horizon sweep, roots drawn outward, the magnifier (in and out), focus by drawing (twice), a grain on a thread, white over dark, the plate.

Shots

# Time Shot Camera Note
S1 0–5.4 Meadow, tree A, grass and flowers; blank paper below the ground line slow push; grass on twos the four pencil layers, paper tooth, contour boil
S2 5.4–12.5 The cut face rises over the far view; litter, topsoil, subsoil, weathered rock coloured in left to right; roots of trees A and B grow; 11.55 a pencil circle around a root tip crane down + push (translation only) multiplane parallax; the horizon sweep
S3 12.5–21 Inside the circle: the root tip, drawn from blank paper outward from the centre; fungal threads wind round it and fan out; tag HYPHAE 菌絲 the circle grows to full frame; a slight drift; focus root → threads at 17.5–18.4 the magnifier; only the hero root, its fungus, soil and stones are drawn
S4 21–30.6 An amber sugar grain leaves the root along a bundle of three threads; tag SUGAR 糖 rides above it; blue-green grains pass the other way; tag WATER + NUTRIENTS 水和養分; the sugar is taken up at 28.2 follow (truck right), the grain left of centre a grain on a thread
S5 30.6–38.9 Tree B's root tip; a dashed amber path from tree A's side into it and a pencilled "?" (written by 35.9, held about 3 s) still, slow drift the open question
S6 38.85–50.8 The circle shrinks onto tree B's root inside the wide cutaway and is erased; five trees, their roots; focus moves to the network, drawn outward from tree B (40.1–44.6); title from 45.2; end card 45.85–50.8 the magnifier closing, then pull back + rise the plate

Transitions: one continuous sink (above → below), the magnifier opening (through a shape), a focus pull inside the close-up, the magnifier closing (the same shape in reverse). Two near-silences: 11.4–12.5 s (before the circle opens) and 38.2–38.85 s (before it closes).

Voice and subtitles

Nine lines (demo/voice/lines.json), Kokoro bf_emma at speed 0.66–0.8 (about 2.3–2.7 words a second), each checked with asr_check.py. In line 8 Whisper hears "Whether" as its homophone "Weather"; the asr field records that.

# Start English (spoken) 中文
1 0.9 Do the trees in a forest feed each other? 森林裡的樹,會互相餵食嗎?
2 5.9 If there is an answer, it is down here. 如果有答案,就在這下面。
3 13.9 A tree's finest roots are wrapped in fungus, 樹最細的根,裹著一層真菌,
4 18.1 threads far thinner than a hair. 菌絲比頭髮還細得多。
5 21.1 The tree pays the fungus in sugar, made from sunlight. 樹用陽光做成的糖,付給真菌。
6 26.1 The fungus pays back in water and nutrients from the soil. 真菌用土裡的水和養分回報。
7 31.3 And the same fungus can reach the next tree. 同一片真菌,還能連到下一棵樹。
8 35.5 Whether trees pass food along it is still argued over. 樹會不會借它互相傳遞養分,科學家還在爭論。
9 41.4 But one thing is clear. No tree grows alone. 但有一點很清楚:沒有一棵樹是獨自長大的。

Each cue holds until 0.6 s after its line (shortest 2.82 s). Subtitles are drawn by the page on a paper slip, bottom left, and exported to colored-pencil.srt from the same events.

Score structure

96 bpm, 4/4, a bar = 2.5 s, D major.

Section Time Palette
Meadow 0–5 nylon guitar arpeggios; a flute phrase that rises and stops unresolved on E
Descent 5–11.4 pizzicato bass stepping down D–B–G–E, clarinet following down
Near-silence 11.4–12.5 only the pencil drawing the circle
Magnifier 12.5–20 a glockenspiel note and the lens tock; bowed vibraphone chords, sparse harp; glockenspiel glints as the threads wind on
The trade 20–30 marimba calls (sugar out), kalimba answers (water back), pizzicato bass
The question 30–38.2 kalimba alone, a suspended chord, an unanswered clarinet phrase
Near-silence 38.2–38.85
The wood 38.85–50.8 harp falling as the circle closes; guitar, strings; the flute phrase completes on D; harp strum and closing chord at 45, a light harp figure under the end card, fading to 50.8

Mix (demo/mix.py): the voice is compressed and set by RMS 10 dB over everything under it; while it speaks the music ducks about 5 dB and gives up about 7 dB more in 300 Hz–4 kHz. Pencil foley follows the page's drawing events; ambience follows the camera height (meadow above, low-passed as it sinks, a quiet earth tone below). The crest factor is held to about 11 dB so mux.sh masters to −14 LUFS with true peaks under −1 dB.

Palette & props

End card

In the sky of the last wide shot: The Other Half / 樹的另一半 written top left (from 45.2 s, with a pencil underline); top right, written stroke by stroke from 45.85 s, Colored-Pencil Science Illustration / 彩鉛科普插畫, a short rule, and LemoLab × Claude Opus 5.5 (30 px), complete at 47.8 s and held to 50.8 s. 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

demo/
  build.sh       one command: font (if missing) → voice (if missing) → speech check → events → picture → mix → master → subtitles → readcheck → poster and styleframe (one frame, 11.0 s)
  index.html     the page and the font face
  main.js        world (soil, trees, roots, hero roots, fungus, grains, network), the pencil G-buffer and post shaders,
                 shots and camera views (magnifier, focus, follow), labels, subtitles, end card, EV, TEXTS — render(t)
  mix.py         voice + pencil foley + ambience + score from events.json → out/mix.wav
  glyphs.json    glyph skeletons for the stroke-by-stroke lettering (tools/skeleton.py)
  voice/         lines.json (Kokoro bf_emma, rendered to out/voice/ with dur.json)
  tools/make_font.py   LXGW WenKai subset from fonts/src/ (every Chinese character in main.js)
  tools/skeleton.py    glyph skeletons → glyphs.json
  tools/subs.py        bilingual .srt from the subtitle events
  tools/poster.py      poster.jpg and stills/styleframe.jpg: the frame at 11.0 s, JPEG under 500 KB
  fonts/         OFL-lxgwwenkai.txt (the .ttf files are local)
  FACTS.md       the claims in the narration and their sources