DANCY ANTS Open the instrument →

Home

Play Shadertoy and ISF shaders live, with the music

Dancy Ants imports fragment shaders — ISF, Shadertoy and plain GLSL — and plays them like its own scenes: on the decks, under the effects, with Autopilot, full screen on a projector. Here's what maps to what, how to make a shader hear the music, and what doesn't work yet.

By Updated

In short: in the app, open the shader importer and paste the code (or load a .fs, .isf, .glsl, .frag or .txt file). The format is detected for you. Your shader then sits beside the 40 built-in scenes, and anything you can do to a scene — decks, crossfader, effects, Autopilot — works on it.

What it accepts, and what maps to what

FormatRecognised byWhat you get
ISFThe JSON header (ISFVSN, INPUTS…) The first four number or on/off inputs become the four knobs. Name, credit and description are read from the header.
Shadertoyvoid mainImage(...) Runs as written. The Motion knob scales iTime; Shadertoy declares no other inputs.
Plain GLSLvoid main() A last resort for fragment shaders in neither format.

Helper functions that clash with the built-in library (everyone writes their own rot() and hash12()) are renamed automatically, so the shader keeps using its own versions.

Making a shader hear the music

A Shadertoy shader doesn't react to sound by itself: Shadertoy's audio comes in through texture channels, and those aren't available here (see below). But every imported shader can read the same live audio the built-in scenes use:

UniformWhat's in it
u_audio (vec4)bass, mid, high, overall level — 0 to 1, live
u_hits (vec4)bass hit, mid hit, high hit, beat — pulses on each onset
u_beat (float)0 → 1 through the current beat
u_bar (float)0 → 1 through the current bar

A minimal Shadertoy-style example — a ring that grows with the bass and flashes on the beat:

void mainImage(out vec4 fragColor, in vec2 fragCoord) {
  vec2 uv = (fragCoord - 0.5 * iResolution.xy) / iResolution.y;
  float bass = u_audio.x;                 // live, 0 to 1
  float r = length(uv);
  float ring = smoothstep(0.02, 0.0, abs(r - 0.2 - 0.25 * bass));
  float flash = 0.6 + 0.4 * u_hits.w;     // pulses on the beat
  fragColor = vec4(vec3(ring * flash), 1.0);
}

Paste a shader like that into the importer and it moves with the music straight away — this one was checked against the importer and compiles. On top of it, the effects, the crossfader and Autopilot behave exactly as they do with any built-in scene.

What doesn't work (yet)

If a shader can't be converted, the importer tells you why. The substitutions above happen quietly, so check the result full screen before a gig.

Licences: read this before a paid gig

A shader belongs to the person who wrote it and carries their licence. Shadertoy's terms put shaders under CC BY-NC-SA 3.0 unless the author says otherwise — which means non-commercial. Playing one at a party at home is one thing; playing it at a gig you're paid for needs the author's permission.

The built-in scenes are ours and are covered by your Dancy Ants licence. Imported shaders aren't — see the terms.

Tips

Try it on your own screen

Open it in Chrome, Edge or Brave on a laptop. No account, nothing to install — the free version carries the Dancy Ants mark.

Keep reading