H3 Project Artifact
It decides what gets saved and which version wins
- context_latent
- tracks_info
- context_latent_low
- previous
- audio
- project_name
easy h3ProjectArtifact is the node easy multitrackProject expands to at the end of every segment. Its job is narrow and mechanical: take the segment's rendered media and its continuity latent, and write them into the project folder under ComfyUI/output/easy_media/projects/<project_name>/. You will almost never add this node to a graph by hand - it appears when the project node expands into its internal graph, and the sensible advice is to leave it alone. But understanding what it's doing explains every versioning quirk you'll hit when you regenerate a segment.
What it actually does
It's an output node (it terminates a graph branch). On each run it:
- resolves the safe project directory, creating it if needed;
- picks the generation number for this segment -
project_save = newkeeps old files and writes a new version,overridereplaces the current one; - saves the segment's media: a video file (moved from the staged
video_path) or, for audio-only projects, a WAV (when the editor dimensions are32 × 32, it saves audio instead); - stores the context latent - plus the low-res
context_latent_lowwhen present - which is what the next segment's continuity reads; - deletes stale files for the same generation.
The inputs mirror that: project_name, project_save (new/override), segment_index, context_latent (and optional context_latent_low), video_path or audio, tracks_info (to detect audio-only), continuity_mode (shot/context) and sampling_pass (single/first/second) - the latter two get recorded in the project manifest so the combine node can show you each segment's mode. Output: the project_name string, passed along.
Why you should care about this node's quirks
The versioning policy here is the source of the "my old result disappeared" surprise. In override mode with segment_count = -1, the project node clears saved segments from the start point onward before regenerating - the artifact node then writes fresh ones. In new mode, old generations survive as separate versions, which is what makes the combine node's side-by-side comparison possible. And because each segment is saved before the next runs, a crash or cancel leaves a partial project you can resume - but a half-written version can leave the context chain pointing at files that aren't there yet. If you're resuming, regenerate in order, not middle-out.
Deleting a version here deletes its files and its context. If a later Context segment depends on that context, it will fail on the next run. The README's advice is blunt: make sure nothing downstream needs the files before you let them go.
Installation
It ships inside ComfyUI-Easy-Media:
# FFmpeg first (the README's hard requirement)
cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Media
Restart ComfyUI, or install via Manager (search "ComfyUI-Easy-Media"). No models or extra dependencies for this node - it's pure file management over the H3 project directory.
Troubleshooting
- "Staged H3 video was not found" -
video_pathpoints at a file that isn't there (or was already moved by an earlier run). This usually means a partial/cancelled save; regenerate the segment. - Segments land in the wrong project -
project_nameis sanitized, so an invalid name gets folded into a safe one. Use the exact name the project node output. - Old versions keep coming back - you're in
newmode; that's the feature. Switch tooverrideto replace.
It's the unglamorous end of the pipeline, but every file in your projects folder got there through this node - and knowing how it picks generation numbers is the key to predicting what a regeneration will (and won't) destroy.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| project_name | STRING | — | |
| project_save | COMBO | new | 2 options: new, override |
| segment_index | INT | — | |
| context_latent | LATENT | — | |
| tracks_info | TRACKS_INFO | — | |
| continuity_mode | COMBO | shot | 3 options: shot, context, context_swap |
| sampling_pass | COMBO | single | 3 options: single, first, second |
| context_latent_lowopt | LATENT | — | |
| video_pathopt | STRING | — | |
| seedopt | INT | 00–18446744073709550000 | — |
| previousopt | * | — | |
| audioopt | AUDIO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| project_name | STRING | — |