Downlink
FM satellite TV, sparklies and all, for Resolume

What it does
An FFGL effect for Resolume Arena and Avenue. Analogue satellite TV sent its composite video as frequency modulation of a carrier, because FM trades bandwidth for noise, and that trade has a cliff edge. Above the FM threshold the picture's clean, with a little fine coloured grain. Below it the discriminator starts throwing clicks: whenever the noise swings the received phasor round the origin, the demodulated phase jumps by a whole cycle, and the de-emphasis and the video lowpass smear each click into a short horizontal streak. Those are the sparklies.
So Downlink builds the whole link on the GPU, sample by sample, in parallel: PAL, CCIR 405 pre-emphasis, an FM carrier with energy dispersal, a noisy channel, a Gaussian IF, a discriminator running at 283.75 MHz (sixteen times the video rate), a lowpass, de-emphasis, a clamp and a PAL decoder. What reaches the screen is whatever the receiver made of it.
FM noise rises with frequency, so after the de-emphasis the worst of it lands on the chroma subcarrier and the decoder turns it into colour. The output SNR tracks CNR dB for dB, 20.6 dB above it at the defaults, then falls off the cliff: from the knee to 3 dB under it the picture loses 9.7 dB. A bright picture holds the carrier off the IF's centre, and the extra clicks all have the sign that pulls it back, so the sparklies are black on white and white on black. A keyed clamp that happens to sample a click on the back porch lifts or drops a whole line.
The uplink sweeps its carrier with a 25 Hz triangle for energy dispersal. Clamp Good takes it off every line, Slow lags it into a flicker field against field, and Off leaves the brightness rocking at the field rate. Threshold Ext. narrows the noise the discriminator sees by 3 dB and drops the knee by 3.9. Rain Fade takes dB off the link, and Audio Fade does the same by the level of whatever audio you route in. Component swaps PAL for three separate carriers, an idealised MAC.
- The whole FM link on the GPU, per sample, with the discriminator at 283.75 MHz
- Clicks at Rice's rate below threshold, smeared into sparklies by the de-emphasis and lowpass
- Black sparklies on white and white on black, from Rice's modulation term
- Energy dispersal, and a keyed clamp that is Good, Slow or Off
- CNR, deviation, IF and video bandwidth, and CCIR 405 pre- and de-emphasis
- Threshold extension, Rain Fade, and an Audio Fade driven by the audio routed in
- PAL or three-carrier Component
- Universal macOS bundle and a Windows x64 DLL
Where it stands
v0.1.0, and early days. It hasn't been loaded into Resolume on macOS yet. On Windows it has: a build loads, registers and renders in Resolume Arena 7.27.1 on software rendering (no GPU), with every parameter as declared. Deviation, Dispersal and IF Bandwidth couldn't be shown moving against the link's ever-changing noise, and that machine has no sound device for the two audio controls. The link is measured offline, by a harness driving the real plugin and the shaders it runs: both emphasis networks sit within 0.019 dB of ITU-R F.405-1's 625-line curve, the click counts match the sampled discriminator's exact figures and Rice's rate, SNR above the knee tracks CNR to within 0.08 dB, the knee and the threshold extension land within a fraction of a dB of where they should, and with the clamp off a flat grey follows the dispersal triangle. It catches eight models broken on purpose and a one-character sabotage of its own link shader, and all 14 swept controls change the picture. On macOS, PAL costs 3.1 ms a frame at 720p, 3.2 at 1080p and 3.7 at 4K, and Component 5.8, 5.9 and 6.5, most of it the discriminator. The coloured grain comes out of the chain and you can see it, but nothing measures the shape of the noise spectrum. The IF is Gaussian rather than any real SAW filter, threshold extension is an ideal tracking filter rather than a PLL, the decoder's colour reference is perfect, and nobody's measured Resolume's 64 FFT bins, so Audio Fade only reads their total level. There's a user guide and a browser demo, which is a port rather than the plugin, but no presets and no OpenFX port. The macOS builds are signed and notarised. Try it in your own rig before you trust it in a show.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead