iOS App
A pixel-accurate model of how every major analogue television standard really worked — composite signal and all.
How the Simulation Works
Real composite television doesn't transmit red, green, and blue separately. Instead, the camera collapses the picture into a single voltage waveform — one wire carries everything: brightness, colour, and timing pulses all mixed together. This app replicates that process exactly, in two GPU passes every frame.
Your camera image is converted to a composite signal buffer — a flat array of floating-point voltage samples. The exact sample count per line depends on the standard (790 for 405-line B&W up to 1135 for PAL, sampled at 4× the subcarrier frequency). Sync pulses, colour burst, and picture are all written into the same stream. Subcarrier phase geometry — radians per sample and per line — is pre-computed on the CPU and passed as shader parameters, so every standard uses the same encoder with no hardcoded branches.
The buffer now contains what would be on the cable between a broadcast transmitter and your TV antenna. Colour, brightness, and all the artifacts live together in this single waveform — exactly as they would in real hardware.
A second GPU pass reads the same buffer and reconstructs the picture using the same circuits a real TV would — comb filters, quadrature demodulators, FM discriminators. Artifacts that emerge here are genuine, not painted on.
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, each FM-modulating its own subcarrier. FM is immune to amplitude variations, giving excellent colour stability. Because FM requires continuous phase, a special per-line sequential CPU kernel handles SECAM encode. No colour burst is transmitted.
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.
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.
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.
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.
SECAM uses a per-line sequential CPU kernel because FM requires continuous phase between adjacent samples — something GPU parallelism cannot provide. The kernel writes into the same composite buffer consumed by the decode shader.