Repository navigation
feat(registry): filmed-screen curves, orbits and follows typing by default - #5499
Conversation
…fault New options, with defaults tuned on a white page filmed the way Vox shoots screens: - vignette (1.0, was a fixed 0.42) and aberration (2.2x, with a quarter of it kept on the focused text so it still reads as glass) - curve (0.15): a barrel bend normalised so the frame's corners stay put - led (0.45): the LED grid now only fades in once a cell spans ~4 output px; finer, it aliased into moire on light pages - tiltTo per shot: the tilt eases between the two, for an orbit - rack 0.3 (was 0.7), fast enough to follow text as it is typed, and shot blur 0.45 (was 0.9) The demo is now a white search homepage for a made-up engine, "lumen": a query types letter by letter while the camera follows each new letter and orbits from one side of the screen to the other, all on defaults. Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
Catalog preview media already refreshed on the CDN from this demo: the poster is this head's |
jrusso1020
left a comment
There was a problem hiding this comment.
Post-merge review of 433fe03e, which landed as 3886aaec: same parent, and the three files' patches are identical. No blocker. I'd have approved it. Two small clamps are worth a fix-forward, and nothing needs reverting.
1. Curve normalisation is correct.
-
s = s0·(1 + k|s0|²) / (1 + k|corner|²)maps the frame's corners to themselves. -
For every pixel in frame,
|s0|² ≤ |corner|², so the factor is ≤ 1. Each sampled ray therefore lies on the segment from the centre to the flat ray, and the curve can't show any of the page that the flat shot didn't. Fork ≥ 0the map is monotonic in radius, so nothing folds. -
What it costs is a zoom. At 16:9 with the default 0.15:
- the centre is magnified 1.156×;
- the top and bottom edge midpoints are pulled in about 10% (0.897);
- the side midpoints are pulled in about 3%.
(At 9:16 it's 1.049× in the centre.) So a framing that fit flat can lose content near the top or bottom centre edge, and this stacks with the shot's
zoom. It's worth one line in the README. -
Should-fix: clamp
curveat 0. A negative value makes the factor > 1, so it samples outside the flat frame, and at 16:9 the map folds below about −0.32.Math.max(0, …)where the uniform is set, or saying ≥ 0 in the docs.
2. Computing the vignette on s0 is the right choice. Vignetting is the camera's falloff in image space. On the curved s it would weaken toward the centre and change shape with curve. With curve: 0, s0 == s, so vignette: 0.42 reproduces the old look exactly.
- The new default is much stronger, though. At 16:9 the corners go from 62% to 10% brightness and the side midpoints from 76% to 43%. On a white page that reads as a lens; on a dark page the corners go black.
- Should-fix: above
vignette ≈ 1.11(16:9) the factor goes negative at the corners.colthen goes below zero before the scanline and grain terms are applied.col *= max(0.0, 1.0 - uVig * dot(v, v));fixes it.
3. Changing the defaults is acceptable without an opt-in.
- The registry copies the snippet into the project (
compositions/components/filmed-screen.html), so existing projects keep their copy and render exactly as before. Only a freshaddgets the new look. - #5487 landed earlier today, no release tag contains it, and the item is marked
experimental, so almost nobody has it yet. - One caveat for the README: passing the old values doesn't fully restore the old look. The old values are blur 0.9, rack 0.7, vignette 0.42, aberration 1, led 0.9, curve 0. But the LED fade-in threshold (cells spanning 2.2–4.5 px, now 4.0–6.5) and the quarter of fringing on the focused element are hard-coded.
aberrationalso scales the cut tear's fringing, so tears are 2.2× too. - A short "Previous look" line with those values would help anyone who liked #5487's version.
Also checked
tiltTounset giveslerp(a, a, x) == aexactly, so the rotation is unchanged.- A glide evaluates the previous shot past its end, and
smootherclamps, so it starts from that shot'stiltTo. Orbits chain correctly. - The LED grid's new fade-in (only once a cell spans ~4 output px) only fades the grid in later, so on light pages it can only alias less.
Tests and CI. filmed-screen.test.mjs passes 6/6 locally at 433fe03e. All 39 checks are green, and the required set is green with the Windows jobs skipped by path.
No render from me, so I haven't looked at the moiré or the lumen demo on screen.
— Rames
) * fix(registry): clamp filmed-screen's curve and vignette Post-merge review of heygen-com#5499: - curve is clamped at 0: a negative value samples outside the frame and folds over below about -0.32. - the vignette factor is clamped at 0: above vignette ~1.11 it went negative in the corners. - README: a "previous look" line with the pre-heygen-com#5499 values, noting that the LED fade-in threshold and the trace of fringing on the focused element are hard-coded. The demo renders the same: at the defaults neither clamp is reached. Co-Authored-By: Claude Opus 5.5 <[email protected]> * fix(registry): point filmed-screen's catalog page at its recorded preview The catalog builds this item's payload as unsupported (it needs canvas-draw-element), and without preview.video the page fell back to the flag notice: "Needs chrome://flags/#canvas-draw-element to render live" under a "Recorded preview" caption, with no video, whatever the visitor's flags. The manifest now names the CDN video and poster the way the liquid-glass blocks do; the regenerated page carries video= and poster= instead of needsFlag. Co-Authored-By: Claude Opus 5.5 <[email protected]> --------- Co-authored-by: Claude Opus 5.5 <[email protected]>
What
A follow-up to #5487. It adds four options to
filmed-screen, retunes its defaults, and replaces the demo. The defaults were tuned on a white page, filmed the way Vox shoots screens.vignetteaberrationcurveledrackblurtiltTotilttiltTo: the tilt eases fromtilttotiltToacross a shot. Two shots chained through a glide give one continuous orbit.rack0.3: fast enough for focus to follow text as it's typed.The demo
A white search homepage for a made-up engine, "lumen", with its own wordmark and copy. It's a neutral brand, so nothing here imitates a real site. A query types letter by letter: the camera follows each new letter while it orbits from one side of the screen to the other, and earlier letters soften as it moves on. Everything runs on the defaults; the mount passes no effect options.
Verified (CLI 0.8.147)
filmed-screen.test.mjs: 6/6, including the composite co-owner test, the second-mount test and the test that the demo's pasted library matches the snippet.lint-registry-items, oxlint and oxfmt are clean.checkpasses on the demo: no layout issues and 67/67 text checks at WCAG AA. Decorative chrome that sat permanently in the vignette (top links and the footer) was removed, because the audit read its contrast after the lens.The catalog poster and video will be refreshed on the CDN from this demo.
🤖 Generated with Claude Code