Skip to content
Docs
Open Promoeyes
glow-ribbons

glow-ribbons

GLOW RIBBONS — eight neon-line looks, each built only from the glow recipe (a dark base, roughness 1, metalness 0, the colour in the emissive), swept into tubes and ribbons. Companion to glow.promo and glow-lines.promo. Every scene keeps the "Ember" phone in the set.

Read the rig's notes
THE TOOL: <neon> (packages/engine/lib/neon-line.ts)
  neon#id(points="x y z, x y z, …" radius=R color=<dark> emissive=<hue> emissive-intensity=<×>)
  - the line passes THROUGH the points on a centripetal Catmull-Rom curve: smooth by
    construction, no handles, no overshoot. A route of points is all a line is.
  - `head` / `tail` (fractions of the length, channels): head 0 → 1 draws it on (R7);
    a short window running 0 → 1 is a light pulse travelling the line (R1, R2, R5 sparks:
    a thin white neon on the SAME points as its strand).
  - built once; head/tail move a draw range — nothing is rebuilt per frame.
  - travelling waves (R3, R8) are long STATIC strands sliding sideways by about a
    wavelength inside a group; their ends stay off-screen, so the wave seems to flow.
  mirror    source(factory=reflector-ground … mirror=1 unlit=true): a dark mirror floor.
            Reflections are NOT bloomed (the reflector is not a light material) — the
            mirrored lines read crisp under a soft real one, which is the look.
  The point lists for the braid, the band, the warp lines and the terrain were computed
  (frames, offsets, the height field) and pasted in; everything else is hand-written.

PALETTE (luminance-matched as in glow.promo: × ≈ 1.2 / L(hue), cooler ones a touch under).
  Dense bundles run at a fraction of it — R1 ×0.6, R5 ×0.55, R8 ×0.7, R3 ×0.8: a dozen
  overlapping strands at full strength bloom into one solid sheet.
  violet #8b5cff L 0.20 ×4.9 · magenta #ff3df0 L 0.31 ×3.9 · blue #2f6bff ×5.5 · cyan
  #7ad7ff ×2 · pink #ff3d7f ×4.6 · orange #ff8a3d L 0.40 ×3 · wire #dfe8ff L 0.81 ×1.5 ·
  green #39ff88 ×1.6

THE SCENES
  R1  BRAID      10 strands braided round a spline that coils once round the phone; sparks ride it
  R2  WARP       28 lines stream along the floor toward the lens and sweep up and out into walls
  R3  WAVES      7 travelling sine strands braiding in a void, sparkles drifting
  R4  SYNTHWAVE  a glowing wire terrain (grid + diagonals), sky arcs, a crystal and a dark orb
  R5  ARCH       a 14-strand band rising, flipping at the crest over the phone, coming down
  R6  PENTAGON   broken-corner pentagon frames; the lens flies to a magenta mouth
  R7  CROWN      green lines draw along the floor toward the phone, then rise as a blue fan
  R8  CORDS      five thick cords with flowing waves, on the mirror

Preview: http://localhost:4444/runtime?project=promos/primitives/materials/glow/glow-ribbons.promo
Scenes
8
Kind
reference rig
//
    GLOW RIBBONS — eight neon-line looks, each built only from the glow recipe (a dark base,
    roughness 1, metalness 0, the colour in the emissive), swept into tubes and ribbons.
    Companion to glow.promo and glow-lines.promo. Every scene keeps the "Ember" phone in the set.

    THE TOOL: <neon> (packages/engine/lib/neon-line.ts)
      neon#id(points="x y z, x y z, …" radius=R color=<dark> emissive=<hue> emissive-intensity=<×>)
      - the line passes THROUGH the points on a centripetal Catmull-Rom curve: smooth by
        construction, no handles, no overshoot. A route of points is all a line is.
      - `head` / `tail` (fractions of the length, channels): head 0 → 1 draws it on (R7);
        a short window running 0 → 1 is a light pulse travelling the line (R1, R2, R5 sparks:
        a thin white neon on the SAME points as its strand).
      - built once; head/tail move a draw range — nothing is rebuilt per frame.
      - travelling waves (R3, R8) are long STATIC strands sliding sideways by about a
        wavelength inside a group; their ends stay off-screen, so the wave seems to flow.
      mirror    source(factory=reflector-ground … mirror=1 unlit=true): a dark mirror floor.
                Reflections are NOT bloomed (the reflector is not a light material) — the
                mirrored lines read crisp under a soft real one, which is the look.
      The point lists for the braid, the band, the warp lines and the terrain were computed
      (frames, offsets, the height field) and pasted in; everything else is hand-written.

    PALETTE (luminance-matched as in glow.promo: × ≈ 1.2 / L(hue), cooler ones a touch under).
      Dense bundles run at a fraction of it — R1 ×0.6, R5 ×0.55, R8 ×0.7, R3 ×0.8: a dozen
      overlapping strands at full strength bloom into one solid sheet.
      violet #8b5cff L 0.20 ×4.9 · magenta #ff3df0 L 0.31 ×3.9 · blue #2f6bff ×5.5 · cyan
      #7ad7ff ×2 · pink #ff3d7f ×4.6 · orange #ff8a3d L 0.40 ×3 · wire #dfe8ff L 0.81 ×1.5 ·
      green #39ff88 ×1.6

    THE SCENES
      R1  BRAID      10 strands braided round a spline that coils once round the phone; sparks ride it
      R2  WARP       28 lines stream along the floor toward the lens and sweep up and out into walls
      R3  WAVES      7 travelling sine strands braiding in a void, sparkles drifting
      R4  SYNTHWAVE  a glowing wire terrain (grid + diagonals), sky arcs, a crystal and a dark orb
      R5  ARCH       a 14-strand band rising, flipping at the crest over the phone, coming down
      R6  PENTAGON   broken-corner pentagon frames; the lens flies to a magenta mouth
      R7  CROWN      green lines draw along the floor toward the phone, then rise as a blue fan
      R8  CORDS      five thick cords with flowing waves, on the mirror

    Preview: http://localhost:4444/runtime?project=promos/primitives/materials/glow/glow-ribbons.promo
promo#glow-ribbons(width=1920 height=1080 fps=30)
  materials
    standard#glow-bulb(color=#3a2a14 emissive=#ffd27a emissive-intensity=3 metalness=0 roughness=1)
    standard#glow-white(color=#0e1014 emissive=#dfe8ff emissive-intensity=1.5 metalness=0 roughness=1)
    standard#gw-deck(color=#100e14 metalness=0 roughness=0.85 envmap-intensity=0.04)
    standard#gw-plinth(color=#1d1b19 metalness=0.1 roughness=0.45 envmap-intensity=0.5)
    standard#rb-orb(color=#0a0f1c metalness=0.6 roughness=0.12 envmap-intensity=1.2)

  // =====================================================================================
  // SCREEN — glow.screens.html converted by scripts/html-screens.mts (as in glow.promo).
  // =====================================================================================
  template#t-gw-phone
    card#gw-phone(x=0 y=0 w=71 h=154 r=9.1 fill=#0d0b09 shadow=false)
      card(x=0 y=0 w=71 h=154.02 r=9.1 fill=#0d0b09 clip=true)
        text(x=6.19 y=5.83 size=2.91 weight=600 color=#f5efe6 origin=left font_family=Inter w=5.75 wrap=false) "9:41"
        icon(x=53.34 y=4.28 size=3.09 set=ta