Getting Started

Sinew is a monophonic synthesiser built around wavetable and physical-model oscillators, zero-delay-feedback filters, a 32-mode modal resonator and a reorderable output-FX chain. Everything is driven by a 64-slot modulation matrix and a radial knot that acts as the instrument's sole meta-modulator.

About this manual
Every parameter table in this manual is generated from the plugin's own parameter layout by tools/gen_user_manual.py. Ranges, defaults, choice lists and destination names are read out of the C++, not transcribed — so they cannot drift out of date without the build gate noticing. The prose, diagrams and interactives are hand-written; where an interactive mirrors a shipped formula, the source line it mirrors is cited in the page's script.

Core Signal Flow

Click any stage to jump to its section. The two toggles are real routing switches, not illustrations — they change where the Body and Sub actually inject.

Signal Flow click a stage to jump · toggle the two routing switches

The three zones of the output chain

A common misreading: the output FX are not one freely draggable list. They sit in three zones, and a stage only ever moves within its own zone.

The Output FX page has a sandbox you can drag.

Beginner Sound Recipes

Recipe 1: Shimmering Ambient Pad

1. On the Source page set Osc 1 Type to Wavetable Sine and raise Osc 1 Drift to about 0.05 for slow pitch movement.
2. On Tone, pick the Sallen-Key filter, cutoff near 500 Hz, resonance 0.40, then route LFO 1 → Filter Cutoff in the Mod matrix.
3. On Output FX, enable Reverb, Mix to about +0.5 and Decay to about 0.8. (Decay is a 0–1 control, not a time in seconds.)
4. On Morph, capture pole A, change the patch, capture pole B, and drag the puck between them.

Recipe 2: Woody Percussive Pluck

1. On Body, switch Body Enabled on and bring Body Wet up to about 0.70. Wet is an additive level, so the dry voice is still there underneath.
2. Set Body Decay to 300 ms, Body Material to 0.35 and Body Damping to 1.2.
3. Raise Body Strike to 0.80 with Strike Decay at 15 ms — that is the velocity-scaled noise burst, armed on every note-on.
4. Pull Body Dry Level to 0.0 to hear the resonator alone, and play short staccato notes.

Recipe 3: Growling Wavefolded Bass

1. On Source, set Osc 1 Type to SuperSaw and detune with Osc 1 Fine.
2. On Tone, choose the Diode Ladder, cutoff near 300 Hz, and push Filter Drive up. Drive is a 0–1 control, not dB.
3. On Output FX, enable the Fold stage, set Distortion Type to Chebyshev and raise Drive until the upper harmonics bloom. Turn Folder Oversample on in Master Settings if it starts to sound gritty rather than rich — that grit is aliasing.
4. Leave the Limiter on. It always is by default.

Knot

The Knot page is the performance surface. Six macros — Weight, Warmth, Tension, Life, Anchor and Morph — are laid over a radial filament visualiser you can drag. The knot is also Sinew's sole meta-modulator: it is the only thing that reaches modulation-depth destinations while knot_active is on.

Radial Knot drag the field · the macro readouts follow the real engagement blend

How the axes reach the macros

Dragging the knot writes the macros directly. The three knot_x/y/z parameters are a separate, absolute input path — meant for external XYZ control such as a phone or a Leap Motion mapped through host MIDI — and they blend over your manual macro values rather than replacing them:

Axis engagement (mirrors sinew-port-kit.jsx)
nx = (knot_x − 0.5) · 2    ny = (knot_y − 0.5) · 2
engagement: eX = |nx|   eY = |ny|   eZ = |(knot_z − 0.5) · 2|
blend(manual, target, e) = manual + (target − manual) · e

tension = blend(tension, max(0, −nx), eX)    life   = blend(life, max(0, +nx), eX)
warmth  = blend(warmth,  max(0, −ny), eY)    weight = blend(weight, max(0, +ny), eY)
anchor  = blend(anchor, knot_z, eZ)

At 0.5 the axis is released and your manual macro value passes through untouched — which is why the defaults are 0.5 and not 0. Each axis is a plain automatable parameter, and all three are surfaced as knobs in Master Settings so a host's "link to last tweaked control" picks up the axis rather than the six macros the knot is shouting.

Knot Active
knot_active ON (the default) means the knot drives the macros and only macro sources reach meta destinations — modulator depths, drift depth, tendon amounts. Switch it OFF for flat-patch mode: the macros freeze at their manual values and meta routes from any source go live. It is automatable by design, as a performance switch between expressive and flat modes.

Source

The Source page hosts two independent oscillators, a per-oscillator FX slot, an FM operator and a noise generator. Everything here sums onto the pre-filter bus.

Oscillator Models

Each oscillator picks from eleven models.

Osc 1 and Osc 2 share the list except at index 1, where Osc 1 reads Wavetable Sine and Osc 2 reads Wavetable Triangle. Both default to index 1; Osc 2 also defaults to −12 semitones at level 0.

Per-oscillator FX

Each oscillator has its own FX slot with eight types: None, Spasm, Sync, Phase Squeeze, Ring Modulator, Freq Shift Up, Freq Shift Dn, Undertow. Each type reads a different subset of the slot's controls — the rest are inert.

Wavetable Interpolation & Natural Mip

Trilinear scan + natural mip recovery
// The phase index interpolates across samples, mip levels and frames.
// Natural mip mode recovers raw harmonic power using the recovery gain in the mip bank:
value_corner = raw_corner * (max_value / 0.99);
output = trilinear_blend(value_corner, phase, mip_coord, frame_coord);

By default each mip level is peak-normalised, so the top octave stays bright and consistent. Natural Mip (Master Settings) keeps the raw per-mip harmonic energy instead, so higher notes shed highs the way an acoustic source would — subtler, more analogue, quieter up top.

Tone

The Tone page carries the voice filter, the amplitude and filter envelopes, and the node editor for the Expression Filter.

Filter Topologies

Eleven types. Types 9 and 10 are four-pole; the Sallen-Key is two-pole; Dispersion, Formant, Multi Node and Draw Free are not simple rolloffs at all, so no single dB/octave figure describes them.

Filter Response Explorer drag the plot — X sets cutoff, Y sets resonance
Cutoff is not a log knob
filter_cutoff uses a JUCE skewed range with skew 0.35, which denormalises as 20 + 19980·n^(1/0.35) — a power law with exponent 2.857, not a logarithm. The two agree only at the endpoints. A knob sitting at 50% is not at the geometric middle of 20 Hz–20 kHz. The explorer above works in Hz for exactly this reason.

Zero-Delay Feedback topologies

Diode ladder ZDF elimination
// The linear system of the diode ladder with bidirectional loading is solved per sample:
s_next = (I + g * A)^-1 * (s_current + g * B * input);

The Ladder is a four-pole ZDF topology using tanh differential pairs — the classic transistor ladder, with warm resonant clipping. The Diode Ladder models diode junction loading in both directions; its DC divergence is handled by a corrected pole elimination.

Expression Filter

The Expression Filter (the dancing EQ) is five movable nodes. Nodes 1 and 5 are end nodes and can each be a Shelf or a Cut; nodes 2–4 are bells. Each node has its own frequency, gain and Q, and filter_resonance scales every node's Q on top.

The same engine is what the Output FX EQ card binds. There is no separate three-band parametric EQ any more — see the note on the Output FX page.

Expression Filter Nodes drag a node — X sets frequency, Y sets gain · scroll over a node for Q
Staging the Expression Filter
Resonant boosts run free — the only ceiling in the tone stage is a ±8 finite guard. Use Expr Trim to set the filter's output gain and stage it into the limiter yourself.

Sub

The Sub page is a dedicated sub-oscillator with an additive harmonic mixer, its own envelope and a note-tracking law that keeps it out of the mid-range as you play up the keyboard. It ships on, at level 0.5.

Harmonic mixer

Three partials, weighted independently. At the defaults — fundamental 1.0, h2 and h3 at 0, note-follow 0 — the sub is a pure sine.

Sub Harmonic Mixer move the played note and watch note-follow pull h2 and h3 back

Where the sub injects

Sub Env Follow decides two things at once. On, the sub is glued to the voice amplitude envelope and runs through the whole FX chain. Off — with the Sub ENV card enabled — the sub uses its own attack/release and injects post-FX, straight to the limiter, as an independent layer. Sub Env Smoothing softens the follower's transient response; 0 leaves it unsmoothed.

Equal Power coupling
With Equal Power on (Master Settings), the sub is coupled to the main voice by constant power — (main + sub)/√(1 + level²), up to −3 dB on the sum as the sub rises — instead of stacking additively. It is one opt-in for both the sub law and the Body dry/wet law. Off, the two sum additively and get louder as levels rise.

Body

The Body page is an additive parallel modal resonator: a bank of 32 coupled-form resonators running alongside the voice, not in series with it. It models the ring of strings, membranes, wood and metal.

Stability
The bank is feedback and will happily sing. Pole radius is hard-clamped to 0.99985, strictly below 1, so no mode can ever become a self-sustaining oscillator on a denormal or DC nudge. Tone is computed in bounded log2 space (±12 octaves) so a near-zero mode ratio can't generate runaway excitation, and modes below 20 Hz fade to silence instead of piling up at the clamp.

Mode layout

Every mode's frequency, gain and ring time comes out of the same control-rate recompute. The plot below is that computation, ported line-for-line — including the Logic Bender's partial stride.

Modal Mode Plot 32 modes — position is frequency, height is the mode's gain coefficient

Physical controls

Excitation

Body Exciter balances a noise source against the selected continuous tap; despite its modal_drive_mix ID it is a source blend, not saturation. Actual saturation is Body Drive, in dB into the bank-sum tanh. Body Strike is separate again: a velocity-scaled coloured-noise burst armed on every note-on.

Body Exciter Tap chooses what feeds the bank. Raw Oscillators taps pre-filter so the resonator hears the full harmonic source; Post Filter taps after the voice filter, so filter movement and drive colour the excitation.

Output

Body Wet is an additive level. Body Dry Level scales the dry voice inside the blend, so Dry 0 with Wet up gives you the resonator solo. With Equal Power on, the blend is normalised as 1/√(dry² + wet²), capped at 4×, so balancing dry against wet holds perceived level.

Body Inject (Pre-FX) decides whether the Body sum enters at output-FX slot 1 — shaped by the whole chain — or goes straight to the limiter.

Output FX

Eight stages in three zones plus a pinned limiter. Only the mono and time zones reorder.

FX Chain Sandbox drag within a zone to reorder · click a chip to enable/bypass it

EQ

The EQ card is the Expression Filter
The EQ stage is the Expression Filter — the same five-node engine documented on the Tone page, so shaping it here and shaping it there are the same thing.

Multiband Compressor

Three bands split by 24 dB/oct Linkwitz-Riley crossovers. Each band has independent downward compression (threshold, ratio — peaks pulled down) and upward compression (threshold, ratio — quiet material lifted), plus its own attack and release.

Compressor Transfer Curve one band's input→output law, with the depth scalars and the up-ceiling applied

Three global scalars sit on top of the per-band settings. Down Depth and Up Depth scale the computed gain-reduction and gain-lift in dB; Depth is then a per-band wet/dry mix of the result. Comp Up Ceiling is the one that matters most in practice — upward makeup is otherwise unbounded, and at quiet levels with a high ratio it will compute tens of dB and shove noise, tails and resonances into every nonlinear stage downstream. 24 dB is effectively uncapped.

Fold / Distortion

Nine algorithms: Wavefold, Chebyshev, Slew, Memory, Tube, Tape, Diode, Neural Axon, Orbital Phasor.

Tube and Tape are deliberately crossed
Tube is the brighter, more aggressive of the two; Tape is the tamer, band-limited one.

Dispersion sits just ahead of the folder: one bipolar knob, magnitude for strength and sign for direction, 0 at centre meaning off and the folder path bit-exact. Folder Tone is a bipolar 1 kHz tilt on the wet fold signal only — positive brightens. Folder Oversample trades CPU for a cleaner fold, most audible on bright content at heavy drive.

Delay

A stereo delay with a filtered, degradable feedback loop. Time follows either milliseconds or a host-synced division; Time Mode decides what happens while the time changes — Tape pitches as it moves, Pitch Neutral holds pitch, Jump cuts. Time Slew sets how lazily the line chases a new time.

Inside the loop you get a filter (LP/HP/BP with cutoff and resonance), a low cut, bit-depth reduction down to 2 bits and sample-rate reduction down to 1 kHz — each repeat is degraded again, so the tail evolves rather than just fading. Cross Feedback and Feedback Rotate move the repeats around the stereo field. Duck pulls the repeats down while the dry signal is loud.

Feedback is capped at 0.95 so the loop is always contractive. The Logic Bender can lift that past unity.

Granular

A pitch-tracking granulator built for bass. It splits the input at Crossover — expressed as a multiple of the tracked fundamental — and granulates only the band above, so the low end stays solid. Sub Drive then drives that untouched low band.

Grain Size, Grain Pitch (±1 octave), Density and Weave shape the cloud; Freeze holds the buffer so it sustains on captured material. Tracking follows the played MIDI note by default, or Manual F0 if you switch that off.

Width

A mono maker plus a decorrelator. Everything below Mono Freq stays centred; above it, the chosen decorrelator generates the side signal:

Reverb

Mix is bipolar with an equal-power crossfade. Decay and Time (pre-delay) are 0–1 normalised controls, not seconds. Xover Freq lets bass bypass the tank entirely, mirroring the Width mono maker.

Limiter

Always last, and on by default. Three modes: Lookahead reports its latency to the host as PDC and updates it dynamically; Soft Clip is memoryless tanh; Hard Clip is a straight clamp. The detector is high-passed (SC Freq / SC Slope) so low-frequency energy doesn't pump the whole mix.

Behind everything, a fixed ±4.0 host clamp catches the signal before it leaves the plugin, whatever else is going on.

Adapt

The Adapt cards change the instrument's behaviour based on what you play. This is the one documented exception to Sinew's no-hidden-DSP rule: these cards deliberately reach across the synth.

Drift

Global living detune. Three characters — Analog Slow, Organic Uneven, Unstable Rubber — with depth and rate. Drift Depth is a meta destination, so the knot can open and close it.

Tendon

Four shapes, each using a different subset of the four amount slots. Slots that a shape doesn't use are inactive rather than hidden:

All four Tendon amounts are meta destinations.

Harmonic Guard

Suppresses upper-partial energy on high keys so notes approaching Nyquist don't alias. Separate bipolar weights for the upper oscillator content, the sub, the drive stages and wavetable position.

Resonance Memory

Charges a storage cell on note strikes and bleeds it back slowly, the way a soundboard keeps ringing after the note. Three modes — Warm Trace, Acid Latch, Hollow Follow — with charge rate, decay rate, amount and bipolar note tracking.

Mod

The modulation matrix is 64 independent routes. Each route picks one of 21 sources, one of 192 destinations, a bipolar amount and a bypass. Every slot is identical and every slot works — there is nothing special about the first three beyond their parameter IDs predating the rest.

Route Builder pick a source and a destination — the readout is what the route does

Modulators

Sinew carries two LFOs, two MSEGs, the Logic engine, a sidechain input, the standard MIDI sources and the six knot macros.

Sync ships OFF, and that is deliberate
A tempo-synced modulator holds while the host transport is stopped. With sync on by default, an enabled LFO looked broken to anyone auditioning without a transport running — which is how you actually design a sound. So sync ships off on both LFOs and both MSEGs: you only ever meet the freeze having armed sync yourself, where "held" explains itself.

Meta destinations

Some destinations are meta: they modulate a modulator's own depth rather than an audio parameter — LFO depths, MSEG depths, Drift Depth, the Tendon amounts, Filter Env Amount. While knot_active is on, only the knot macros reach them. Turn Knot Active off and meta routes from any source go live. The route builder above flags them.

Rate snapping

When you modulate a synced rate, Rate Snap decides what happens between divisions. Stepped (default) snaps to the nearest division and glides between steps via smoothing. Free glide sweeps continuously and only snaps once the value settles.

Mod Flip

Mod Flip is a single global control that morphs the polarity of every route at once. 0 is identity.

MIDI

The Mod page's sixth tab is a piano roll and a four-tab console: Arp, Note Follow, Touch and MIDI Out.

Arp

Sinew is monophonic. Hold a chord with the arp on and the single voice walks it — Mode sets the order, Division the step length, Octaves and Octave Direction how far it climbs. A note added mid-cycle joins in place without restarting the pattern. Hold latches the chord so it survives releasing the keys; the next fresh chord replaces it.

Notes generates extra tones from each held key rather than taking them from your fingers — spread across the Octaves range and snapped to the key. Density thins the pattern to rests without reordering it. Gate, Swing and the velocity controls shape each step; Gate and Swing are mod destinations, sampled once per step, so an LFO or MSEG can push the groove around.

Key Mode quantises to a scale. Quantise Scope decides how far that reaches: generated notes only, the notes you play as well, or everything.

Steps follow the host transport. Transport Stop chooses what happens when the host parks — silence, free-run on the internal clock, or hold the current step. Arp Tempo drives that internal clock standalone, and is ignored whenever a host transport exists.

The arp is outside the morph: no pole captures it and no morph position moves it, so it stays under your hand while the puck travels.

Note Follow, Touch

Note Follow turns key position into a modulation source: a note window with a response curve, optional bipolar output about the centre, and a choice between tracking pitch continuously or latching at each note-on. Touch shapes the Velocity, Aftertouch and Mod Wheel sources — curve, range and smoothing each. Both tabs shape sources; neither does anything until you route it in the matrix.

MIDI Out

Sinew plays the bass note and emits a voiced chord above it on MIDI channel 2. Route that to another instrument and one finger drives both. Harmony sets the chord's relationship to the bass note and Polyphony its size; Voicing inverts it a tone at a time. Rate decides when the chord re-strikes, and Timing slides it up to half a step either side of the beat — pushing it early needs the arp running, because only a scheduled step can be anticipated.

With the layer enabled, incoming notes on channel 2 are dropped, so a host that loops Sinew's output back to its input cannot make it play itself. Sinew is never a MIDI thru: nothing you play arrives at its output.

Morph

Patch Morph captures four whole patches into poles A–D and interpolates between them as you move a puck across a 2D field.

Morph Orbit drag the puck · gravity biases each pole's pull

Capturing and editing poles

Click a slot chip to capture the current patch into it. Right-click opens the pole menu — Edit, Copy, Swap, Clear. In Edit mode you tweak parameters directly on that pole and then commit them back into the slot; right-click cancels.

Driving the puck

The puck sits at morph_x / morph_y. Drag it, automate the two parameters from your host, or route anything in the Mod matrix to Morph X and Morph Y — they are ordinary modulation destinations, so an LFO, an MSEG or a knot macro can take the wheel.

Immovables

Some parameters are deliberately excluded from the morph and hold their live value across the whole field — the performance inputs (knot_x/y/z), output_gain and mono_mode among them. Otherwise moving the puck would yank your output level and voice mode around mid-performance.

The whole arp sits outside the morph too. It is a performance layer, not patch character — a time division is not a useful thing to crossfade — so the morph never writes to it and it stays editable while you move the puck.

Morphing without clicks

Sinew uses a lock-free triple-buffer snapshot system:

Master Settings

The cog at the top right opens the master-settings modal. Most of its controls are dual — they also live on their own page — but a few are only here. They are grouped as Quality, Routing & Setup, Dynamics, Knot XYZ, Performance and Logic Bender.

SettingWhat it does
Natural Mip
osc_mip_natural
Un-normalised wavetable mip levels. Higher notes shed highs like an acoustic source instead of holding a peak-normalised top octave.
Folder Oversample
fx_folder_oversample
Runs the wavefolder at a multiple of the sample rate and decimates. More CPU, less aliasing.
Source Balancing
src_level_scaling
Additive or Percentage. Percentage is attenuate-only: it scales the pre-filter bus back to unity if the authored level knobs sum above 1.0, and leaves a bus summing ≤1.0 exactly as it is. It bounds the authored knob sum, not the instantaneous signal, so a modulated source can still peak past its share.
Body Inject (Pre-FX)
modal_pre_fx
Body sum through the FX chain, or straight to the limiter.
Body Exciter Tap
modal_exciter_tap
Raw oscillators or the post-filter voice.
Equal Power
modal_sum_comp
One opt-in for the whole sub/body headroom law. Off is the additive path for both.
Sub Env Follow
sub_env_follow
Sub glued to the voice envelope and run through the FX chain, or independent and injected post-FX.
Comp Up Ceiling
fx_comp_up_ceil
Hard cap in dB on the compressor's upward makeup.
Expr Trim
expr_output_trim
Output trim on the Expression Filter, replacing the hidden ±1 brickwall.
Knot X / Y / Z
knot_x · knot_y · knot_z
The three knot axes as plain knobs, so a host's "link to last tweaked control" picks up the axis instead of the six macros the knot sends more loudly.
Rate Snap
rate_snap_mode
Stepped or Free glide, for modulated synced rates.
Mono Mode · Glide Time · Glide Curve · Pitch Bend Range
performance
Voice allocation, portamento and bend range.

Logic Bender

The Logic Bender exposes normally-hidden algorithmic fields so you can push them past their musical bounds. It is gated behind a deliberate consent step.

What "unbind" actually removes
Arming the Logic Bender unclamps ranges. It does not remove the safety net: the output limiter and the NaN net stay wired no matter what you do here. It can get ugly, but it cannot go silent-dead. Disarmed — the default — every field below is inert and the engine is bit-identical to normal.

Each field only affects its module when that module is enabled.

Parameter Index

Every automatable parameter in the instrument, searchable by name, ID or description. Generated from the plugin's parameter layout.

Reserved parameters

These entries appear in your host's automation list but drive nothing in the engine. They are flagged in the tables above and collected here.