Penumbra
Live Granular Processor
The half-shadow between sound and texture
Version 1.5 - User Manual
by Apophenia
1. Introduction
Penumbra is a real-time granular processor (VST3) that continuously captures
incoming audio into a circular buffer and scatters it back as overlapping grains - tiny
windowed slices of the recorded sound. By controlling grain size, density, position,
pitch, and spread, you can transform any incoming signal into evolving textures, lush pads,
rhythmic stutters, or impossible atmospheres.
The plugin combines a live grain engine with two tempo-syncable LFOs, an envelope follower,
a built-in stereo delay and reverb, MIDI triggering, burst mode, an interactive XY pad, and
a motion recorder that captures and replays your XY gestures. Everything is designed to run
in real time without pre-loading samples - whatever you feed it becomes the material.
Key Features
- Live grain capture (no sample loading) with 0.1–30 second buffer
- Polyphonic grain scheduler with up to dozens of simultaneous overlapping grains
- Four window shapes (Hann, Triangle, Trapezoid, Blackman)
- Pitch shift ±24 semitones with optional musical-scale quantization
- Per-grain filter (low-pass / high-pass) with separate “grain filter” tone
- Freeze + Reverse + Feedback for sustained textures and self-oscillation
- Two LFOs with five shapes and DAW tempo sync, each routed to your choice of destination
- Envelope follower with five routing destinations
- Built-in stereo delay (with ping-pong) and reverb
- MIDI note trigger with velocity sensitivity
- Burst mode (fires 2–8 grains per trigger for stuttered hits)
- Interactive XY pad with motion recording and playback
- Real-time waveform display showing buffer contents and grain positions
- Preset browser, parameter locks for randomization, A/B undo/redo
How Granular Synthesis Works
Penumbra writes incoming audio continuously into a circular buffer of configurable length.
A scheduler then triggers short overlapping grains read from anywhere in that buffer.
Each grain is shaped by a window function (a smooth envelope that fades it in and out),
independently pitched, panned, and filtered, then summed with all the other live grains
into the output. By layering many overlapping grains per second - sometimes dense
clouds, sometimes sparse fragments - the result ranges from subtle thickening to
complete deconstruction of the source.
2. Installation
System Requirements
- Windows 10 or later (64-bit)
- A VST3-compatible DAW (Bitwig, Ableton Live, FL Studio, Reaper, Cubase, Studio One, etc.)
- 4 GB RAM minimum
- Intel / AMD x64 processor (SSE4.2+)
Install Steps
- Close your DAW.
- Copy Penumbra.vst3 to your VST3 plugin folder
(typically
C:\Program Files\Common Files\VST3 or your custom VST3 path).
- Restart your DAW - it should rescan and detect Penumbra under the
Apophenia manufacturer.
- Insert Penumbra as an effect on an audio track or bus.
Penumbra is a stereo effect plugin. It does not require a sidechain input -
all granular processing operates on the main input bus. To use it as a sound generator,
feed it a sample, drum loop, or any audio source and tweak from there.
3. Quick Start
Five steps to hear Penumbra in action:
- Insert Penumbra on a track containing audio (a pad, drum loop, vocal, anything sustained works best).
- Set Dry/Wet to around 60–80% so you hear plenty of the granular signal.
- Hit play. You should hear granular streams - if not, turn Grain Density up.
- Sweep Position from left to right - you are scrubbing through the live buffer.
- Push Pitch Random up to about 6–12 semitones for evolving texture.
For long, evolving pads, enable Freeze. Penumbra stops
writing new audio to the buffer and infinitely loops the frozen material - perfect
for capturing a moment and sustaining it indefinitely while you sculpt with the other
controls.
4. Interface Overview
Penumbra’s interface is organized into functional sections, each grouping related
controls. The top of the window shows the plugin name, version, and global status
indicators (Freeze, MIDI, Delay, etc.).
Section Layout
- Header - plugin name, version, preset browser, A/B, undo, randomize, menu.
- Waveform Display - live buffer contents with current grain positions overlaid.
- Grain Engine - size, density, position, position random, stereo spread.
- Pitch - pitch shift, pitch random, scale quantization.
- Tone - filter cutoff, filter type, window shape, grain filter.
- Modulation - LFO 1, LFO 2, envelope follower.
- FX - delay, reverb.
- XY Pad - two-axis controller with motion recording.
- Output - dry/wet, output gain, input gain, stereo width, peak meters.
- Status Bar - hovered-control tooltip and active mod indicators.
Signal Flow
INPUT →
CIRCULAR BUFFER →
GRAIN SCHEDULER →
PITCH SHIFT →
WINDOW →
GRAIN FILTER →
SUM →
FEEDBACK →
GLOBAL FILTER →
DELAY →
REVERB →
DRY/WET →
OUTPUT
5. Parameter Reference
All controls support right-click for context menu (set default, enter value, lock from
randomize). Hover any control to see its current value and a brief description in the
status bar.
5.1 Grain Engine
Grain Engine core
The heart of Penumbra. These controls shape how grains are sliced and scheduled.
- Grain Size (10–500 ms) - length of each individual grain. Shorter sizes (<30 ms) produce buzzy, pitched textures; medium sizes (50–150 ms) give smooth pad-like flow; long sizes (200–500 ms) feel like a slow tape echo.
- Grain Density (1–50 grains/sec) - how many grains the scheduler fires per second. Low density = sparse glitchy fragments; high density = continuous wash.
- Stereo Spread (0–100%) - randomizes each grain’s pan position across the stereo field. At 0% all grains stay center; at 100% they scatter fully L/R.
5.2 Buffer & Position
Buffer & Position read-head
- Buffer Length (0.1–30 s) - size of the circular capture buffer. Short buffers loop fast (tight stutters); long buffers store more material for variety.
- Position (0–100%) - the central read-head position within the buffer. 0% = oldest stored sample, 100% = newest (the live edge).
- Position Random (0–100%) - random offset added to the read position per grain. Higher values scatter grains across the buffer for chaotic textures.
5.3 Pitch & Quantization
Pitch tuning
- Pitch Shift (±24 semitones) - constant pitch offset applied to every grain.
- Pitch Random (0–24 semitones) - random pitch variation per grain. Combine with Pitch Scale for musical results.
- Pitch Scale - quantize randomized pitches to a musical scale: Off, Chromatic, Major, Minor, Pentatonic, Blues, Whole Tone. With Off the pitch is continuous; with a scale, randoms snap to the nearest scale degree.
5.4 Window & Filter
Window Shape tone
The envelope applied to each grain. Different shapes give different timbres:
- Hann - smooth raised cosine. The cleanest, most musical default.
- Triangle - linear fade-in/out. Slightly brighter, more attack.
- Trapezoid - flat sustain with fast fades. Most aggressive, can introduce clicks at very small sizes - useful for rhythmic stutters.
- Blackman - gentler than Hann, softer attacks. Best for clouds and pads.
Global Filter tone
- Filter Cutoff (20 Hz–20 kHz, log) - cutoff frequency for the post-grain biquad filter.
- Filter Type - LP (low-pass) or HP (high-pass).
- Grain Filter (0–100%) - per-grain tone shaping applied before the grain is summed. Independent of the global filter.
5.5 Stereo
Stereo Width image
- Stereo Width (0–200%) - final stereo width of the granular output. 0% = mono, 100% = original, 200% = exaggerated mid/side spread.
5.6 Freeze, Reverse, Feedback
Freeze / Reverse / Feedback sustain
- Freeze - stop writing new audio to the buffer. Grains continue reading from the current contents indefinitely. Essential for capturing a sound moment and sustaining it.
- Reverse - play each grain backwards.
- Feedback (0–100%) - routes a portion of the granular output back into the input. At higher values the output recirculates and self-evolves; can self-oscillate if pushed too high.
Freeze + high Feedback + slow Position drift creates evolving drone textures that
never repeat. Great for ambient beds.
5.7 LFO 1 & 2
LFOs modulation
Two independent low-frequency oscillators. Each has the same controls:
- Rate (0.01–20 Hz, log) - LFO frequency in free mode.
- Sync - DAW tempo sync division: Free, 1/1, 1/2, 1/4, 1/4D, 1/8, 1/8D, 1/16, 1/16D, 1/32. D = dotted.
- Depth (0–100%) - modulation amount.
- Shape - Sine, Tri, Saw, Sqr, S&H.
- Target - routing destination: Position, Size, Pitch, Filter, Spread.
5.8 Envelope Follower
Envelope Follower modulation
- Env Follow (0–100%) - depth of envelope-driven modulation.
- Env Target - routing destination: Filter, Pitch, Size, Spread, Dry/Wet.
The envelope follower tracks the input signal’s amplitude and uses it to drive whatever destination you select - e.g., open the filter on louder input, narrow the spread on quiet sections, etc.
5.9 Delay
Stereo Delay time
- Delay Time (10–2000 ms, log) - delay length.
- Delay Feedback (0–95%) - amount of delayed signal fed back in.
- Delay Mix (0–100%) - how much delayed signal mixes into the output. At 0 the delay is bypassed.
- Ping Pong - bounces the delay between L and R channels.
5.10 Reverb
Reverb space
- Reverb Decay (0.1–10 s, log) - RT60 decay time of the reverb tail.
- Reverb Damping (0–99%) - high-frequency damping inside the reverb. Higher values = darker tail.
- Reverb Mix (0–100%) - how much reverberated signal mixes into the output.
5.11 MIDI Trigger
MIDI Trigger midi
- MIDI Trigger - when enabled, incoming MIDI notes trigger individual grains (or bursts in Burst Mode) with pitch tracking. Disabled = continuous scheduler runs as normal.
- Velocity Sens (0–100%) - how much MIDI velocity scales the grain’s amplitude.
5.12 Burst Mode
Burst Mode rhythm
- Burst Mode - when enabled, each trigger event (from MIDI or scheduler) fires multiple grains in rapid succession instead of one.
- Burst Count (2–8) - number of grains per burst.
Useful for stuttered hits, rolled drum textures, or rhythmic granular bursts triggered by MIDI.
5.13 Mix & Output
Output levels
- Input Gain (−24 to +12 dB) - gain applied to the incoming signal before it enters the buffer.
- Dry/Wet (0–100%) - balance between dry input and granular output.
- Output Gain (−24 to +6 dB) - final output trim, applied after the limiter.
A built-in soft limiter sits on the output to protect against clipping when feedback or many overlapping grains push the signal too hot.
6. XY Pad & Motion Recorder
The XY pad gives you simultaneous control over two parameters with mouse or touch.
Both axes can be re-assigned via right-click menu on the pad.
Motion Recorder
Below the XY pad, a record button captures your gesture motion. Once recorded, the
playback button replays the gesture in a loop, automating the two assigned parameters
with whatever timing and shape you played. Useful for hands-free evolving performances
or for layering automation that would be tedious to draw.
- Record - arms the recorder. Move the XY pad to capture motion.
- Play - loops the recorded gesture continuously.
- Stop - halts playback and returns to manual control.
- Clear - erases the recorded motion.
7. Presets
Penumbra ships with a curated factory preset bank covering pads, textures, stutters,
rhythmic grains, ambient drones, and creative experiments. Use the preset browser
(header bar) to step through presets with the < and > arrows or select directly
from the dropdown.
User Presets
User presets are saved as XML files in
%APPDATA%/Penumbra/Presets/ with the extension .gfxpreset.
Click Save in the preset browser, give your preset a name, and it
will appear under the User category in the dropdown.
Randomize & Parameter Locks
The RND button randomizes most parameters within musically useful
ranges. To prevent specific parameters from being randomized, hold Ctrl
and click any knob to lock/unlock it - locked knobs are marked visually and
skipped during randomization.
8. Tips & Tricks
Lush evolving pad
Feed Penumbra a sustained chord. Set Grain Size around 200 ms,
Density 15, Position Random 30%, Stereo Spread 60%, Pitch Random 7 st with
Minor scale quantization. Enable Freeze. Add Reverb Mix 40% and slow LFO 1
on Position. Endless texture from a single chord.
Rhythmic stutters
Feed a drum loop. Grain Size 50 ms, Density 30, Window = Trapezoid,
Position Random 5% (tight). Sync LFO 1 to 1/16, route to Position with high
depth. The output becomes a beat-synced glitch loop locked to your DAW tempo.
Tape echo emulation
Long Grain Size (350 ms), low Density (3–5), Buffer Length 3 s,
Position near 80%, Pitch −1 st, Feedback 30%, Filter cutoff 4 kHz
LP. Sounds like a warm degraded tape delay.
Self-oscillating drone
Freeze on, Feedback around 85%, very small Grain Size, low Density. Penumbra will
slowly self-evolve into a sustained drone with no original input needed once primed.
Use Filter Cutoff and Pitch Shift to sculpt it. Lower the output gain first
- this can get loud fast.
Be mindful of CPU at very high Grain Density (40+) combined with long Grain Size -
you can easily have 50+ overlapping grains active. If you need to save CPU,
lower density or use shorter grains.
A. Appendix: Full Parameter Reference
Grain Engine
| Parameter | ID | Range | Default |
| Grain Size | grainSize | 10 – 500 ms | 100 ms |
| Grain Density | grainDensity | 1 – 50 grains/sec | 10 |
| Position | position | 0 – 100% | 50% |
| Position Random | positionRandom | 0 – 100% | 0% |
| Stereo Spread | stereoSpread | 0 – 100% | 0% |
| Buffer Length | bufferLength | 0.1 – 30 s | 5 s |
| Window Shape | windowShape | Hann / Tri / Trap / Blackman | Hann |
Pitch
| Parameter | ID | Range | Default |
| Pitch Shift | pitchShift | ±24 st | 0 |
| Pitch Random | pitchRandom | 0 – 24 st | 0 |
| Pitch Scale | pitchScale | Off / Chrom / Maj / Min / Pent / Blues / WT | Off |
Filter & Tone
| Parameter | ID | Range | Default |
| Filter Cutoff | filterCutoff | 20 Hz – 20 kHz | 20 kHz |
| Filter Type | filterType | LP / HP | LP |
| Grain Filter | grainFilter | 0 – 100% | 0% |
Sustain
| Parameter | ID | Range | Default |
| Freeze | freeze | On / Off | Off |
| Reverse | reverse | On / Off | Off |
| Feedback | feedback | 0 – 100% | 0% |
LFOs
| Parameter | ID | Range | Default |
| LFO1 Rate / LFO2 Rate | lfo1Rate / lfo2Rate | 0.01 – 20 Hz | 1 Hz |
| LFO1 Depth / LFO2 Depth | lfo1Depth / lfo2Depth | 0 – 100% | 0% |
| LFO1 Shape / LFO2 Shape | lfo1Shape / lfo2Shape | Sine / Tri / Saw / Sqr / S&H | Sine |
| LFO1 Target / LFO2 Target | lfo1Target / lfo2Target | Position / Size / Pitch / Filter / Spread | Position |
| LFO1 Sync / LFO2 Sync | lfo1Sync / lfo2Sync | Free / 1/1 … 1/32 | Free |
Envelope Follower
| Parameter | ID | Range | Default |
| Env Amount | envAmount | 0 – 100% | 0% |
| Env Target | envTarget | Filter / Pitch / Size / Spread / Dry-Wet | Filter |
Delay
| Parameter | ID | Range | Default |
| Delay Time | delayTime | 10 – 2000 ms | 300 ms |
| Delay Feedback | delayFeedback | 0 – 95% | 30% |
| Delay Mix | delayMix | 0 – 100% | 0% |
| Ping Pong | delayPingPong | On / Off | Off |
Reverb
| Parameter | ID | Range | Default |
| Reverb Decay | reverbDecay | 0.1 – 10 s | 1.5 s |
| Reverb Damping | reverbDamping | 0 – 99% | 30% |
| Reverb Mix | reverbMix | 0 – 100% | 0% |
MIDI & Burst
| Parameter | ID | Range | Default |
| MIDI Trigger | midiTrigger | On / Off | Off |
| Velocity Sens | velocitySens | 0 – 100% | 50% |
| Burst Mode | burstMode | On / Off | Off |
| Burst Count | burstCount | 2 – 8 | 4 |
Mix & Output
| Parameter | ID | Range | Default |
| Input Gain | inputGain | −24 to +12 dB | 0 dB |
| Dry/Wet | dryWet | 0 – 100% | 50% |
| Output Gain | outputGain | −24 to +6 dB | 0 dB |
| Stereo Width | stereoWidth | 0 – 200% | 100% |