Skip to content
Docs
Open Promoeyes
abstract-coda

abstract-coda

ABSTRACT · LOCKUP + PHYSICS CODA — shots 28-30 of the RICH-SCENES reel, and the part that closes it. The lockup lands, and two SOLVED shots close on the same phone.

Read the rig's notes
Every other shot in this reel is authored motion: a curve typed out as rows.
These two are solved, and they are here because the plan listed them as
impossible.

  #   scene              dur   transition   device            the shot
  28  s28-lockup         7.5   match-move   iphone+macbook    the lockup, the device family, one click
  29  s29-separation     8.0   match-move   iphone            one metaball body coming apart into eleven domes
  30  s30-slide-off      8.0   —            iphone+macbook    a baked sheet pulled off two devices by friction

  · SEPARATION (29) is one inverse-square metaball field, meshed by marching
    cubes — f(p) = SUM(w/|p-c|^2) - 1. Eleven <drop> centres pull apart and
    the necks that thin and break between them are not modelled; they are
    what the sum does as two centres separate. One `weight` track takes the
    field from one skin to eleven domes, so the shot re-times by editing four
    rows. `flatten=` intersects the half-space above the slab, which is what
    makes each drop the plano-convex dome and not a ball.
  · SLIDE-OFF (30) is position-based dynamics: structural, shear and bending
    constraints over a particle grid, collided against the real device
    geometry voxelised into a distance field. THE PULL IS NOT A FORCE — it is
    a grip on the +x edge translated 2.5 m, and the sheet uncovers the laptop
    first and catches on its lid because it is attached and because it rubs,
    not because either beat is authored.

THE SOLVER IS BAKED — fixed timestep, fixed constraint order, seeded, run
once into a per-frame buffer that update(t) reads — because this reel's hard
rule is that a scrub, a re-render and a headless capture of one timecode
agree, and a live-stepped solver gives a different sheet every seek. Same
algorithm, made seekable.

THE HANDOVER. All three shots carry `match=hero` on their iphone, so the
device is on screen through both cuts and only the world around it changes.
That match chain is why these three shots belong in one file: split between
28 and 29 and the lockup's phone has nothing to hand to.

THE TWO SET MATERIALS the coda adds — `slabstone` and `roomwall` — are the
slab the droplets sit on and the devices stand on, and the only thing behind
them. The wall exists so the sheet and the domes have something to be dark
against instead of fogging out into nothing.
THE UNITS. 1 page unit = 100 mm. The kit is fist-sized (a 100 mm chamfered
cube, a 98 mm torus), the cameras sit 600-1200 mm out, and the devices render
at true physical size — 159.5 mm of iphone standing next to a 100 mm cube is
the whole reason the shots read as objects on a table rather than as
graphics. Every length in this file is a millimetre.

LOOK — shared across every part:
  ink        #e9e6df   dim  #7c7970   line  #23232a
  mark       #ffb347   the one accent; every emissive surface is this
  cool       #7ad7ff   the dark stage's side source
  warm       #ffa25e   its opposite
  backgrounds  s1 #101116 · s2 #0b0c10 · s3 #05060a · s4 #121014 ·
               s5 #04050a · s6 #04040a · s7 #0a0b0f

HAZE. Three lobes, hz0/hz1/hz2, matched across every scene, so the room is
continuous under the cuts. Colours per shot are the shot's own key/fill:
amber + cool on the studio shots, cool + warm on the dark stage. They drift on
a linear position track — no pulse, no decay, sizes 900-2600 mm so they read
as LOBES against the near-black background, never as a full-frame wash.

POST. bloom -> unreal_bloom, grain/vignette -> film_grain, then fxaa last on
every shot to settle thin-edge crawl. prismatic_dispersion is authored ONLY
on the shots that carry chroma-split as a look (spread 0.01) — running it at
spread=0 elsewhere is a full-screen pass per frame doing nothing.

THE EXPOSURE LADDER. Bloom strengths sit BELOW the source page's and the
thresholds well above them, and that is a port decision, not a transcription
error: the page shaded with no lights at all and its bloom picks highlights
out of an already-dim frame, where this reel has real area lights shaping
real device hardware. What survived: ambient 0.09-0.16, one area key at
1.5-2.6, env intensity 0.16 (dark stage) to 0.5 (studio). Anything above that
and the reel stops being a dark reel.

FOG is per-shot, tinted to that shot's background (fog(color= near= far=),
near/far x100 like everything else). It is what stops each floor plane from
reading as a lit grey slab behind the subject.

CAMERA GRAMMAR. Every shot is one continuous move authored as a <frame>
track: explicit position/look_at rows, and a node= fill= row wherever the
shot lands on its device. The device landing is the added beat — the source
page never framed anything, so each shot has somewhere to arrive.

NO AUDIO. This is a primitives reel: no VO clips exist for it and no music is
authored, so there is no <audio> block. Add one at assembly time.
SPLIT FROM abstract.promo. This file is one of eight parts cut out of the
943 KB abstract.promo; the reel-level document that used to head that file is
now README.md in this directory. Scene bodies are byte-identical to the
original.

Capture: nx run tools:capture:webgl -- --project promos/primitives/scenes/abstract/abstract-coda.promo --width 1920 --height 1080
Preview: /packages/runtime/index.html?project=promos/primitives/scenes/abstract/abstract-coda.promo
Topic
scenes
Scenes
3
Kind
reference rig
//
    ABSTRACT · LOCKUP + PHYSICS CODA — shots 28-30 of the RICH-SCENES reel, and
    the part that closes it. The lockup lands, and two SOLVED shots close on the
    same phone.

    Every other shot in this reel is authored motion: a curve typed out as rows.
    These two are solved, and they are here because the plan listed them as
    impossible.

      #   scene              dur   transition   device            the shot
      28  s28-lockup         7.5   match-move   iphone+macbook    the lockup, the device family, one click
      29  s29-separation     8.0   match-move   iphone            one metaball body coming apart into eleven domes
      30  s30-slide-off      8.0   —            iphone+macbook    a baked sheet pulled off two devices by friction

      · SEPARATION (29) is one inverse-square metaball field, meshed by marching
        cubes — f(p) = SUM(w/|p-c|^2) - 1. Eleven <drop> centres pull apart and
        the necks that thin and break between them are not modelled; they are
        what the sum does as two centres separate. One `weight` track takes the
        field from one skin to eleven domes, so the shot re-times by editing four
        rows. `flatten=` intersects the half-space above the slab, which is what
        makes each drop the plano-convex dome and not a ball.
      · SLIDE-OFF (30) is position-based dynamics: structural, shear and bending
        constraints over a particle grid, collided against the real device
        geometry voxelised into a distance field. THE PULL IS NOT A FORCE — it is
        a grip on the +x edge translated 2.5 m, and the sheet uncovers the laptop
        first and catches on its lid because it is attached and because it rubs,
        not because either beat is authored.

    THE SOLVER IS BAKED — fixed timestep, fixed constraint order, seeded, run
    once into a per-frame buffer that update(t) reads — because this reel's hard
    rule is that a scrub, a re-render and a headless capture of one timecode
    agree, and a live-stepped solver gives a different sheet every seek. Same
    algorithm, made seekable.

    THE HANDOVER. All three shots carry `match=hero` on their iphone, so the
    device is on screen through both cuts and only the world around it changes.
    That match chain is why these three shots belong in one file: split between
    28 and 29 and the lockup's phone has nothing to hand to.

    THE TWO SET MATERIALS the coda adds — `slabstone` and `roomwall` — are the
    slab the droplets sit on and the devices stand on, and the only thing behind
    them. The wall exists so the sheet and the domes have something to be dark
    against instead of fogging out into nothing.
    THE UNITS. 1 page unit = 100 mm. The kit is fist-sized (a 100 mm chamfered
    cube, a 98 mm torus), the cameras sit 600-1200 mm out, and the devices render
    at true physical size — 159.5 mm of iphone standing next to a 100 mm cube is
    the whole reason the shots read as objects on a table rather than as
    graphics. Every length in this file is a millimetre.

    LOOK — shared across every part:
      ink        #e9e6df   dim  #7c7970   line  #23232a
      mark       #ffb347   the one accent; every emissive surface is this
      cool       #7ad7ff   the dark stage's side source
      warm       #ffa25e   its opposite
      backgrounds  s1 #101116 · s2 #0b0c10 · s3 #05060a · s4 #121014 ·
                   s5 #04050a · s6 #04040a · s7 #0a0b0f

    HAZE. Three lobes, hz0/hz1/hz2, matched across every scene, so the room is
    continuous under the cuts. Colours per shot are the shot's own key/fill:
    amber + cool on the studio shots, cool + warm on the dark stage. They drift on
    a linear position track — no pulse, no decay, sizes 900-2600 mm so they read
    as LOBES against the near-black background, never as a full-frame wash.

    POST. bloom -> unreal_bloom, grain/vignette -> film_grain, then fxaa last on
    every shot to settle thin-edge crawl. prismatic_dispersion is a