Cadence
Interlace, pulldown and bad deinterlacing for Resolume

What it does
An FFGL effect for Resolume Arena and Avenue. A television picture is two fields 1/50 or 1/60 s apart, each carrying alternate lines. Cadence treats the clip that way — one rule, field k carries the source frame current at the middle of its own field period — then puts a film cadence in front of it and shows the result on a progressive screen through a deinterlacer you choose.
Everything you recognise falls out of that, and none of it is drawn. Combing, because a moving object's two fields are v · T_field apart and a weave puts it in two places at once. Bob bounce, because line doubling has to invent the missing rows and the invention lands one row lower on one field than the other, so static fine detail jumps a line each field. Ghosting, because averaging two fields of a moving object is two objects at half strength. The adaptive mode's mistakes, at a threshold too high so combing leaks or too low so detail goes soft. 3:2 judder, because 24 frames laid into 60 fields cannot be even. A mis-lock, because an edit landing mid-cycle keeps a naive inverse telecine weaving the wrong pair until it re-locks. And the stutter of believing the wrong field came first: two steps forward, one back.
There is no table of cadences anywhere in the source. 2:3, 2:2 and one-field-per-frame are the same equation at different rates, and the 2:3 pattern is read back out of the rendered picture in the harness rather than compared against a second copy of the rule.
Two controls are worth knowing about. Swap Field Order does nothing under Weave, and that is correct rather than a bug — a weave uses both fields and does not care which came first — so it only shows up the moment a mode displays one field at a time. And Lock Time decides whether the inverse telecine re-locks after an edit at all: short and it chases every break, long and it never converges and sits on whatever it locked onto first. Show Decision puts the adaptive mode's per-pixel weave-or-bob choice on screen, which is the only honest way to set its threshold.
Display → Fields shows one field on its own lines with the rest black, which is what a CRT actually shows in one field period. Cadence Break puts an edit in every Break Interval, or on an audio onset, which is the condition a real inverse telecine has to survive.
- One field rule underneath everything: field k carries the source frame current at the middle of its own field period
- Split, Telecine and Cadence Break sources — 2:3, 2:2 and one-field-per-frame from the same equation at different rates
- Six deinterlacers: Weave, Bob, Bob Linear, Blend, motion-adaptive, and Inverse Telecine
- A per-pixel adaptive decision with a Show Decision view for setting its threshold
- Inverse telecine with a Lock Time that decides whether it re-locks after an edit at all
- Cadence breaks on an interval or on an audio onset, which is what a real inverse telecine has to survive
- Fields display: one field on its own lines, the rest black — what a CRT shows in one field period
- Field order, swap, and the stutter that believing the wrong one gives
- Universal macOS bundle and a Windows x64 DLL
Where it stands
v0.1.0, and honestly early. The field arithmetic is measured by an offline harness that drives the real plugin class headlessly, and tools/verify.sh builds the universal bundle from scratch and runs it in about twelve seconds: a weave combs by exactly v over 1,980 rows per speed at v = 1, 3 and 7 with a largest error of 0 px; the motion-adaptive mode collapses to Bob Linear at threshold 0 and to Weave at 1 with 0 of 2,995,200 bytes differing, and is neither at 0.15; the 2:3 pattern is read back out of the picture as runs of 3 2 3 2 with input frames advancing 2.47 host frames per source frame against 2.50 wanted; a clean 2:3 inverse telecine combs 0 frames once settled, and after cadence breaks re-locks 4 times at Lock Time 0.05 s against 0 at 4 s; a resize mid-run rebuilds the ring empty with 0 stale pixels. All 14 swept controls measurably change the picture. Render cost on macOS is 0.53 ms/frame at 1080p and 2.14 at 4K, or 0.86 and 3.18 in Inverse Telecine, which adds a readback per field. On 21 September 2026 the x64 DLL was registered, loaded and instantiated in Resolume Arena 7.27.1 on win-lab: listed among 112 video effects under idstring CD01, applied from Arena's own effects browser, shaders compiled, inspector drawn, diag log clean of WARN, ERROR and FAIL. That machine has no GPU — OpenGL came from Mesa llvmpipe — so it has never run on a GPU in Resolume, has never been instantiated in Arena on macOS or installed into Extra Effects, and nothing was timed on Windows. No long session, composition save and reload or preset recall in the host; the audio path has only ever seen a synthetic click train, and no real audio reached it in Arena either. No OpenFX port, no user guide and no factory presets. Check it in your own rig before trusting it in a show.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead