b3ntb0x
b3ntb0x · output · schema v1A circuit-level NTSC/composite video destroyer. Where the original BENTBOX does one symbolic RGB/YIQ pass, B3NTB0X runs a real four-stage analog pipeline: it ENCODES the incoming picture into a per-column composite VOLTAGE on a 3.58 MHz subcarrier (with sync tip, blanking, colour burst, and active video), runs that voltage through an analog BEND CIRCUIT (AC/DC coupling, gain, bias, soft-clip + diode clamp, plus four circuit-bend taps), DECODES it back to RGB with a quadrature demodulator and recovered sync, then renders it on a curved CRT (beam blur, phosphor grille, scanlines/interlace, bloom, persistence, overscan, barrel). Sync crush, dot-crawl, rainbow swim and rolling all EMERGE from the signal path — they are not cosmetic filters. Patch a video source into IN and it is the chainable, CRT-rendered OUT. Crank Sync Crush + Bias to tear and roll the picture, starve the Burst to kill colour and bring on herringbone, push Drift for swimming rainbow, and use Bend A–D for wavefold/comb/crush/bleed mangling. The preview is a resizable CRT screen (drag the bottom-right handle; default 540x540, min 360x540) that letterboxes at the live engine aspect with the 4:3 active area, overscan and barrel applied inside the shader; right-click for fullscreen / full-frame / present-on-second-display, and a "reduced precision" badge appears if the GPU cannot allocate the float buffers the composite voltage needs.
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
in | video | Video input — the upstream RGB picture that becomes the active-video region of the synthesized NTSC line. With nothing patched the encoder feeds black (a clean blanked raster you can still bend). RGB video stream |
enhance_cv | cv | Modulates Enhance (HF peaking / edge over-ring in the bend circuit). control voltage (CV); modulates enhance (additive offset — ±1 CV sweeps the full range, centered on the knob) |
bias_cv | cv | Modulates Bias (the DC offset added before the soft-clip/diode-clamp; drives sync crush and tearing). control voltage (CV); modulates bias (additive offset — ±1 CV sweeps the full range, centered on the knob) |
ac_dc_cv | cv | Modulates AC/DC (input-coupling blend, DC passthrough to leaky AC-coupled so flat areas droop toward grey). control voltage (CV); modulates ac_dc (additive offset — ±1 CV sweeps the full range, centered on the knob) |
sync_crush_cv | cv | Modulates Sync Crush (master transistor gain into the clip; high gain drags the sync tip through the clamp so the decoder loses lock). control voltage (CV); modulates sync_crush (additive offset — ±1 CV sweeps the full range, centered on the knob) |
burst_starve_cv | cv | Modulates Burst Starve (attenuates the colour-burst reference: desaturation toward mono plus subcarrier dot-crawl into luma). control voltage (CV); modulates burst_starve (additive offset — ±1 CV sweeps the full range, centered on the knob) |
chroma_leak_cv | cv | Modulates Chroma Leak (how much chroma energy bleeds into luma in the decoder, i.e. dot-crawl amount). control voltage (CV); modulates chroma_leak (additive offset — ±1 CV sweeps the full range, centered on the knob) |
luma_peak_cv | cv | Modulates Luma Peak (decode-side unsharp sharpening on the recovered luma). control voltage (CV); modulates luma_peak (additive offset — ±1 CV sweeps the full range, centered on the knob) |
bend_a_cv | cv | Modulates Bend A (WAVEFOLD — reflect the composite voltage past a shrinking threshold for solarised creases). control voltage (CV); modulates bend_a (additive offset — ±1 CV sweeps the full range, centered on the knob) |
bend_b_cv | cv | Modulates Bend B (COMB RIPPLE — mix a horizontally-delayed copy back in for ringing/ghost edges). control voltage (CV); modulates bend_b (additive offset — ±1 CV sweeps the full range, centered on the knob) |
bend_c_cv | cv | Modulates Bend C (CRUSH — quantise/posterise the picture into hard contour bands). control voltage (CV); modulates bend_c (additive offset — ±1 CV sweeps the full range, centered on the knob) |
bend_d_cv | cv | Modulates Bend D (CHROMA→SYNC BLEED — cross-couple HF ripple onto the DC path for luma buzz/rolling). control voltage (CV); modulates bend_d (additive offset — ±1 CV sweeps the full range, centered on the knob) |
feedback_cv | cv | Modulates Feedback (CRT phosphor persistence / motion-trail amount). control voltage (CV); modulates feedback (additive offset — ±1 CV sweeps the full range, centered on the knob) |
tbc_cv | cv | Modulates TBC/Lock (time-base correction; 1 is rock-steady, 0 lets sync offset + timebase wobble shimmy the lines). control voltage (CV); modulates tbc (additive offset — ±1 CV sweeps the full range, centered on the knob) |
tube_bloom_cv | cv | Modulates Tube Bloom (highlight halation/glow spilling into neighbours). control voltage (CV); modulates tube_bloom (additive offset — ±1 CV sweeps the full range, centered on the knob) |
overscan_cv | cv | Modulates Overscan (how far the image is pushed past the visible CRT edge). control voltage (CV); modulates overscan (additive offset — ±1 CV sweeps the full range, centered on the knob) |
barrel_cv | cv | Modulates Barrel (CRT glass bulge / barrel distortion and corner vignette). control voltage (CV); modulates barrel (additive offset — ±1 CV sweeps the full range, centered on the knob) |
mirror_x_gate | cv | Gate input on the CV cable (edge-detected): a RISING edge TOGGLES the Mirror X kaleidoscope fold — it fires on the rising edge, not on the held level. Feeds the mirrorXGate param. control voltage (CV); modulates mirrorXGate (summed directly (the destination DSP scales it)) |
mirror_y_gate | cv | Gate input on the CV cable (edge-detected): a RISING edge TOGGLES the Mirror Y kaleidoscope fold — it fires on the rising edge, not on the held level. Feeds the mirrorYGate param. control voltage (CV); modulates mirrorYGate (summed directly (the destination DSP scales it)) |
outputs
| id | cable | what it does |
|---|---|---|
out | video | Video output — the final CRT-rendered frame (decoded RGB after the full encode→bend→decode→CRT chain, with overscan, barrel, scanlines, phosphor and persistence baked in). Chainable into any video input. RGB video stream |
params
| id | label | range | default | curve |
|---|---|---|---|---|
enhance | Enhance | 0..1 | — | linear |
bias | Bias | -1..1 | — | linear |
ac_dc | AC/DC | 0..1 | — | linear |
sync_crush | Sync Crush | 0..2 | — | linear |
burst_starve | Burst Starve | 0..1 | — | linear |
chroma_leak | Chroma Leak | 0..1 | — | linear |
luma_peak | Luma Peak | 0..1 | — | linear |
bend_a | Bend A | -1..1 | — | linear |
bend_b | Bend B | -1..1 | — | linear |
bend_c | Bend C | -1..1 | — | linear |
bend_d | Bend D | -1..1 | — | linear |
feedback | Feedback | 0..1 | — | linear |
tbc | TBC/Lock | 0..1 | — | linear |
tube_bloom | Tube Bloom | 0..1 | — | linear |
overscan | Overscan | 0..1 | — | linear |
barrel | Barrel | 0..1 | — | linear |
hue | Hue | -1..1 | — | linear |
sub_drift | Drift | 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 |
controls
| control | what it does |
|---|---|
| AC/DC | AC/DC (0–1): input-coupling blend. 0 = DC passthrough; 1 = leaky AC coupling that loses the DC pedestal so big flat bright/dark areas droop back toward mid-grey. |
| Barrel | Barrel (0–1, default 0.25): CRT glass barrel distortion (outward bulge about center) plus the matching corner vignette. |
| Bend A | Bend A — Wavefold (-1–1): reflects the composite voltage back on itself past a shrinking threshold for solarised banding/creases. Identity at 0; sign picks fold polarity. |
| Bend B | Bend B — Comb Ripple (-1–1): mixes a horizontally-delayed copy of the voltage back in (one-tap comb) for ringing, ghost edges and colour beating. Identity at 0. |
| Bend C | Bend C — Crush (-1–1): quantises/posterises the picture into a few hard steps (bit-crush banding); the visible crush is applied on the recovered RGB, stepping from ~256 levels down toward 3 as magnitude approaches 1. Identity at 0. |
| Bend D | Bend D — Chroma→Sync Bleed (-1–1): cross-couples the HF/chroma ripple onto the DC/baseline path, so the picture modulates the baseline as luma buzz / rolling contamination. Identity at 0. |
| Bias | Bias (-1–1): DC offset added before the nonlinear clip. Pushes the signal asymmetrically into the soft-clip/diode-clamp; with Sync Crush it drags the sync tip up and crushes it (tearing/rolling). |
| Burst Starve | Burst Starve (0–1): starves the colour-burst phase reference. Desaturates the picture toward monochrome (colour killer) AND leaks raw subcarrier energy into luma as dot-crawl/herringbone. |
| Chroma Leak | Chroma Leak (0–1, default 0.15): amount of under-filtered chroma energy that bleeds into the recovered luma in the decoder — visible dot-crawl on the picture. |
| Enhance | Enhance (0–1): high-frequency peaking on the composite voltage; sharpens edges and adds over-ringing. 0 is flat. |
| Feedback | Feedback (0–1): CRT phosphor persistence; blends a decayed copy of the previous frame for motion trails. 0 is no trails. |
| Hue | Hue (-1–1): receiver TINT — rotates the synchronous-demodulator reference axis (the recovered I/Q chroma vector) up to ±0.9π. Shifts colour angle while preserving saturation. 0 is no shift. |
| Luma Peak | Luma Peak (0–1): decode-side unsharp masking on the recovered luma; sharpens detail using the bent neighbours. 0 is off. |
| Mirror X | Mirror X (0/1): kaleidoscope toggle that folds the left half over the right. Driven by the card's MIRROR X button and by a rising edge on the Mir X Gate input. |
| Mir X Gate | Mir X Gate (0–1): the synthetic gate level fed by the mirror_x_gate input; a rising edge on it toggles Mirror X. Read for edge detection, not as a continuous control. |
| Mirror Y | Mirror Y (0/1): kaleidoscope toggle that folds the top half over the bottom. Driven by the card's MIRROR Y button and by a rising edge on the Mir Y Gate input. |
| Mir Y Gate | Mir Y Gate (0–1): the synthetic gate level fed by the mirror_y_gate input; a rising edge on it toggles Mirror Y. Read for edge detection, not as a continuous control. |
| Overscan | Overscan (0–1, default 0.2): scales the image slightly past the visible CRT edge so borders fall outside the active area, like a real TV. |
| Drift | Drift (0–1): subcarrier instability. Injects an uncorrected carrier phase error that grows across each line and wanders in time, so chroma swims as a rainbow over the picture. 0 is stable. |
| Sync Crush | Sync Crush (0–2, default 1): master transistor gain into the clip. At 1 it is unity; above 1 it overdrives and can crush the sync tip so the decoder fails to lock; below 1 it underdrives. |
| TBC/Lock | TBC/Lock (0–1, default 1): time-base correction. 1 corrects the recovered sync offset and analog timebase wobble to rock-steady; 0 lets both through so lines shimmy left/right and the picture breathes. |
| Tube Bloom | Tube Bloom (0–1, default 0.35): highlight halation — bright phosphors spill warm glow into neighbours and blow out toward white. 0 is off. |
source
b3ntb0x.ts on GitHub.