Nodes/ComfyUI LC Audio_Video Nodes/LC H3 Dialogue Check πŸ—£οΈ (BETA)
ComfyUI Node

LC H3 Dialogue Check πŸ—£οΈ (BETA)

H3 will say total nonsense with perfect lip sync. This catches it

By lonecatone23Β·Created about a month agoΒ·Updated 2 days agoΒ· 5
LC H3 Dialogue Check πŸ—£οΈ (BETA)
  • audio
  • transcript
  • match
  • passed
  • cut_points
  • prompt_line
  • report
β—„model_sizesmallβ–Ί
β—„min_match0.60β–Ί
β—„min_pause0.4β–Ί
β—„promptβ€”β–Ί
β—„languageenβ–Ί

The failure mode that wastes the most GPU time in H3 work isn't a bad frame - it's speech that sounds like speech. You get a mouth moving in rhythm, plausible phonemes, and if you only watch the clip once at 24 fps while it's still rendering, you'll ship it. Then it's gibberish, and you find out after the upscale and the interpolate pass.

LC H3 Dialogue Check (BETA) does the boring thing that fixes this: it listens to the finished clip and writes down what was actually said. Then it compares that to the dialogue in quotes inside your prompt and gives you a number.

How it works

Whisper, specifically faster-whisper, running int8 on the CPU. That's a deliberate choice, and a good one - your GPU stays free for H3, and it sidesteps the fact that faster-whisper's CUDA build wants CUDA 12 libraries that a CUDA 13 ComfyUI doesn't ship. A clip takes seconds on CPU. The model downloads once to ComfyUI/models/stt/faster-whisper-<size>/ on first run.

The audio is downmixed to mono and resampled to 16 kHz, then transcribed with word timestamps on and VAD enabled. That VAD flag matters more than it looks: without it, Whisper loves inventing a polite "Thank you." out of near-silence, and your match score dives for no reason.

The comparison itself is word-level similarity via Python's difflib.SequenceMatcher over lowercased words, ignoring punctuation and normalising curly apostrophes. So 1.0 means every word was heard, in order; 0.6 means most of them; 0.3 or below is gibberish with a beat.

It also reads the pauses. Any gap between two words of at least min_pause gets recorded as a cut point - the midpoint of the silence - and those are the clean places to cut, or to start the next segment from.

Inputs and outputs

Required: audio (the clip's sound, from the H3 audio decode or a loaded video), model_size (small is the sweet spot for English at about 460 MB; large-v3 on CPU is minutes per clip, not seconds), min_match (0.6 by default - below this, the speech counts as garbled), and min_pause (0.4 s).

Optional language is a plain string - en, es, fr; blank means detect. Optional prompt is where the dialogue lives, and there's a catch worth knowing before you stare at a dead socket: prompt is a force-input, so you cannot type into it. You have to wire a STRING into it - LC H3 Segment's prompt output, or any text node's string output. Leave it unwired and match returns 1.0, passed returns True, and the node politely tells you there was nothing to compare. A green tick with no prompt wired means nothing at all.

Six outputs, and they go somewhere: transcript is what Whisper heard, match is the score, passed is the boolean you'd gate a redo on, cut_points is a comma-separated list of pause times, prompt_line is the transcript rewritten as timed prompt lines - At 0 seconds they say, "…" - and report is the readable summary the node also shows in the UI. prompt_line is the one to keep: paste it into your prompt and change "they" to the character, and H3 moves the mouth at the right moments. That's what makes a recording you sync with LC H3 Audio Sync work, because H3 acts on words the prompt says are spoken at a time.

Install, and the one thing that will trip you up

Manager β†’ "ComfyUI LC Audio_Video Nodes", or:

cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC_AV_nodes

Restart, look for [LC AV] total … nodes. Then be aware that this pack ships no requirements.txt - it's why it installs so cleanly, and it's also why faster-whisper isn't installed for you. The README's framing is "already a ComfyUI dependency for many packs", which is true and completely useless on a fresh install. If the node dies the moment it runs, install into ComfyUI's own Python:

python -m pip install faster-whisper torchaudio

(torchaudio is used for the 16 kHz resample; the pack's audio tools want it too.)

Where people get burned

Quoting. The matcher only sees text inside straight quotes, curly quotes, or H3's <d>[English] … </d> tags. Write dialogue without quotes and you've given it nothing to grade. Same for wiring a prompt whose quoted line is narration rather than the spoken line - you'll get a low match on a perfectly good shot and redo it for nothing.

And read match against your own tolerance, not the default. 0.6 is "most of the words", which is fine for a background line and too loose for a title read.

CategoryLC_AV/H3

Inputs (6)

NameTypeDefaultDescription
audioAUDIOThe clip's sound (from the H3 audio decode or a loaded video).
model_sizeCOMBOsmallWhisper model. small is the sweet spot for English dialogue (about 460 MB, downloads once to models/stt/).
min_matchFLOAT0.600–1Below this the speech counts as garbled. 1.0 = every word heard in order, 0.6 = most of the words, 0.3 or less = gibberish.
min_pauseFLOAT0.40.1–5Silence at least this long (seconds) is listed as a cut point.
promptoptSTRINGThe positive prompt. The text in quotes is the dialogue it should say.
languageoptSTRINGenLanguage code (en, es, fr...). Blank = detect.

Outputs (6)

NameTypeDescription
transcriptSTRINGWhat Whisper heard.
matchFLOAT0-1 word match against the quoted dialogue in the prompt (1.0 when no prompt is wired).
passedBOOLEANFalse when the match is below min_match: redo the shot.
cut_pointsSTRINGPause times in seconds, comma separated: clean places to cut or start the next segment.
prompt_lineSTRINGThe transcript as timed prompt lines: At 0 seconds they say, "...". Paste it into the prompt and change "they" to the character.
reportSTRINGA short readable summary.