H3Kit SelfLift 续接音画拼接
The join node that does the overlap arithmetic for you
- sampled_latent
- decoded_frames
- decoded_audio
- previous_frames
- previous_audio
- images
- audio
Chaining video segments always comes down to the same three numbers: how many frames of overlap you generated, how many of them are new, and where the audio starts. Get one wrong and you get a stutter, a repeated syllable, or a clip that's quietly a third of a second longer than you think. The SelfLift path solves this differently from the motion-bridge path: instead of asking you for the numbers, the sampler writes them into the latent it outputs, and this node reads them.
H3Kit SelfLift 续接音画拼接 takes a segment's SelfLift sampler output plus its full decode, cuts the duplicated prefix that the sampler generated on purpose, keeps the segment's original new length, aligns the audio to 24fps, and - if you wire the previous segment in - returns the accumulated picture and sound. Chain it once per segment and you've built the whole take.
How it decides what to cut
The sampled_latent input is the point. The SelfLift sampler stamps its output with the segment's overlap, delivered length, frame rate and whether soft audio transition is on, and this node reads that record. Which is why the tooltip insists on the sampler's output specifically: a plain KSampler product carries no such record, and the join has nothing to work from.
So decoded_frames must be the complete decode - overlap included, no pre-trimming. The node validates the frame count against what the latent claims and refuses the mismatch rather than cutting blind. That's a feature: a wrong frame count means wrong wiring, and you want to hear about it at the join, not three segments later.
The cut is a whole number of 17-frame blocks, matching the sampler's overlap granularity, and audio is aligned at 24fps. With the sampler's continue_audio on (soft AV), the previous clip's last moment of audio is replaced by the new segment's transition audio rather than simply butted against it; with it off, the previous audio is kept and the duplicate audio in the new segment is dropped.
Inputs and outputs
Required: sampled_latent and decoded_frames. Optional: decoded_audio (this segment's sound - omit it for silent clips), previous_frames (the previous join node's images, or the first segment's full decode), and previous_audio (the matching accumulated audio; multiple segments chain through both of these).
Outputs are simply images and audio. The images go to your save/combine node, the audio to the same combine node's audio input, and the whole thing runs at 24fps. Note there's no latent output here - the latent continues its life separately, either into the next SelfLift sampler's previous_latent or round a loop.
Install
One install for the entire pack. Manager → search ComfyUI-H3-upgrade-kit → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/flywhale-666/ComfyUI-H3-upgrade-kit.git
requirements.txt is empty and the pack declares no dependencies, so there's no pip step and nothing to compile - it uses ComfyUI's own torch/torchaudio. It does need a ComfyUI recent enough to know MiniMax H3, and the models (H3 weights, text encoder, audio and video VAE, acceleration LoRA, latent upscaler for SelfLift) are yours to supply; the repo ships nodes and one example workflow, not weights.
Where it bites
Feeding it a pre-trimmed segment. The node is going to cut the prefix itself - hand it a clip you already trimmed and you'll lose real frames.
Wiring previous_frames without previous_latent on that segment's sampler. There's nothing overlapping to trim, and the node raises rather than guessing, because a "join" between a first segment and a segment that doesn't inherit from it is not a join at all.
Expecting the audio to cover the picture by accident. The audio is trimmed by the same duration as the picture, so if your delivered length and your audio-splitting points disagree, you'll hear it at the boundary - the pack's example workflow keeps the frame/audio arithmetic visible for exactly this reason. And the honest caveat, from the pack itself: no amount of correct arithmetic guarantees a seamless join. Backgrounds and textures can still shift at the cut, because that's the model's business, not the joiner's.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| sampled_latent | LATENT | 本段 SelfLift K采输出,用于读取实际重叠和音频续接信息。 | |
| decoded_frames | IMAGE | 本段完整解码画面,不要预先裁掉重叠。 | |
| decoded_audioopt | AUDIO | — | |
| previous_framesopt | IMAGE | 前一拼接节点的 images,或第一段完整解码画面。 | |
| previous_audioopt | AUDIO | 与 previous_frames 同步的累积音频;多段视频可连续串联。 |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| audio | AUDIO | — |