abstract-hook
abstract-hook
ABSTRACT · HOOK — five ways to take the first three seconds, in the abstract reel's grammar. A hook is 2.5–3 s, one beat, and it is over before the viewer has decided anything: a word slams, a phone whips in, a question types itself, a number runs up, a switch flips. Nothing here explains; every scene ends on a held frame the next part can cut from.
Read the rig's notes
# scene dur transition device the beat 01 h01-slam 3.0 match-move — three words punch in on beat; the third is the mark 02 h02-whip 2.5 match-move iphone the phone whips in from off-frame and the screen wakes on landing 03 h03-question 3.0 match-move — one question types itself; a caret blinks under it 04 h04-count 3.0 match-move — a number runs 0 → 1,000,000 in twelve steps; the label drops 05 h05-toggle 2.5 — iphone one giant switch flips on, and the room's light changes state 14.0 s of scene + four gaps (2.0 s) = 16.0 s on the wall. Every scene also stands alone: cut one out, set transition=none, and it is an opener beat. TIMING IS THE WHOLE SCENE. Every hook lands its beat between 0.3 and 1.0 s and holds from ~1.8 s to the cut. Entrances are 0.25–0.4 s, easeOutCubic or easeOutBack, with a 1.18 → 1 scale on type (a word that arrives at size is a caption; one that lands is a slam). Exits are shorter than entrances (0.12–0.2 s). The gap is 0.5 s, not the reel's 0.8: a hook that dissolves slowly was not a hook. THE LIGHT IS A STATE. h02 and h05 keep the key near zero until the beat and ramp it in 0.3 s on landing, so the picture appears from ILLUMINATION, the way the intros do. The haze lobes carry the beat too: opacity spikes on each slam (h01) and comes up with the switch (h05). THE COUNT (h04) is twelve text layers swapped by opacity, values on an exponential so the run FEELS like acceleration (0 · 4 · 31 · 120 · 480 · 2,400 · 9,800 · 41,000 · 150,000 · 420,000 · 800,000 · 1,000,000). A linear count reads as a clock. The last value stays; the label drops under it. THE TOGGLE (h05) is three primitives: a clay track, a clearcoat knob, and an emissive track 6 mm LARGER than the clay one at opacity 0 → 1 on the flip — a bigger box over a smaller one, not a material swap, because a material's colour cannot be keyframed across a definition. MATCH. h02 and h05 carry match=hero on the phone; h01, h03 and h04 carry match=mark on their last text node; all five carry hz0/hz1/hz2. The gaps between text-only and device scenes fly the haze and crossfade the rest. LOOK — carried unchanged from the abstract reel: ink #e9e6df dim #7c7970 line #23232a mark #ffb347 cool #7ad7ff warm #ffa25e POST. bloom → film_grain → fxaa on every shot; no dispersion in this file. shot bloom thresh grain / vignette 01 slam 0.60 0.82 0.012 / 0.34 02 whip 0.75 0.80 0.013 / 0.36 03 question 0.55 0.84 0.012 / 0.34 04 count 0.60 0.82 0.012 / 0.34 05 toggle 0.70 0.80 0.012 / 0.34 A TRAP PAID: text under an assembly is rasterised into a glyph atlas by layer-adapters/glyph-assembly.ts, whose default family is Roboto — a host without it falls back to a SERIF, and the typed question came out in one. Every assembled text node here carries font="system-ui, …, sans-serif", the plain text layer's own stack, so the two paths match. THE COPY is a placeholder. The three slam words, the question, the count's label and the mark are the reel's own; an assembly replaces the text nodes. NO AUDIO. Primitives reel; add at assembly time. Hooks want a hit on every beat — the beat times are in each scene's comment. Capture: nx run tools:capture:webgl -- --project promos/primitives/scenes/abstract/parts/abstract-hook.promo --width 1920 --height 1080 --times "1.0,2.6,4.2,5.6,7.0,8.8,10.2,12.4,13.9,15.6" Preview: /packages/runtime/index.html?project=promos/primitives/scenes/abstract/parts/abstract-hook.promo
- Topic
- scenes
- Scenes
- 5
- Kind
- reference rig
//
ABSTRACT · HOOK — five ways to take the first three seconds, in the
abstract reel's grammar. A hook is 2.5–3 s, one beat, and it is over
before the viewer has decided anything: a word slams, a phone whips in, a
question types itself, a number runs up, a switch flips. Nothing here
explains; every scene ends on a held frame the next part can cut from.
# scene dur transition device the beat
01 h01-slam 3.0 match-move — three words punch in on beat; the third is the mark
02 h02-whip 2.5 match-move iphone the phone whips in from off-frame and the screen wakes on landing
03 h03-question 3.0 match-move — one question types itself; a caret blinks under it
04 h04-count 3.0 match-move — a number runs 0 → 1,000,000 in twelve steps; the label drops
05 h05-toggle 2.5 — iphone one giant switch flips on, and the room's light changes state
14.0 s of scene + four gaps (2.0 s) = 16.0 s on the wall. Every scene also
stands alone: cut one out, set transition=none, and it is an opener beat.
TIMING IS THE WHOLE SCENE. Every hook lands its beat between 0.3 and 1.0 s
and holds from ~1.8 s to the cut. Entrances are 0.25–0.4 s, easeOutCubic
or easeOutBack, with a 1.18 → 1 scale on type (a word that arrives at
size is a caption; one that lands is a slam). Exits are shorter than
entrances (0.12–0.2 s). The gap is 0.5 s, not the reel's 0.8: a hook that
dissolves slowly was not a hook.
THE LIGHT IS A STATE. h02 and h05 keep the key near zero until the beat and
ramp it in 0.3 s on landing, so the picture appears from ILLUMINATION, the
way the intros do. The haze lobes carry the beat too: opacity spikes on
each slam (h01) and comes up with the switch (h05).
THE COUNT (h04) is twelve text layers swapped by opacity, values on an
exponential so the run FEELS like acceleration (0 · 4 · 31 · 120 · 480 ·
2,400 · 9,800 · 41,000 · 150,000 · 420,000 · 800,000 · 1,000,000). A linear
count reads as a clock. The last value stays; the label drops under it.
THE TOGGLE (h05) is three primitives: a clay track, a clearcoat knob, and
an emissive track 6 mm LARGER than the clay one at opacity 0 → 1 on the
flip — a bigger box over a smaller one, not a material swap, because a
material's colour cannot be keyframed across a definition.
MATCH. h02 and h05 carry match=hero on the phone; h01, h03 and h04 carry
match=mark on their last text node; all five carry hz0/hz1/hz2. The gaps
between text-only and device scenes fly the haze and crossfade the rest.
LOOK — carried unchanged from the abstract reel:
ink #e9e6df dim #7c7970 line #23232a
mark #ffb347 cool #7ad7ff warm #ffa25e
POST. bloom → film_grain → fxaa on every shot; no dispersion in this file.
shot bloom thresh grain / vignette
01 slam 0.60 0.82 0.012 / 0.34
02 whip 0.75 0.80 0.013 / 0.36
03 question 0.55 0.84 0.012 / 0.34
04 count 0.60 0.82 0.012 / 0.34
05 toggle 0.70 0.80 0.012 / 0.34
A TRAP PAID: text under an assembly is rasterised into a glyph atlas by
layer-adapters/glyph-assembly.ts, whose default family is Roboto — a host
without it falls back to a SERIF, and the typed question came out in one.
Every assembled text node here carries font="system-ui, …, sans-serif",
the plain text layer's own stack, so the two paths match.
THE COPY is a placeholder. The three slam words, the question, the count's
label and the mark are the reel's own; an assembly replaces the text nodes.
NO AUDIO. Primitives reel; add at assembly time. Hooks want a hit on every
beat — the beat times are in each scene's comment.
Capture: nx run tools:capture:webgl -- --project promos/primitives/scene