Nodes/noEmbryo nodes/H3 Context Latent Converter /noEmbryo
ComfyUI Node

H3 Context Latent Converter /noEmbryo

The one-wire adapter that makes saved MiniMax H3 clips re-runnable

By noembryo·Created 3 years ago·Updated about 22 hours ago· 38
H3 Context Latent Converter /noEmbryo
  • latent
  • latent

Some nodes win you praise on the leaderboard. This one just sits between two other nodes and makes data fit - and it's exactly the kind of boring glue you're grateful for the first time a saved MiniMax H3 clip refuses to go back through your chain.

What it's actually for

You're generating with MiniMax H3, the open-weight omni-modal video model that draws video and synced audio in one pass. H3 tops out around 15 seconds a clip, so longer pieces mean chaining segments - which is what the "H3 Motion Context" approach (from NikoDemon80's pack) is built for. It saves each approved segment as a clip archive - h3_motion_context_av_v1 files like clip_00001.safetensors - holding the sampler's latent video+audio state so the next segment can carry motion forward.

Fine so far. The problem comes when you want to reuse a saved clip: re-sample it, upscale it, re-save it. Load one back with MiniMaxH3MotionContextLoadLatent and its samples come out as a plain list (or NestedTensor) of [video, audio]. But ComfyUI core's LTXV AV-latent nodes - LTXVSeparateAVLatent above all - expect a latent whose samples unbind into (video, audio). Two perfectly good shapes that refuse to talk to each other. This node is the shim.

How it works

Feed it one LATENT and it does a single job, then gets out of the way. It takes samples, unbinds a nested tensor if that's what it got, and checks you really handed it an H3 AV latent: it errors if there are fewer than two parts (a video-only latent gets a clear "no audio stream" message), validates that the video stream is 4–5 dimensional, audio 3–4, and that both are float.

Then the interesting bit. It force-copies each stream to a dense, detached, contiguous CPU tensor. The source comment explains why: views into packed storage - or tensors still carrying nested metadata - can crash VAE CUDA kernels with cudaErrorIllegalAddress. That's a nasty, hard-to-diagnose failure to hit blind, and this node is specifically built to defuse it. The result is wrapped in a minimal object that exposes unbind(), which is all LTXVSeparateAVLatent actually needs, and the rest of your latent dict is passed through untouched.

It's the sibling of H3 Motion Context Clip Stitcher (same pack, same module): the stitcher is the "decode archives into a finished movie" direction, this is the "feed a saved latent back into sampling" direction.

The inputs and outputs

There's exactly one of each, and no widgets to misconfigure:

  • latent (in) - an H3 AV latent, e.g. the output of MiniMaxH3MotionContextLoadLatent.
  • latent (out) - the same latent, re-wrapped so LTXVSeparateAVLatent and friends accept it. Wire it anywhere an AV latent is expected.

No optional inputs, no settings, no model files. This is the whole node.

Installing it

It ships in the noEmbryo pack, so install that once and you get it plus the pack's other odds and ends. Via ComfyUI Manager, search noEmbryo nodes, or:

cd ComfyUI/custom_nodes
git clone https://github.com/noembryo/ComfyUI-noEmbryo.git

Restart ComfyUI and it appears under Add node > noEmbryo. No pip dependencies and no weights to download for the pack itself - but don't mistake that for plug-and-play. To actually use it you need the H3 weights (roughly 42 GB, MiniMaxAI/MiniMax-H3) and NikoDemon80's H3 Motion Context pack, since this node's whole reason to exist is sitting between that pack's nodes and ComfyUI core's. (And if you're in the US, EU, UK or Korea, check the MiniMax H3 community license before downloading those weights at all - those regions are carved out.)

Common issues

Good news: because the converter validates up front, it fails loudly instead of letting you bake a garbage clip. The mistakes you'll actually see:

  • "latent has no audio stream (only N part(s))" - you fed it a latent that isn't an H3 archive latent. This node only understands the output of the H3 context loader; a random VAE-encoded latent won't fly.
  • "X stream has unexpected shape" or "is not a float tensor" - same family: wrong input, and the error names exactly which stream is wrong.
  • Node missing from the menu? The H3 converter is a very fresh addition (it landed in the pack's v1.6.4, September 2026). If your install predates that, update the pack - older clones simply don't have it yet.

Is it overhyped? No, it's the opposite - it's deliberately, almost aggressively unglamorous. But the day your saved H3 clip bounces off LTXVSeparateAVLatent with a shape error you didn't understand, it's the node you'll reach for.

CategorynoEmbryo

Inputs (1)

NameTypeDefaultDescription
latentLATENTAn H3 AV latent, e.g. the output of MiniMaxH3MotionContextLoadLatent. Its 'samples' must be a NestedTensor or a (video, audio) pair.

Outputs (1)

NameTypeDescription
latentLATENT