iOS & macOS App
Every stage of the analogue broadcast chain — broadcast camera tube, composite signal, VCR tape, RF transmission, CRT phosphor chemistry — simulated from first principles. No shortcuts. No filters applied over a clean image.
Early access via TestFlight: iPhone & iPad · Mac · Mac alpha build (unsigned, testing only)
The Full Simulation Pipeline
Real composite television worked end-to-end: a broadcast camera tube converted the scene to electrons, those electrons were encoded into a single voltage waveform, optionally recorded to magnetic tape, transmitted over RF, received, decoded, and finally driven into a CRT phosphor screen. The app replicates the complete chain — 9 GPU compute and render passes per frame — with no stage skipped and no effect faked in post.
Before a single sample of composite signal is written, the source image passes through a broadcast camera model calibrated against primary source measurements. Each of seven tube and sensor types applies, in order: telecine pulldown jitter (NTSC 3:2 cadence-gated — slipping only at A-frame boundaries, not every frame), 3-tube prism-block colour registration error (R and B channels independently offset; G is reference), aperture MTF with horizontal-only scan ringing (tube optics diffract along the scan direction), sensor gamma and black-level pedestal (γ = 0.65 from Hamamatsu Sb₂S₃ datasheets; γ ≈ 1.0 for Plumbicon PbO), white-balance colour temperature drift that settles as the tube warms up from a cold start, highlight bloom and knee compression, Image Orthicon asymmetric dark halo (secondary-electron scatter weighted toward the scan direction per RCA datasheets), vertical smear upward only (charge drains toward the shift-register readout end), illumination-dependent temporal lag (non-linear IIR — brighter scenes produce less lag, as the electron beam sweeps more charge from a brighter target), a slow burn-in accumulator that persists for approximately 115 seconds at 60 fps, spatially-coherent film grain, and signal-dependent electronic noise scaling as √signal per Poisson statistics. Test patterns bypass this stage entirely.
The camera output is converted to a composite signal buffer — a flat array of floating-point voltage samples. Sample counts range from 790 per line for 405-line System A to 1135 for PAL, all sampled at 4× the colour subcarrier frequency. Subcarrier phase geometry (radians per sample and radians per line) is pre-computed on the CPU and passed as shader parameters: every colour standard uses the same GPU encoder with no hardcoded format branches. SECAM is the exception — FM requires continuous phase across adjacent samples, so a dedicated per-line CPU kernel handles it, writing into the same composite buffer consumed by the decode shader.
The buffer now contains what would be on the coaxial cable between a broadcast transmitter and your television aerial. Sync pulses at −40 IRE, blanking at 0, picture from 0 to 100 IRE, colour burst on the back porch — all in one waveform. Luminance, chrominance, and timing are inseparable, exactly as they were in real hardware. Everything downstream operates on this buffer. There is no separate colour signal, no separate luma signal — there is only the composite.
Six effects are injected directly into the composite buffer before decode: multipath ghosts (three independent delayed echoes at configurable amplitudes and delays, each operating on the full composite waveform including subcarrier — chroma smear and hue shifts from multipath are genuine consequences, not approximations), airplane flutter (two-oscillator beat modulation of ghost amplitude at ~0.68 and ~0.51 Hz), mains hum bars (50/60 Hz sinusoidal baseline modulation that rolls upward at the mains–field beat frequency), co-channel interference (beating carrier producing drifting diagonal "venetian blind" pattern), impulse noise (broadband RF spikes from vehicle ignition and motors), and IF filter ringing (a 15-tap Kaiser-windowed FIR bandpass kernel run at the composite sample rate, reproducing the passband roll-off and stop-band ripple of a real IF strip — transitions ring at the subcarrier frequency, overshoot luminance edges, and smear chroma in the time domain). Because every effect enters before the decoder, they interact authentically with the comb filter, chroma demodulator, and SECAM FM discriminator — not as a visual overlay, but as corrupted signal.
When a VCR format is selected, the composite buffer passes through a tape-domain processing stage before decode — exactly as recording on a VCR introduces a lossful recording and playback loop between the tuner and the television. Eight formats are modelled from primary specifications. Consumer formats (VHS SP/LP/EP, Betamax, S-VHS, Hi8) use a colour-under heterodyne system: chroma is stripped, downconverted to a low carrier (629 kHz for VHS, 688 kHz for Betamax, 732 kHz for Hi8), recorded separately, and upconverted on playback. Speed variation in the tape transport FM-modulates this low carrier, producing hue instability proportional to Δφ = 2πf·Δt — visible as colour shimmer on saturated areas. Luma is recorded as an FM carrier whose deviation directly determines horizontal resolution: VHS SP (3.4–4.4 MHz, 1.0 MHz deviation → 240 TVL), S-VHS (5.4–7.0 MHz, 1.6 MHz deviation → 420 TVL), Hi8 (5.7–7.7 MHz, 2.0 MHz → 415 TVL). U-Matic uses the same colour-under principle at 688 kHz but with a higher-quality transport giving lower flutter. Betacam SP records Y, R-Y, and B-Y as separate FM tracks (Y: 6.8–8.8 MHz; C: 5.6–7.3 MHz, CTDM), eliminating colour-under entirely — no hue jitter, Y-SNR above 50 dB. Mechanical artifacts are also modelled: tape skew (tension-induced timing error that grows linearly from the bottom to the top of the frame, bending the picture header), wow and flutter (capstan speed variation of 0.02–0.1% wrms producing sinusoidal horizontal line-timing oscillation at 0.5–3 Hz), tape dropout (random white-level substitutions of 1–15 µs from missing oxide particles, Poisson-distributed across lines), head-switching noise (the two-head transition 6.5H before vertical sync, visible in the lower overscan as a noise band), and the aperture-correction detail-enhancer circuit present in consumer decks from the mid-1980s (high-frequency shelf +3–6 dB at ~2 MHz, producing the characteristic slight ringing on VHS-enhanced material). Generation loss is modelled discretely: each re-recording adds a full tape noise floor, further limits bandwidth, and de-saturates chroma.
Decode runs as three sequential GPU compute passes on the composite buffer, operating at the full composite sample rate throughout — no downsampling occurs until the final texture write. First, a 1-line comb filter (signalYCSeparate) separates luminance and chrominance into independent float buffers: Y = (cur + prev) / 2, C = (cur − prev) / 2. This works identically for NTSC and PAL because the subcarrier inverts phase every line, so averaging cancels chroma and differencing cancels luma. The dot-crawl slider blends the separated signals back toward raw composite, reproducing the imperfect comb behaviour of televisions without a delay-line chip. Second, signalChromaFIR demodulates the C buffer to baseband I/Q or U/V using Hann-windowed quadrature FIR filters with the correct per-channel bandwidth from the broadcast specification: NTSC I channel (1.3 MHz, 11 taps), NTSC Q channel (0.4 MHz, 35 taps), PAL U/V (1.3 MHz symmetric, 13 taps), VCR-format chroma (0.5 MHz, matching the colour-under carrier bandwidth). PAL V-line switching and Hanover bar cancellation are applied at this stage. Third, signalLumaFIR limits luma bandwidth with a 13-tap Hann-windowed sinc LPF to 4.2 MHz for NTSC or 5.0 MHz for PAL — scaled by the front-panel bandwidth control. A final GPU pass reads the separated Y and I/Q (or U/V) buffers, applies the standard colour matrix, and writes the output texture. SECAM is the exception: FM requires continuous-phase demodulation, so SECAM Db/Dr is recovered by an FM discriminator that reads the original composite buffer directly. The artifacts that emerge — dot crawl, cross-colour, chroma smear, ringing, SECAM fire — are genuine consequences of the decode algorithm encountering real signal content.
A state machine models the CRT power cycle — preheat, on, and cooling. Each frame it computes: raster geometry during deflection collapse, EHT discharge voltage, shutdown spot parameters (beam core intensity, phosphor halo radius, position jitter scaling with tube age), the high-voltage sag coefficient that causes the raster to breathe with scene brightness, arc probability, and ageing level. Every downstream rendering decision — phosphor excitation gating, EHT brightness scaling, arc flash rendering — is derived from this physics state, not from ad-hoc visual parameters.
The decoded frame drives a per-pixel temporal accumulator gated by the beam scan window. Inside the beam window each pixel accumulates new excitation weighted by a per-channel decay constant drawn from measured phosphor persistence data (RCA TPM-1508A, 1961). Outside the window each pixel simply fades — exactly as a real phosphor does while the beam is elsewhere on screen. For single-compound phosphors (P31 green, P45 white, P4 B&W, P3 amber) the decoded signal is first collapsed to luma and then re-tinted with each phosphor's measured CIE emission chromaticity — eliminating false-colour subcarrier cross-talk that would arise if a full-colour path were applied to a chemically monochromatic screen.
The final render pass reads the accumulated phosphor texture and the tube physics state. During normal operation: EHT sag UV scaling (raster contracts 1–5% on bright scenes, proportional to ageing), scanline darkening from beam width, halation bloom from lateral glass scattering, shadow mask / aperture grille / slot mask overlay (sub-pixel, screen-pixel-locked), barrel distortion from the curved faceplate, convergence geometry offset per gun, vignette. During power transitions: warmup centre spot, or the full shutdown sequence — vertical raster collapse, horizontal bright line, centre spot rendered as two overlapping Gaussians (tight beam core + wide phosphor halo, P22 green-biased), HV arc flashes (probability scaling with tube age), and optional spot-killer blanking. All service-menu geometry (pincushion, trapezoid, tilt) is applied at UV sampling.
Broadcast Camera Emulation
Before a frame enters the composite encoder, the simulation models what happened in the studio. Each tube and sensor type is calibrated against primary source measurements — manufacturer datasheets, peer-reviewed papers, and broadcast engineering literature — so that the physical characteristics of the original hardware determine the parameter values, not aesthetic intuition. Lag, halation, noise, burn-in, vertical smear, and film grain enter the composite encoder as if the camera had produced them. Every artifact that emerges downstream — dot crawl, comb filter interaction, chroma smear — is there because the signal carried it from the sensor.
The most widely deployed broadcast camera tube of the 1950s and 60s. The Vidicon projects the scene onto a photoconductor (antimony trisulfide) that accumulates a charge pattern proportional to light intensity, then scans it with a low-velocity electron beam. Low cost and reasonable sensitivity made it standard for news cameras, studio cameras, and early video surveillance.
The photoconductor's slow charge-release rate produces the Vidicon's defining flaw: temporal lag. When a bright object moves, the charge pattern doesn't clear instantly — it leaves a comet tail streaking behind the object. Hamamatsu Sb₂S₃ datasheets (types N513, 7262A, 7735A, 8844) measure ~25% residual at the 3rd frame under dim illumination (0.05 fc) dropping to ~5% at 2 fc: the electron beam sweeps more charge from a brighter target. This illumination dependence is physically modelled — lag is not a fixed constant but scales with scene brightness. Static bright objects burn a slowly-decaying residue into the photoconductor; measured persistence in tube literature is on the order of minutes, corresponding to a decay half-life of approximately 115 seconds. The aperture MTF diffraction is horizontal (scan-direction), γ = 0.65 is the value stated explicitly in Hamamatsu datasheets for all Sb₂S₃ types, and colour stability during warm-up is modelled from cold start.
Developed by Philips in 1965, the Plumbicon replaced antimony trisulfide with a lead oxide (PbO) p-i-n photoconductive layer that drained its charge pattern far more rapidly. Levitt (SMPTE, 1970) measured less than 2% signal remaining at the 3rd field under 2 fc studio lighting. Mullard's XQ1410 production datasheet (1987) records 7% at Is=20 nA under dim conditions — the discrepancy is illumination: the PbO junction sweeps nearly completely at studio brightness but retains measurable lag at minimum sensitivity. These two measurements were reconciled and used directly to calibrate the simulation's illumination-dependent lag model. Later diode-gun variants (Mullard XQ5002, Philips/Amperex) reached 59–60 dB SNR and 700+ TVL limiting resolution.
Colour Plumbicon cameras used a 3-tube prism block — one tube per primary colour — whose physical registration drifted with temperature and mechanical age. This produced colour fringing on high-contrast edges — coloured halos around text and object boundaries — one of the most recognisable signatures of vintage broadcast footage. The green tube is the phase reference; red and blue tubes drift independently, producing the characteristic asymmetric fringing seen on original broadcast recordings. Highlight bloom from PbO saturation and colour temperature drift during warm-up are calibrated from the same Mullard datasheet series.
Introduced by Hitachi in 1974, the Saticon uses a selenium–arsenic–telluride (SeAsTe) photoconductor with a tighter, sharper aperture MTF response than the Plumbicon — Hitachi's PF-Z31A reached 750 TVL limiting resolution and 58 dB SNR. Temporal lag is comparable to the Plumbicon and slightly higher in controlled tests (engineering literature consistently places Saticon lag between Plumbicon and Vidicon). Studio cameras equipped with Saticons were prized for clean, crisp rendering of fine detail. The 3-tube Saticon configuration became the preferred choice for high-end production cameras in the late 1970s and 1980s.
Like the Plumbicon, 3-tube Saticon cameras produced colour fringing from tube-to-tube registration drift — typically more pronounced than Plumbicon because the thinner SeAsTe target layer required tighter mechanical tolerances to achieve its MTF advantage. The Saticon's other distinctive artifact is a subtle vertical smear — a short trail above bright objects — caused by photocarrier diffusion along the vertical axis of the selenium layer. Because diffusion is a physical process with a defined direction relative to the readout geometry, the smear is unidirectional: it extends upward from saturated highlights, not downward or bidirectionally.
The Image Orthicon dominated professional broadcast from the late 1940s until the Vidicon displaced it in the early 1960s. Photons struck a photocathode that emitted electrons which were magnetically focused onto a target; a low-velocity return beam scanned the target and fed secondary electrons into an electron multiplier. The result was extraordinary sensitivity — Image Orthicons could operate in candle-lit conditions that would defeat any later tube.
That sensitivity came at a price. The returning secondary electron beam produced a distinctive dark halo around bright objects — the IO's most recognisable signature. RCA technical documentation records a secondary emission ratio of 4–5 electrons emitted per incident photoelectron: those that miss the collection mesh return to the target and suppress signal in the surrounding area. Critically, secondary electrons scatter preferentially along the horizontal scan direction due to the geometry of the electron optics and collection mesh — making the halo asymmetric rather than circular. The strongest darkening appears on the horizontal leading edge of bright objects (the crescent shape visible on original IO footage), with weaker suppression on vertical edges. The halo model uses scan-direction-weighted gradient magnitudes with a leading-edge asymmetry term derived from this physical geometry. Combined with heavy temporal lag, a ~40 dB SNR ceiling (IO noise has a low-frequency spatial structure distinct from the white noise of later tubes), and a long burn-in decay, the Image Orthicon produces a visual aesthetic unlike any camera before or since.
The first generation of charge-coupled device cameras entered broadcast production in the early 1980s. CCDs eliminated lag, burn-in, and comet trails entirely — but introduced new electronic artifacts. The most distinctive is vertical smear: when a bright light source saturates a pixel well, excess charge bleeds through the vertical shift register during readout. The physics of CCD readout are asymmetric — charge transfers in one direction along the column — so the smear streak is strictly upward, not bidirectional. This is a commonly misrepresented artifact: many simulations show a bilateral pillar, but physical shift-register overflow produces a one-sided column above the overloaded source.
Early 3-chip CCD cameras had larger prism-block manufacturing tolerances than tube cameras — the silicon die mounting process was less precise than the glass tube alignment used in 3-tube Plumbicon rigs — producing more severe colour registration drift across the frame. Signal-dependent shot noise in silicon follows Poisson statistics: noise amplitude scales as √signal, so absolute noise peaks in the midtones rather than the shadows, unlike the fixed-floor dark noise of tube cameras.
Before videotape became practical for feature film broadcast in the 1970s, movies and pre-recorded programming reached audiences via the film chain — a movie projector aimed at a broadcast camera in a darkened telecine suite. Converting 24 fps film to 25 fps PAL or 29.97 fps NTSC required a mechanical intermittent mechanism that introduced its own characteristic instabilities.
The film chain's characteristic instabilities all have mechanical causes. Pulldown jitter — vertical frame position variation — occurs at film-frame boundaries, when the intermittent sprocket engages and releases. In NTSC 3:2 pulldown, a 24 fps film frame is held for either 2 or 3 video fields in the repeating A-A-B-B-B pattern: jitter occurs at the A-frame transitions (every 5 video frames), not continuously. Simulating jitter on every frame, as most approaches do, produces a visually incorrect result — too much motion, wrong cadence. Weave (horizontal instability from film shrinkage and gate pressure variation) is independent of the pulldown cadence and occurs frame-to-frame. Film grain is photochemical — silver halide crystals clustered in spatial patches, correlated within a frame, independent between frames. Film gamma (≈ 0.75) and the extended shadow detail of photochemical processes give film-originated material its distinctive tonal separation from directly-captured video.
All Simulated Standards
Every standard gets its own timing geometry, subcarrier frequency, and signal path. The app does not reskin one format to approximate another.
The BBC launched 405-line television in 1936, making it the oldest electronic TV standard. The signal carries only luma — no colour subcarrier is ever generated. System A used AM vestigial-sideband transmission with positive modulation (full white = peak carrier) — the opposite polarity from every later standard.
The 525-line 29.97 fps frame structure was standardised before NTSC colour was added in 1954. Monochrome variant uses the same timing as NTSC-M but generates no subcarrier. Sampled at 14.318 MHz (4× the NTSC colour subcarrier frequency) for timing consistency.
Before PAL and SECAM arrived in the mid-1960s, most of Europe broadcast 625-line monochrome. Uses the same line and frame geometry as PAL and SECAM but carries only luma. Sampled at 17.734 MHz — the highest resolution of the 25 fps standards at 1135 samples per active line.
System C had 819 lines — more than any colour system that came after. Broadcast on VHF with an 8 MHz video bandwidth, it delivered extraordinary vertical resolution for its era. Requires a 22 MHz sampling rate; active line width is 1074 samples. Pure luma — no colour subcarrier.
Colour is encoded as two signals — I (orange–cyan) and Q (green–magenta) — modulated 90° apart onto a 3.58 MHz subcarrier. A 7.5 IRE pedestal lifts black level above blanking. Because receivers must lock an oscillator to a burst that can drift, poorly-adjusted sets produce a visible hue shift — giving rise to "Never The Same Colour".
Electrically identical to NTSC-M except the 7.5 IRE pedestal is absent — black is at blanking level (0 IRE). The result is a slightly wider usable contrast range. On a correctly calibrated monitor the difference is invisible; on a misaligned set, NTSC-J material through an NTSC-M decoder looks slightly washed out.
Uses quadrature modulation like NTSC but flips the phase of the V (red–cyan) component on every line. A TV with a 1-line delay averages adjacent lines, cancelling phase errors. This self-correcting mechanism makes PAL far more tolerant of signal reflections and transmitter drift — no hue knob required.
Brazil is the only country that combined the PAL V-switching colour system with the 525-line 29.97 fps NTSC frame structure. The result requires a unique subcarrier frequency — 3.575611 MHz — to keep harmonics aligned with the line rate. Incompatible with both standard NTSC and PAL.
Uses 625-line 25 fps timing but shifts the subcarrier to 3.582056 MHz for harmonic compatibility with South American IF infrastructure inherited from NTSC-era equipment. Restores the 7.5 IRE pedestal that standard PAL lacks, matching NTSC-M black levels. Active line width is 917 samples.
SECAM uses frequency modulation — like FM radio — instead of amplitude/phase. The two colour signals (Db, Dr) are transmitted on alternating lines: even lines carry Db on a 4.250 MHz subcarrier, odd lines carry Dr on a 4.406 MHz subcarrier. The receiver stores the previous line in a glass delay line and combines current and stored values to reconstruct both components at every line. FM is immune to amplitude variations, giving excellent colour stability across weak or multipath signals — at the cost of being incompatible with amplitude-modulated systems.
Three signal-processing stages are applied to reach broadcast accuracy. First, LF pre-emphasis: a one-pole 85 kHz high-pass filter amplifies colour transitions before FM modulation, countering the FM noise spectrum that rises with frequency — the same principle as FM radio pre-emphasis but optimised for the SECAM deviation parameters. Second, the Bell/Cloche amplitude filter: the transmitted carrier amplitude varies with instantaneous frequency according to A(f) = M₀ × √(1 + 16F²) / √(1 + 1.26F²), where F = f/f₀ − f₀/f and f₀ = 4.286 MHz. This weighted-carrier pre-distortion keeps the demodulated baseband flat when FM receiver detectors have the characteristic FM noise response. Third, decoder de-emphasis: a one-pole IIR integrator (inverse of the encoder HPF) restores flat colour response after FM discriminate — applied per-line so that state resets at each horizontal sync, matching real SECAM decoder hardware.
No colour burst is transmitted. SECAM identification uses a sequence of nine alternating-polarity bursts during the vertical blanking interval (lines 7–9 of each field), allowing switching equipment to distinguish SECAM from PAL.
Authentic Artifacts
These imperfections aren't applied over a clean image. They arise naturally from simulating the actual signal path — the same cause as on real hardware.
VCR Tape Emulation
In the 1970s–1990s, the path from tuner to television almost always passed through a VCR. Each recording format imposes a distinct set of physics constraints: the FM carrier frequency limits horizontal resolution, the colour-under heterodyne system introduces chroma phase noise, the mechanical transport produces skew, flutter, dropout, and head-switching bands. All format parameters are derived from primary specifications — IEC 60774 series, Sony engineering documents, and SMPTE standards.
The dominant consumer format (1976–2008). Luma is FM-modulated at 3.4–4.4 MHz NTSC (3.8–4.8 MHz PAL), a 1.0 MHz deviation that limits horizontal resolution to approximately 240 TVL. Chroma is heterodyned down to 629 kHz (NTSC) / 627 kHz (PAL) — the colour-under system — and recorded separately below the luma FM carrier. On playback the up-converter is phase-locked to the recovered sync, but residual tape-speed jitter that differs between the sync and chroma paths produces hue instability (Δφ = 2π × 629 kHz × Δt). LP and EP modes use the same carrier frequencies but narrower track pitches (LP: ~29 µm NTSC; EP: ~12.5 µm vs SP 58 µm), increasing azimuth crosstalk and dropout rate while leaving bandwidth nominally unchanged. A consumer aperture-correction circuit (high-frequency shelf +3–6 dB at ~2 MHz) was standard from ~1985, adding characteristic edge ringing. Y-SNR ≈ 42 dB.
Sony's competing consumer format. The head drum diameter is 74.5 mm versus VHS's 62 mm, giving a 21% faster head writing speed (6.9 m/s vs 5.8 m/s). This allows a wider FM deviation of ~1.3 MHz (3.5–4.8 MHz NTSC) versus VHS's 1.0 MHz, yielding approximately 250 TVL — marginally sharper than VHS SP. The colour-under carrier is 688 kHz (NTSC) / 689 kHz (PAL), higher than VHS's 629 kHz. Because Δφ = 2πfΔt, a higher carrier produces a larger phase error per unit of time-jitter; however, Betamax machines tended to have slightly tighter servo tolerances which compensated. The format war was decided by tape duration, not picture quality: early Beta I held only 60 minutes.
Super-VHS raises the luma FM carrier to 5.4–7.0 MHz (NTSC), widening the deviation to 1.6 MHz. This lifts horizontal resolution to approximately 420 TVL — exceeding NTSC broadcast (~330 TVL). Critically, the colour-under system is unchanged from standard VHS: chroma is still heterodyned to 629 kHz (NTSC). S-VHS therefore has dramatically sharper luma but identical chroma quality and stability to standard VHS. The S-Video connector separates Y and C in the baseband output to prevent luma-chroma cross-talk at the TV input, but the tape itself still records colour-under. S-VHS camcorders were a popular prosumer format through the 1990s.
Sony's 8mm upgrade applies the same principle as S-VHS to the 8mm cassette: the FM carrier is raised to 5.7–7.7 MHz with a 2.0 MHz deviation, achieving approximately 415 TVL. The colour-under carrier is 732 kHz (NTSC) / 743 kHz (PAL) — higher than VHS's 629 kHz, giving marginally less hue jitter per unit tape-speed variation. Hi8 camcorders competed directly with S-VHS for the prosumer market through the 1990s; the 8mm cassette was more compact, making Hi8 the preferred format for shoulder-mount ENG cameras by many independent broadcasters.
The first cassette format adopted for broadcast ENG. The wider ¾" tape, faster head writing speed (8.54 m/s), and higher FM deviation (1.6 MHz, 3.8–5.4 MHz lo-band NTSC) give approximately 280 TVL from a machine with significantly better servo engineering than consumer decks. Flutter is typically below 0.02% wrms. Colour-under sits at 688.373 kHz (NTSC lo-band). U-Matic was the dominant ENG format from the mid-1970s until Betacam displaced it in the early 1980s; hi-band SP variants (5.6–7.2 MHz) pushed resolution to ~330 TVL. The look of U-Matic lo-band — moderately sharp, slightly warm, occasional dropout — is the visual language of 1970s TV news.
Betacam SP solves the fundamental limitation of colour-under by abandoning it entirely. Luma (Y) and the two colour-difference signals (R-Y, B-Y) are recorded as separate FM tracks: Y at 6.8–8.8 MHz (2.0 MHz deviation), R-Y and B-Y time-compressed 2:1 and interleaved on the C track at 5.6–7.3 MHz (CTDM). Because there is no heterodyne, there is no tape-speed-induced hue jitter. Y-SNR exceeds 50 dB; C-SNR exceeds 52 dB — roughly 8 dB better than VHS SP in every channel. The precision direct-drive drum and capstan servo keeps flutter below 0.02% wrms. Betacam SP became the standard for broadcast field acquisition from the mid-1980s through the mid-2000s, when it was displaced by IMX and DVCAM digital formats. No edge enhancement circuit — the signal goes directly to downstream equipment.
All eight format presets snap the tape, mechanical, and signal sliders to documented values. Individual controls remain fully adjustable — combine VHS EP with maximum dropout and tracking error for aged-tape degradation, or set Betacam SP generations to 3 to model a dub chain that lost its way.
VHS helical-scan mechanics produce a distinct family of distortions for each transport mode. The drum (62 mm diameter, 1,800 rpm NTSC / 1,500 rpm PAL) rotates continuously while tape speed determines how many recorded tracks the heads cross per revolution.
When the tape stops, the drum continues rotating at full speed. Each head traces a straight diagonal line across the stationary tape — a path that is not aligned with the recorded helical tracks (~3° helix angle). Partway through each revolution, the head crosses from one track onto the adjacent track (which has opposite azimuth, ±6° difference). This transition produces a horizontal noise bar spanning 4–20 scan lines, its vertical position adjustable by the tracking control (which shifts the exact tape tension and therefore the crossover point). Above the bar the picture is clean; below it the head is reading the adjacent azimuth-mismatched track, causing ~25 dB of signal attenuation and chroma phase scrambling. Three-head decks position a third video head to land cleanly on the track centre in pause mode, eliminating the bar entirely.
On pause engagement, the CTL (control track) pulse train — the servo reference that keeps the drum phase locked to the tape's recorded fields — is no longer available. The VCR's capstan servo loses its timing reference and the drum's phase relationship to the recorded sync pulses shifts by a random amount, typically 35–220 scan lines. The television's vertical hold PLL (a second-order loop with a ±40-line pull-in window) must re-acquire sync from the new position. If the shift is within the pull-in range, the frame rolls then re-locks within 2–4 frames. If it exceeds the capture window, the picture rolls continuously until the PLL hunts to the new sync position. After lock, residual drum servo jitter (±2–3 lines, correlated noise with τ ≈ 300 ms) produces a subtle ongoing frame waver characteristic of low-grade consumer decks. The simulation models this with a 2nd-order PLL: on pause entry a random phase offset is injected into the PLL's sync target; the loop then rolls, overshoots, and settles with authentic timing constants.
At ×5 tape speed (166.75 mm/s NTSC SP), the tape advances 5,565 µm per drum revolution — enough to cross approximately five recorded tracks (track pitch along tape = 1,113 µm). The heads alternate azimuth (A: +6°, B: −6°) between adjacent tracks. The playback head reads: same-azimuth track → full signal; opposite-azimuth track → ~30 dB rejection → noise. This produces the characteristic venetian-blind effect: alternating horizontal bands of recognisable picture and luminance noise, each band occupying approximately 1/10 of the frame height at ×5. Chroma is completely absent — the VHS colour-under phase-coherence system requires adjacent-field phase alignment that is destroyed at off-speed transport. The stripe pattern scrolls upward during cue (forward) and downward during review (reverse), at a rate of approximately (S−1)/S × frame_height per frame, where S is the speed ratio. At ×5, the full pattern cycles through one frame in about 167 ms.
Consumer VHS decks achieve slow motion by electronic field repetition — playing at normal tape speed and repeating each captured field 3 or 5 times before advancing to the next. The still-frame noise bar is present and stationary during each repeated field; motion appears as discrete steps rather than smooth interpolation. Professional 3-head decks (Panasonic AG series, JVC editing decks) position additional heads to land cleanly on the track at 1/3 or 1/5 tape speed, eliminating the noise bar and producing smooth sub-speed motion. Audio pitch is reduced proportionally to tape speed (linear audio and HiFi both shift by the speed factor).
RF Interference Simulation
Every effect is injected into the composite signal itself — not applied as a post-process filter — so it interacts with the decoder's comb filters and demodulators exactly as it would on real hardware.
Audio Simulation
Analog TV audio was a complete engineering system — FM subcarriers, intercarrier mixing, stereo multiplexing, pre-emphasis curves, and finally a small speaker in a wooden box. Every artefact in this chain is modelled and audible in the app.
Television Receiver Controls
These sliders model the physical adjustment controls found inside a real CRT television. They operate exclusively on the decoded composite signal — the encoded waveform is never modified — so sync pulses and colour burst remain pristine.
CRT Display Simulation
Most CRT simulations post-process a finished frame with scanline overlays and bloom. This app models the full physical lifecycle of a real CRT — phosphor chemistry, electron-gun scan geometry, and the complete vacuum-tube power sequence: heater warmup, raster collapse, EHT discharge, and the glowing centre spot left on the screen after the beam finally dies. All from first principles, not image filters.
Every real CRT phosphor continues glowing after the electron beam has moved on. The persistence curve is exponential: when the beam cuts to black, luminance follows L_n = decay^n × L_0 — halving every fixed number of frames. The app models this with a per-pixel, per-channel IIR filter running at full resolution in a Metal compute kernel:
phosphor_new[c] = decay[c] × phosphor_prev[c] + (1 − decay[c]) × excitation[c]
The (1 − decay) weight is critical: it normalises the accumulation so that a steady constant input converges to exactly that input level. There is no brightness creep regardless of the decay factor — a consequence of the IIR steady-state theorem (setting phosphor_new = phosphor_prev = ss gives ss = excitation). Per-channel decay constants model the P22 phosphor triad used in virtually all consumer colour CRTs: red (Y₂O₂S:Eu) is the most persistent (decay multiplied by 1.15), green (ZnS:Cu,Al) is the reference (1.0×), and blue (ZnS:Ag) decays fastest (0.85×). All values are clamped to ≤ 0.985 so the system always converges. The user-facing Phosphor Decay slider scales the midpoint; the per-channel spread is always maintained.
access::read (the previous frame's accumulated phosphor), the other as access::write (the current output). On the next frame the roles swap. This ping-pong scheme provides full 16-bit floating-point precision per channel with zero GPU readback or CPU round-trips. The final CRT render pass always samples the just-written (current) phosphor texture, not the raw decode.beamScanLine) that advances by speed each frame and wraps at 1.0. The shader receives two parameters — beamScanTop and beamScanBottom — that define the active excitation window for the current frame; rows outside this range receive only the decay term. When speed ≥ 1.0 the accumulator is forced to [0, 1] and the scan line counter is reset, preventing a stale mid-screen window from persisting after the user turns the effect off.Eight authentic phosphor types are available, each calibrated from primary source measurements — manufacturer CIE datasheets, RCA technical publications, and peer-reviewed phosphor literature. Each type shifts the IIR decay constants, rendered emission colour, and shutdown spot tint. Full technical detail and source citations for all eight types are in the dedicated Phosphors section below.
P22 (colour), P31 (oscilloscope green), P45 (white, sub-ms), P4 (B&W television white), P3 (amber radar), P7 (dual-persistence radar: white flash → yellow-green afterglow), P11 (deep blue photographic), P24 (cyan-green flying-spot scanner).
Monochrome phosphors (all except P22) convert the decoded composite signal to luma before accumulation, eliminating false-colour chroma artifacts that would otherwise accumulate on a physically single-compound screen. P7 uses this same luma path despite its two-layer composition — the white-to-yellow-green colour shift emerges from per-channel asymmetric decay of a luma input, not from the composite chroma.
P22 is a three-component phosphor system — separate red, green, and blue chemical compounds in a dot triad — that can reproduce colour by independent excitation of each dot. All other types (P31, P45, P4, P3, P7, P11, P24) are physically incapable of colour output: each is a single spectral emitter, or in P7's case a two-layer cascade whose colour behaviour arises from temporal decay physics rather than colour-channel separation.
This creates a problem for a composite television simulator. The decoded signal is always RGB, and naively accumulating that RGB into P31, P45, P4, P3, P11, or P24 produces false-colour artifacts — visible chroma dot-crawl and hue fringing across what should be a uniform-colour display. A P31 oscilloscope screen doesn't show residual NTSC subcarrier as a red-green-blue shimmer: it shows monochrome green.
The fix is physically correct. When a monochrome phosphor is selected, the decoded RGB frame is collapsed to luma using ITU-R BT.709 coefficients (Y = 0.2126R + 0.7152G + 0.0722B) before entering the IIR accumulator. The scalar is then multiplied by the phosphor's characteristic emission colour to produce the native tint — green for P31, warm white for P4, cool white for P45, amber for P3, deep blue for P11, cyan-green for P24. Single-compound phosphors also use a uniform decay constant across all three output channels.
P7 uses the same luma path despite its dual-layer composition. The white-flash → yellow-green afterglow colour shift emerges from per-channel asymmetric decay applied to a luma input: blue decays fast (minimal 563 nm emission from the slow layer), green decays slowest. Accumulating raw composite RGB would instead let subcarrier chroma artifacts drift independently per channel, producing false colour — not the phosphor's physical emission.
A real vacuum-tube CRT television goes through distinct physical phases when powered on and off that are entirely absent from solid-state flat-panel simulations. The app models both the tube and solid-state modes.
Power-on warmup (tube mode): When mains is applied, the cathode heater filament requires 15–30 seconds to reach operating temperature. Before the deflection circuits stabilise, the undeflected beam strikes the phosphor at screen centre, producing a bright central spot. As the yoke charges and cathode emission rises, the spot expands outward and the raster forms. A configurable warmup duration (3–30 s) and HV discharge time control the exact pacing.
Shutdown sequence (tube mode): When mains is removed, the deflection oscillators stop instantly. The vertical scan capacitor drains first (small µF, τ ≈ 0.1–0.35 s): the picture squeezes vertically into a bright horizontal line — the same beam energy now concentrated on a thin phosphor strip, producing a dramatic brightness increase. The horizontal scan capacitor drains slightly slower (τ ≈ 0.35–0.55 s): the line shrinks horizontally toward a single bright centre spot. The EHT capacitor bleeds through the bleeder resistor (τ ≈ 0.4–1.5 s via ~10 MΩ): residual 20–30 kV continues driving the beam. On sets without a spot killer, this glowing spot was bright enough to permanently burn the phosphor in seconds — a notorious hazard for careless engineers.
Shutdown spot model: The spot is rendered as two overlapping Gaussians — a tight "beam core" (σ ≈ 1.2% screen radius) representing the physical beam diameter, and a wide "phosphor halo" (σ ≈ 13%) from light scattering through the glass faceplate. On P22 phosphor the spot has a green-white tint (the green gun has the highest output efficiency at high current density). As tube age increases, weaker EHT regulation produces a brighter discharge — up to 60% more intense at maximum ageing. Worn capacitors add position jitter as the discharge current becomes noisier.
EHT sag / size breathing: A bright scene draws more beam current, which loads the flyback transformer and droops the extra high tension supply. Lower EHT means less deflection amplitude — the raster contracts by 1–4% on very bright scenes. The app computes this per-frame from scene brightness × ageing factor, applied as a UV scale before rendering. The effect is negligible on new tubes (ageing below 20%) and becomes clearly visible on old, unregulated sets.
HV arcing: Residual 20–30 kV during EHT bleed-down can arc across aged or worn insulation on the anode cap or flyback secondary winding. The brief plasma discharge emits intense blue-white light (ionised gas). Arc probability scales with tube age and remaining EHT level, so worn tubes arc more frequently and unpredictably during shutdown.
Spot killer: Many post-1970 sets included a spot killer circuit — a relay that blanks the cathode beam the instant mains power is cut, preventing the shutdown spot from burning the phosphor. With the spot killer enabled, shutdown is clean and dark. Disabling it reveals the full shutdown glow sequence as it would appear on an unprotected tube.
Solid-state mode: From the mid-1980s, solid-state switch-mode power supplies replaced the vacuum-tube HV section. Warm-up time dropped to near zero and beam cutoff on power-down is essentially instant. In solid-state mode all power transitions are immediate — no warmup spot, no raster collapse, no shutdown sequence — matching the behaviour of sets like the Sony Trinitron KV-series from 1987 onward.
A real CRT television contained a hidden service menu — internal adjustments accessible only to a repair technician — covering the geometry, convergence, and high-voltage regulation of the tube. The app exposes the same controls, allowing the display to be deliberately mis-adjusted as an ageing set would gradually drift, or corrected back to factory spec.
HV regulation: Compensates EHT sag on bright scenes. An automatic HV regulator in a well-maintained set slightly expands the raster to counteract the droop caused by high beam current. Adjusting this control below its nominal value replicates the look of an unregulated or worn set where the picture visibly "breathes" in size with scene content.
Pincushion: Corrects the inward or outward bowing of horizontal and vertical lines caused by the geometry of the deflection yoke relative to the curved faceplate. A common fault on ageing yoke assemblies as the ferrite core relaxes. Increasing pincushion makes the sides of the raster bulge inward; decreasing it bows them outward.
Trapezoid: Corrects asymmetric vertical height between the left and right edges of the raster, caused by asymmetric inductance drift in the left and right halves of the deflection coil. A trapezoidal raster is characteristic of early or worn horizontal yoke windings.
Tilt: Rotates the entire raster slightly clockwise or anticlockwise, correcting physical CRT neck rotation or yoke ring misalignment. On vintage sets this was adjusted by physically rotating the yoke clamp; the service menu models it as a pure rotation applied before all other geometry.
Convergence: Adjusts the relative landing positions of the red, green, and blue electron beams on the phosphor triad. Perfect convergence means all three beams land on their respective phosphor dots at every point on the screen. As the yoke epoxy ages and relaxes, the beams drift apart — colour fringing appears at edges and fine detail becomes a rainbow smear. The app models convergence drift as a position-dependent UV offset per gun that increases toward the screen edges, matching the real yoke creep pattern.
Every colour CRT manufactured from the late 1960s onward included a built-in degaussing coil — a loop of wire wound around the inside of the bezel, driven through a positive-temperature-coefficient (PTC) thermistor. When a cold set is powered on, the PTC draws a large initial current through the coil. As the thermistor self-heats over ~1–2 seconds, its resistance rises dramatically, reducing the coil current to near zero. The coil therefore generates a naturally decaying alternating magnetic field — exactly the waveform needed to demagnetise the shadow mask.
Rather than painting a rainbow tint over the image, the app models the actual beam physics. The Lorentz force F = q(v × B) deflects each electron beam laterally. The coil wraps the bezel, so by the Biot-Savart law its field is tangential at every screen position — perpendicular to the radius vector from screen centre. This tangential field drives the characteristic swirling pattern. As the PTC heats and current decays, the field oscillation frequency slows and the amplitude envelope collapses, sweeping increasingly coarser arcs across the mask before dying away.
Inline gun differential: In a colour CRT the red, green, and blue cathodes are arranged horizontally in the gun neck (the inline geometry). The same external magnetic field deflects them by slightly different amounts because each travels a marginally different path to its phosphor dot. The simulation models this as a per-gun horizontal UV offset proportional to the local field amplitude — producing genuine colour fringing from adjacent image content rather than an additive tint.
Dot-pitch cross-excitation (P22 only): When a beam is displaced by a non-integer number of phosphor dot pitches, it partially excites the adjacent wrong-colour dot type. The three P22 dot types (R, G, B) are spaced 120° apart in the triad, so the cross-excitation weighting follows a cos² partition at 0°/120°/240° — cycling smoothly through correct, +1 cyclic shift, and −1 cyclic shift as displacement varies across the screen. This produces the characteristic colour bands on a uniform-grey input even without any colour in the source. Monochrome phosphors (P31, P4, P45, P3, P7, P11, P24) emit a single spectral band and therefore show no colour during degauss — only the geometric beam displacement and a brief PSU brightness perturbation.
PSU sag / flash: The coil current peak loads the mains power supply rail, causing a brief uniform-brightness flash at the start of the cycle followed by a slight overall dim as the supply droops. This is applied as a global scalar to the final rendered frame — the power supply has no spatial selectivity, so it affects every pixel identically.
Duration: ~1.8 s (built-in auto-coil) · P22 cross-excitation: cos² triad model · Monochrome: PSU sag only, no colour
Children in the 1970s and 80s discovered that touching a colour television screen with a refrigerator magnet produced spectacular — and often permanent — colour distortion. The app recreates this with an interactive simulation: tap the MAGNET button, then drag a finger across the video area. The image reacts as if a real permanent disc magnet were being pressed against the glass faceplate.
Beam deflection physics: A permanent magnet held against the glass generates a concentrated fringe field. At the screen surface the field is predominantly radial — pointing toward or away from the touch point. The Lorentz force F = q(v × B) acts on beams travelling in −z toward the screen: a radial in-plane B component creates beam deflection perpendicular to B — that is, tangential rather than radial. The visual result is a swirl or vortex: all beams near the touch point are deflected in the same angular direction (clockwise), with concentric colour rings appearing at multiples of the phosphor dot pitch. Displacement magnitude falls off as a dipole-like 1/(r² + soft²) from the contact point and is capped at 10% of screen width at the pole.
Inline gun differential (P22 only): A colour CRT's inline trigun has red and blue cathodes at ±gunSep from the central green cathode along the horizontal axis of the neck. The same external field therefore deflects them by slightly different amounts, creating lateral colour fringing that grows with the horizontal component of the magnet field — a visually distinctive signature of inline-gun geometry. Monochrome phosphors (P31, P4, P45, P3, P7, P11, P24) have a single electron gun; the gun differential does not apply and is suppressed.
Dot-pitch cross-excitation (P22 only): As each beam is displaced from its nominal phosphor dot, it begins to excite adjacent wrong-colour dots. The cos² 120°-triad cross-excitation model (shared with the degauss simulation) determines the RGB mix reaching each output pixel. Near the touch point, displacement can exceed several dot pitches, producing intense colour scrambling. The cross-excitation strength saturates at ~55% at large displacements. Monochrome phosphors show only the geometric warp — the single-compound emitter has no colour to scramble.
Shadow mask magnetisation — permanent purity damage: In a real CRT, the steel shadow mask is a ferromagnetic material with significant remanence. While the magnet is held against the screen, the mask accumulates magnetisation proportional to the magnet's field strength and the contact duration — hold longer or use a stronger magnet to build up a more severe stain. When the finger lifts, the external field is gone but the mask retains its remanence. This residual field continues to deflect beams via the same tangential Lorentz mechanism: on a colour (P22) CRT it produces fixed colour swirl patches (purity errors); on monochrome phosphors it produces geometric warp without colour scrambling, since there is only one beam and one phosphor compound. Both persist across sessions. Dragging the magnet across the screen paints a continuous smear of damage — a line, arc, or any shape — exactly as a real magnet dragged across a television would leave a trail of purity errors across the shadow mask. The magnetisation map is stored as a 128×128 field texture and persisted permanently to device storage; it survives app restarts exactly as physical damage would. Pressing DEGAUSS triggers the PTC coil sequence, applying a decaying AC field that clears the entire texture over ~1.8 seconds.
Field strength reference: A permanent ring magnet at 8 mm produces approximately 10 mT (100 gauss) at the surface. True dipole field falloff is 1/r³; the simulation uses 1/(r² + soft²) which matches the near-field character of a contact magnet where r is much smaller than the magnet diameter. At 1 cm the field is roughly 8× weaker than at contact; beyond 5 cm it is negligible — consistent with why CRT televisions survived unshielded speakers at normal distances.
Strength slider: 0.05–1.0 · CW tangential swirl warp: all phosphors · Colour scramble: P22 only · Drag to paint smears/lines · 128×128 magnetisation field · Persists across restarts
CRT Phosphor Chemistry
The final stage of the simulation models the chemical physics of the phosphor screen itself. Every phosphor type is characterised from primary source data: EIA designation tables, RCA technical publications, manufacturer CIE chromaticity datasheets, and peer-reviewed phosphor literature. Each type is rendered using an IIR temporal accumulation kernel running at full resolution: phosphor_new = decay × phosphor_prev + (1 − decay) × excitation. The (1 − decay) normalisation prevents brightness creep: a steady input always converges to exactly that input level regardless of decay factor.
P22 is a composite EIA designation for the tri-phosphor chemistry used in virtually every consumer colour CRT produced between 1954 and the end of CRT production. Three separate phosphor compounds form the dot triad: Red — Y₂O₂S:Eu (europium-doped yttrium oxysulfide, 611 nm), Green — ZnS:Cu,Al (530 nm), Blue — ZnS:Ag (450 nm).
Each compound has a different decay rate. Red is the slowest (~3–6 ms to 10%), blue the fastest (~0.5–2 ms). The asymmetry creates the characteristic warm trailing fringe visible on fast-moving objects on original CRT footage. The simulation uses per-channel IIR decay multipliers: red × 1.15, green × 1.0 (reference), blue × 0.85 — calibrated from the RCA TPM-1508A measured persistence hierarchy for each compound. White point: 9300 K, the standard for Japanese consumer sets from the 1980s.
CIE primaries: R(0.610, 0.340) G(0.290, 0.600) B(0.150, 0.060) — SMPTE-C / EBU P22 standard. Decay: R 3–6 ms, G 1–3 ms, B 0.5–2 ms.
P31 (ZnS:Cu or ZnS:Cu,Ag) is the phosphor behind the "green screen" aesthetic of 1970s–80s computing — the Apple IIe, DEC VT terminals, Amdek and Zenith monitors, and the vast majority of analogue oscilloscopes. Sub-millisecond persistence (0.01–1 ms to 10%) means no visible trailing at 60 Hz. P31 is 2.2× brighter than the older P1 willemite green.
The RCA TPM-1508A (1961) measures the emission at CIE x=0.245, y=0.523 — vivid green, not yellow-green. Converted to Rec.709 this is R≈0, G=1.44, B=0.29. The simulation's colourTemp was corrected from an earlier yellow-green approximation to match this measured spectral data. Phosphor Technology Ltd independently confirms CIE xy (0.287, 0.521) for P31, consistent with the slightly varying ZnS:Cu formulations across manufacturers.
Peak: 520–530 nm · CIE (0.287, 0.521) · Decay: 0.01–1 ms · Rel. luminance: 100 (reference)
P45 has a very flat spectral response across the visible range and an approximately D65 white point — neither warm nor cool. It was developed for applications requiring accurate tonal reproduction at high scan rates: broadcast camera viewfinders, radar displays requiring fast phosphor response, and some early medical imaging CRTs. Sub-millisecond decay (shorter than P31) makes it suitable for high-repetition-rate applications where persistence would cause temporal smear.
Decay: < 1 ms · White point: ~D65 · Uniform RGB spectral response
P4 is a two-component blend designed to produce a visually white emission for consumer monochrome television receivers. The blue sub-component (ZnS:Ag, ~455 nm) and yellow-green sub-component (ZnCdS:Ag, ~565 nm) combine to give a measured CIE blend of x=0.270, y=0.300 — a cool white of approximately 8500 K when measured from a fresh tube. The RCA TPM-1508A (1961) records the blend at this chromaticity; decay to 10% is 60 µs.
The warm, slightly yellowed appearance associated with vintage B&W television sets is not the phosphor's natural emission — it is caused by yellowing of the aluminium backing layer (and sometimes the front glass) with age and UV exposure. A fresh P4 tube is distinctly cool-white. The simulation uses the measured cool-white emission; use the brightness and contrast controls to simulate an aged, warm set.
CIE (0.270, 0.300) · Decay: 60 µs to 10% · Source: RCA TPM-1508A (Oct 1961) · ~8500 K fresh
P3 (zinc beryllium silicate with manganese activator — Zn₈BeSi₅O₁₉:Mn, also written ZnBeSiO₄:Mn) was one of the first phosphors used in operational radar displays, deployed extensively in WWII ground and airborne radar equipment. Its amber-orange emission at 602 nm was chosen partly for night-vision preservation — the long-wavelength amber does not suppress scotopic (dark-adapted) vision as severely as green or white phosphors, an important consideration for operators in darkened radar rooms.
P3 has a 13 ms exponential decay — substantially longer than P31 — giving a visible trailing afterglow on moving targets. CIE xy approximately (0.54, 0.43), computed from the 602 nm spectral locus: deep saturated amber-orange, similar to sodium street lighting. The beryllium compound is toxic and carcinogenic; production ceased around 1950 and it was replaced by safer alternatives. It is essentially unencountered today except in surviving WWII-era equipment. Decay model: exponential (Dyall 1948 classification).
Peak: 602 nm · CIE ~(0.54, 0.43) · Decay: 13 ms exponential · Beryllium compound — obsolete ~1950
P7 is a cascade (two-layer) phosphor used throughout WWII and post-war radar PPI (Plan Position Indicator) displays and in early oscilloscopes for capturing one-time transient events. Its distinctive character comes from two separate decay mechanisms operating simultaneously.
The outer fast layer (ZnS:Ag or B*-ZnS:Ag on CdS substrate) is directly excited by the electron beam. It emits blue-white at 440 nm and decays within ~1 ms — essentially instant at display frame rates. The inner slow layer ((Zn,Cd)S:Cu) is excited photoluminescently by the UV and blue output of the fast layer. It emits yellow-green at 563 nm and has an inverse power-law decay lasting well over one minute in low ambient light.
The visual result: a fresh radar sweep trace appears blue-white; as the beam moves on and the fast layer decays, the slow layer's yellow-green persistence becomes dominant. Old traces glow warmly amber-green; new traces are cold blue-white. Many P7 radar displays were fitted with an orange-amber plastic filter over the tube face to suppress the blue flash entirely, making the display appear uniformly yellow-orange.
The simulation approximates the dual-layer physics with per-channel asymmetric IIR: B × 0.62 (fast — minimal blue in 563 nm emission), G × 1.22 (slowest — yellow-green dominant), R × 1.02 (moderate red in 563 nm). A separate slow-decay buffer would more accurately replicate the power-law tail, but the IIR approximation correctly captures the white-flash → yellow-green fade within typical playback timescales. Luma input is used to prevent composite chroma artifacts accumulating as false colour on a display that should show only phosphorescence colour.
Peaks: 440 nm (fast, < 1 ms) + 563 nm (slow, > 60 s) · Composite CIE ~(0.358, 0.524) · jniemann66 gist
P11 (ZnS:Ag,Cl) emits a deep blue at 460 nm with approximately 2 ms persistence. Its primary use was in oscilloscopes equipped with camera hood attachments for recording waveforms on photographic film — a common technique before digital storage oscilloscopes. Blue light at 460 nm exposes orthochromatic and panchromatic film far more efficiently than P31's green, allowing high-brightness waveform photography without overdriving the tube.
The phosphor's relative luminance to the human eye is only 25% of P31 (the eye is less sensitive at 460 nm than at 520 nm), but its relative writing speed — a measure of how quickly the trace can be written before the film is underexposed — equals P31 at 100% because the film's blue sensitivity compensates. A P11 oscilloscope trace appears visually dim compared to a P31 scope at the same beam current, but the photographs were well-exposed. Notable application: the Apollo Guidance Computer's DSKY (Display-Keyboard) indicator unit used a P11 CRT for its numeric readout.
Peak: 460 nm · CIE (0.165, 0.085) · Decay: 2 ms · Rel. luminance: 25 · Writing speed: 100 · Apollo DSKY
P24 (ZnO:Zn) has one of the shortest persistence times of any designated phosphor: approximately 1.5 µs to 10% (Jankowiak 2010; consistent with the 1–10 µs range in EIA TEP-116 literature). Its peak emission is 505–507 nm — a cyan-green distinctly bluer than P31 — with CIE xy approximately (0.19, 0.40), placing it in the aquamarine-teal region of the chromaticity diagram.
The primary application is the flying-spot scanner: a CRT spot scans across photographic film or a transparency at very high speed, and a photomultiplier or photodiode array samples the transmitted light frame by frame. The 1.5 µs decay is essential to avoid image smear at scan speeds measured in millions of pixels per second — any persistence longer than the sampling interval would blur the output. P24 is also used in some beam-index colour CRT displays where a single-gun tube requires a precise timing reference. Its relative luminance is only 8% of P31 — P24 is visually very dim, a characteristic tradeoff for extreme temporal speed.
Peak: 505–507 nm · CIE (0.19, 0.40) · Decay: 1.5 µs · Rel. luminance: 8 · Flying-spot scanners
Test Cards & Patterns
Every major analogue television operation began each broadcast day by transmitting a test card — an image engineered to reveal faults in the entire signal chain from camera to living room. The app includes fourteen industry-standard patterns and one geometric test chart, spanning 1939 to the 1990s.
Seven vertical bars at 75% amplitude provide a reference for every primary and secondary colour plus white, black, and blanking. An engineer adjusting a monitor to these bars could guarantee colour and luminance accuracy across the entire chain from studio to transmitter. SMPTE standardised the 75% variant (rather than 100%) to keep peak white within the safe operating range of VTR heads.
Full-saturation 100% bars drive every colour to its legal peak. Used for encoder calibration and to verify that a system can handle maximum colour excursion without clipping. On a vectorscope, the six colour dots should land precisely on their target boxes. The pattern exposes gain errors invisible at 75%.
The definitive NTSC colour-bar test pattern, developed at the CBS Technology Center by Hank Mahler. Seven 75%-saturation bars fill the top two-thirds. A narrow castellation strip below the bars enables blue-only alignment — when the blue channel is isolated, the bars and castellations merge into four equal blue bands, revealing any hue or saturation error instantly. The bottom quarter carries −I and +Q chrominance squares for vectorscope phase alignment, a 100% white reference, and the PLUGE (Picture Line-Up Generation Equipment) trio: sub-black (invisible), true black, and just-above-black, for precise monitor black-level calibration. CBS deliberately placed it in the public domain; it became the universal broadcast reference bar standard and earned a Technology & Engineering Emmy in 2002.
Eight segments rotating through the full colour wheel in 45° hue steps. The defining feature is the vectorscope display: the six non-white segments form a smooth circle rather than six isolated dots, making gain and phase errors immediately obvious as distortions of the ring. A favourite field-alignment tool because it reveals problems invisible on conventional bars.
Ten equal-voltage steps from video black to white — a staircase waveform on the waveform monitor. Used to check gamma correction (the spacing should appear perceptually uniform on a correctly gamma-corrected display), contrast linearity, and the step response of the decoder. One of the oldest electronic test patterns, predating colour television.
Six zones of sinusoidal bursts at increasing frequencies — 500 kHz, 1.0, 2.0, 3.0, 3.58, and 4.2 MHz for NTSC. Amplitude attenuation across zones shows the frequency response of the complete video path. Engineers could read off the usable bandwidth at a glance without a spectrum analyser. A staple of broadcast quality-control checks on every link in a video chain.
Evenly-spaced horizontal and vertical lines on black, often supplemented with safe-action and safe-title boundary boxes. Used to measure geometric linearity (straight lines should stay straight), pincushion and barrel distortion in CRT monitors, and to confirm that titles will remain within the guaranteed visible area on domestic sets. Generated electronically — no physical card required.
Named for Philips instrument code 5544, this card became the standard close-down and alignment image for PAL broadcasters across Europe for nearly three decades. Its central circle tests horizontal and vertical linearity simultaneously; colour bars verify chroma accuracy; corner circles and dot matrix reveal convergence errors. Broadcast nightly by dozens of national services from the BBC to ARD and ORF before each station signed off.
SVG: ebnz / Wikimedia Commons · CC BY 2.5
Designed by BBC engineer George Hersee and first broadcast on BBC Two on 2 July 1967, Test Card F became the defining close-down image of British television. At its centre, Hersee's eight-year-old daughter Carole plays noughts-and-crosses with a Pierrot clown doll — a deliberate choice of a natural, flesh-toned subject to challenge colour cameras. Surrounding her: a central cross-hatch for linearity, grey steps, colour patches, and a resolution wedge. Test Card F remained in continuous use on the BBC for over three decades and still appears occasionally during technical breakdowns, making it one of the longest-running broadcast images in television history.
Image: © BBC · English Wikipedia (fair use)
The Soviet Union's unified engineering test card, standardised under GOST 7845 and mandatory for all Warsaw Pact broadcasters. Combines a resolution wedge, colour patches, geometric shapes, and a central circle for simultaneous evaluation of resolution, colour accuracy, and deflection linearity. Transmitted daily by Gostelradio and remained in service through the 1990s. The designation УЭИТ stands for Универсальная Электронная Испытательная Таблица — Universal Electronic Test Chart.
SVG: Tucvbif / Wikimedia Commons · Public Domain
A CRT convergence alignment chart for colour monitors. Dense concentric circles, crosshairs, and dot matrices enabled engineers to align the three electron guns of Trinitron and shadow-mask tubes to within fractions of a millimetre. The "бис" suffix denotes a revised edition of the original ТИТ-0249 specification. Used throughout Soviet broadcast facilities and television factories for studio monitor calibration.
SVG: Tucvbif / Wikimedia Commons · CC BY-SA 3.0
Designed for the US Air Force to measure aerial camera resolution. The chart's six groups of six element-pairs — each group scaled by a factor of √2 — allow visual determination of the limiting resolution in line pairs per millimetre. Television engineers adopted it to characterise camera and lens systems; the central circle indicates depth-of-field uniformity. Still the reference resolution target in optics and imaging, seven decades after its introduction.
SVG: Setreset / Wikimedia Commons · CC BY-SA 3.0
A resolution test chart standardised specifically for television cameras and systems by the Electronic Industries Association. Radial wedges at the chart perimeter give horizontal and vertical resolution simultaneously; the ratio between their limiting frequencies shows how well a system preserves the aspect ratio of fine detail. Complemented the USAF chart by addressing TV-specific considerations like interlace and bandwidth asymmetry.
SVG: Wikimedia Commons · Public Domain (PD-self)
Designed by RAI engineer Renato Moretti for Italy's national broadcaster, the Monoscopio — literally "single screen" — appeared as a close-down pattern on RAI 1 and RAI 2 throughout the 1950s and 60s. Its characteristic white oval on a black field, surrounded by geometric precision marks, made it one of the most distinctive close-down images in European television. Broadcast at the end of each evening's schedule, it became a cultural marker for a generation of Italian viewers.
Image: permission pending · monoscopio.tv
The most recognised monochrome test card in US broadcast history. Designed by RCA for NBC, the card depicted a Native American chief in headdress surrounded by resolution wedges, aspect-ratio marks, and a grey scale. It appeared during off-air hours from 1939 until the mid-1950s, when NBC transitioned to colour test patterns. A generation of American engineers learned to align a television receiver against this image — it remains an icon of the early broadcast era.
SVG: Alex Microbe / Wikimedia Commons · Public Domain
Video Sources — Vintage Games
Eight built-in games feed live output directly into the composite encode/decode pipeline — the same path used by the camera, test cards, and every other source. There is no special handling. The game renders a frame, that frame becomes voltage samples, those samples pass through sync insertion, subcarrier modulation, comb filtering, quadrature demodulation, and finally the CRT phosphor stage. Every artifact that applies to a real video signal applies here too. A ninth option, Libretro, allows loading any compatible emulator core — effectively an unbounded library of additional hardware.
All eight built-in games are independent, clean-room implementations written from scratch. Game mechanics — rules, physics, and scoring — are not protectable by copyright under applicable law (ideas and systems are explicitly excluded from copyright protection; 17 U.S.C. § 102(b) and equivalent provisions in other jurisdictions). The original arcade hardware patents have all expired. No code, sprite graphics, audio samples, or other assets from any commercial release are reproduced or included. The games are presented as signal-source demonstrations.
A custom-written, period-accurate Pong implementation rendered at 320×240, feeding through the full composite encode/decode chain. Left paddle: W/S keys on macOS, touch on iOS. The right paddle is AI-controlled. Score is rendered with a chunky 5×7 pixel font — the kind of bitmap lettering a hardware character generator of 1973 would produce.
Because the game output enters the simulation at the encoder stage, the analog artifacts aren't applied over the top — they arise from the signal itself. Chroma crawl appears at the paddle edges. The ball's high-contrast transitions produce dot crawl at the subcarrier frequency. Scanline structure and phosphor bloom are determined by whichever CRT and phosphor preset is active. A Vidicon source will add lag to the ball's trail; a Plumbicon will bloom the ball highlight. Set the standard to PAL and the subcarrier geometry changes; set it to NTSC-J and the pedestal drops. The game does not know any of this — it just writes pixels.
Pong is useful as a diagnostic as much as a game. The high-contrast geometry — white rectangles on black — stresses every stage of the pipeline in a predictable, repeatable way. The ball velocity is constant, so temporal lag, motion blur, and phosphor persistence are easy to compare across camera tube settings.
Original implementation. The ball-and-paddle mechanic is a game rule, not protectable by copyright; the original Magnavox/Atari patent (US3659285) expired in 1989. No code or assets from any commercial Pong release are included.
Taito, 1978. Eleven columns of five alien rows — Squid, Crab, and Octopus types — each rendered with authentic two-frame sprites. A UFO crosses the top at irregular intervals. Four shields decompose under fire at the pixel level: each hit removes a circular radius of bitmap, replicating the original shield erosion behaviour. Three lives, wave system, marching bass-note rhythm that accelerates as the alien count falls. The monochrome pixel field passes through the composite chain, where horizontal bands of colour (an artifact of the original arcade's cellophane overlay) appear as the subcarrier interacts with the high-contrast grid geometry.
Original implementation. The descending-alien-grid mechanic is a game rule and is not copyrightable. All sprite graphics are original pixel artwork drawn to match the aesthetic of the 1978 Taito release; the audio is synthesised from scratch. No code or assets from the original game are reproduced.
Atari, 1976. Eight rows of fourteen bricks in four colour bands — Red, Amber, Green, Yellow, each worth increasing points. Ball angle is determined by where it strikes the paddle: centre returns straight, edges return at up to ±70°. Speed is clamped to 220 px/s; the simulation adds a slight speed increase on brick destruction to replicate the original game's pacing. Each brick colour has a distinct pitch, so the audio composition changes as layers are cleared. The high-contrast brick field and rapid ball transitions stress the composite pipeline's chroma demodulator — dot crawl appears at every brick edge.
Original implementation. The brick-breaking mechanic is a game rule and is not protectable by copyright. All graphics and audio are written from scratch. No code or assets from the 1976 Atari release are reproduced.
Nokia/BBC Micro style. A 40×28 grid of 8×8 pixel cells. The intro screen lets the player choose between wall-death and wrap-around modes — the latter allows the snake to re-enter from the opposite edge, which changes the risk profile entirely. Speed ramps by 0.8 cells per second for every five apples collected. The blocky cell grid and bright-on-dark pixels produce the characteristic crawl artifacts that a real television would show on this kind of content: subcarrier dot patterns at every green edge, scanline structure visible in each 8×8 cell.
Original implementation. The snake-eats-food genre derives from arcade game Blockade (Gremlin Industries, 1976) and predates any single rights-holder; game mechanics are not copyrightable. This is an independent reimplementation with no code or assets from Nokia or any other commercial release.
Atari, 1979. A vector arcade game rendered in software using a P31 phosphor buffer — the green phosphor used in Asteroids arcade monitors. Each frame, the phosphor decays by ×0.80, producing the characteristic slow-green trail on every line drawn. The result is rendered as BGRA pixels (r=p/4, g=p, b=p/8) and fed into the composite chain. Three asteroid sizes split on impact; a UFO appears at intervals; hyperspace teleports the ship to a random position with approximately a 20% chance of appearing inside an asteroid. Ship inertia is modelled as a two-axis velocity accumulator with zero friction. The slow-decay phosphor, when passed through the composite encoder and a Vidicon camera tube, produces layered motion trails that go well beyond any post-process filter.
Original implementation. Asteroid physics, ship inertia, and saucer mechanics are game rules and are not protectable by copyright. The polygon geometry, phosphor simulation, and all audio are written from scratch. No code or assets from the 1979 Atari release are reproduced.
Atari, 1980. Three missile bases (10 rounds each) defend six cities against incoming warheads. A crosshair tracks mouse position or arrow keys; fire launches an interceptor arc to the crosshair position, detonating on arrival as an expanding then contracting circular explosion. On iOS, touch controls the crosshair directly. The wave system escalates: surviving cities and bases score a bonus at wave end. At game over the full city panorama detonates in sequence. The arcing interceptor trajectories, large circular blast zones, and the multi-colour incoming missile trails all produce distinct composite artifacts — colour fringing at each arc edge, subcarrier cross-modulation at the explosion boundary, chroma phase error in the bright detonation flash.
Original implementation. The anti-missile defence mechanic and city-survival concept are game rules and are not protectable by copyright. All explosion geometry, city artwork, and audio are written from scratch. No code or assets from the 1980 Atari release are reproduced.
Atari, 1980. A twelve-segment centipede winds through a mushroom field, reversing direction each time it hits an edge or mushroom. Shooting a segment splits it in two; a mushroom spawns at the death point (each mushroom has four hit points). A spider bounces erratically through the player zone, changing direction irregularly. A flea drops vertically, planting mushrooms at random positions in its trail. Each enemy type has a distinct audio signature — segment impact, spider bounce, flea drop, and rapid-fire tones. The dense mushroom field of small bright dots is particularly hard on the composite chain: chroma crawl appears throughout the field, and each mushroom's sharp edge produces a fine ringing artifact from the composite encoder's low-pass filter.
Original implementation. The segmented-enemy, mushroom-field mechanic is a game rule and is not protectable by copyright. All sprite graphics, colour palettes, and audio are written from scratch. No code or assets from the 1980 Atari release are reproduced.
Atari, 1979. One of the first arcade games built on Atari's vector-graphics hardware — the same board that would later power Asteroids. The player guides the Apollo Lunar Module down to the Moon's surface under authentic lunar gravity (1/6 g), balancing fuel against the need to slow the descent and correct horizontal drift. Three landing zones are marked with flags and multipliers (2×, 3×, 5×): the highest-value pad is also the narrowest. Touching down gently scores a full bonus scaled by the multiplier; a hard landing is survivable but loses points; any other contact is a crash.
Controls follow the original cabinet exactly: Rotate Left and Rotate Right are separate buttons, and the thrust lever fires the main descent engine upward only — there are no lateral thrusters. An abort button provides emergency maximum thrust at the cost of four times the fuel burn. As the lander descends below 150 world-units of altitude the viewport zooms in, replicating the approach zoom of the original cabinet. The HUD displays fuel percentage, altitude, horizontal velocity, and vertical velocity in the original arcade layout, with live danger highlighting when descent speed exceeds safe thresholds. A low-fuel warning flashes below 100 units.
On the composite chain: the bright white vector wireframe of the LM against a black sky produces sharp luminance transitions with minimal chroma content, much as the original monochrome vector monitor appeared when connected through an RF modulator. The thrust exhaust particles — warm orange points that decay in brightness — introduce brief chroma transients into the otherwise achromatic scene, flickering subcarrier dots at the engine bell that the composite decoder renders as faint colour fringing.
Original implementation. The physics of descent under gravity, the rotating-lander-with-single-thrust mechanic, and the landing-zone concept are unprotectable game rules; the original Atari title drew a wireframe outline of the Apollo LM, itself a real spacecraft with no copyright interest. All geometry, physics constants, scoring logic, and audio are written from scratch. No code or assets from the 1979 Atari release are reproduced.
Libretro is an open API for emulator cores — the same interface used by RetroArch. The app can load any compatible .dylib core placed in ~/Library/Application Support/AnalogTV/Cores/. Drop in an Atari 2600, NES, Game Boy, or any other supported core, then load a ROM via the in-app file browser. The core's video output — rendered at whatever resolution and pixel format the original hardware used — feeds directly into the composite pipeline.
This means the NES's limited colour palette, the 2600's scanline-level timing artifacts, and the characteristic dot patterns of hardware sprite rendering all enter the simulation as raw pixel data, then get composite-encoded and decoded in full. The chroma subcarrier interacts with the hardware's colour encoding the same way it would have on a real television connected to the original console via RF or composite out. You supply the cores and ROMs; the simulation handles the rest.
macOS only. Libretro core compatibility depends on the individual core. The app does not bundle any cores or ROM files. Users are responsible for ensuring they have the legal right to use any ROMs they load.
Signal Accuracy
Each standard sampled at 4× its native subcarrier frequency: 14.318 MHz for NTSC-M/J, 17.734 MHz for PAL/SECAM/625B&W, 14.303 MHz for PAL-M, 14.328 MHz for PAL-N, 8 MHz for System A, 22 MHz for System C.
Phase — radians per sample and per line — is pre-computed per standard on the CPU. All colour formats share the same GPU encoder and decoder kernels with no hardcoded format branches in the shaders.
REF mode bypasses all noise and CRT effects so you can verify the raw encode–decode roundtrip. Useful for confirming that a given standard's subcarrier, pedestal, and burst geometry are correct.
SYNC mode gates simulation updates to the standard's native field rate — 29.97 fps for NTSC-family, 25 fps for PAL/SECAM/B&W — using a drift-corrected timer rather than the display's 60 Hz refresh.
The built-in waveform monitor and vectorscope show actual signal values — the same measurements you'd see on real broadcast test equipment. The vectorscope traces the I/Q or U/V constellation of the decoded signal.
GPU compute shaders process every output sample in parallel — each thread computes φ(n) = 2π(f_sc + dev·sig)·n independently. This is correct for amplitude/phase systems like NTSC and PAL, but FM requires continuous phase accumulation: φ(n) = φ(n−1) + 2π·f_inst(n). Computing this on the GPU would require a prefix sum over 946 samples per line — serialising the entire active line and negating any throughput benefit. Instead, SECAM encoding uses a dedicated CPU kernel: all 576 active lines run in parallel (each line is phase-independent), but within each line the FM phase integral is computed sequentially, sample by sample. The CPU kernel writes into the same composite buffer consumed by the GPU decode pass, keeping the rest of the pipeline unchanged.
This matters for fidelity because GPU instantaneous-phase encoding produces a phase discontinuity at every colour transition — the carrier jumps to a new frequency as if it had always been there, rather than smoothly sweeping through the transition. The CPU accumulated-phase encoder produces the physically correct FM transient: a brief over- or under-deviation as the carrier sweeps to its new steady-state frequency. This transient is exactly the cause of SECAM fire — the coloured fringe at vertical bar edges unique to SECAM receivers. It is not achievable without continuous phase accumulation.
The CPU kernel also implements the full broadcast processing chain in the correct order: deviation limiting (clamping Db/Dr to ±1.0 per CCIR 624 §4.4), LF pre-emphasis (85 kHz one-pole HPF applied to the baseband colour signal before modulation), FM phase accumulation, and Bell/Cloche carrier amplitude weighting applied to the FM output. The GPU decoder applies the inverse: FM discriminate via atan2(z₁×conj(z₀)), then a sequential per-line IIR de-emphasis pass, then Y/C matrix.
RF interference, ghost/multipath, IF filter ringing, and chroma decode all operate on the composite buffer at the full composite sample rate — 14.318 MHz for NTSC, 17.734 MHz for PAL. No effect is applied as a pixel-domain post-process: every distortion enters and propagates through the waveform, interacting with subcarrier phase exactly as it would in real hardware. Y/C separation uses a 1-line comb at composite rate; chroma is demodulated by Hann-windowed quadrature FIR filters with per-channel bandwidth (NTSC I: 1.3 MHz, Q: 0.4 MHz; PAL U/V: 1.3 MHz); luma is bandwidth-limited by a 13-tap sinc LPF before the final texture write.
The decay formula new = d × prev + (1−d) × E converges to exactly E under constant input. Setting new = prev = ss: ss = d × ss + (1−d) × E → ss(1−d) = (1−d) × E → ss = E. No brightness creep regardless of d.
P22 phosphor decay times at 60 Hz: Red (Y₂O₂S:Eu) 3–6 ms → decay ≈ 0.82–0.93; Green (ZnS:Cu,Al) 1–3 ms → decay ≈ 0.70–0.83; Blue (ZnS:Ag) 0.5–2 ms → decay ≈ 0.55–0.75. The app maps the user slider to the green midpoint and derives R and B by ×1.15 and ×0.85.