Nodes/ComfyUI_zura_nodes/Zura · Save with Selected Audio
ComfyUI Node

Zura · Save with Selected Audio

Keep the original audio, no matter what the model did to it

By ZURAVFX·Created about a month ago·Updated a day ago· 2
Zura · Save with Selected Audio
  • video
  • clip_details
  • VIDEO
◄take_namereplacement►
◄output_subfolder▾►

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_edge scaled the model canvas, clip_details carries an export_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_seconds on GenjLoadReviewedShot) 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_details may still claim a reference track. Re-run the shot selection so the details match what's actually wired.
  • Wrong folder in the file browser. final and studio_intermediate are one dropdown apart, and a 1080p intermediate dropped into final is the kind of thing you only notice when you're deleting a project.
CategoryZura/Artist Studio

Inputs (4)

NameTypeDefaultDescription
videoVIDEO—
clip_detailsGENJ_CLIP—
take_nameSTRINGreplacement—
output_subfolderoptCOMBO2 options: final, studio_intermediate

Outputs (1)

NameTypeDescription
VIDEOVIDEO—