IAMCCS Dialogue Timing Reconciler
Your audio is 6.4s but the shot is 192 frames — here's the delta
- cine_linx
- dialogue_audio
- cine_linx
- dialogue_audio_seconds
- dialogue_audio_frames
- delta_vs_target_s
- report
Planned dialogue timing is a guess until the TTS actually runs. IAMCCS Dialogue Timing Reconciler is the node that confronts reality: you hand it the real rendered dialogue audio and it tells you exactly how long it is, compares that against a target duration, and reports the gap in seconds and frames. If you tell it to, it also updates the cine_linx state so the rest of the shot bends to fit the audio you actually have. This is the sync step that makes a lip-sync LTX shot land instead of drifting.
It's part of the IAMCCS Cine audio toolkit, designed to sit right after your TTS/audio chain and before the video generation stage. Where the Dialogue Duration Planner estimates from words-per-minute, this node measures from real audio.
How it works
It takes an AUDIO input (any audio tensor, not necessarily TTS output), reads the waveform, and computes duration in seconds from the sample rate, then converts to frames at your fps. target_duration_s is what you wanted; delta_vs_target_s is the difference - positive means your audio is longer than planned. tail_padding_s adds a little silence so the video doesn't end exactly on the last syllable.
update_mode controls the side effects:
report_only- measure and report, touch nothing.store_audio_duration- write the measured duration intocine_linx(the default).extend_cine_duration_if_needed- also grow the shot's duration when the audio overruns, so the video doesn't truncate the dialogue.
Inputs and outputs that matter
The only real inputs a beginner sets: dialogue_audio (wire it up), fps, target_duration_s, and update_mode. cine_linx carries the plan in.
Outputs worth wiring: dialogue_audio_seconds and dialogue_audio_frames are the ground truth to feed your video length, delta_vs_target_s is the number to read when something's off, and cine_linx (updated) keeps the chain consistent.
Installing it
It ships inside IAMCCS-nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/IAMCCS/IAMCCS-nodes.git
Restart ComfyUI, or search "IAMCCS" in ComfyUI Manager. Baseline: ComfyUI ≥ 0.3.0, Python ≥ 3.12, Torch ≥ 2.8. Audio handling imports torchaudio lazily, so if your ComfyUI install already does audio it works out of the box; no separate model downloads.
Where people get burned
The classic mistake is reading delta_vs_target_s wrong. A positive delta isn't an error - it's your audio being longer than the plan, which is normal after a real TTS run and exactly what extend_cine_duration_if_needed is for. Also: the measured duration is only as good as the audio you feed it, so pass the final mix, not a preview take. And if you leave update_mode on report_only while expecting downstream nodes to see the corrected length, they won't - the report is honest, but nothing else got updated. Check it, then act on it.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| cine_linx | IAMCCS_SUPERNODE_LINX | — | |
| dialogue_audio | AUDIO | — | |
| fps | FLOAT | 24.001–120 | — |
| target_duration_s | FLOAT | 0.000–600 | — |
| update_mode | COMBO | store_audio_duration | 3 options: report_only, store_audio_duration, extend_cine_duration_if_needed |
| tail_padding_s | FLOAT | 0.250–30 | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| cine_linx | IAMCCS_SUPERNODE_LINX | — |
| dialogue_audio_seconds | FLOAT | — |
| dialogue_audio_frames | INT | — |
| delta_vs_target_s | FLOAT | — |
| report | STRING | — |