Sanic Boom

Visualizations

Audio-reactive visual effects

Visualizations react to your music in real-time. Add them to any pattern or sound.

Kaleidoscope

GPU-powered kaleidoscope with 8 distinct modes:

|> kaleidoscope(global: true)
|> kaleidoscope(mode: "spiral", arms: 4, global: true)

Modes

ModeBest ForDescription
classicGeneral purposePsychedelic patterns with organic blobs
spiralAmbient, dronesRotating logarithmic spiral arms
prismLeads, melodicGeometric facets with light refraction
bloomSlow builds, introsOrganic flower-like expansion
tunnelRhythmic, buildsDepth perspective with moving rings
fractalExperimentalSelf-similar recursive patterns
plasmaBass-heavyFluid lava-lamp interference
starburstDrops, climaxesRadiating lines from center

Common Parameters

All modes support these parameters:

|> kaleidoscope(
    mode: "classic",
    segments: 8,        // Symmetry (3–16)
    speed: 1.0,         // Animation speed (0.1–3.0)
    zoom: 1.0,          // Pattern scale (0.5–2.0)
    sensitivity: 1.0,   // Audio reactivity (0.1–3.0)
    hue_offset: 0.0,    // Base hue rotation (0.0–1.0)
    saturation: 0.85,   // Color saturation (0.0–1.0)
    brightness: 0.7,    // Overall brightness (0.3–1.0)
    global: true
)

Mode-Specific Parameters

Spiral

|> kaleidoscope(
    mode: "spiral",
    arms: 4,      // Number of spiral arms (1–8)
    twist: 2.0,   // Spiral tightness (0–5)
    pulse: 1.0,   // Bass pulse intensity (0–2)
    global: true
)

Prism

|> kaleidoscope(
    mode: "prism",
    facets: 6,        // Number of facets (3–12)
    refraction: 0.5,  // Chromatic split amount (0–1)
    sharpness: 0.5,   // Edge sharpness (0–1)
    global: true
)

Bloom

|> kaleidoscope(
    mode: "bloom",
    petals: 6,      // Number of petals (3–12)
    layers: 3,      // Depth layers (1–5)
    softness: 0.5,  // Edge softness (0–1)
    global: true
)

Tunnel

|> kaleidoscope(
    mode: "tunnel",
    rings: 10,    // Number of rings (3–20)
    depth: 1.5,   // Perspective depth (0.5–3)
    warp: 0.3,    // Angular distortion (0–1)
    global: true
)

Fractal

|> kaleidoscope(
    mode: "fractal",
    iterations: 5,   // Recursion depth (2–8)
    scale: 2.0,      // Iteration scale (1.5–3)
    rotation: 0.5,   // Rotation per iteration (0–1)
    global: true
)

Plasma

|> kaleidoscope(
    mode: "plasma",
    frequency: 5,     // Wave frequency (1–10)
    distortion: 1.0,  // Blob distortion (0–2)
    flow: 1.0,        // Animation flow speed (0–2)
    global: true
)

Starburst

|> kaleidoscope(
    mode: "starburst",
    rays: 12,      // Number of rays (4–24)
    glow: 0.5,     // Center glow intensity (0–1)
    flicker: 0.3,  // High-frequency flicker (0–1)
    global: true
)

Other Visualizations

Piano Roll

Displays notes as bars on a piano grid:

|> piano_roll(global: true)
|> piano_roll(cycles: 4, labels: true)

Waveform

Shows the audio waveform:

|> waveform(global: true)
|> waveform(color: "#00ff88", thickness: 2)

Spectrum

Frequency spectrum analyzer:

|> spectrum(global: true)
|> spectrum(bars: 64, color: "#ff0088")

Particles

Particle burst effects:

|> particles(global: true)
|> particles(count: 100, burst_on_note: true)

Global vs Local

Use global: true for full-screen background visuals:

// Full-screen kaleidoscope
[C3 E3 G3] |> kaleidoscope(mode: "plasma", global: true)

Without global, visualization appears in the pattern's track lane.

Examples

Ambient Spiral

let pad = [C3 E3 G3 B3]
    |> pad
    |> reverb(0.8)
    |> kaleidoscope(
        mode: "spiral",
        arms: 5,
        twist: 3.0,
        speed: 0.7,
        hue_offset: 0.2,
        global: true
    )

play pad

Bass-Reactive Plasma

let bass = [C2 _ G2 _]
    |> instrument("saw")
    |> lowpass(600)
    |> kaleidoscope(
        mode: "plasma",
        frequency: 6.0,
        distortion: 1.2,
        sensitivity: 1.5,
        global: true
    )

play bass

Drop Starburst

let drop = [G5 _ E5 _ D5 _ C5 _]
    |> instrument("square")
    |> kaleidoscope(
        mode: "starburst",
        rays: 16,
        glow: 0.8,
        flicker: 0.5,
        segments: 12,
        speed: 2.0,
        global: true
    )

play drop

Layered Visuals

Multiple patterns can have different visualizations:

let bass = [C2 _ G2 _]
    |> saw
    |> kaleidoscope(mode: "plasma", global: true)

let lead = [E5 G5 C6]
    |> sine
    |> kaleidoscope(mode: "starburst", rays: 12, global: true)

play bass
play lead

On this page