Skip to content

fx-dub Handbook

fx-dub answers one question: is this dub actually usable?

Not “is it 48 kHz” — you can check that with ffprobe. The question that costs you a review cycle is whether the take says the right words, in the right voices, without anyone talking over anyone else.

A generated take can be flawless by every measurement a container exposes and still be unusable. Both of the defects that made this tool necessary looked like this:

Take ATake B
Sample rate48 kHz ✅48 kHz ✅
Duration9.840 s ✅9.840 s ✅
Loudness−18.1 LUFS ✅−18.1 LUFS ✅
Actuallysaid a fourth line nobody wroteheld a 1.880 s silence mid-sentence

Take A came from a model in audio reference mode reproducing its reference clip’s dialogue, not just its timbre — a stem meant to carry one character’s lines quietly re-spoke the other’s. Mixed under the real take it sounded like two men talking over each other.

Take B’s pause ran straight into the next character’s cue.

Neither is visible to duration. Both are trivially visible to a diarized transcript. That gap is the whole product.

ToolAnswers
fxdub-receiptAre the masters, the loudness, the ducking depth and the re-muxed video correct?
fxdub-dialogueDid it say the right words, in the right voices, at the right times?

Both exit non-zero on failure, so they gate a pipeline rather than decorate it.

A failing check is a finding, not a bug in the tool. Report it. Never tune the threshold to make it green.

Two checks in this project have been corrected rather than tuned — both because they measured the wrong quantity, and the reasoning lives in their docstrings. That distinction is the difference between a verifier and a rubber stamp.