Fax
Your clip, faxed down a dodgy phone line, for Resolume

What it does
An FFGL effect for Resolume Arena and Avenue. A Group 3 fax doesn't send pixels. It turns each scan line into black and white, 1728 pels across 215 mm, and sends the lengths of the runs as variable-length codes, one line at a time, each finished with an EOL. In MR most lines are sent as the differences from the line above, with a plain one-dimensional line every K lines so an error can't run on forever.
Fax pushes your clip through an actual T.4 coder, a noisy line and a decoder, and the fax look comes out of that rather than being drawn on afterwards. A bit error makes the decoder read the wrong code lengths, so it streaks from the error to the right-hand edge of its line and stops at the next EOL. In MR the damage runs downwards too, because every following line is decoded against a spoilt one, until the next one-dimensional line turns up: a wedge at most 2, 4 or 8 lines tall. A receiver that can tell a line is bad repeats the line above, which is that familiar vertical stretch.
Standard resolution is 3.85 lines per millimetre against 8 pels across, so a standard fax comes out squashed and gets doubled up vertically. In Page mode the page arrives a line at a time at the line rate, quick over blank paper and slow over detail, and never faster than the 10 ms a scan line is allowed. In Live mode every frame is a brand new page. The sending machine prints its header line across the top before coding the page, so that gets mangled on the way like everything else.
The code tables were typed in from the Recommendation by hand (about as much fun as it sounds) and are checked against two independent transcriptions, Go's x/image/ccitt and pdfminer.six. The plugin's own output is decoded back by Go's CCITT decoder, which shares no code with it. The print side draws the received page by how much area the black pels cover, on warm-grey thermal paper or plain paper.
- A real T.4 coder and decoder: Modified Huffman and Modified READ, EOLs, fill, RTC
- Code tables checked bit for bit against two independent transcriptions, and streams read back by Go's CCITT decoder
- A noisy line: bit errors from 1e-6 to 1e-2, and bursts of up to 64 bits
- Streaks, wedges down to the next one-dimensional line, and Repeat Line concealment
- Standard, fine and superfine resolution; Frame, A4 Crop and A4 Letterbox
- Page mode at 2400 to 14400 bit/s, or Live, a new page every frame; an 8 x 8 halftone
- 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. Six controls (Resolution, Coding, Bursts, Baud, Concealment and Header) couldn't be measured there, because in Live mode every frame is a new page with new bit errors and the picture never sits still long enough. Everything else is measured by an offline harness driving the real plugin: all 204 code-table entries match two independent transcriptions of T.4 bit for bit, Go's CCITT decoder reads its streams back with 0 of 100,656 bytes different, a clean line delivers the page bit for bit, each of 47 single bit errors stays in its own line, an MR error never runs past the next one-dimensional line, every concealed line is a copy of the one above, and in Page mode all 466 lines arrive within 2 ms of when the baud rate says they should. It catches nine deliberately wrong models and a one-character sabotage of its own shader, and all 13 swept controls change the picture. The CPU side costs about 9 ms a frame at 1080p on an M4 Max at the defaults (Live, Halftone) and under 1 ms with Halftone off, and superfine halftone in Live mode isn't real-time (about 31 fps). The macOS build is signed and notarised. There's a user guide and a browser demo, but no presets and no OpenFX port. 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