Nodes/ComfyUI-Easy-Media/H3 Passthrough Video
ComfyUI Node

H3 Passthrough Video

The node that skips the sampler on purpose

By yolain·Created 5 months ago·Updated 5 days ago· 224
H3 Passthrough Video
  • videos
  • video_path
  • tail_images
  • tail_audio
◄frame_count—►
◄fps—►
◄width—►
◄height—►
◄project_name—►
◄segment_index—►

If you opened a MultiTrack Project graph and found this thing sitting in the middle with three wires and no sampler anywhere near it, you're not confused - you found the passthrough path. It's the one branch of the Easy-Media H3 pipeline that deliberately doesn't generate anything.

Why you'd want a segment that isn't generated

Multi-track projects are the standard workaround for the short-clip problem: cut a timeline into segments, generate them, stitch. But not every segment needs the model. Sometimes you already have the shot and just want it sitting between two generated ones - right place, right length, no re-roll.

That's the passthrough case. In easy multitrackProject you set sampling_mode to passthrough, and the author's description of it is blunt: it "directly outputs the 0th complete timeline reference video, and saves the context the next segment needs." No conditioning, no sampler, no second pass. This node is the handoff - an internal, dev-only node the project builds for you, so you almost never place it by hand.

What it actually does to your clip

It picks up the first video in the list it's handed (index 0, not all of them), reads its frames, source frame rate and audio, then re-times the clip onto the project's frame grid by index-selecting frames:

index = floor(i * source_fps / fps)   # clamped to the last real frame

So a 30fps clip dropped into a 24fps timeline loses a frame roughly every fifth one, and a 24fps clip in a 30fps timeline gets frames repeated. No interpolation, no blending - it's a straight resample, and the picture keeps the resolution it came in with, because nothing here resizes.

Audio gets the same treatment in samples: truncated or zero-padded to exactly frame_count / fps seconds. A clip with no audio track doesn't throw - you get a silent 44.1kHz stereo track, so the audio VAE encode downstream still has something to work with.

Before any of that it checks the thing that will actually bite you: the source clip must cover the whole segment, or the run stops with Passthrough video must cover the complete task timeline.

The inputs and outputs that matter

Three inputs, two outputs, and the project fills all of them when it builds the graph:

  • videos (VIDEO, taken as a list) - the timeline's video for this task. Only index 0 is read, which is why one source clip is enough.
  • frame_count (INT, min 1) - the segment length in frames. Not "how many frames to pull out of the file"; the target length for the segment.
  • fps (FLOAT, min 0.001) - the project frame rate. These two are what the re-timing math runs on.

Out comes images (IMAGE) - the re-timed clip - and audio (AUDIO). From there the project encodes the 22-frame tail with the video and audio VAEs to build the context latent, and saves the segment through easy saveVideo. That context latent is the point: the next segment set to Context continuity can continue from your real footage instead of from a generated frame, so the join is into actual video rather than a model's guess.

Installing it (you're installing the pack, not this node)

Nothing extra for passthrough - no checkpoints, no upscaler weights. You install the pack, like any other custom node:

cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Media.git

Then restart ComfyUI - or use ComfyUI Manager and search ComfyUI-Easy-Media. The README's loudest install note isn't a Python dependency, it's your system FFmpeg: several parts of this pack shell out to the ffmpeg binary, so get it on your PATH before filing bug reports about video nodes. pyproject.toml declares dependencies = [], which is why a plain clone is usually enough. Example workflows show up under Templates in the sidebar, and the H3 model_loader (H3 model, CLIP, video VAE, audio VAE) is only needed for the segments that actually sample.

One non-node caveat before you invest: H3's weights carry the H3 Community License, whose Applicable Territory excludes the US, EU, UK and Korea. That's the model, not this pack - but it decides whether the segments around your passthrough clip are legal for you to run at all.

Where it goes wrong

  • "Passthrough requires a video reference at index 0." Nothing usable on videos - usually a task segment that was never bound to a video track clip, or a URL that didn't load.
  • "Passthrough video must cover the complete task timeline." You set a segment longer than the clip you handed it. Shorten the task duration in the editor, or trim the source.
  • Audio-only projects can't passthrough. A project with editor dimensions of 32×32 raises Passthrough requires a video project, not audio-only mode.
  • Starting mid-timeline on a passthrough segment is unguarded. For normal context segments the project refuses to start at segment N when N-1 has no saved context latent. A passthrough start skips that check because it doesn't need context - so keeping the order sane when you resume is on you.

And a caution rather than an error: since nothing here scales, match the clip to the editor dimensions before dropping it in, or the combine step gets segments that were never meant to line up.

CategoryEasyUse/H3/dev

Inputs (7)

NameTypeDefaultDescription
videosVIDEO—
frame_countINT—
fpsFLOAT—
widthINT—
heightINT—
project_nameSTRING—
segment_indexINT—

Outputs (3)

NameTypeDescription
video_pathSTRING—
tail_imagesIMAGE—
tail_audioAUDIO—