Zura · Save with Selected Audio
Keep the original audio, no matter what the model did to it
- video
- clip_details
- VIDEO
Video models are not trustworthy with sound. Some invent it, most mangle it, and a few cheerfully return a video whose audio is half a second out. GenjRestoreSoundtrack ("Zura · Save with Selected Audio") is the final node in every Zura generation route, and its entire purpose is: take the picture the model produced, put the soundtrack you chose back on it, verify the timing, and save the file under a name you can find again.
It saves the file and returns it as a VIDEO, so you can chain it into a preview or another export without a second disk round-trip.
The mechanism
It works on your generated video and the clip_details that came from the reviewed shot:
- Re-checks the source.
The original source changed after review. Prepare and review the shot again.If the reference audio track was external, its hash is re-verified too -The reference audio changed after review. - Refuses short renders. If the generated video is more than a frame shorter than the clip's duration, you get
Generated video is too short (...). The source soundtrack will not be shortened to hide this.That's a deliberate stance: the alternative would be to silently cut your audio to fit a generation that came back short, and you'd rather know. - Picks the soundtrack. Your reference track if one was recorded in
clip_details, otherwise the original source video's audio, offset to the clip's start point. Whole-source selections with no reference track use stream copy; everything else gets re-encoded to AAC at 256k. - Applies the export raster if one exists. When
render_long_edgescaled the model canvas,clip_detailscarries anexport_width/export_height, and the save scales back with lanczos so delivery size and generation size stay independent. - Forces 24 fps and the expected frame count into the output, so what lands on disk is exactly the clip you specified.
Naming and location
take_name (letters, numbers, underscore, hyphen; 1–80 chars) plus a five-digit counter: replacement_00001.mp4, replacement_00002.mp4, and so on. Nothing gets overwritten - the counter walks past whatever already exists.
output_subfolder is a two-option dropdown:
final(default) -output/genj/final/.studio_intermediate-output/genj/studio_intermediate/.
The pack itself uses studio_intermediate for the H3 720p base render that feeds the enhancement stage, which is the pattern worth copying: keep intermediates in their own folder so you can delete the big ones without touching deliverables. The preview pushed to the UI is the saved file, so the node's UI output is your actual final.
Install
ComfyUI Manager → search Zura Nodes → install → restart ComfyUI. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/ZURAVFX/ComfyUI_zura_nodes
python -m pip install -r ComfyUI/custom_nodes/ComfyUI_zura_nodes/requirements.txt
PyAV reads the generated file to measure its duration; ffmpeg on PATH does the mux. No model downloads. Note that this node is a save node - it always executes, so a slow ffmpeg call here is not a caching bug.
Common issues
Take name can contain letters, numbers, underscores and hyphens.- spaces and slashes are rejected, deliberately, because the name becomes a filename.Generated video is too short (...)- the most common cause is a preview trim (preview_secondsonGenjLoadReviewedShot) or a generation that produced fewer frames than requested. Re-render the full length rather than trimming the deliverable.- Audio present but silent. If you selected "reference audio + new performance" and then removed the audio node in Graph view,
clip_detailsmay still claim a reference track. Re-run the shot selection so the details match what's actually wired. - Wrong folder in the file browser.
finalandstudio_intermediateare one dropdown apart, and a 1080p intermediate dropped intofinalis the kind of thing you only notice when you're deleting a project.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | — | |
| clip_details | GENJ_CLIP | — | |
| take_name | STRING | replacement | — |
| output_subfolderopt | COMBO | 2 options: final, studio_intermediate |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| VIDEO | VIDEO | — |