beads

beads · effects

A direct WebAssembly port of the Beads firmware released by Émilie Gillet in October 2026. Record stereo audio, scatter it into grains, freeze a moment, or use the internal wavetable voice. The original grain engines, random modulation, delay transition, quality modes, feedback, reverb and limiters run from the published C++ source. Auto selects the wavetable voice when both audio inputs are unpatched; patching either input selects audio processing immediately. Select Audio explicitly to hold a frozen recording after unplugging its source. SIZE fully clockwise enters the original delay mode after its transition. The browser uses explicit source and mono controls instead of hardware normalization timers, and does not emulate the analogue input gain stage, calibration, persistent audio backup, or repurposing the right audio jack as a gate output. All quality modes keep their native processing clocks with band-limited sample-rate conversion to the audio device.

A direct WebAssembly port of the Beads firmware released by Émilie Gillet in October 2026. Record stereo audio, scatter it into grains, freeze a moment, or use the internal wavetable voice. The original grain engines, random modulation, delay transition, quality modes, feedback, reverb and limiters run from the published C++ source. Auto selects the wavetable voice when both audio inputs are unpatched; patching either input selects audio processing immediately. Select Audio explicitly to hold a frozen recording after unplugging its source. SIZE fully clockwise enters the original delay mode after its transition. The browser uses explicit source and mono controls instead of hardware normalization timers, and does not emulate the analogue input gain stage, calibration, persistent audio backup, or repurposing the right audio jack as a gate output. All quality modes keep their native processing clocks with band-limited sample-rate conversion to the audio device.

the faceplate

beadsin_laudioin_raudiopitchpitchseedgatefreeze_gategatetime_cvcvsize_cvcvshape_cvcvpitch_cvcvdensity_cvcvblend_cvcvfeedback_cvcvreverb_cvcvout_laudioout_raudioaudiocvgatepitch
13 inputs · 2 outputs · 17 params

inputs

idcablewhat it does
in_laudioLeft audio written into the buffer. An unpatched right input follows this channel; a connected silent right input stays silent.
audio signal; L/R stereo pair with in_r — L-only auto-duplicates to R
in_raudioRight audio written into the stereo buffer. A cable here selects audio processing in Auto even if the left input is unpatched.
audio signal; L/R stereo pair with in_l
pitchpitchV/oct pitch added to the Pitch control. Zero volts leaves the native wavetable voice at its reference pitch, or leaves recorded grains untransposed.
V/oct pitch CV
seedgateSeed gate: in External mode, held high enables grain generation and low stops new grains; near centre Density a rising edge creates one grain. In Latch mode a patched gate supplies the clock for the original divider/probability logic. Hold combines the button level with this gate.
gate / trigger; gate — acts while the level is high (reacts to both edges)
freeze_gategateFreeze gate: while high, stops buffer recording; low resumes recording unless the Freeze switch remains on. This is level-sensitive, not a toggle on an edge.
gate / trigger; gate — acts while the level is high (reacts to both edges)
time_cvcvExternal modulation for Time. Time amount controls its influence; with no cable that control uses the original internal randomness.
control voltage (CV)
size_cvcvExternal modulation for Size, scaled by Size amount. Negative amounts use positive CV to control random spread.
control voltage (CV)
shape_cvcvExternal modulation for Shape, scaled by Shape amount. With no cable, the amount selects internal random modulation.
control voltage (CV)
pitch_cvcvPitch modulation in volts per octave, processed by Pitch amount and the original pitch randomizer. The separate pitch input always adds V/oct directly.
control voltage (CV)
density_cvcvDensity modulation using the original linear/exponential FM mapping; it also moves the divider/probability selection when clocked.
control voltage (CV)
blend_cvcvCV added to the dry/wet Blend control.
control voltage (CV); modulates blend (additive offset — ±1 CV sweeps the full range, centered on the knob)
feedback_cvcvCV added to Feedback; in Wavetable mode it selects the wavetable bank.
control voltage (CV); modulates feedback (additive offset — ±1 CV sweeps the full range, centered on the knob)
reverb_cvcvCV added to the Reverb control.
control voltage (CV); modulates reverb (additive offset — ±1 CV sweeps the full range, centered on the knob)

outputs

idcablewhat it does
out_laudioLeft output of the original grain or wavetable engine, dry/wet mix, reverb and limiter.
audio signal; L/R stereo pair with out_r
out_raudioRight output of the same stereo engine. The two jacks carry independent channels, including in mono-buffer mode where grains may spread across stereo.
audio signal; L/R stereo pair with out_l

params

idlabelrangedefaultcurve
timeTime0..10.25linear
sizeSize0..10.65linear
shapeShape0..10.5linear
pitchPitch-24..24st0linear
densityDensity0..10.25linear
blendBlend0..10.5linear
feedbackFeedback / Bank0..10linear
reverbReverb0..10.15linear
time_randomTime amount-1..10linear
size_randomSize amount-1..10linear
shape_randomShape amount-1..10linear
pitch_randomPitch amount-1..10linear
freezeFreeze0..10discrete
seedSeed0..22discrete
qualityQuality0..33discrete
sourceSource0..20discrete
monoMono buffer0..10discrete

controls

controlwhat it does
BlendOriginal dry/wet crossfade. In wavetable mode blends the continuous voice with granular wavetable playback. Pristine dry audio has the firmware gain of 0.75, not unity.
DensityOriginal density law: periodic grains below centre, random grains above, and manual taps around centre. In clocked Latch mode it chooses division or probability. It is not a linear rate control.
Feedback / BankFeedback into the recorded audio buffer. In Wavetable mode this same control selects one of the original twelve banks.
FreezeLatching Freeze switch. On holds the recorded buffer; off resumes recording when freeze_gate is low. Rewriting the same setting never toggles it. Wavetable mode applies the original freeze behavior to its voices.
Mono bufferLatching mono-buffer mode. On uses the firmware mono recording layout for longer history; output remains stereo. Off keeps separate stereo input channels.
PitchTranspose grains or the wavetable voice by -24 to +24 semitones, summed with the V/oct pitch input.
Pitch amountPitch attenurandomizer. With no cable it spreads grain pitch; with a cable positive values scale CV and negative values randomize pitch under CV control.
QualityScorched cassette: 8-bit companded audio at 24 kHz with wow/flutter. Warm tape: 12-bit at an internal 24 kHz. Sunny digital: 12-bit at 32 kHz. Pristine: 16-bit at 48 kHz. In Wavetable mode the original per-quality bit depths apply at 48 kHz. Switching reinterprets buffer memory as on the firmware.
ReverbOriginal stereo reverb amount, with linked decay mapping and quality-dependent tone.
SeedExternal leaves grain generation to the Seed input; Hold keeps generation enabled; Latch free-runs without a cable and uses the clock divider/probability engine with a cable. At centre Density, External accepts individual rising-edge taps and Latch is silent on the wet path without a clock.
ShapeGrain envelope shape, from percussive contours through smooth windows to harder rectangular shapes.
Shape amountShape attenurandomizer, using the same internal-random/external-CV rules as Time amount.
SizeOriginal bipolar grain duration and direction control. Below centre grains run backwards; above centre they run forwards. Fully clockwise enters delay mode after the firmware transition; moving back returns to grains.
Size amountSize attenurandomizer, using the same internal-random/external-CV rules as Time amount.
SourceAuto chooses Wavetable when neither audio input has a cable, otherwise Audio. Audio always records or plays the buffer, including after disconnecting its source. Wavetable always uses the original internal synthesizer. Selection follows cable presence, not signal level.
TimePosition in the recorded buffer; in wavetable mode, position within the selected wavetable. Modulated by Time amount and time_cv.
Time amountTime attenurandomizer. With no CV, positive and negative amounts select the original random distributions. With CV, positive scales modulation and negative lets CV set random spread.

source

beads.ts on GitHub.

Generated from packages/web/src/lib/{audio,video}/module-registry.ts · repo