A stereo audio effect plugin that transforms any incoming signal into a hypnotic, tempo-locked evolving loop. Capture moments, create seamless loops, and add subtle drift and morphing while preserving the recognizable identity of your source material.
Watch the walkthrough on YouTube: HypnoLoop demo.
- TECHNICAL.md — DSP architecture and implementation notes
- MARKETING.md — control reference and product copy
- CONTRIBUTING.md — how to contribute
- SECURITY.md — reporting vulnerabilities
- CODE_OF_CONDUCT.md — community standards
- Tempo-Locked Looping: Syncs to host BPM for musical loop lengths (1/16, 1/8, 1/4, 1/2, 1 bar, 2 bars)
- Click-Free Playback: Advanced crossfade algorithm with ADSR envelope shaping ensures seamless looping with no clicks or pops
- Drift Modulation: Slow sine LFO (0.1 Hz) modulates loop start position to create evolving textures without pitch artifacts
- Stereo Motion: Independent L/R drift offsets for spatial movement
- Morph Stage: Tilt EQ and soft saturation for tone shaping without losing source identity
- Hypnosis Macro: Single control that scales drift, morph, and motion for instant hypnotic effects
- ADSR Envelope Controls: Adjustable attack and release times (0-50ms) for smooth loop boundaries
- Real-Time Capture: Continuous recording to ring buffer with instant lock capability
- Smart Re-Lock: Automatically re-locks with new length when loop length is changed while locked
- VST3 - Compatible with all major DAWs
- AU - Native macOS Audio Unit support
- Standalone - Run as a standalone application
- macOS 10.13 or later
- CMake 3.22 or later
- Xcode Command Line Tools
- JUCE (included as submodule)
# Clone the repository
git clone https://github.com/cyberdude/hypnoloop.git
cd hypnoloop
# Initialize submodules (if JUCE isn't already present)
git submodule update --init --recursive
# Create build directory
mkdir build
cd build
# Configure with CMake
cmake .. -DCMAKE_BUILD_TYPE=Release
# Build
cmake --build . --config Release -j$(sysctl -n hw.ncpu)
# The plugins will be installed to:
# - VST3: ~/Library/Audio/Plug-Ins/VST3/HypnoLoop.vst3
# - AU: ~/Library/Audio/Plug-Ins/Components/HypnoLoop.component
# - Standalone: build/HypnoLoop_artefacts/Release/Standalone/HypnoLoop.app- Load the plugin on an audio track in your DAW
- Select loop length from the dropdown (1/16 to 2 bars)
- Play audio through the plugin - it continuously records to the buffer
- Press LOCK when you want to capture the current moment
- Change loop length while locked - automatically re-locks with the new length
- Adjust parameters to shape the loop:
- Hypnosis: Macro control for overall hypnotic effect
- Drift: Amount of position modulation (no pitch change)
- Morph: Tone shaping and saturation
- Motion: Stereo width and movement
- Color: Tilt EQ (-1 = dark, +1 = bright)
- Attack: Fade-in time at loop start (0-50ms)
- Release: Fade-out time at loop end (0-50ms)
- Mix: Dry/wet blend
- Output: Gain control (-24 to +12 dB)
- Drums: Use shorter loops (1/16, 1/8) with moderate drift to create evolving grooves
- Vocals: Try 1/4 or 1/2 bar loops with low drift to maintain intelligibility
- Pads/Synths: Longer loops (1-2 bars) with higher hypnosis for ambient textures
- Field Recordings: Experiment with different loop lengths and high morph for textural effects
| Parameter | Range | Description |
|---|---|---|
| Lock | Toggle | Freezes the current loop region. Changing length while locked automatically re-locks |
| Loop Length | 1/16 - 2 bars | Musical length of the loop (tempo-synced) |
| Hypnosis | 0.0 - 1.0 | Macro control scaling drift, morph, and motion |
| Drift | 0.0 - 1.0 | Depth of loop position modulation (slow LFO, no pitch change) |
| Morph | 0.0 - 1.0 | Amount of tone shaping and saturation |
| Motion | 0.0 - 1.0 | Stereo motion and spatial width |
| Color | -1.0 - 1.0 | Tilt EQ (negative = darker, positive = brighter) |
| Attack | 0.0 - 50.0 ms | Fade-in time at loop start to prevent clicks |
| Release | 0.0 - 50.0 ms | Fade-out time at loop end to prevent clicks |
| Mix | 0.0 - 1.0 | Dry/wet blend |
| Output | -24 - +12 dB | Output gain |
- RingBuffer: 8-second stereo circular buffer with linear interpolation
- GrainLooper: 2-window crossfade looper with Hann windowing (20ms default) and ADSR envelope shaping
- MorphStage: Tilt EQ and soft saturation processing
- HypnoLoopEngine: Main orchestrator handling capture, playback, drift, tempo sync, and envelope control
- Click-Free Looping: Uses two read heads with 180° phase offset and crossfade windowing
- ADSR Envelope: Precomputed attack/release envelopes (sine curves) applied at loop boundaries to prevent clipping
- Drift Modulation: Slow sine LFO (0.1 Hz) modulates loop start position. Drift updates only at loop boundaries to prevent pitch artifacts. Max drift: 5% of loop length or 20ms (whichever is smaller)
- Parameter Smoothing: All continuous parameters smoothed at 20-100ms to prevent zipper noise
- Real-Time Safe: No heap allocation in audio thread, pre-allocated buffers and envelope tables
- Optimized for 48kHz / 512 sample buffer sizes
- CPU usage: < 5% on Apple Silicon at default settings
- No denormal handling issues (uses
ScopedNoDenormals)
- No FFT spectral processing
- No multi-voice granular synthesis
- No MIDI control
- No sidechain input
- Free length mode (ms-based) not implemented (V1.1 planned)
HypnoLoop is licensed under the GNU Affero General Public License v3.0 or later — see LICENSE.
This project uses JUCE as a Git submodule. JUCE is dual-licensed under the AGPLv3 and the commercial JUCE licence. If you build or distribute this software under the open-source path, you must comply with the AGPL (including for combined works with JUCE). See JUCE/LICENSE.md and NOTICE for third-party terms and attributions.
Building VST3 or AU binaries may require additional SDKs and acceptance of their respective vendor terms (for example Steinberg VST3, Apple Audio Unit). This repository does not redistribute those SDKs.
Built with the JUCE framework.
Version: 1.0.0
Platform: macOS (Universal Binary: arm64 + x86_64)