LC H3 Dialogue Check π£οΈ (BETA)
H3 will say total nonsense with perfect lip sync. This catches it
- audio
- transcript
- match
- passed
- cut_points
- prompt_line
- report
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.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | The clip's sound (from the H3 audio decode or a loaded video). | |
| model_size | COMBO | small | Whisper model. small is the sweet spot for English dialogue (about 460 MB, downloads once to models/stt/). |
| min_match | FLOAT | 0.600β1 | Below 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_pause | FLOAT | 0.40.1β5 | Silence at least this long (seconds) is listed as a cut point. |
| promptopt | STRING | The positive prompt. The text in quotes is the dialogue it should say. | |
| languageopt | STRING | en | Language code (en, es, fr...). Blank = detect. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| transcript | STRING | What Whisper heard. |
| match | FLOAT | 0-1 word match against the quoted dialogue in the prompt (1.0 when no prompt is wired). |
| passed | BOOLEAN | False when the match is below min_match: redo the shot. |
| cut_points | STRING | Pause times in seconds, comma separated: clean places to cut or start the next segment. |
| prompt_line | STRING | The transcript as timed prompt lines: At 0 seconds they say, "...". Paste it into the prompt and change "they" to the character. |
| report | STRING | A short readable summary. |