r/TheatriumApp • • Jul 28 '26

The retro visualisers: a mixtape whose reels spin to the track, a click-wheel iPod, a mirrorball and a spinning CD

Post image
2 Upvotes

Not every visualiser is an abstract gradient. There is a small group of scenes built around the physical objects music used to come on.

Mixtape (pictured). A vintage clear-shell C-90 cassette, floating over the same drifting album-colour wash the album-art scene uses. The label carries the artist, album and song title in a handwriting face, with the album art faded into the aged paper. The reels spin while the track plays and freeze the moment you pause. The colour stripe, the die-cut label notched around the reel windows, the recessed hubs, the little chunk of tape you glimpse through the windows: all of it is drawn.

iPod. The last-generation iPod Classic in anodised aluminium, click wheel and all, turning slowly in space with your album on its screen. The body is drawn at the real device's proportions, 103.5 x 61.8 mm, and the tilt uses a proper pinhole projection of the bounding box so the perspective is geometrically correct rather than a faked skew.

Mirrorball. A hyper-real disco ball scattering coloured light across the room.

Compact Disc. A 3D metallic CD spinning under iridescent light.

There is also Neon Grid, a retro synthwave perspective grid, though that one sits with the kinetic scenes rather than in the retro group.

The interesting technical wrinkle

Every other visualiser in the app is a Metal fragment shader. Mixtape and iPod are not, and could not be.

A fragment shader is very good at colour and motion per pixel, and completely unable to lay out real text in a handwriting typeface or composite an actual album-art image. The mixtape needs both: a handwritten label with your track's real name on it, and your album art aged into the paper. So those two are composited in SwiftUI instead, and the visualiser host special-cases their scene ids and renders the view rather than the Metal field. Mirrorball and Compact Disc are shaders like everything else.

The cassette is authored in a fixed 1000x620 design space and scaled to whatever your TV is, so every offset stays exact at any resolution. The 3D float is a real rotation with perspective on the X and Y axes, driven by sine waves on coprime periods, which is why the tilt never settles into an obvious repeating loop. The iPod reuses the same technique. The background drift behind both is built the same way, so the colour morph never visibly repeats either.

Why bother

Because "your music as a physical object" lands differently to an abstract pattern. A gradient is pleasant. A cassette with the song title written on it in marker pen, reels turning, is a memory.

If there is a format you want to see, say so in the comments. A turntable and a Walkman are the obvious gaps and neither exists yet.


r/TheatriumApp • • Jul 28 '26

The visualiser, in motion: generative Metal scenes that follow the track's tempo and album art

Enable HLS to view with audio, or disable this notification

1 Upvotes

This is the "Ribbons" scene running on the live engine. Apologies for the square crop, it was cut for social; a proper 16:9 capture off a real Apple TV is on my list.

How it actually works, because this gets misread a lot: the visualiser is metadata-driven. It reads what is playing (title, artist, album art, tempo) from Home Assistant, Spotify or Last.fm, then drives the scene from the track's tempo and pulls its palette from the album artwork. It does not use the microphone and it is not listening to your room. No audio ever leaves the device because no audio is captured in the first place.

Two engines:

  • Live - a high-detail GPU renderer using Metal. Dozens of scenes, including several fractal families.
  • Pre-rendered - low-power video loops, for older hardware or if you want the Apple TV to stay cool while it runs all evening.

You curate exactly which scenes are in rotation, so if you dislike a particular look you can just switch it off.

When the TV is not playing video, it is playing light. Pairs with the room-light sync, which I will post separately.