01 // LIVE

Five Worlds, One Engine

These are Orpheus's own fragment shaders, translated from Qt to WebGL and running right here — same maths, same 32 bands, same spectrum history. Cycle through them.

Prism — a spectrum city on a winding road
Drive it ·

The pace buttons change the tempo the world travels at. LIVE AUDIO hands the shader your microphone, so it reacts to whatever you are actually playing.

02 // THE PARTS

How It Works

Nine pieces, one sentence each.

01orpheusd

A Python service that owns the TIDAL session, the queue and the position — so the interface can be restarted without stopping the music.

02tidalapi

Signs in and resolves streams, at the best quality the account allows.

03mpv

Does the decoding, driven over a JSON socket, with its own media controls switched off so it never fights for the desktop's attention.

04cava

Turns the output into 32 bands, 30 times a second — 60 when the fullscreen stage is open.

05Service.qml

The engine: computes spectral flux, finds the beat, and keeps every surface fed from one place.

06The estimator

Autocorrelates six seconds of that flux once a second to work out the tempo.

07flow

Distance, integrated on the CPU — so a tempo change bends the motion instead of teleporting the world.

08history

A 32×40 texture holding the last second of spectrum, so Prism and Horizon can build terrain out of the past without the CPU ever seeing it.

09Viz.qml

Packs bands, peaks, beat, flow and the live theme colours into one uniform block and hands it to the shader.

03 // IN THE APP

Where It Actually Lives

Everything above runs in a browser. This is the same engine in its real home.

The visualizer sits in the right-hand rail of the player, sized in columns and rows of the desktop font rather than pixels. Every colour is a theme token read live from the shell, so switching themes retextures the player and the shader in the same frame.

Real capture: Skyline reacting live in the player's rail.