backdraft
backdraft · effectsBACKDRAFT 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-60). The fed-back frame is delayed (DELAY, 0-1000ms 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. A FLICKER control (OFF / 6 / 24 / 50 / 60 / 120 Hz) models the display's pulsed emission as the virtual camera actually captures it, and then models what the CAMERA does to it: the emission rate beats against the camera's 60 fps sampling, so the per-frame loop gain oscillates around unity instead of being constant, and light can build up over several frames and then fade away rather than pinning at white — with a rolling-shutter band crawling down the frame at the beat rate. The captured light then passes through the sensor's multi-frame charge storage (a low-pass on the BEAT, so fast beats become soft shimmer while slow ones keep their full swing) and its saturating shoulder (so the modulation stops acting where the image is already hot and reads as contour shimmer rather than a full-field flash). That is what makes the fast positions breathe instead of strobe. 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 carries NO in-rack picture. It used to show a 320×240 display, and that display was the single biggest consumer of the card's width and height; taking it out bought the module a narrower rack tier and taller faders, which is the better trade for a panel with this many controls. Feedback is still steered by watching it, so the output is one click away rather than always-on: the ⛶ OUTPUT button opens Full Frame (the card itself becomes a video panel in the rack), Full Screen, and Present-on-another-display, all of which grow the SAME surface — the button is now the only entry point, since there is no picture to right-click. For an arbitrarily-sized monitor, patch OUT into VIDEO OUT. The controls sit in two rows. Down the left of the first row are the discrete switches — MIRROR X / MIRROR Y, SHAPE and PURE GEO — with TV MODE, its fill/band readout and the OUTPUT button to their right and the six-position FLICKER switch beneath them; beside and below them run the labelled fader banks: LOOP (Mix/FB/Delay), COLOUR (Luma/Chroma/R/G/B), KEY (Lighten/Darken), GEOMETRY (Zoom/Rotate/Off X/Off Y/Pixelate), TV SCREEN (Room/Border/Phosphor/Drive — BORDER is the bezel, i.e. the screen frame's thickness) and VIRTUAL CAMERA, whose two 2-D pads steer the camera's TILT and POSITION with a DIST fader beside them. A control that does nothing in the current mode is DIMMED rather than hidden or disabled, so it stays draggable, resettable and MIDI-learnable and the card never changes height with the mode: the TV SCREEN bank dims while TV MODE is OFF (its title becomes a button that turns TV MODE on), and PURE GEO dims in PURE TV / CRITICAL, where SHAPE means only the screen's outline.
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-1000ms). The range was DELIBERATELY doubled from its original 0-500ms (owner request), so a ±1 sweep from an older patch now covers twice the milliseconds it was authored against. 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). While a cable is patched here the Delay fader is ignored ENTIRELY: from the moment of patching the effective delay HOLDS its current value (no jump), and once two rising edges land it locks to one clock-pulse duration (capped at 1000ms = one beat at 60 BPM, the same cap as the fader) and tracks the clock from then on. Fader moves while patched change only the stored position; unpatching returns control to the fader at wherever it now sits. The fader shows the override (dimmed, with a CLK badge). A short TRIGGER works exactly as well as a held gate: the rising edge is detected as the value arrives from the patch bridge rather than sampled once per rendered frame, so a 5ms pulse cannot be missed and the lock does not depend on how fast the renderer is running. The measured period is accurate to about one 25ms bridge tick, which is how often the bridge can deliver an edge at all — well inside the resolution the delay is quantized to anyway (one video frame). control voltage (CV); modulates delayClock (summed directly (the destination DSP scales it)); trigger — fires once per rising edge |
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: the rising edge is detected as the value arrives from the patch bridge rather than sampled once per rendered frame, so a short 5ms trigger advances it exactly as reliably as a sustained gate, and holding the gate high advances it once and then leaves it alone. control voltage (CV); modulates mirrorXGate (summed directly (the destination DSP scales it)); trigger — fires once per rising edge |
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: the rising edge is detected as the value arrives from the patch bridge rather than sampled once per rendered frame, so a short 5ms trigger advances it exactly as reliably as a sustained gate, and holding the gate high advances it once and then leaves it alone. control voltage (CV); modulates mirrorYGate (summed directly (the destination DSP scales it)); trigger — fires once per rising edge |
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: the rising edge is detected as the value arrives from the patch bridge rather than sampled once per rendered frame, so a short 5ms trigger advances it exactly as reliably as a sustained gate, and holding the gate high advances it once and then leaves it alone. control voltage (CV); modulates shapeGate (summed directly (the destination DSP scales it)); trigger — fires once per rising edge |
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: the rising edge is detected as the value arrives from the patch bridge rather than sampled once per rendered frame, so a short 5ms trigger advances it exactly as reliably as a sustained gate, and holding the gate high advances it once and then leaves it alone. control voltage (CV); modulates pureGeoGate (summed directly (the destination DSP scales it)); trigger — fires once per rising edge |
tv_gate | cv | Gate/clock input (raw passthrough, edge-detected). A RISING edge CYCLES TV MODE (off → PURE TV → CRITICAL → off), so a clock can flip the module between the infinite-plane tunnel and the bounded-screen television. Edge-triggered, not a held level: the rising edge is detected as the value arrives from the patch bridge rather than sampled once per rendered frame, so a short 5ms trigger advances it exactly as reliably as a sustained gate, and holding the gate high advances it once and then leaves it alone. control voltage (CV); modulates tvGate (summed directly (the destination DSP scales it)); trigger — fires once per rising edge |
room | cv | CV (linear) that modulates the Room control — the light level OUTSIDE the TV screen in PURE TV / CRITICAL. A slow LFO here is Crutchfield's flashlight gesture (his rig needs external light to restart a dark screen). No effect while TV MODE is off. control voltage (CV); modulates room (additive offset — ±1 CV sweeps the full range, centered on the knob) |
phosphor | cv | CV (linear) that modulates the Phos control, the one-frame image retention (camera charge storage) applied in place. No effect while TV MODE is off. control voltage (CV); modulates phosphor (additive offset — ±1 CV sweeps the full range, centered on the knob) |
drive | cv | CV (linear) that modulates the Drive control — CRITICAL's auto-exposure servo rate, i.e. how hard the mode sits on the edge of white-out. Below the midpoint the picture is a still nest; above it, it breathes. No effect outside CRITICAL. control voltage (CV); modulates drive (additive offset — ±1 CV sweeps the full range, centered on the knob) |
cam_tilt_x | cv | CV (linear, bipolar) that modulates Tilt X — swings the virtual camera left/right of the screen's normal, keystoning the set horizontally. No effect while TV MODE is off. control voltage (CV); modulates camTiltX (additive offset — ±1 CV sweeps the full range, centered on the knob) |
cam_tilt_y | cv | CV (linear, bipolar) that modulates Tilt Y — swings the virtual camera above/below the screen's normal, keystoning it vertically. No effect while TV MODE is off. control voltage (CV); modulates camTiltY (additive offset — ±1 CV sweeps the full range, centered on the knob) |
cam_pos_x | cv | CV (linear, bipolar) that modulates Cam X — slides the virtual camera sideways in its own plane, out past the screen's borders at the extremes. No effect while TV MODE is off. control voltage (CV); modulates camPosX (additive offset — ±1 CV sweeps the full range, centered on the knob) |
cam_pos_y | cv | CV (linear, bipolar) that modulates Cam Y — slides the virtual camera up/down in its own plane. No effect while TV MODE is off. control voltage (CV); modulates camPosY (additive offset — ±1 CV sweeps the full range, centered on the knob) |
cam_dist | cv | CV (linear) that modulates Dist — how far the virtual camera stands off, i.e. how violently a given tilt keystones. No effect while TV MODE is off, or while the camera is dead-on. control voltage (CV); modulates camDist (additive offset — ±1 CV sweeps the full range, centered on the knob) |
panic | cv | Gate/clock input (raw passthrough, edge-detected). A RISING edge fires PANIC — the same reset as the faceplate's PANIC button: every user-settable control returns to its default in one undoable step. Patching is untouched: no cable is added or removed, so a CV source modulating a control keeps modulating it, now around the restored default base. Edge-triggered, not a held level: the rising edge is detected as the value arrives from the patch bridge rather than sampled once per rendered frame, so a short 5ms trigger fires it exactly as reliably as a sustained gate, and holding the gate high fires it once and then leaves it alone. control voltage (CV); modulates panicGate (summed directly (the destination DSP scales it)); trigger — fires once per rising edge |
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 | — | discrete |
mirrorY | Mirror Y | 0..1 | — | discrete |
mirrorXGate | Mir X Gate | 0..1 | — | linear |
mirrorYGate | Mir Y Gate | 0..1 | — | linear |
shape | Shape | 0..? | — | discrete |
pureGeo | Pure Geo | 0..1 | — | discrete |
shapeGate | Shape Gate | 0..1 | — | linear |
pureGeoGate | PureGeo Gate | 0..1 | — | linear |
flicker | Flicker | 0..? | — | discrete |
tvMode | TV Mode | 0..? | — | discrete |
tvGate | TV Gate | 0..1 | — | linear |
room | Room | 0..1 | — | linear |
bezel | Bezel | 0..1 | — | linear |
phosphor | Phos | 0..1 | — | linear |
drive | Drive | 0..1 | — | linear |
camTiltX | Tilt X | ?..? | — | linear |
camTiltY | Tilt Y | ?..? | — | linear |
camPosX | Cam X | ?..? | — | linear |
camPosY | Cam Y | ?..? | — | linear |
camDist | Dist | 0..1 | — | linear |
freeze | Freeze | 0..1 | — | linear |
panicGate | Panic Gate | 0..1 | — | linear |
controls
| control | what it does |
|---|---|
| B | B (-1..+2, default 1.0): per-channel blue gain on the feedback. 1 = neutral. |
| Bezel | Bezel — labelled BORDER on the card, because 'border thickness' is what people look for (0..1, default 0.5 = the shipped look, mid-travel): the THICKNESS of the set's border, in screen-local units, so a level-k bezel automatically lands 3/4-scaled — deeper borders shrink because they are IMAGES of the real one. The fader reaches EXACTLY 0 (a borderless screen) at the bottom and opens thicker than the default at the top. Worth knowing what 0 costs, because it is a real trade rather than a free option: the border is the only high-contrast boundary between one nesting level and the next, so at 0 the nest stops reading as frames-within-frames and becomes a smooth zoom. That is a legitimate look, it is simply not the one the mode is named for. Inert while TV MODE is off. |
| Dist | Dist (0..1, default 0.5): how far the virtual camera stands off the screen, and therefore how hard a given TILT keystones. Short (wide-angle) throws violent perspective and makes the nest curl hard; long (telephoto) barely skews it. The fader is geometric — equal steps are equal FACTORS — because perspective strength is a ratio, not an offset. It does NOTHING while the camera is dead-on, since a square-on view has no perspective to strengthen. |
| Cam X | Cam X (-0.5..+0.5, default 0 = centred): VIRTUAL CAMERA ORIENTATION. Slides the camera sideways in its own plane — at the extremes it sits well BEYOND the screen's borders. Position alone SHIFTS the view without bending it; the bend comes from Tilt. The two together are how you look at the set from above and off to one side, exactly as you would move a real camera: raise Cam Y, then tilt down to bring the screen back into frame. |
| Cam Y | Cam Y (-0.5..+0.5, default 0 = centred): slides the camera up or down in its own plane, from dead centre to above or below the screen. Pairs with Tilt Y. |
| Tilt X | Tilt X (-0.2..+0.2, default 0 = dead-on): VIRTUAL CAMERA ORIENTATION. Swings the camera left or right of the screen's normal while it keeps pointing the same way, so the set images as a TRAPEZOID rather than a rectangle — the far edge shorter than the near one. Because every pass re-photographs the pass before it, the keystone COMPOUNDS: the nest curls away toward the vanishing point instead of shrinking straight into the middle. Deep levels therefore go illegible sooner than they do dead-on; that is what an angled camera really does, not a defect. Re-aiming the camera also MOVES THE VANISHING POINT — the accumulation point of the frame-in-frame-in-frame is the fixed point of the map, so tilting re-composes the whole nest rather than just sliding the picture across the frame. And because the map is ITERATED, that re-composition RECURSES THROUGH THE FEEDBACK NETWORK: the move reaches level k only after k*DELAY frames, so a camera gesture travels inward through the nest exactly the way motion in the room and the refresh seam do. 0 is the exact dead-on default, where the map is the plain affine one and this control costs nothing. |
| Tilt Y | Tilt Y (-0.2..+0.2, default 0 = dead-on): the vertical half of the tilt joystick — swings the camera above or below the screen's normal, keystoning the set top-to-bottom. Combine with Tilt X to look in from a corner. 0 is dead-on. |
| 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..1000 ms, default 16): feedback tap delay, snapped to the nearest whole frame (~1 frame at default). The delay ring only allocates what the current delay needs and grows as you raise it (never shrinking back), so a big upward jump briefly restarts the trail while the deeper history fills. While DELAY CLK is patched this fader is ignored entirely (dimmed + CLK badge, and the label reads 'Dly·CLK' on the legacy card): the effective delay holds, then tracks the clock; unpatching hands control back to the fader at its current position. |
| 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. |
| Drive | Drive (0..1, default 0.5): CRITICAL's auto-exposure servo RATE — how hard the mode rides the edge of white-out. This is a time constant, not a gain, and the fader is geometric (equal steps are equal FACTORS, from 1 to 49 per frame) because a servo speed is scale-free; that also makes a linear CV ramp read as a smooth accelerando into instability rather than a cliff. The default 0.5 sits exactly ON the measured bifurcation. Below it the servo is a well-behaved regulator and the nest is dead still; above it the servo overshoots into a sustained limit cycle and the picture breathes — blooming toward white, being hauled back, and sending each correction inward through the nest one level per DELAY. The swing deepens monotonically with the knob. The exposure state is hard-clamped, which is what makes a white-out always recoverable: back DRIVE off and the nest returns. Ignored outside CRITICAL. |
| 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. |
| Flicker | Flicker (discrete OFF / 6 / 24 / 50 / 60 / 120, default OFF): in PURE TV / CRITICAL this ALSO drives the virtual refresh — the line-by-line redraw seam that cascades through the nest (see TV Mode). Models a real display emitting light in PULSES rather than continuously, the camera integrating over an exposure window shorter than the pulse period, and the camera sampling at its own frame rate. The two rates BEAT, so the per-frame loop gain cycles above and below its own average instead of being constant — which is what lets pulses of light build up over several frames and then fade away rather than saturating to white and staying there. OFF is the exact no-op (the shader branch is skipped, output is bit-identical). The virtual camera runs at a fixed 60 fps, so the beat is: 6 Hz at the 6 position (below the camera rate, so no aliasing — the camera sees the pulsing DIRECTLY at 10 frames per cycle, the slowest and most obvious breathing); 24 Hz at 24 (2.5 frames per cycle, a fine fast texture); 10 Hz at 50 (6 frames per cycle — the classic look of filming a PAL monitor with an NTSC camera, and the best all-round build-and-fade); 0.06 Hz at 60 (the true NTSC field rate 60000/1001 = 59.94 Hz, a ~16.7-second slow swell — the slowly crawling hum bar you see filming a television); and 0.12 Hz at 120 (119.88 Hz, 2x NTSC — the rolling shutter fits almost exactly one full band cycle down the frame here, which cancels the whole-frame pulsing and leaves a PURE crawling band). Exact multiples of 60 would genlock to a constant gain and not move at all, which is why the 60 and 120 positions use the NTSC rates. A 90-degree shutter (1/240 s) sets how much of each pulse is caught, and the rolling shutter spreads the flicker phase down the frame so a soft light/dark band crawls vertically at the beat rate and feeds back through the loop. Two camera-side terms keep it watchable rather than strobing: the sensor's multi-frame charge storage is a LOW-PASS ON THE BEAT (it cuts 6/24/50 hard and passes 60/120 essentially untouched, so the fast positions shimmer and the slow ones breathe), and a saturating capture shoulder makes the response level-dependent so the modulation acts on midtone contours instead of flashing the whole field. The loop's average gain is held constant as you switch positions, so the FB control keeps meaning the same thing. |
| 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. |
| Panic Gate | Panic Gate (0..1, default 0): hidden synthetic param the panic CV bridge writes (raw gate swing). No card knob; a rising edge fires the settings reset the PANIC button also fires. |
| Phos | Phos / Phosphor (0..1, default 0): one-frame image retention, applied IN PLACE (no transform) — the term that makes delay smear rather than step. Despite the name this is NOT phosphor: a colour TV's P22 phosphor retains about 4e-73 of a frame, which is nothing, and Crutchfield says so himself. The real integrator in a camera-at-a-TV rig is the CAMERA's charge storage, roughly 10 frames, and that is what this models. Level k has been through the filter k times, so deeper levels are older in proportion to k and blurrier in time in proportion to the square root of k. Unit DC gain, so it changes only the temporal smear and never the converged image. Tube ladder: 0 = colour TV (no inter-frame tail exists, and the honest default), 0.13 = P4 mono TV, 0.16 = P1 scope green, 0.86 = P39 radar, 1.0 = P7 dual-layer radar. Inert while TV MODE is off. |
| 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. |
| Room | Room (0..1, default 1.0): the light level OUTSIDE the screen in PURE TV / CRITICAL — the live input at full strength plus a 5% ambient floor. The ambient floor is range-preserving, so even with nothing patched the mode still lights its own room and demonstrates its geometry. Turning ROOM down dims the set and the whole nest with it (the brightness cascade stays correctly ordered at every room level, rather than flattening or inverting as an absolute lift would). Inert while TV MODE is off. |
| 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. |
| TV Gate | TV Gate (0..1, default 0): hidden synthetic param the tv_gate CV bridge writes (raw gate swing). No card knob; a rising edge cycles TV MODE. |
| TV Mode | TV Mode (discrete OFF / PURE TV / CRITICAL, default OFF): switches BACKDRAFT from an infinite feedback PLANE to a bounded SCREEN. OFF is the exact no-op — the shader branch is skipped and the classic composite is untouched. PURE TV builds the thing a camera pointed at a television actually sees: the previous frame is drawn, whole, inside a bezelled screen rectangle that fills 75% of the frame (set by ZOOM), and OUTSIDE that screen is the live input — so IN PURE TV YOUR INPUT IS THE ROOM, NOT THE PICTURE, and the picture is the feedback. Because each pass places the entire previous view (room, bezel and picture) inside the next screen, the image NESTS: about 11 resolved frames-within-frames, each 3/4 the size of the last and each dimmer, converging on a milky core at 20% of the room level. That nesting is forced by the geometry rather than tuned, which is why no combination of the old FEEDBACK/ZOOM controls could ever produce it — the old map adds the live input to EVERY pixel and clamps the previous frame across the whole plane, so there is no 'outside the TV' left to re-image. PURE TV is a strict contraction: it converges to a STILL nest, and motion in the room cascades inward one level per DELAY. CRITICAL keeps that geometry and adds the camera's AUTOMATIC EXPOSURE — a servo with memory that meters the frame it just captured and pushes its gain the other way. Because it integrates, it overshoots, and past the DRIVE midpoint the overshoot becomes a self-sustaining limit cycle: the picture blooms toward white, the servo hauls it back, and the correction propagates inward through the nest one level per DELAY as a travelling annulus. That is the mode for riding the edge of white-out. In BOTH TV modes the FLICKER control additionally drives a VIRTUAL REFRESH: a real set is redrawn line by line, so its face at any instant is a SEAM between two successive fields — new above the beam, previous below it — and a camera pointed at it catches that seam. Because the seam sits in the MONITOR's own raster rather than in the camera's frame, every nesting level re-photographs a screen that already has one, so level k carries k seams at k different ages and the refresh cascades inward through the whole nest. FLICKER's rate sets how fast the beam sweeps: the 60 position (the true NTSC field rate) leaves it creeping, which is the classic slow hum bar you see filming a television, while the 6 position races it down the frame several times a second. FLICKER OFF is the exact no-op — no beam, no seam, and the tap is unchanged. This is a different effect from FLICKER's rolling-shutter brightness band, which stays in SCREEN space because the shutter scans the sensor and not the scene: one changes a row's BRIGHTNESS, the other changes which FRAME the row came from. The TV button cycles the mode; tv_gate cycles it on a rising edge. |
| 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.