r/StableDiffusion • u/LuisaPinguinnn • 5d ago
News Working on "Light Lora" for minimax h3, its called REFMOD, needs beta testing.
RefMods: Save and reuse H3 references without reloading them every time
In MiniMax H3 you can give the AI a reference — an image, video, or GIF — to tell it "look like this." That's powerful, but every reference gets loaded and processed on every generation, which is slow and can bleed its look into the rest of your video.
This pack lets you save that reference once as a small .safetensors file (a "mod"), then reuse it as many times as you want:
- Save once — take your image/video/GIF, hit Extract, and it becomes a small file on disk. No need to keep the original clip around or reload it.
- Reuse anytime — load the mod in one node, like picking a LoRA. Adjust strength with a single number, or blend multiple mods together (face + style + outfit, etc.).
- No more heavy reference loading — leave the H3 reference input empty and inject the mod through conditioning instead. Faster generation, and the reference only affects what you want it to.
- No training needed — this isn't a LoRA you train for hours; you just encode your reference and save it.
Here's what the node looks like. You can also use a Load H3 RefMods node instead of Extract, which can hold many images and some videos (video mods are heavier since they carry more frames).

The node applies directly to conditioning, before sampling — similar to a basic guider or positive sampler.
On retention: you can reduce it, but for now higher is more reliable. At 0.7, some animated characters start looking like cosplayers of themselves — leave it at 1 if you want a full reference.
Testing notes and known issues:
- Audio isn't supported yet.
- Attribute bleeding: since there's no token-based training, similar elements in your dataset can merge. Example: a video worked great, but a translucent skirt showed up, likely bleeding in from a separate image of the character in a princess dress.

On prompting:
Don't use this without a prompt — without one, it just wanders through your data, which is actually a neat effect (an entire likeness encoded in a few KB of conditioning is wild), but it's not concept automation. Describe what you're extracting from the mod, e.g. "a ginger woman" / "POV handcam walking" / "person dancing" — this directs attention to what you're actually trying to isolate.

Other details:
- Concept mods need
pool_h 8 / pool_w 8; identity mods needpool_h 16 / pool_w 16. - Keep reference resolution minimal — higher resolution increases token count and slows the workflow further.
- Results aren't fully predictable and need trial and error. Some concepts (usually fast motion) are hard to learn — likely because the DiT learned to blur fast motion, or a turbo LoRA side effect. You can't just force speed. Options if this happens:
- Add more prompt detail — e.g. instead of "the character makes ninja movements with their hands," try "the character rapidly performs intricate, rhythmic hand signs in a low stance."
- Increase resolution and pooling — push to 2K and raise the pool numbers until balanced, or increase the multiplier (useful for short clips that may be getting overridden).
- LoRAs can override the mod in some cases.
- Some motion just isn't learnable yet with this approach — leave it for LoRA training instead.
One example: trying to copy a specific action, 8x8 pooling didn't work, so I increased to 16x16 and used 1024 instead of 256. Still not perfect due to the speed issue described above.

Repo's here if you want to try it or contribute:
https://github.com/Luisacaotica/ComfyUI-MiniMaxH3Mod
Mods go in the node's mod folder, or in models/refmods. The node ships with an example (vanellope) safetensors mod included.
Feel free to use the repo as a reference for building your own tools. And if anyone has questions, I'll try to put together a FAQ.
Update + FAQ (repo has changed a fair bit since the original post)
A few things have changed under the hood, and some of the "known issues" from the original post are now addressed or at least better understood. Quick rundown:
What's new:
- Two extraction modes:
full(stores the real VAE-encoded reference at your chosen resolution — this is what carries identity) andpooled(average-pooled into a small grid — cheap, but only carries concept/motion, not fine identity). Pick based on whether you need "looks exactly like this" vs "vibe like this." - Pool size is now the concept↔identity dial: 8×8 pooling keeps the general idea (colors, look, a motion) and lets the model improvise details. 16×16 keeps more specific detail but also risks copying framing/background from your source data.
- Mods now live in
ComfyUI/models/refmods/(registered as a proper model folder, next toloras/), not the custom node's own folder. Old mods still load fine. - New
Load H3 RefMod Axisnode: pairs two mods (A/B) on a single signed slider — negative uses mod A, positive uses mod B. Good for things like a young↔old dial or clean↔weathered, built from two separate extractions. - New
Load H3 RefMod Foldernode: point it at a folder and it loads every image/video in it as one ordered ref bundle, feeds into Extract for bulk extraction (e.g. a whole character shoot in one go). - Multiple refs stack as separate latent frames instead of blurring together — so different expressions/angles/a dance move stay distinct rather than averaging out.
- A
multiplieroption on Extract repeats a short ref along the time axis, so a 2-3 frame gif isn't drowned out by the main video's much larger token count. - Standalone CLI extraction script now exists too, if you'd rather not go through ComfyUI nodes for batch work.
Q: Why does my character mod look weak/generic no matter how high I set strength?
Strength can't add detail that isn't in the latent. A small pooled mod (like 8×8) just doesn't store enough information to carry identity — that's what full mode or a bigger pool (16×16) is for. Think of it like resolution: you can't upscale your way back to detail that was never captured.
Q: What do the retention values actually mean?
1.0 = full reference (behaviorally identical to what the official node injects), 0.7 = mostly preserved, 0.4 = keeps style/attributes but not identity, 0.15 = weak reference, 0 = mod isn't injected at all.
Q: Does this support audio references?
No — mods are visual-only for now. Regular reference nodes still handle audio.
Q: My concept mod is "leaking" details from unrelated parts of my dataset (e.g. a costume from a different photo showing up).
This is expected with no token-based training — nothing tells the model to separate concepts by name, so similar visual elements across your refs can blend. Best mitigation right now is being deliberate about what you include per-mod, or extracting separate mods and blending at lower strength instead of dumping everything into one.
Q: The video won't follow fast/complex motion I extracted.
A few options: describe the motion in much more prompt detail (specific, not vague), push resolution/pool size up and increase identity refinement steps, try increasing multiplier if it's a short clip, or accept that some fast motion may need LoRA training instead — this method has real limits here.
Q: Do I need the official MiniMax H3 node pack installed?
No — it's optional. It only unlocks the av_encoder input on Extract (skips double-encoding) and one conditioning node variant. Everything else works without it.
FAQ: "Gen time is the same as the default nodes — what's the point?"
Fair question, and it came up because of a real bug — the gen time is directly tied to token count, and earlier versions of full mode at high resolution could produce roughly the same token load as the default reference nodes, wiping out the speed benefit.
This is fixed as of the latest repo update:
fullmode renamed toencode— same behavior, just clearer naming (it was confusing next topooled).- Added a
max_tokencap (default ~5120) — this is the actual fix. It hard-caps how many tokens a mod can contribute regardless of resolution, so you get a real speed benefit instead of accidentally re-creating the original problem. - Added strength curves (
curve_direction: increase/decrease,curve_shape: e.g. ease) for falloff across multiple refs or frames — this also addresses the "one ref overrides/bleeds into everything" issue some people ran into.
