backdraft
backdraft · effects · schema v1BACKDRAFT is a video feedback generator. It builds a "source" image by crossfading two video inputs (IN A / IN B) with MIX, then composites that against a processed copy of its OWN previous output, read from an internal ring of past frames so there is no live GL feedback loop (downstream sees frame N while the tap reads N-1..N-30). The fed-back frame is delayed (DELAY, 0-500ms or a clock pulse), colour-processed (per-channel R/G/B gain, then LUMA brightness, then CHROMA saturation), scaled per-pixel by two key masks (KEY+ lightens / KEY- darkens the effect), and geometrically warped a little each pass (ZOOM/ROTATE/OFF X/OFF Y) so the transform COMPOUNDS into tunnels, spirals, and directional trails. Two MIRROR buttons fold the whole composited frame into a kaleidoscope. A SHAPE button cuts the frame to a geometric mask (square = full frame, then circle / pentagon / triangle / octagon), and a PURE GEO button picks the masking SPACE: ON masks the FINAL OUTPUT in screen space (a fixed shape that cuts everything outside it at all zooms), OFF masks the SOURCE in the zoomed feedback space so the shape scales with ZOOM and its content spills out through the feedback tunnel (zoom-in pushes it toward the corners, zoom-out shrinks it). As FEEDBACK approaches its max (and a spatial transform is active) the additive trail-accumulator ramps into a pure recursive hall of mirrors. Usage: patch a camera or generator into IN A, raise FEEDBACK toward ~1 and nudge ZOOM off 1.0 (with a little ROTATE) for the classic infinite-tunnel look; add OFF X/Y for smear, PIXELATE for blocky lo-fi, a SHAPE for a geometric vignette, and clock DELAY CLK for rhythmic echo. Output is the OUT video jack. The card shows a large live video preview on the left that is resizable via the bottom-right corner-drag handle (width/height persist, snapped to rack tiles); right-click the preview for Full Frame / Full Screen / Present-on-another-display.
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
in_a | video | Video source A. Crossfaded against IN B by MIX to form the live 'source' image that is re-injected each frame; unpatched it reads black. RGB video stream |
in_b | video | Video source B. The other end of the MIX crossfade (MIX=1 selects this input fully); unpatched it reads black. RGB video stream |
lighten | video | Video KEY+ mask. Read as luma per pixel; where bright it scales the feedback effect UP (paired with the Lighten control). Unpatched = neutral (no boost). RGB video stream |
darken | video | Video KEY- mask. Read as luma per pixel; where bright it scales the feedback effect DOWN (paired with the Darken control). Unpatched = neutral (no cut). RGB video stream |
mix | cv | CV (linear) that modulates the Mix crossfade between IN A (0) and IN B (1). control voltage (CV); modulates mix (additive offset — ±1 CV sweeps the full range, centered on the knob) |
feedback | cv | CV (linear) that modulates the FB (feedback) amount, the per-frame persistence ratio of the fed-back frame. control voltage (CV); modulates feedback (additive offset — ±1 CV sweeps the full range, centered on the knob) |
delay | cv | CV (linear) that modulates the Delay control, the feedback tap delay in milliseconds (0-500ms). control voltage (CV); modulates delay (additive offset — ±1 CV sweeps the full range, centered on the knob) |
delay_clock | cv | Gate/clock input (raw passthrough, edge-detected). Each rising edge times a pulse; once two edges land, the feedback delay locks to one clock-pulse duration (capped at 500ms = one beat at 120 BPM) and OVERRIDES the Delay control. control voltage (CV); modulates delayClock (summed directly (the destination DSP scales it)) |
luma | cv | CV (linear) that modulates the Luma control, the feedback's overall brightness gain about black. control voltage (CV); modulates luma (additive offset — ±1 CV sweeps the full range, centered on the knob) |
chroma | cv | CV (linear) that modulates the Chr (chroma/saturation) control of the fed-back frame. control voltage (CV); modulates chroma (additive offset — ±1 CV sweeps the full range, centered on the knob) |
r | cv | CV (linear, bipolar) that modulates the R per-channel red gain of the feedback (range -1..+2). control voltage (CV); modulates r (additive offset — ±1 CV sweeps the full range, centered on the knob) |
g | cv | CV (linear, bipolar) that modulates the G per-channel green gain of the feedback (range -1..+2). control voltage (CV); modulates g (additive offset — ±1 CV sweeps the full range, centered on the knob) |
b | cv | CV (linear, bipolar) that modulates the B per-channel blue gain of the feedback (range -1..+2). control voltage (CV); modulates b (additive offset — ±1 CV sweeps the full range, centered on the knob) |
lighten_cv | cv | CV (linear) that modulates the Lgt (Lighten) control, the amount the KEY+ mask boosts the feedback effect. control voltage (CV); modulates lighten (additive offset — ±1 CV sweeps the full range, centered on the knob) |
darken_cv | cv | CV (linear) that modulates the Drk (Darken) control, the amount the KEY- mask reduces the feedback effect. control voltage (CV); modulates darken (additive offset — ±1 CV sweeps the full range, centered on the knob) |
pixelate | cv | CV (linear) that modulates the Pix (Pixelate) control, reducing the source's effective resolution (0 = identity, 1 = a single cell). control voltage (CV); modulates pixelate (additive offset — ±1 CV sweeps the full range, centered on the knob) |
zoom | cv | CV (linear) that modulates the Zoom control, the per-pass scale of the feedback tap about centre that builds the tunnel. control voltage (CV); modulates zoom (additive offset — ±1 CV sweeps the full range, centered on the knob) |
rotate | cv | CV (linear, bipolar) that modulates the Rot (Rotate) control, the per-pass rotation in degrees that turns the feedback into a spiral. control voltage (CV); modulates rotate (additive offset — ±1 CV sweeps the full range, centered on the knob) |
offsetx | cv | CV (linear, bipolar) that modulates the OffX (Off X) control, the per-pass horizontal translation of the feedback tap (directional trail). control voltage (CV); modulates offsetX (additive offset — ±1 CV sweeps the full range, centered on the knob) |
offsety | cv | CV (linear, bipolar) that modulates the OffY (Off Y) control, the per-pass vertical translation of the feedback tap (directional trail). control voltage (CV); modulates offsetY (additive offset — ±1 CV sweeps the full range, centered on the knob) |
mirror_x_gate | cv | Gate/clock input (raw passthrough, edge-detected). A RISING edge TOGGLES (flips) the Mirror X kaleidoscope fold, so a clock can flip it rhythmically. Edge-triggered, not a held level. control voltage (CV); modulates mirrorXGate (summed directly (the destination DSP scales it)) |
mirror_y_gate | cv | Gate/clock input (raw passthrough, edge-detected). A RISING edge TOGGLES (flips) the Mirror Y kaleidoscope fold. Edge-triggered, not a held level. control voltage (CV); modulates mirrorYGate (summed directly (the destination DSP scales it)) |
shape_gate | cv | Gate/clock input (raw passthrough, edge-detected). A RISING edge CYCLES the Shape mask to the next geometry (square → circle → pentagon → triangle → octagon → square). Edge-triggered, not a held level. control voltage (CV); modulates shapeGate (summed directly (the destination DSP scales it)) |
pure_geo_gate | cv | Gate/clock input (raw passthrough, edge-detected). A RISING edge TOGGLES the Pure Geo masking space (screen-space crop ↔ zoomed-source crop). Edge-triggered, not a held level. control voltage (CV); modulates pureGeoGate (summed directly (the destination DSP scales it)) |
outputs
| id | cable | what it does |
|---|---|---|
out | video | The feedback-rendered video output: the crossfaded source composited with the processed, delayed, spatially-warped, mask-scaled copy of the previous output. RGB video stream |
params
| id | label | range | default | curve |
|---|---|---|---|---|
mix | Mix | 0..1 | — | linear |
feedback | Feedback | 0..? | — | linear |
delay | Delay | 0..? | — | linear |
luma | Luma | -1..2 | — | linear |
chroma | Chroma | -1..2 | — | linear |
r | R | -1..2 | — | linear |
g | G | -1..2 | — | linear |
b | B | -1..2 | — | linear |
lighten | Lighten | 0..1 | — | linear |
darken | Darken | 0..1 | — | linear |
pixelate | Pixelate | 0..1 | — | linear |
zoom | Zoom | ?..? | — | linear |
rotate | Rotate | ?..? | — | linear |
offsetX | Off X | ?..? | — | linear |
offsetY | Off Y | ?..? | — | linear |
delayClock | Delay Clk | 0..1 | — | linear |
mirrorX | Mirror X | 0..1 | — | linear |
mirrorY | Mirror Y | 0..1 | — | linear |
mirrorXGate | Mir X Gate | 0..1 | — | linear |
mirrorYGate | Mir Y Gate | 0..1 | — | linear |
shape | Shape | 0..? | — | discrete |
pureGeo | Pure Geo | 0..1 | — | linear |
shapeGate | Shape Gate | 0..1 | — | linear |
pureGeoGate | PureGeo Gate | 0..1 | — | linear |
freeze | Freeze | 0..1 | — | linear |
controls
| control | what it does |
|---|---|
| B | B (-1..+2, default 1.0): per-channel blue gain on the feedback. 1 = neutral. |
| Chroma | Chr / Chroma (-1..+2, default 1.0): saturation gain about the pixel's own luma. 1 = neutral, 0 = greyscale, 2 = double saturation, negative = hue-inverted. |
| Darken | Drk / Darken (0..1, default 1.0): how much the KEY- mask reduces the feedback effect where the mask is bright. |
| Delay | Delay (0..500 ms, default 16): feedback tap delay, snapped to the nearest whole frame (~1 frame at default). Overridden + shown as 'Dly·CLK' with a CLK badge while DELAY CLK is patched. |
| Delay Clk | Delay Clk (0..1, default 0): hidden synthetic param the DELAY CLK CV bridge writes (raw gate swing). No card knob; the module edge-detects it to measure the pulse period that overrides the Delay control. |
| Feedback | FB / Feedback (0..2.0, default 0.85): per-frame feedback persistence. Above 1.0 gives runaway trails; near max (with a spatial transform active) it ramps into a pure recursive hall of mirrors. Each frame is clamped to [0,1] so it cannot blow out. |
| Freeze | Freeze (0/1, default 0): hidden determinism toggle. At ≥0.5 draw() is a no-op so the ring + output hold their last frame for deterministic VRT capture. No card control. |
| G | G (-1..+2, default 1.0): per-channel green gain on the feedback. 1 = neutral. |
| Lighten | Lgt / Lighten (0..1, default 1.0): how much the KEY+ mask boosts the feedback effect where the mask is bright. |
| Luma | Luma (-1..+2, default 1.0): brightness gain of the fed-back frame about black. 1 = neutral, >1 brightens, <1 darkens, negative inverts. |
| Mirror X | Mirror X (0/1, default 0): kaleidoscope toggle that folds the left half of the composited output over the right. Set by the MIRROR X button or flipped by a rising edge on mirror_x_gate. |
| Mir X Gate | Mir X Gate (0..1, default 0): hidden synthetic param the mirror_x_gate CV bridge writes (raw gate swing). No card knob; a rising edge flips Mirror X. |
| Mirror Y | Mirror Y (0/1, default 0): kaleidoscope toggle that folds the top half of the output over the bottom (both on = a 4-way quadrant fold). Set by the MIRROR Y button or flipped by mirror_y_gate. |
| Mir Y Gate | Mir Y Gate (0..1, default 0): hidden synthetic param the mirror_y_gate CV bridge writes (raw gate swing). No card knob; a rising edge flips Mirror Y. |
| Mix | Mix (0..1, default 0.5): crossfade between IN A (0) and IN B (1) to form the live source image. |
| Off X | OffX / Off X (-0.1..+0.1, default 0): per-pass horizontal translation (UV units) of the feedback tap, making a directional trail/smear; 0 = none. |
| Off Y | OffY / Off Y (-0.1..+0.1, default 0): per-pass vertical translation (UV units) of the feedback tap, making a directional trail/smear; 0 = none. |
| Pixelate | Pix / Pixelate (0..1, default 0): reduces the SOURCE resolution. 0 = identity (bit-exact), rising = blockier, 1 = the whole frame collapses to one representative colour. |
| Pure Geo | Pure Geo (0/1, default 0 = off): the SHAPE masking SPACE. ON masks the FINAL OUTPUT in screen space (a fixed shape that cuts content outside it at all zooms); OFF masks the SOURCE in the zoomed feedback space, so the shape scales with Zoom and its content spills out through the feedback tunnel. The PURE GEO button toggles it; pure_geo_gate toggles it on a rising edge. |
| PureGeo Gate | PureGeo Gate (0..1, default 0): hidden synthetic param the pure_geo_gate CV bridge writes (raw gate swing). No card knob; a rising edge toggles Pure Geo. |
| R | R (-1..+2, default 1.0): per-channel red gain on the feedback. 1 = neutral. |
| Rotate | Rot / Rotate (-30..+30 °, default 0): per-pass rotation of the feedback tap about centre. Combined with Zoom≠1 the echoes twist into a spiral; 0 = no spiral. |
| Shape | Shape (discrete 0..4, default 0 = square): the geometric mask cut over the frame — square (full frame, no crop), circle, pentagon, triangle, octagon. The SHAPE button cycles it; shape_gate cycles it on a rising edge. |
| Shape Gate | Shape Gate (0..1, default 0): hidden synthetic param the shape_gate CV bridge writes (raw gate swing). No card knob; a rising edge cycles Shape. |
| Zoom | Zoom (0.4..1.6, default 1.0): per-pass scale of the feedback tap about centre. <1 makes echoes recede (expanding tunnel), >1 magnifies them (zoom-in tunnel); 1 = no tunnel. |
source
backdraft.ts on GitHub.