backdraft
backdraft · effectsBACKDRAFT sends its output through a delayed feedback loop. ZOOM, ROTATE and offsets compound on every pass; RGB, LUMA and CHROMA control the returned signal. OFF uses the original composite. VIRTUAL CAMERA photographs a bounded screen surrounded by the live input as room light. CRITICAL adds automatic exposure. CRUTCHFIELD models separate monitor emission and camera charge: the delayed signal drives a nonlinear CRT with scan lines, colour triads and RGB decay; a perspective lens and spatial diffusion image it onto a camera target with persistent charge, nonlinear sensitivity and imperfect colour separation. Monitor history stays on the screen and charge stays on the sensor. ZOOM can cross unity. The crutchfield tab sets Defocus, Sensor lag, Tube decay, Exposure, Brightness and Contrast. Variation and Sensor seed describe a fixed camera response; REROLL SENSOR changes the saved seed in one undoable action while the loop keeps running. Variation zero removes all seeded differences. PHOS and DRIVE retain their existing behavior in VIRTUAL CAMERA/CRITICAL and are inert in CRUTCHFIELD. Start with feedback near 1, zoom near 1.02 and a little rotation; adjust exposure and contrast to explore decay versus saturation. Inputs illuminate the room and reflect faintly from the screen. The model follows Crutchfield, Space-time dynamics in video feedback (1984), equations 4–5 and Appendix A. Chosen CRT gamma, raster profile, colour coupling, lens imperfections and extended decay ranges are engineering approximations, not a calibration of his equipment. One rendered frame represents a virtual 60 Hz field, matching the delay ring; a slow renderer slows the simulation. The ModuleShell dock keeps a live preview across tabs, with SCREEN, PANIC and OUTPUT controls.
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, and an audio-domain CV cable (an LFO or envelope patched straight in) exactly as well as a gate cable: the rising edge is counted on the audio thread as the value arrives and replayed by the patch bridge, never 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. A video-domain CV output (a player's playhead) or a pitch cable still arrives on the per-frame sampler. The period is measured on the AUDIO clock: each replayed edge carries the audio-thread time it actually rose at, so the lock is sample-accurate however late the main thread gets round to replaying it (a starved page replays edges in bursts; the count and the times survive the burst). Only a per-frame write is stamped when it arrives — 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 → VIRTUAL CAMERA → CRITICAL → CRUTCHFIELD → 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 room illumination in VIRTUAL CAMERA, CRITICAL and CRUTCHFIELD. In CRUTCHFIELD it also reflects faintly from the glass. 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) modulating the existing PHOS image-retention blend in VIRTUAL CAMERA and CRITICAL. Inert in CRUTCHFIELD. 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 |
focus | Defocus | 0..1 | — | linear |
sensorLag | Sensor lag | 0..1s | — | linear |
tubeDecay | Tube decay | 0..0.5s | — | linear |
exposure | Exposure | 0..4 | — | linear |
blackLevel | Brightness | -0.3..0.3 | — | linear |
contrast | Contrast | 0..3 | — | linear |
sensorVariation | Variation | 0..1 | — | linear |
sensorSeed | Sensor seed | 0..? | — | 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 faceplate, 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. |
| Brightness | Brightness (-0.3..0.3, CRUTCHFIELD only): monitor DC voltage offset before gamma. Adjusts black cutoff and can seed or extinguish feedback. |
| 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. |
| Contrast | Contrast (0..3, CRUTCHFIELD only): monitor voltage gain around mid-grey, before clipping and CRT gamma. Together with exposure and RGB gain it changes the operating point and saturation. |
| 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): 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 faceplate 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. |
| Exposure | Exposure (0..4, CRUTCHFIELD only): admitted light and sensitivity before nonlinear pickup. Zero closes the iris and lets sensor charge decay. Manual exposure; CRITICAL’s automatic servo is not used. |
| 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. |
| Defocus | Defocus (0..1, CRUTCHFIELD only): widens spatial diffusion in the camera plane. Zero retains an intrinsic pickup limit of about 300 lines. Blur is in the loop and compounds across generations. |
| 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 faceplate 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 faceplate 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 faceplate 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 faceplate knob; a rising edge fires the settings reset the PANIC button also fires. |
| Phos | Phos (0..1): existing in-place image retention in VIRTUAL CAMERA and CRITICAL. Unit DC gain softens motion but leaves a settled image unchanged. In CRUTCHFIELD use Sensor lag and Tube decay; PHOS is inert there. |
| 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 faceplate 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. |
| Sensor lag | Sensor lag (0..1 s, CRUTCHFIELD only): camera charge-storage time constant. Default 0.333 s follows Appendix A’s rough vidicon estimate; RGB lifetimes differ slightly. Zero removes memory. One time constant leaves about 37% after illumination stops. |
| Sensor seed | Sensor seed (0..65535, rounded, CRUTCHFIELD only): reproducible lens and sensor geometry. REROLL SENSOR chooses the next distinct camera, saves it with the patch and supports undo. Reseeding retains running history. Reloading reproduces the camera, not transient feedback history. |
| Variation | Variation (0..1, CRUTCHFIELD only): strength of fixed lens distortion, sensor sensitivity and local gamma variation. Default is subtle; high settings exaggerate imperfections. Zero makes every seed equivalent. This is fixed-pattern response, not animated noise. |
| 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 faceplate knob; a rising edge cycles Shape. |
| Tube decay | Tube decay (0..0.5 s, CRUTCHFIELD only): monitor-emission time constant, separate from camera charge. Default 0.025 s is a short display tail; higher values deliberately extend into persistent-tube territory. History stays on the screen as the camera moves. |
| TV Gate | TV Gate (0..1, default 0): hidden synthetic param the tv_gate CV bridge writes (raw gate swing). No faceplate knob; a rising edge cycles TV MODE. |
| TV Mode | OFF / VIRTUAL CAMERA / CRITICAL / CRUTCHFIELD. The fourth mode adds separate CRT emission and camera charge, spatial diffusion, nonlinear exposure and a reproducible sensor response. Existing mode numbers are unchanged; tv_gate cycles all four modes on rising edges. |
| 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.