Skip to content
Docs
Open Promoeyes
camera-transitions

camera-transitions

Transition primitives — every way the engine can get from one scene to the next, one scene per transition, each one NAMED on screen.

Read the rig's notes
This is the reference catalogue. `promos/primitives/transition-lens/` covers
the same camera programs as a story with the transitions deliberately unnamed;
here the transition IS the subject, so every scene rig holds dead still and
the only motion in a gap is the transition itself.

There are TWO independent axes, and a scene attr for each:

  transition=          HOW the two scenes hand off (engine picks a code path)
  transition-camera=   WHAT the camera does during the gap (a pose program
                       layered on top, identity at both ends, so it composes
                       with any of the above and always lands exactly on the
                       next scene's authored camera)

ACT 1 · the handoff types — transition=
  1. none        hard cut, no gap at all
  2. match       run-on morph: shared ids lerp pose/scale/colour across the
                 gap, non-matched elements cross-fade under them.
                 (match-move / magic-move / matchmove are ALIASES of this one
                 behaviour, not separate transitions. The particle variant,
                 morph="particles" on a pair, has its own reel:
                 promos/primitives/match-morph/)
  3. through     fly INTO an element of THIS scene; its silhouette becomes a
                 window onto the next one. REQUIRES through="<node-id>"
                 naming a node in this scene.
  4. emerge      the mirror: an element of the NEXT scene starts engulfing the
                 lens and the camera pulls back OUT of it, so this scene
                 collapses into that element. REQUIRES through="<node-id>"
                 naming a node in the FOLLOWING scene, which must be on screen
                 and opaque at that scene's t=0 (here: its puck).
  Everything else (dissolve/fade/shatter/glitch/…) collapses to a plain
  crossfade and is banned by the house rules, so nothing demos it.

ACT 2 · the camera programs — transition-camera=, all twelve, each carried
over a transition=match gap so the morph gives the move something to hold:
  whip-left · whip-right · whip-up · crash-in · crash-out · roll-360 ·
  orbit-360 · look-up · rack-focus · foreground-whip ·
  foreground-whip-left · foreground-whip-right
(foreground-whip is the bare form: it takes its side from
transition-camera-direction, which the two suffixed names hard-code.)

Continuity machinery, so every gap has something to carry: three matched
glow-sprite haze lobes (match hz0/hz1/hz2) and one matched puck (match puck —
the same disc, re-posed and re-coloured per scene) ride every cut. The puck
doubles as the emerge anchor in scene 5, which is why it is opaque from local
0 in every scene.

Veil trap: under a RUN-ON transition (match) a non-matched element must not
fade in during the gap, or it ghosts over the outgoing scene. Every label
after a match gap therefore enters at (its INCOMING gap + 0.15s), which is
why the entry times differ scene to scene — they are not arbitrary.
`through` and `emerge` are exempt and deliberately break the pattern: they
composite the incoming scene THROUGH a mask rather than overlaying it, so
there is nothing to ghost. Scene 4's label enters at 0.2s so the through
window has something to reveal, and every scene's puck is opaque from 0
because scene 5's is scene 4's emerge anchor.

Wall clock: 17 scenes, 44.80s + 11.00s of gaps = 55.80s.
Preview: /packages/runtime/index.html?project=promos/primitives/camera-transitions/camera-transitions.promo
Scenes
17
Kind
reference rig
//
    Transition primitives — every way the engine can get from one scene to the
    next, one scene per transition, each one NAMED on screen.

    This is the reference catalogue. `promos/primitives/transition-lens/` covers
    the same camera programs as a story with the transitions deliberately unnamed;
    here the transition IS the subject, so every scene rig holds dead still and
    the only motion in a gap is the transition itself.

    There are TWO independent axes, and a scene attr for each:

      transition=          HOW the two scenes hand off (engine picks a code path)
      transition-camera=   WHAT the camera does during the gap (a pose program
                           layered on top, identity at both ends, so it composes
                           with any of the above and always lands exactly on the
                           next scene's authored camera)

    ACT 1 · the handoff types — transition=
      1. none        hard cut, no gap at all
      2. match       run-on morph: shared ids lerp pose/scale/colour across the
                     gap, non-matched elements cross-fade under them.
                     (match-move / magic-move / matchmove are ALIASES of this one
                     behaviour, not separate transitions. The particle variant,
                     morph="particles" on a pair, has its own reel:
                     promos/primitives/match-morph/)
      3. through     fly INTO an element of THIS scene; its silhouette becomes a
                     window onto the next one. REQUIRES through="<node-id>"
                     naming a node in this scene.
      4. emerge      the mirror: an element of the NEXT scene starts engulfing the
                     lens and the camera pulls back OUT of it, so this scene
                     collapses into that element. REQUIRES through="<node-id>"
                     naming a node in the FOLLOWING scene, which must be on screen
                     and opaque at that scene's t=0 (here: its puck).
      Everything else (dissolve/fade/shatter/glitch/…) collapses to a plain
      crossfade and is banned by the house rules, so nothing demos it.

    ACT 2 · the camera programs — transition-camera=, all twelve, each carried
    over a transition=match gap so the morph gives the move something to hold:
      whip-left · whip-right · whip-up · crash-in · crash-out · roll-360 ·
      orbit-360 · look-up · rack-focus · foreground-whip ·
      foreground-whip-left · foreground-whip-right
    (foreground-whip is the bare form: it takes its side from
    transition-camera-direction, which the two suffixed names hard-code.)

    Continuity machinery, so every gap has something to carry: three matched
    glow-sprite haze lobes (match hz0/hz1/hz2) and one matched puck (match puck —
    the same disc, re-posed and re-coloured per scene) ride every cut. The puck
    doubles as the emerge anchor in scene 5, which is why it is opaque from local
    0 in every scene.

    Veil trap: under a RUN-ON transition (match) a non-matched element must not
    fade in during the gap, or it ghosts over the outgoing scene. Every label
    after a match gap therefore enters at (its INCOMING gap + 0.15s), which is
    why the entry times differ scene to scene — they are not arbitrary.
    `through` and `emerge` are exempt and deliberately break the pattern: they
    composite the incoming scene THROUGH a mask rather than overlaying it, so
    there is nothing to ghost. Scene 4's label enters at 0.2s so the through
    window has something to reveal, and every scene's puck is opaque from 0
    because scene 5's is scene 4's emerge anchor.

    Wall clock: 17 scenes, 44.80s + 11.00s of gaps = 55.80s.
    Preview: /packages/runtime/index.html?project=promos/primitives/camera-transitions/camera-transitions.promo
promo#camera-transitions(width=1280 height=720 fps=30 coordinate-system=world-y-up)
  // ==================================================================
  // ACT 1 · THE H