Skip to content

feat(registry): add the lt-neon-border lower third - #3108

Closed
miguel-heygen wants to merge 1 commit into
mainfrom
feat/primitive-neon-border
Closed

feat(registry): add the lt-neon-border lower third#3108
miguel-heygen wants to merge 1 commit into
mainfrom
feat/primitive-neon-border

Conversation

@miguel-heygen

Copy link
Copy Markdown
Collaborator

What

lt-neon-border: two arcs of light travel the edge of a rounded panel and snap corner to corner, trailing a three-layer bloom.

Why

We ship eleven lower thirds and not one of them has a travelling light. This is the same slot in a different register: precise and expensive rather than loud.

How

The traversal is closed form rather than accumulated, which is what makes it seekable. total = t / beat, corner = floor(total), and the arc head is the eased interpolation between two corner positions, each a pure function of an integer. No accumulator, no clock, no dt.

Three implementation choices worth flagging, since none is obvious from the diff:

Arcs are SVG dash offsets, not sampled polylines. Sampling exists in canvas implementations because canvas has no path-relative drawing; along an SVG path stroke-dasharray is exact. That also makes a minimum-arc-length clamp meaningless here, so there isn't one. The segmentation that remains (20 glow, 26 core) is for the opacity taper only: at 8 segments the filament stair-steps visibly.

The bloom widens the stroke before blurring. Blur alone reads as haze. Widening then blurring is what makes it read as emitted light.

Easing uses fixed 32-iteration bisection, not Newton, so the curve is bit-reproducible rather than convergence-dependent.

Nine variables, every number carrying explicit min, max and step.

Test plan

  • Unit tests added/updated
  • Manual testing performed
  • Documentation updated (if applicable)

hyperframes check passes: 0 errors, layout 0 issues across 9 samples, motion 0, contrast 0. Registry item lint 0 errors. oxfmt --check and check-large-files.sh clean.

Determinism verified by hash rather than by eye. Frame 71 at an off-beat time, PNG bytes SHA-256:

run1 seek     b2e2340f...   separate browser launch
run2 seek     b2e2340f...   separate browser launch
run3 stepped  b2e2340f...   timeline stepped 0..71
control: frame 78 differs from frame 71

The control matters: without it, three identical hashes would also be consistent with a static image. Eight frames at off-beat times were rendered and looked at; both arcs relocate frame to frame and stay diametrically opposed throughout.

A full render --strict-variables pass with all nine variables overridden produced 144 validated frames with cyan bloom, rounder corners, shorter arcs and faster travel, confirming every variable is wired.

Not covered

The contrast auditor reports 0/0 text checks, meaning WCAG contrast here is unverified rather than verified: it found no text nodes to audit. Legibility rests on the panel fill and text shadows, the same as the sibling lt-* blocks.

The file trips the 300-line advisory warning at 353 lines. Splitting the geometry, easing, taper and timeline into sub-compositions would make it harder to follow, and eight existing blocks run 1100 to 2900 lines.

Two arcs of light travel the edge of a rounded panel and snap corner to
corner, trailing a three-layer bloom. We ship eleven lower thirds and none
of them has a travelling light.

The traversal is closed form rather than accumulated, which is what makes
it seekable: total = t/beat, corner = floor(total), and the arc head is
the eased interpolation between two corner positions, each a pure function
of an integer. Seeking to frame N and playing to frame N produce the same
bytes, verified by hash across two separate browser launches with a
control frame to rule out a static image.

Arcs are SVG dash offsets rather than sampled polylines, which is exact
along a path and removes the need for a minimum-arc clamp. The bloom
widens the stroke before blurring, since blur alone reads as haze rather
than emitted light.

Nine variables, every number carrying explicit min, max and step.
@miguel-heygen

Copy link
Copy Markdown
Collaborator Author

Superseded by #3116, which carries all five video primitives in one PR as requested. Same commits, same verification; nothing dropped.

@miguel-heygen
miguel-heygen deleted the feat/primitive-neon-border branch August 9, 2026 15:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant