Ruby DSL / Audio Analysis / Browser Renderer

Vizcore

Ruby DSL for audio-reactive VJ visuals.

Vizcore connects scene definitions, FFT analysis, beat detection, MIDI control, and WebSocket streaming into one Ruby-first workflow for live visuals.

Scene DSL Ruby-first show files Realtime FFT, beats, MIDI Browser GLSL and canvas output
$ gem install vizcore $ vizcore start examples/basic.rb > open http://127.0.0.1:4567
Signal chain

Signal Chain

Turn sound into frames, then frames into light.

Analyze microphones, WAV, MP3, FLAC, dummy sources, and MIDI events, then stream amplitude, frequency bands, BPM, beats, and scene data into the browser renderer.

Input mic / file / dummy / MIDI
Analyze amplitude / FFT / bands / beat
Render GLSL / video / particles / spectrogram
Animated Vizcore demo where detected beats expand concentric rings
readme_demo.rb: beat_pulse -> ring radius

Scene DSL

Write the show structure in Ruby.

Define layers, shaders, transitions, and audio mappings with a Ruby DSL. Connect peaks, low-end pressure, high-frequency motion, and beat counts directly to visual parameters.

  • Use scenes and transitions to script the flow of a live set.
  • Map frequency_band, amplitude, and beat? into visual parameters.
  • Switch scenes and tune intensity with MIDI notes and CC values.
Vizcore.define do
  scene :drop do
    layer :bg do
      shader :kaleidoscope
      effect :glitch
      map frequency_band(:low) => :rotation_speed
      map frequency_band(:high) => :effect_intensity
    end

    layer :storm do
      type :particle_field
      count 9000
      blend :add
      map amplitude => :speed
      map beat? => :flash
    end

    layer :scope do
      type :waveform
      source :audio
      style :ribbon
      map amplitude, to: :height
    end

    layer :waterfall do
      type :spectrogram
      scroll :vertical
      map amplitude, to: :gain
    end

    layer :rings do
      circle count: 8 do
        radius 100
        map bass, to: :radius
      end
    end

    layer :footage do
      type :video
      file "assets/loop.mp4"
      map beat? => :invert
    end
  end
end

Show Files

Scenes you can launch now.

Start with a wireframe cube, beat-synced drops, file playback, MIDI switching, and custom GLSL scenes built for pre-show testing.

readme_demo.rb

One beat mapping expands concentric rings.

vizcore start examples/readme_demo.rb --audio-source file

intro_drop.rb

A beat-counted transition from intro into drop.

vizcore start examples/intro_drop.rb

complex_audio_showcase.rb

Layered rings, grid, particles, wireframe, and glitch energy.

vizcore start examples/complex_audio_showcase.rb --audio-source file

Install

Boot it with Ruby 3.2+.

Install PortAudio and ffmpeg on macOS, or libportaudio and ffmpeg on Linux, then add the gem. fftw3 is optional and speeds up FFT analysis when it is available.

gem install vizcore
vizcore start examples/basic.rb

# macOS
brew install portaudio ffmpeg
brew install fftw

# Ubuntu / Debian
sudo apt install -y libportaudio2 libportaudio-dev ffmpeg
sudo apt install -y libfftw3-dev