glslop
[ CC0 shader vibe commons · everything here is public domain ]
experimental backend WebGL2 · not opted in
Enable WebGPU controls in settings. WebGL2 remains unchanged.
preview clip · live controls are optional this browser needs the main-thread fallback, which may freeze the page.
params (28)
1.00
0.19
0.70
0.30
0.21
0.55
9.00
0.55
0.55
1.00
0.85
0.55
0.55
240.00
0.45
3.00
0.50
0.30
0.35
0.35
0.35
0.45
0.06
0.35
0.55
1.00
0.30
1.35
.fs source · isf not running

Insert Disc

#3re0shm3
⑂ fork it{ } json

The bouncing DVD logo, on a tube. The motion is closed form - nothing is integrated and no state is kept between frames, because a bounce inside a box is just a triangle wave: bounce(t,r) = |mod(t,4r) - 2r| - r, which ping-pongs across [-r,r] with period 4r. Each half period is exactly one wall hit, so the number of bounces so far is floor(t/2r), and that counter summed over both axes is what picks the colour. A corner is simply both axes arriving at an extreme in the same instant, and when they do the logo's own phosphor bloom swells and reaches further for the fraction of a second it is there - a local reward rather than a full-screen flash, deliberately, since a screen-wide strobe is a photosensitivity hazard and would white out the one thing worth watching - but that is a congruence rather than luck. Writing u = t/2r, x reaches a wall when u = -startX/2 (mod 1) and y when ratio*u = -startY/2 (mod 1), and those are simultaneously satisfiable only if startY = ratio*startX. The defaults satisfy it, so this really does land the corner, exactly, every 38 seconds; nudge either start off that relation and it becomes the thing that never quite happens, which is the more authentic screensaver and the less rewarding shader. Being closed form buys the thing that actually sells it as a CRT: phosphor persistence. Because position is a function of time rather than a running total, the shader can ask where the logo WAS a few milliseconds ago and draw it again, fainter, carrying the colour it had then - so a trail falls out of the maths instead of needing a feedback buffer, and just after a bounce it still shows the previous colour fading out, which is what a real tube does. The logo is signed distance fields rather than a texture: each D is a flat-sided stem unioned with the right half of an ellipse and then hollowed by the same function at a smaller radius, which gives it a D-shaped counter and an even stroke weight all the way round; the V is one stroke mirrored by folding x, with its apex dropping toward the disc; the disc is a wide flat ellipse with its hole punched out; and the whole wordmark is sheared to give it the italic lean. Everything after that is the television. The picture is bent onto a curved glass face first, so the logo, the scanlines and the grille all ride on the bend rather than being pasted flat over it - which is the difference between a CRT and a filter. Then it is scanned in lines, split into an aperture grille of three phosphor stripes, glowed by an exponential in the distance field, misconverged so the three guns do not quite land together and the error grows toward the edges, rolled by a mains-hum band, dusted with static, dimmed at the corners, and finally cropped by the tube's rounded bezel with a glare sitting on the glass in front of it. Twenty-eight controls: speed, logo size, the velocity ratio, expressed relative to the play area's own aspect so that it works as a corner dial - at 1.0 the axes reach their walls in step and the logo runs corner to corner forever, at any p/q it lands a corner every q bounces of x, and at an irrational value it never corners at all, where it sets off from on each axis, phosphor persistence with the number of echoes and their spacing, phosphor bleed, the corner bloom, colour saturation, glass curvature, scanline depth and count, aperture grille strength and pitch, gun misconvergence, interlacing that draws the odd lines from half a frame earlier - literal rather than faked, since the motion is closed form - line-to-line sync jitter, a head-switching tear that drifts along the bottom, a multipath ghost of the signal arriving twice, composite dot crawl keyed to the distance field so it only appears where there is an edge, static, mains flicker, vignette, the bezel crop, glass glare and overall brightness.

#DVD#Disc#Movie#Retro#Screensaver#TV#Televisiongeneratorcrtretroscreensaverdvdsdftelevision2d
by ksinwitnessed_generationmade with ClaudeCC0-1.0credit: CC0activecreated 2026-08-31 06:33Z127 views0 forks28 paramsClaude-Opus-5
export clip · render a video in your browser

Renders to video in your browser (no upload), stepping the real renderer frame by frame so multipass + feedback come out right. motion auto-animates the shader's own knobs — each export rolls a fresh take (🎲 re-roll, 🔒 to pin one you like). GIF is slower with a tighter length cap; MP4/WebM are faster. Some devices record in real time (noted below if so) — keep the tab visible.

caps: ≤1920 per side, ≤60fps, ≤18000 frames (GIF ≤300)
embed · drop this shader into any page
preview ↗

Renders client-side in the reader's browser (CC0 — no attribution required, but the backlink is appreciated).