ComfyUI Node

H3 Project Save

The node that files every clip into your project

By Adudeguyman·Created about a month ago·Updated a day ago· 31
H3 Project Save
  • project
  • latent
  • images
  • audio
  • basename
fps24

H3 Project Save is the pack's filing clerk, and like a good filing clerk you'll forget it exists after wiring it once. It takes a finished H3 clip - the decoded pictures, the sound, and the latent that made them - and writes them into the project's clips/ folder as one atomic pair, marked pending review. Naming, indexing, and re-roll bookkeeping all come from the project manifest. Nothing to type, nothing to advance.

Why does this deserve a node at all? Because a chain clip is two artifacts that have to stay together: the mp4 you watch, and the latent the next clip continues from. Lose the latent and the next render has nothing to hand H3 Context. H3 Project Save keeps both, under one manifest-driven name, so the pairing can't drift.

How it works

The flow is always the same: sampler → decode → H3 Context TrimH3 Project Save. The node writes a h264/aac mp4 via PyAV, stashes the sampler's AV latent beside it, and records it in the project manifest as pending. The mp4 carries the workflow and prompt as metadata tags, which is why clips "remember how they were made" - drop an old clip back into ComfyUI and you get its settings back.

Because it's an output node, it always runs, and because the manifest owns the naming you never hand-edit filenames. A re-roll doesn't stack files either - the manifest knows which clip this render is, so a rejected take is tracked as a take, not as a new mystery file.

The inputs that matter

  • project (H3_PROJECT) - the handle from H3 Project Hub. It tells the node which project to file into.
  • latent - the sampler's output latent, the same one you wired into the decode nodes. This is what the next clip continues from, so don't grab a different one.
  • images - the post-Trim frames. The stored video's tail must be the true clip tail, or the next join is built on a lie. Wire this from H3 Context Trim's output, not straight from the decoder.
  • fps (default 24) - H3 runs at 24, so leave it.
  • audio (optional) - post-Trim audio. The tooltip is blunt about why you should bother: a project clip without sound can't be judged at review.

There's one output, basename (STRING), giving you the file name it chose - handy if you want to log or display it.

Install and gotchas

It's part of the H3 Project Suite, so the install is the shared one: ComfyUI Manager → search "H3 Project Suite", or cd ComfyUI/custom_nodes && git clone https://github.com/Adudeguyman/ComfyUI-H3-Project-Suite, restart, hard-refresh. The mp4 writing needs PyAV and numpy - both declared in the pack's dependencies and present on most ComfyUI installs; if export errors with a missing module, pip install av numpy into your ComfyUI environment.

The two traps are both wiring mistakes, and both are self-inflicted. Wire images from before the Trim node and every clip in your chain is a few frames too long, so the overlap shows up as a double-take at each join. Leave audio unwired and the review screen gives you a silent clip you can't judge - sound is half of what H3 does, and this pack is built around carrying it. Wire project from the Hub and everything else follows; that's the whole job.

Categoryconditioning/minimax

Inputs (5)

NameTypeDefaultDescription
projectH3_PROJECT
latentLATENTThe sampler's output latent - the same one wired into the decode nodes. Saved beside the video so the next clip can continue from it.
imagesIMAGEPost-Trim frames. The stored video's tail must be the true clip tail.
fpsINT241–120
audiooptAUDIOPost-Trim audio. Optional, but a project clip without sound cannot be judged at review.

Outputs (1)

NameTypeDescription
basenameSTRING