Zura · Prepare Full H3 Audio
Kill the per-window audio drift before it happens
- audio
- full_audio_timeline
Windowed video generation has one bug that outranks all the others: audio that restarts at every window. You render five chunks, the lips are fine, and the speech is stuttering its first syllable five times because each window got "the audio" instead of "the audio for frames 124–247."
This node exists purely to make that impossible. You run it once, before any window is sliced.
How it works
It builds one zero-filled buffer covering the entire clip, converts total_frames to a sample count at the track's own sample rate, and pastes your waveform into it starting at audio_start_frame. Everything else stays silent - real zeros at the right length, not a truncated buffer.
Then it stamps the result with h3_timeline_frames and h3_audio_start_frame metadata. Those two fields are the contract: Zura · Load H3 Motion Window checks them and refuses a timeline that wasn't built for this clip length, and the per-window slicer (slice_audio_window) checks them again before cutting its interval.
Two deliberate non-features:
- No resampling. The docstring says it plainly. Whatever rate your track is at is the rate that lands in the buffer. Resample upstream if you need to.
- No in-point handling.
audio_start_frameis the placement offset on the global timeline, applied once. If your artist picked a section of a longer track, applying that in-point is a separate, upstream job. Mixing the two up is the classic way to get audio that's technically on-timeline but starts at the wrong moment.
Inputs and outputs
audio-AUDIO, one finite mono or stereo CPU waveform. Batches get rejected.total_frames-INT, default 124, i.e. H3's full context window. Set this to your actual clip length in frames at 24 fps.audio_start_frame-INT, default 0. Where the track begins on the global timeline.full_audio_timeline-AUDIO, one buffer for the whole clip. Into Load H3 Motion Window.
Install
cd ComfyUI/custom_nodes && git clone https://github.com/ZURAVFX/ComfyUI_zura_nodes
pip install -r ComfyUI_zura_nodes/requirements.txt
Restart. No model weights touch this node - it's tensor arithmetic and metadata. The weights live downstream, and they're the usual H3 set under the community licence that restricts where they can be used.
Common issues
"The audio onset lies beyond the selected clip." audio_start_frame is bigger than total_frames. If you're placing a track late in a long clip, remember this is in frames, not seconds - at 24 fps, two seconds in is frame 48.
"The selected clip is too short for the supplied audio sample rate." A very low rate against a very short clip rounds to zero samples. Rare, but it happens on tiny test clips.
Audio cut off at the end. The buffer is exactly total_frames long, so anything past the end is dropped rather than looped. That's nearly always what you want; if you wanted the track to span a longer clip, your total_frames is wrong.
"Use the already-resampled full audio timeline for this clip." Something downstream is being fed a raw AUDIO instead of this node's output, or the clip length changed after you built the timeline. Rebuild - the metadata check is there because a mismatched timeline produces speech that's subtly out of sync rather than obviously broken, which is far worse to debug.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| total_frames | INT | 1241–1000000 | — |
| audio_start_frame | INT | 00–1000000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| full_audio_timeline | AUDIO | — |