Skip to content
Docs
Open Promoeyes
abstract-call-to-action

abstract-call-to-action

ABSTRACT · CALL TO ACTION — five ways to ask, in the abstract reel's grammar. A CTA is 4.5–5 s: one line, one press or one threshold, the URL, and then a HELD frame. Every scene here has exactly one thing that gets pressed or crossed, and it happens once, on a beat the viewer can see coming — a button that presses itself twice is a loop, not an ask.

Read the rig's notes
  #   scene           dur   transition     device   the ask
  01  c01-button      5.0   match-move     iphone   a 900 mm button on the floor presses itself; the phone's mirrors it
  02  c02-url         4.5   match-move     —        the address, and an emissive rule drawn under it
  03  c03-handoff     5.0   match-move     iphone   the phone comes forward and tilts to the viewer; the CTA presses
  04  c04-threshold   5.0   match-move     —        the camera crosses one big ring; the ask is on the other side
  05  c05-pill        4.5   —              —        a point of light lands on a pill and presses it

24.0 s of scene + four gaps (2.8 s) = 26.8 s on the wall. Every scene also
stands alone: cut one out, set transition=none, and it is the last part.

THE PRESS is one grammar everywhere it appears: 1 → 0.955 → 1 on scale (or
−14 mm on y for the floor button), easeOutQuad down over 0.15 s, easeOutBack
up over 0.3 s, and a flat emissive ring leaving the pressed thing in its own
plane, gone by 1.2 s later. c01, c03 and c05 press at 2.0 · 2.6 · 2.4 s.

THE HOLD. The last 1.2–1.5 s of every scene is still: the camera's last two
rows are the same pose, every drift returns to rest. A CTA's final frame is
the one the viewer reads the URL off; it cannot be moving.

THE COPY. Three text nodes per scene — a line (ink, weight 600, worldHeight
44–64), a strap (dim), and the address (ink or accent, tracking 240) — plus
the button label where there is a button. All are placeholders; an assembly
replaces them. The address is "axiom.app" throughout.

MATCH. c01 and c03 carry match=hero on the phone; c02, c04 and c05 carry
match=mark on the address; all five carry hz0/hz1/hz2.

LOOK — carried unchanged from the abstract reel:
  ink   #e9e6df    dim  #7c7970    line  #23232a
  mark  #ffb347   cool #7ad7ff   warm #ffa25e

POST. bloom → film_grain → fxaa; dispersion only on the threshold (c04).
  shot            bloom  thresh  spread  grain / vignette
  01 button       0.60   0.82       —    0.012 / 0.32
  02 url          0.65   0.80       —    0.012 / 0.34
  03 handoff      0.60   0.82       —    0.012 / 0.32
  04 threshold    0.70   0.80    0.01    0.014 / 0.36
  05 pill         0.70   0.80       —    0.012 / 0.34

A TRAP PAID: text under an assembly rasterises through glyph-assembly.ts,
whose default family is Roboto; every assembled text node carries the plain
text layer's system sans stack so the two paths match.

NO AUDIO. Primitives reel; add at assembly time.

Capture: nx run tools:capture:webgl -- --project promos/primitives/scenes/abstract/parts/abstract-call-to-action.promo --width 1920 --height 1080 --times "2.2,4.6,7.4,9.6,13.0,15.4,18.6,20.4,23.4,26.2"
Preview: /packages/runtime/index.html?project=promos/primitives/scenes/abstract/parts/abstract-call-to-action.promo
Topic
scenes
Scenes
5
Kind
reference rig
//
    ABSTRACT · CALL TO ACTION — five ways to ask, in the abstract reel's
    grammar. A CTA is 4.5–5 s: one line, one press or one threshold, the URL,
    and then a HELD frame. Every scene here has exactly one thing that gets
    pressed or crossed, and it happens once, on a beat the viewer can see
    coming — a button that presses itself twice is a loop, not an ask.

      #   scene           dur   transition     device   the ask
      01  c01-button      5.0   match-move     iphone   a 900 mm button on the floor presses itself; the phone's mirrors it
      02  c02-url         4.5   match-move     —        the address, and an emissive rule drawn under it
      03  c03-handoff     5.0   match-move     iphone   the phone comes forward and tilts to the viewer; the CTA presses
      04  c04-threshold   5.0   match-move     —        the camera crosses one big ring; the ask is on the other side
      05  c05-pill        4.5   —              —        a point of light lands on a pill and presses it

    24.0 s of scene + four gaps (2.8 s) = 26.8 s on the wall. Every scene also
    stands alone: cut one out, set transition=none, and it is the last part.

    THE PRESS is one grammar everywhere it appears: 1 → 0.955 → 1 on scale (or
    −14 mm on y for the floor button), easeOutQuad down over 0.15 s, easeOutBack
    up over 0.3 s, and a flat emissive ring leaving the pressed thing in its own
    plane, gone by 1.2 s later. c01, c03 and c05 press at 2.0 · 2.6 · 2.4 s.

    THE HOLD. The last 1.2–1.5 s of every scene is still: the camera's last two
    rows are the same pose, every drift returns to rest. A CTA's final frame is
    the one the viewer reads the URL off; it cannot be moving.

    THE COPY. Three text nodes per scene — a line (ink, weight 600, worldHeight
    44–64), a strap (dim), and the address (ink or accent, tracking 240) — plus
    the button label where there is a button. All are placeholders; an assembly
    replaces them. The address is "axiom.app" throughout.

    MATCH. c01 and c03 carry match=hero on the phone; c02, c04 and c05 carry
    match=mark on the address; all five carry hz0/hz1/hz2.

    LOOK — carried unchanged from the abstract reel:
      ink   #e9e6df    dim  #7c7970    line  #23232a
      mark  #ffb347   cool #7ad7ff   warm #ffa25e

    POST. bloom → film_grain → fxaa; dispersion only on the threshold (c04).
      shot            bloom  thresh  spread  grain / vignette
      01 button       0.60   0.82       —    0.012 / 0.32
      02 url          0.65   0.80       —    0.012 / 0.34
      03 handoff      0.60   0.82       —    0.012 / 0.32
      04 threshold    0.70   0.80    0.01    0.014 / 0.36
      05 pill         0.70   0.80       —    0.012 / 0.34

    A TRAP PAID: text under an assembly rasterises through glyph-assembly.ts,
    whose default family is Roboto; every assembled text node carries the plain
    text layer's system sans stack so the two paths match.

    NO AUDIO. Primitives reel; add at assembly time.

    Capture: nx run tools:capture:webgl -- --project promos/primitives/scenes/abstract/parts/abstract-call-to-action.promo --width 1920 --height 1080 --times "2.2,4.6,7.4,9.6,13.0,15.4,18.6,20.4,23.4,26.2"
    Preview: /packages/runtime/index.html?project=promos/primitives/scenes/abstract/parts/abstract-call-to-action.promo
promo#abstract-call-to-action(width=1920 height=1080 fps=30)
  materials
    // the abstract reel's six materials, carried whole so this file grades on its own
    physical#clearcoat(color=#15161a metalness=0 roughness=0.45 clearcoat=1 clearcoat-roughness=0.06 envmap-intensity=1.1)
    standard#metal(color=#d8d8dc metalness=1 roughness=0.22 envmap-intensity=1.25)
    standard#clay(color=#9c9689 metalness=0 roughness=0.95)
    basic#emissive(color=#ffb347)
    basic#emissive-cool(color=#7ad7ff)
    basic#emissive-white(color=#f4e6cf)
    physical#glass(color=#dfefff metalness=0 roughness=0.14 transmission=0.85 thickness=70 ior=1.45 clearcoat=0.9 clearcoat-rou