Isometric People Scene — our demo
One example among many. Don't reuse its story, arc, shots, props or timings.
Demo: Seventy-Two Seats 《七十二個座位》 (59.8 s, Chinese narration, bilingual subtitles) · isometric-picture-book.mp4 · isometric-picture-book.srt · source in demo/
Story & structure
Boarding a plane always takes ages, even when rows are called in order. The film shows why (one aisle: one person stopping to stow a bag stops everyone behind, and everyone called is heading for the same few rows), then a different order (window seats first, each person one row apart from the next in line) in which six people stow bags at once, and the cabin fills in nearly half the time.
The two orders and both times come from a real test: Steffen & Hotchkiss (2012), a 12-row, six-abreast mock cabin with one 21-inch aisle and 72 passengers; back rows first in blocks took 6:54, window first and every other row 3:36 (sources and quotes in demo/FACTS.md). Gate B12, the aircraft and its livery are fictional; no airline appears.
Arc: the question (why so long?) → the usual answer (back rows first) → why it jams (one aisle; one person stops, all wait; everyone heads for the same stretch) → 6:54 → what if the order changes? → window first, one row apart → six at once → 3:36 → the two times side by side → the real test and its 72 passengers → the answer: not crowds, one stretch of aisle → sign-off.
Native moves spent: floor type (title, key words, numbers, sign-off); domino stand-up; lid off (twice); order lighting; order arrows; weave fill; bars on the ground; people as the sample; the jammed stretch lit as "stand here".
Shots
30 fps, one shot per narration line; times are film times.
| # | Time | Shot | Native move / note |
|---|---|---|---|
| 1 | 0.0–3.4 | apron: the aircraft rolls onto stand B12 from frame 0, the jet bridge docks; 七十二個座位 / SEVENTY-TWO SEATS lands on the stand; a baggage train in the background | title as floor type |
| 2 | 3.4–8.6 | tilt down through the glass to the gate; the 9–12 排 sign lights; the front row of chairs stands up one by one and files into lane 1; 後排先上 | domino stand-up |
| 3 | 8.6–12.0 | at the aircraft door the roof flips open on its far hinge, paper side up; the camera rises over 12 empty rows; a light runs down the aisle; 只有一條過道 | signature 1: lid off |
| 4 | 12.0–16.3 | one whole incident in frame: a passenger (persimmon marker) lifts a case up onto the open bin, the line behind stops; 一人停 後面全等 | |
| 5 | 16.3–21.8 | the whole cabin: rows 9–12 tinted, everyone called heads for that stretch and the line stalls back into the bridge; 擠在同一處 | |
| 6 | 21.8–25.0 | time-lapse fill (rows 9–12, then 1–4, then 5–8); the timer stops red on 6:54; 6:54 全部坐滿 | number held ≥ 2.5 s |
| 7 | 25.0–27.6 | rewind empties the cabin; the new order lights seat by seat, window first and every other row; 換個順序 | order lighting |
| 8 | 27.6–31.8 | the gate: one straight line on numbered squares 12A 10A 8A 6A 4A 2A; 靠窗先上 / 隔開一排 | |
| 9 | 31.8–38.5 | the lid flips open again; six people walk in, stop at every other row at once, lift six cases onto six bins, sit; then the remaining waves fill as a time-lapse, arrows branching into each group of rows; 六排同時放 | signature 2: weave fill |
| 10 | 38.5–41.6 | the full cabin, same framing as shot 6; the timer on 3:36; 3:36 全部坐滿 | number held ≥ 2.5 s |
| 11 | 41.6–46.6 | pull out to the apron (0.55 s, the bars already drawing): 6:54 long in ink, 3:36 short in persimmon, each with a small cabin icon; held still 2.5 s, then a dashed bracket marks the time saved | signature 3: bars on the ground |
| 12 | 46.6–51.6 | the bars fade as the camera pans: 72 passengers appear on the concrete in the cabin's own 12 × (3 + 3) layout; 2012 · 72 名乘客 | people as the sample |
| 13 | 51.6–56.7 | back in the jammed cabin: the stretch of aisle where everyone waits is lit persimmon; 同一段過道 | callback |
| 14 | 56.7–59.8 | the stand: LemoLab × Claude Opus 5.5 lands on the concrete and holds | end card |
Narration
Thirteen lines, each starting with its shot (the start times below); the subtitle shows the same line, Chinese above and English below.
| Line | Start (s) | 中文 | English |
|---|---|---|---|
| V01 | 0.45 | 每次登機,為什麼總要排那麼久? | Why does boarding always take so long? |
| V02 | 3.70 | 讓後排乘客先上,聽起來很合理,後排坐好了,就不會擋著前排的路。 | Back rows first sounds sensible: once they sit down, they are out of everyone’s way. |
| V03 | 8.78 | 可機艙裡只有一條過道,窄得只夠一個人走。 | But the cabin has one aisle, just wide enough for one person. |
| V04 | 12.21 | 只要前面有一個人停下來放箱子,後面所有人都得乾等著。 | When one person stops to stow a bag, everyone behind has to wait. |
| V05 | 16.47 | 因為叫的都是相鄰那幾排,大家全擠在同一個地方,只能一個接一個來。 | They were called for the same few rows, so they crowd one spot and go one by one. |
| V06 | 21.99 | 全部坐滿,足足用了六分五十四秒。 | Filling every seat took a full 6 minutes 54 seconds. |
| V07 | 25.34 | 那如果換個順序呢? | What if we change the order? |
| V08 | 27.79 | 讓靠窗的人先上,而且前後兩個人之間,剛好隔開一排。 | Window seats first, and each person sits one row apart from the next in line. |
| V09 | 31.97 | 這樣一來,六個人就能同時在六個不同的排數放箱子,誰也不擋誰的路。 | Now six people stow bags in six different rows at once, and nobody blocks anybody. |
| V10 | 38.73 | 結果全部坐滿,只花了三分三十六秒。 | Every seat was filled in just 3 minutes 36 seconds. |
| V11 | 42.32 | 足足快了三分多鐘,時間縮短了將近一半。 | More than three minutes faster: nearly half the time. |
| V12 | 47.07 | 這是2012年,研究人員找來七十二名乘客做過的真實測試。 | This was a real test, run in 2012 with 72 passengers. |
| V13 | 51.85 | 原來登機慢,根本不是因為人多,而是把所有人都堵在了同一段過道上。 | Boarding is slow not because of crowds, but because everyone is stuck in the same stretch of aisle. |
- Chinese (the library film): edge-tts
zh-CN-XiaoxiaoNeural, rate +25 %. The line lengths are written intoVO_DURinfilm.js, which builds the 14 shots from them. - English (
build.sh en): edge-ttsen-US-AvaNeural, rate +10 % (V02 and V08 at +25 %, V06 at +20 % to fit their shots), each line starting with its Chinese line; same picture, score and subtitles. - Spoken-only spellings (
say, the subtitle text is unchanged): V05 has short pauses so 相鄰 and 全擠 are clear; V12 reads the year as 二零一二年 (English: "twenty twelve"); English V02 has two short pauses. Speech check:asr_check.pywith the medium Whisper models;asrfields give Whisper's spelling where it writes digits (6分54秒, 3分36秒, 2012, 72) and where it hears 全擠 as the near-homophone 拳擊.
Score structure
100 BPM, F major, under the voice. Opening F → B♭; the gate a pizzicato walk under the line; a harp sweep as the lid opens; a stuck pizzicato stab and a held cello D while the line waits; piano sixteenths for the time-lapse and a low Dm on 6:54; one second of score backwards for the rewind and a glockenspiel run as the seats light; a rising vibraphone F A C F at the second gate; one six-note vibraphone chord per wave in the weave with pizzicato and shaker under it; F with glockenspiel on 3:36; B♭ → Gm under the bars and C on the bracket; F/A under the 72 passengers, Dm under the callback, a long F under the sign-off. A soft cello root sustains under every shot and overlaps each cut. The music ducks 16 dB under the narration and lifts between lines. Mix: −16.0 LUFS integrated, true peak −2.1 dBFS before mux (English: −16.0 / −2.3).
Palette & props
Palette as in STYLE.md §3 (paper, concrete, carpet, ink, persimmon accent, subject green, ginger markings). Props: a fictional rear-engined regional jet with a T-tail, white with two green bands; 12 rows of 3 + 3 green seats with cream headrest covers and low backs; overhead bins on the cut rims, one per row on the near side; a 7.5 m jet bridge with a glazed far wall and a low near wall; a gate with three painted lanes, group signs, a podium and three rows of pale green chairs; a baggage train on the service road; two time bars and a cabin-shaped formation of 72 people on the apron. People: 72, four tops, each with a rolling case.
End card
On the stand, "LemoLab × Claude Opus 5.5" lands word by word in the floor-type serif and holds 3 s, fully inside the frame. Under it, in the small floor-type serif, the licence credit for the Salamander piano samples (CC BY 3.0) fades in as the shot opens, so it holds to the end. 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
sh styles/isometric-picture-book/demo/build.sh(Chinese,isometric-picture-book.mp4) orbuild.sh en(isometric-picture-book-en.mp4, reusing the rendered picture): fonts (downloaded from google/fonts, Noto Serif SC subset bytools/subset.py) → sample packs → narration (edge-tts, online) + speech check →tools/vo_lengths.py(the Chinese voice must still matchVO_DUR) → events →audio.py(narration, score, foley, ducking, loudness) → picture → master → readcheck →tools/srt.py(bilingual .srt) → poster and gallery still.- Files:
engine.js,kit.js(style kit, two-line subtitles),plane.js,places.js,film.js(timeline from the narration, queue simulation, 14 shot functions,texts(),events()),main.js/index.html,audio.py,lines.json/lines_en.json,FACTS.md,tools/. - Checks: readcheck passes on all world text (the subtitle cues follow the narration and go to the .srt);
tools/motion_check.mjsreports no jumps, no stop-start stepping and no two standing people closer than 0.35 m. Render ≈ 30–60 ms per 1080p frame. - Demo-prop notes: the terminal glass is cut to a parapet in every shot that looks past it; type beside the fuselage stays between the jet bridge and the wing (single line, scaled down where needed); the verdict bars sit far enough ahead of the nose that the nose never covers the cabin icons; the gate's seat numbers and group signs show only in their own shots.