Neon Sign

A glass neon tube stutters alive segment by segment, buzzes off once, then holds lit with a glow on the wall

Installation
$ pnpm dlx shadcn@latest add @remocn/neon-sign

Usage

NeonSign renders an SVG path as glass neon tubing on a dark wall. The unlit glass is visible from the first frame. Each subpath of the path is its own tube: tubes switch on one after another, flicker for 7 frames, then hold. Once everything is lit, the whole sign drops out for a few frames like a bad transformer and comes back for good. A lit tube has four layers: a wide blurred glow, a tight halo, the colored tube and a thin hot core. A soft glow on the wall behind follows the average brightness of the sign.

tsx
import { NeonSign } from "@/components/remocn/neon-sign";
 
export const LogoSting = () => <NeonSign color="#E5322D" glowColor="#E5322D" />;

With no props it writes a handwritten "hello" with an underline swash. To use your own mark or word, pass monoline path data in path. Every M command starts a new tube, so split the artwork where you want separate segments to light:

tsx
<NeonSign
  path="M 10 80 L 50 10 L 90 80 M 30 50 L 70 50"
  strokeWidth={5}
  color="#4DE1FF"
  glowColor="#4DE1FF"
/>

strokeWidth is in path units, so match it to your path's scale. Without a viewBox the sign frames the path's bounding box with padding of six stroke widths. The sign is scaled to fit of the frame width, and never taller than 70% of the frame. Flicker comes from Remotion's seeded random(), so the same seed always renders the same frames.

Each tube renders two blurred copies, so very long paths with many subpaths are heavier to render than the default.

Timing

At 30 fps, speed={1} and the default six-tube path:

FramesMotion
0Unlit glass tubes on the dark wall
3–22Tubes switch on roughly every 3.4 frames, each with up to 2 frames of seeded delay
each onset + 7Each tube flickers for 7 frames, then holds lit
29–32The whole sign drops out and stutters back on
32–40The wall glow settles to full strength

The buzz is fixed at frames 29–32. With more than six or seven tubes the last ones are still switching on when it hits, so allow for about 3.4 frames per extra tube. The docs preview runs 70 frames. speed scales the timeline.

Props11

PropTypeDefault
path
stringhandwritten "hello"

SVG path data for the tubes; each subpath (M command) lights on its own

viewBox
string—

viewBox for the path; defaults to the path's bounding box padded by six stroke widths

color
string"#E5322D"

Tube color when lit

glowColor
string"#E5322D"

Halo around the tubes and the glow on the wall

tubeColor
string"#2A2A2A"

Unlit glass tube

coreColor
string"#FFFFFF"

Hot core inside a lit tube

backgroundColor
string"#111111"

Full-frame wall

strokeWidth
number6

Tube thickness in path units

fit
number0.62

Share of the frame width the sign spans, capped at 70% of the height

seed
number7

Seeds each tube's onset delay and flicker pattern

speed
number1

Playback multiplier

  • pathstring

    SVG path data for the tubes; each subpath (M command) lights on its own

    Defaulthandwritten "hello"

  • viewBoxstring

    viewBox for the path; defaults to the path's bounding box padded by six stroke widths

  • colorstring

    Tube color when lit

    Default"#E5322D"

  • glowColorstring

    Halo around the tubes and the glow on the wall

    Default"#E5322D"

  • tubeColorstring

    Unlit glass tube

    Default"#2A2A2A"

  • coreColorstring

    Hot core inside a lit tube

    Default"#FFFFFF"

  • backgroundColorstring

    Full-frame wall

    Default"#111111"

  • strokeWidthnumber

    Tube thickness in path units

    Default6

  • fitnumber

    Share of the frame width the sign spans, capped at 70% of the height

    Default0.62

  • seednumber

    Seeds each tube's onset delay and flicker pattern

    Default7

  • speednumber

    Playback multiplier

    Default1