π΅ Vibe-Coded Plugin β This entire project was built with Claude Opus 4.6 using the audio-plugin-coder framework. I (the author) have no development experience β I provided the ideas and instructions, and AI wrote every line of code. This is a vibe project and will continue to be developed this way.
Contributions welcome! Feel free to report issues, request features, or submit pull requests. Just know that all future development will continue through AI-assisted vibe coding.
A guitar looper audio plugin with a modern WebView UI. Record, layer, and loop with a minimal, musician-friendly interface.
![]() MIDI / Key Mapping |
![]() Metronome |
![]() Default UI |
- Loop Level Knob β Controls how much of the previous loop is retained during overdub. 100% = fully additive, lower values = gradual decay
- Multi-Layer Overdub β Up to 8 independent loop layers with non-destructive recording. Each layer can extend beyond the original loop length
- Non-Destructive Undo β Remove the last overdub layer instantly. Undo from overdub cancels the active layer
- Ditto-Style Footswitch β Single CC for full looper control:
- 1Γ Tap: Record β Play β Overdub β Play (cycle)
- 2Γ Tap: Stop playback
- Hold: Undo last layer (playing) / Clear all (stopped)
- Overdub Arm β Queue overdub to engage at the next loop boundary instead of immediately. Blue visual indicator while armed
- WAV Export β Export your loop mixdown as a 24-bit stereo WAV file
- State Persistence β Loop buffer, all settings, MIDI/key mappings saved and restored with the plugin state
- C++ DSP Metronome β Sample-accurate click synthesized in the audio thread. Routes through your audio interface (not OS speakers)
- Time/Bars Mode β Manual max loop length OR auto-calculated from BPM Γ Bars Γ Beats
- Rhythm Pattern Editor β Step-sequencer-style matrix for accent/regular beat patterns (up to 16 beats per bar)
- Pre-Count β Configurable count-in bars before recording starts. Works with all trigger methods (button, key, MIDI, footswitch)
- 10 Mappable Actions β Record, Overdub, Stop, Clear, Undo, Footswitch, Bar Mode, Click, Pre-count, Arm Overdub
- MIDI Learn β Press Learn, twist any CC on your controller β done
- Key Bindings β Bind any keyboard key to any action. Auto-exclusive: one key per action
- Edge-Triggered CC β Rising-edge detection (CC β₯ 64) for clean momentary footswitch/pedal use
- WebView UI β Dark, responsive interface rendered via native WebView (WebView2 on Windows, WKWebView on macOS, WebKitGTK on Linux)
- Resizable Window β Drag to resize with locked aspect ratio. UI scales via CSS zoom
- Visual Feedback β Ring flash on undo (orange) and clear (red), pulsing state text, beat highlighting
- Loop Timer β Real-time elapsed position display inside the knob (M:SS.t format)
- Input/Output Gain β 0β12 dB boost on input and output with visual sliders
| Platform | Formats | WebView Backend | Architectures |
|---|---|---|---|
| Windows | VST3, Standalone | WebView2 | x64, ARM64 |
| macOS | VST3, AU, Standalone | WKWebView | Universal (x64 + Apple Silicon) |
| Linux | VST3, LV2, Standalone | WebKitGTK | x64, ARM64 |
| Tool | Version | Notes |
|---|---|---|
| CMake | β₯ 3.22 | |
| C++ Compiler | C++20 support | MSVC 2022, Clang 14+, GCC 12+ |
| Git | Any recent | For fetching JUCE via FetchContent |
Platform-specific:
- Windows: Visual Studio 2022 with "Desktop development with C++" workload
- macOS: Xcode 14+ with command-line tools (
xcode-select --install) - Linux: Development packages:
# Ubuntu/Debian sudo apt-get install -y \ build-essential cmake git \ libasound2-dev libjack-jackd2-dev \ libfreetype6-dev libx11-dev libxrandr-dev libxinerama-dev \ libxcursor-dev libxcomposite-dev \ mesa-common-dev libglu1-mesa-dev \ libwebkit2gtk-4.1-dev libgtk-3-dev \ libcurl4-openssl-dev # Fedora sudo dnf install -y \ gcc-c++ cmake git \ alsa-lib-devel jack-audio-connection-kit-devel \ freetype-devel libX11-devel libXrandr-devel libXinerama-devel \ libXcursor-devel libXcomposite-devel \ mesa-libGL-devel \ webkit2gtk4.1-devel gtk3-devel \ libcurl-devel
JUCE 8.0.12 is fetched automatically via CMake FetchContent β no submodules or manual downloads needed. ASIO support is included out of the box (JUCE 8.0.11+ bundles the ASIO headers).
cmake -S . -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Releasecmake -S . -B build -G Xcode -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
cmake --build build --config Releasecmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)After building, plugin binaries are located in:
build/OrbitLooper_artefacts/Release/
βββ VST3/
β βββ Orbit Looper.vst3
βββ AU/ # macOS only
β βββ Orbit Looper.component
βββ LV2/ # Linux only
β βββ Orbit Looper.lv2/
βββ Standalone/
βββ Orbit Looper[.exe]
VST3: Copy Orbit Looper.vst3 to your system's VST3 folder:
- Windows:
C:\Program Files\Common Files\VST3\ - macOS:
~/Library/Audio/Plug-Ins/VST3/ - Linux:
~/.vst3/
AU (macOS): Copy Orbit Looper.component to ~/Library/Audio/Plug-Ins/Components/
LV2 (Linux): Copy Orbit Looper.lv2/ to ~/.lv2/
- Load the plugin in your DAW or run the standalone version
- Connect your instrument (guitar, synth, etc.)
- Press Record β play your loop
- Press Record again β loop plays back, overdub starts
- Press Stop β loop continues playing (press again to resume)
- Turn the Loop Level knob to control how much previous audio is retained
| Button | Action |
|---|---|
| Record | Start recording / toggle overdub |
| Stop/Play | Stop playback (keeps loop) / Resume if stopped |
| Clear | Delete the entire loop |
| Undo | Remove last overdub layer |
| Export | Save loop as 24-bit WAV file |
- Open the Metronome panel
- Toggle BARS mode
- Set BPM, Bars, and Beats per Bar
- Customize the rhythm pattern (accent/regular beats)
- Enable Click to hear the metronome
- Enable Pre-count for a count-in before recording
- Open the MIDI / Key Mapping panel
- Click Learn next to any action
- Press a CC on your MIDI controller or a key on your keyboard
- The binding is saved automatically with the plugin state
| Parameter | Range | Default | Description |
|---|---|---|---|
| Loop Level | 0β100% | 95% | Playback volume / decay per pass |
| Max Loop Length | 10β600s | 60s | Maximum recording duration |
| Input Gain | 0β12 dB | 0 dB | Boost input signal |
| Output Gain | 0β12 dB | 0 dB | Boost output signal |
This project is licensed under the MIT License.
Built with:
-
JUCE 8 β the leading framework for audio application and plugin development.
-
Audio Plugin Coder (APC) β A groundbreaking, open-source framework that enables musicians, producers, sound designers, and developers to create professional VST3/AU audio plugins using natural language and AI assistance.


