Skip to content
Docs
Open Promoeyes
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