VISR
VISR turns sound into moving images, live. Scenes are little GPU programs that listen: bass makes things swell, highs make them shimmer, the beat makes them hit. You can jam with it, compose full music videos on a timeline, render them to MP4, or hand someone a link that plays a finished show.
SIXTY SECONDS
- Give it sound. Drop an audio file anywhere on the page — or press AUDIO ▾ → DEMO for the built-in groove, MIC for an instrument or voice, TAB to listen to another browser tab (Spotify, YouTube…), URL… to fetch a hosted track.
- Flip through scenes. Press keys 1–9 or click the scene tabs. FACTORY ▾ holds the shipped scenes, grouped (tunnels & space, fluid & smoke, geometry, nature, party, signal) — type in the find box to narrow, click to add one to your bank, and star the ones you keep reaching for so they sit at the top.
- Shape it. The left sidebar is live: every slider changes the picture now. Each scene brings its own controls; AUDIO / OUTPUT / MEDIA FX are always there.
- Ask for anything. The ✦ AI button (bottom right) is the fastest path to everything below: “make a scene like rain on neon streets”, “build a music video for this track”, “make it hit harder on the kick”.
IF SOMEONE SENT YOU A LINK
You probably saw a title and one big ▶ PLAY. That was a complete show — a song plus a scripted timeline of scenes. Press play, it runs fullscreen (Esc leaves fullscreen; the show keeps going). Everything on this page is what you can do after that: the whole studio is sitting behind the show, yours to poke at.
THE BIG PICTURE
Sound flows left to right: source → analysis → everything that moves.
// @var GLOW 0 1 0.5 halo strength becomes a sidebar slider. CROSSFADE sets how scenes blend into each other.0:32 cue WAVE TUNNEL · 1:07 set vv0 0.9 · 0:55 ramp vv0 -> 0.9 over 12.
Press ● while playing and your live scene cuts and slider moves are recorded onto it.
TL makes playback follow the sheet. This is the difference between jamming and composing.THE ✦ AI, PROPERLY
The drawer at bottom right speaks the whole app. Things people actually say to it:
- “make me a scene like embers rising off a campfire” — it writes and compiles the shader live
- “analyze this track, then build a music video: calm intro, hit hard when the drums land”
- “more contrast, slower colors, and make the kick punch the zoom”
- “play from 2:18 so we can check the chorus”
- “fix this shader I pasted” — it reads the compile error and repairs it
It has ears (full-track analysis), hands (every slider, scene, and timeline verb), and taste. Give it verbs.
SHARING — LINKS THAT PLAY
| link | what the recipient gets |
|---|---|
?scene=NAME | the app with that factory scene already running |
?audio=URL | a track pre-loaded (any CORS-open host) |
?load=URL | a scene, project, or set file fetched and opened — a project with its own song becomes a full show: splash, progress, one big PLAY, fullscreen |
?load=name | shorthand — bare names resolve to this site's show bucket |
?p=CODE | a cloud save — a project, scene, or shader saved from FILE ▾, opened on any device |
The easy way: your library. FILE ▾ (top left) works like any app's File menu: OPEN… browses everything you've saved — projects, scenes and shaders, filterable, newest first — and one click loads it. SAVE updates the project you're working on; SAVE AS… names a new one. Sign in with Google (also in FILE ▾) makes that library follow you to every device; without an account, saves still work with the site passphrase and live in this browser's list. Anything you saved before signing in claims into your library automatically.
Sharing is what links are for: the ⧉ beside any item copies a ?p= link, and the
OPEN dialog takes a pasted link at the bottom, so a friend's scene drops straight into your session.
FILE ▾ → EXPORT… downloads files instead: a scene (.scene.json), the whole session
(.project.json — bank + timeline + settings, and it remembers a URL-loaded track),
or a set (.set.json — a playlist of song+project pairs that plays through like an album).
Host the files anywhere CORS allows and link with ?load=.
JAMMING HARDWARE
- MIDI — pads cue scenes 1–9; LEARN binds any knob/fader on your controller to any slider (persists). Knob rides record to the timeline.
- CLOUD AUDIO… (AUDIO ▾, signed in) is your track library: browse and load what you've uploaded, or UPLOAD… a new one. Tracks play from your storage on every device, and a project saved with one streams it in share links — the whole show, self-hosted end-to-end. A project always remembers its song: uploaded tracks come back automatically, and a project saved over a local file is reunited with the matching upload by name when you open it.
- MIC uses a real input picker — an audio interface or a loopback device (BlackHole) works like any mic, with voice-call processing switched off because it eats music.
- Per-channel taps: a multichannel device (an interface, BlackHole 16ch) turns MIC into a patchbay — channels 1/2 are the mix, and every channel appears as a modulation source ch1..chN (right-click a slider to route one; meters live in AUDIO ▾). Route your DAW's kick bus to channel 3 and ch3 is the kick.
- TAP the tempo or type the BPM — synced LFOs and AUTO-DJ run on that clock.
KEYS
| 1–9 | cue scenes |
| Space | play / pause the track |
| Esc | leave fullscreen |
| right-click a slider | modulation menu |
GOOD TO KNOW
- Everything lives in your browser — nothing uploads anywhere. Saving to a file is the only way work leaves the page.
- Phones: full app works, sidebar starts folded (handle at the left edge); iPhones can't fullscreen a web page, so shows play in-page.
- Hosting your own tracks/projects: the host needs a CORS policy allowing GET from this origin (R2/S3: one JSON rule; gist raw links just work).
- The ✦ AI needs a key or passphrase (⚙ in its drawer) — recipients of share links don't need one to watch shows.