个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证An analogue radio mic's companding circuit with your picture pushed through it, as an FFGL plugin for Resolume and an OpenFX plugin for Resolve. Match the two ends and almost nothing happens; the fun is when they disagree.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗AI-assisted project. This codebase was created with Claude (Anthropic), directed and reviewed by a human author. The signal model is verified numerically by an offline harness that drives the real plugin class: it checks the compander's round trip against its own algebra, checks the parallel envelope detector against a strictly serial implementation of the same law, and proves the effect acts along the scan and not across it (see Status). The FFGL build has been loaded into Resolume Arena 7.27.1, put on a layer and run on real footage, with its controls, groups and factory presets read back out of the running host. No audio spectrum has ever reached it, though: the audio-reactive controls are wired up and Resolume recognises them, but they've never been driven. The OpenFX build has only ever been exercised by a test probe, and has never been opened in Resolve. Check it in your own rig before you trust it in a show.
An analogue radio mic's companding circuit, with your footage pushed through it instead of a microphone signal, as an FFGL plugin for Resolume Arena and Avenue, and the same thing again as an OpenFX plugin for Resolve, Nuke, Natron and Vegas.
The project page has the downloads, the user guide and the video.
A wireless link can't carry the dynamic range of what's sent down it. So the transmitter squashes it (pre-emphasis to lift the quiet top end above the noise, then a compressor that halves the signal's excursion in dB) and the receiver does the exact opposite, expanding it back out and de-emphasising. In between sits a link with a noise floor, a ceiling, and no opinion about either.
in → EMPHASIS → COMPRESS → [ link: level, ceiling, noise ] → EXPAND → DE-EMPHASIS → out
Get every stage right and almost nothing happens: a working radio mic sounds like a cable. Everything this plugin is for comes from the two ends disagreeing.
Video: What it does, in 50 seconds
Browser demo: compander-demo.stoatworks-labs.com, the plugin's own shaders in WebGL2, no install. It's a demo, not the plugin; see below.
Rendered by the plugin's own offline harness in a headless GL context rather than captured from Resolume. Actual frames through the shipped shaders, on a synthetic scene built to make companding measurable: a flat band, hard vertical edges, two one-pixel combs at ninety degrees to each other, and a ramp.
v0.1.4 — prebuilt for macOS, Windows and Linux. Pick your platform:
| Build | Download | Size |
|---|---|---|
| Universal (Apple Silicon + Intel) · .dmg disk image | compander-0.1.4-macos-universal.dmg | 223 KB |
| Universal (Apple Silicon + Intel) · .zip archive | compander-macos-universal.zip | 186 KB |
| Universal (Apple Silicon + Intel) · .zip archive (OpenFX — Resolve, Vegas, Nuke) | compander-ofx-macos-universal.zip | 253 KB |
| Build | Download | Size |
|---|---|---|
| x64 · .exe installer | compander-0.1.4-windows-x86_64-setup.exe | 223 KB |
| x64 · .zip archive | compander-windows-x86_64.zip | 118 KB |
| x64 · .zip archive (OpenFX — Resolve, Vegas, Nuke) | compander-ofx-windows-x86_64.zip | 66 KB |
| Build | Download | Size |
|---|---|---|
| x64 · .zip archive (OpenFX — Resolve, Vegas, Nuke) | compander-ofx-linux-x86_64.zip | 741 KB |
All builds, checksums and release notes: github.com/stoatworks-labs/compander/releases.
macOS builds are signed and notarised and open normally. The Windows builds are unsigned, so SmartScreen warns once.
A signal on a wire has one axis, time. When that signal is a picture, time is the scan. So a compander's attack and release convert, exactly, into a distance along the line:
| Time Constant | at 1920 wide | what you see |
|---|---|---|
| 0.2 µs | 7 samples | haloing tight to every edge |
| 5 µs | 185 samples | a smear off the side of things |
| 60 µs | about a line | streaks pulling down the frame |
| 2 ms | about 37 lines | broad vertical banding |
| 20 ms | half a frame | the whole picture pumping |
It's causal, so the smear trails to the right of a bright object and leaves its left edge alone, and it wraps line to line, because that's where the signal was a moment ago.
The processing is horizontal and there's no vertical equivalent. A link carries one signal with one frequency axis: a vertical edge is a high frequency to a transmitter, and a horizontal edge isn't a frequency at all. It's the next line.
Ten real systems: a broadband two-to-one VCA compander, a high-density two-band one, a digital hybrid, a receiver fading on the wrong side of the room, something cheap from a market stall, a consumer tape format's luma channel, a satellite up-link, an ENG microwave truck, and the two half-chains on their own.
They're named for what they are rather than for whose trademark they are. This isn't anybody's product and doesn't claim to be a measurement of one.
https://compander-demo.stoatworks-labs.com/ runs the plugin's own eight shader
programs in WebGL2, pass for pass on the same half-float buffers, with every control it
declares under its own name, group and default, and the ten presets. The shaders are
spliced into demo/shaders.js unedited, and demo/tools/check_shaders.py fails
tools/verify.sh on a changed character or a changed preset row. The CPU half (the control
conversions, the gain tables, the detector's pass plan, the frame logic) is a JavaScript
port, and tools/verify.sh holds it to the plugin twice: against the plugin's own C++, and
picture for picture against the real plugin class through cmtest --pipe, where every
channel of 330 frames comes out within one level of 255. A browser has no audio, so the
Audio input, Audio Band and Audio Tilt aren't on the page and the sidechain runs on silence.
It needs WebGL2 with EXT_color_buffer_float. It's a demo, not the plugin, and the page
says what it doesn't reproduce.
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
cmake --install build
cmake --install drops the bundle into ~/Documents/Resolume Arena/Extra Effects.
You'll need the FFGL SDK submodule: git submodule update --init --recursive.
Verified by measurement, in tools/verify.sh:
Confirmed in Resolume Arena 7.27.1, on a layer, rendering real footage:
Not verified. No audio spectrum has ever reached the plugin: the test
machine's Arena had its composition audio muted, so there was nothing to analyse.
The audio controls are wired up and recognised but undriven; if they do nothing for
you, check the log for audio input active. The OpenFX build loads and renders
under a test probe but has never been opened in Resolve. The Windows build is
compiled by CI and every release since v0.1.0 ships an x64 installer and both zips, but
nothing has ever run it on Windows.
The two builds differ in one place, on purpose: a CPU can run the detector's serial recursion directly, so the OpenFX build computes the envelope law exactly, while the FFGL build gets the same answer by recursive doubling on the GPU. The OpenFX build has no audio sidechain, because OpenFX has no audio input.
MIT. See LICENSE.