AcademiaSD H3 RefMod Character
AcademiaSD H3 RefMod Character
- characters
- vae
- characters
- preview
- info
MiniMax H3 is the 33B omni-modal video model that generates picture and stereo audio in one pass - music, effects and dialogue out of the same sampler. That's why its reference mods (RefMods) are appealing, and why using more than one is a mess.
Two specific characters in one shot is the classic failure: the model averages their faces, clones the better-known one, hands the wrong voice to the wrong mouth. On H3 there's a specific reason. A classic RefMod is attached to the conditioning after text encoding, so the DiT attends its latents but Qwen - the text encoder - never sees the subject. With one RefMod that's fine; with three, nothing says which is which, and the prompt can't help, because <Video 1> isn't a label that exists in the sequence. This node is one character, and it makes that character something the text encoder can name.
What it does
You load one character: a visual RefMod, its voice, and the few words that distinguish it from the others. Chain them - each node takes the previous node's characters output - and the last in the chain goes into AcademiaSD H3 RefMod Encode, where the labelled references and the prompt meet.
The names are the point. Give the character a name and cite it in the Encode prompt as @Name, which resolves to a native <Subject n> Name - a label that survives reordering. Hand-writing <Audio 1> does not: those numbers follow character order, so drag one to a new position and your prompt is now asking the model to swap voices.
The inputs that matter
visual_refmod/audio_refmod- the picture and the voice.audio_refmoddefaults to(auto), which takes the bundle's own audio or the siblingname_audiofile LoRAlab writes, so with a current RefMod you set nothing. Any RefMod works, old or new, from any pack: they're read fromComfyUI/models/refmods(the pack also checksmods/andaudio_refmods/, the same places ComfyUI-MiniMaxH3Mod uses).name,appearance,voice_description- name the character; write what sets them apart from the others ("oval face, red hair", not "a woman"); describe the timbre ("low, husky, smooth"). No negatives: H3 is distilled and ignores them.audio_max_seconds- trims the voice to its first N seconds, 0 for all of it. The longest voice tends to win and leak into the others, so matching voice lengths is the cheapest fix for voice bleed. The trim is a contiguous slice of the audio latents at 40 per second, never a resample - a resampled audio latent doesn't sound shorter, it sounds wrong.visual_strength/audio_strength- 0 switches that side off; it shows asoffin the token panel.show_preview- draws the subject's first encoded picture. RefMods from LoRAlab Trainer Studio carry source JPEGs inside the file, so the preview is free; older latents-only ones need the H3 videovae.
Outputs are characters (chain it, or feed the Encode node), preview (IMAGE) and info (STRING). The experimental bind_voice toggle puts face and voice in one native video_audio block, the way H3 saw them together in training - off by default, and unvalidated by the author's own description, since that block claims picture n goes with audio instant n and a RefMod is a pile of stills.
Under the picture, a token panel appears after each run with the visual and audio tokens this character adds to the DiT sequence and the running chain total up to this node. Reference tokens are paid on every sampling step; when a render gets suddenly slow, that's the number to look at.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/AcademiaSD/comfyui_AcademiaSD
# restart ComfyUI
Or search comfyui_AcademiaSD in ComfyUI Manager. No pip dependencies. You do need a ComfyUI build with native MiniMax H3 (comfy_extras/nodes_minimax_h3) - the pack imports it lazily inside the node functions, so an older install loads the node and only fails when you queue. Beyond that: the H3 weights, the video VAE, and RefMods of your own from LoRAlab Trainer Studio or another RefMod tool. RefMod files go in ComfyUI/models/refmods.
The bit to read before you plan a dialogue scene
The README's own warning, and the most useful line in it: in their tests with two characters and two audio RefMods, the voices came out swapped in most configurations - consistently per configuration, not per seed. Several faces in one shot, yes. Dialogue with two speakers in one shot, not reliably. One speaker per shot is the safe version for now.
Two smaller traps. Selecting (none) on both the visual and audio RefMod raises a plain "select a visual or an audio RefMod" error - the node needs at least one. And "RefMod 'x' has no stored pictures" means the file predates the LoRAlab change that started keeping JPEGs next to the latents: connect the video VAE, or regenerate it.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| visual_refmod | COMBO | RefMod visual del personaje (o un bundle con visual + audio). Sirven los antiguos y los de cualquier pack. Visual RefMod of the character, or a bundle with visual + audio. | |
| audio_refmod | COMBO | (auto): el audio del bundle o el fichero hermano 'nombre_audio' que escribe LoRAlab. / (auto): the bundle's audio or the sibling 'name_audio' file. | |
| name | STRING | Nombre del personaje. Vacio = el del fichero. Usa @Nombre en el prompt. Character name; empty = file name. Write @Name in the prompt. | |
| appearance | STRING | Lo que lo DIFERENCIA de los demas personajes (p.ej. 'oval face, red hair'). Sin negaciones: H3 es destilado y las ignora. What sets them apart from the others. No negatives. | |
| voice_description | STRING | Timbre de la voz, p.ej. 'low, husky, smooth'. / Voice timbre. | |
| visual_strength | FLOAT | 1.000–1 | — |
| audio_strength | FLOAT | 1.000–1 | — |
| bind_voice | BOOLEAN | false | EXPERIMENTAL. Ata la voz a la cara en un bloque video_audio nativo (mismo origen temporal) en vez de dejarla como referencia de audio suelta. Ojo: ese bloque dice que el fotograma n va con el instante n del audio, y con fotos sueltas no es cierto. Pruebalo con la misma semilla con y sin. EXPERIMENTAL. One native video_audio block for voice + face. Compare same seed on/off. |
| show_preview | BOOLEAN | true | Muestra la primera imagen codificada del sujeto. Los RefMods antiguos necesitan el VAE conectado. Show the subject's first encoded picture; older RefMods need the VAE. |
| audio_max_seconds | FLOAT | 0.00–120 | Recorta la voz a sus primeros N segundos (0 = entera). Iguala la duracion de las voces de todos los personajes: la mas larga tiende a imponerse y a colarse en los demas. Trim the voice to its first N seconds (0 = all). Keep every character's voice the same length. |
| charactersopt | ASD_H3_CHARACTERS | Encadena personajes anteriores. / Chain previous characters. | |
| vaeopt | VAE | VAE de video de H3, solo para la vista previa de RefMods antiguos. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| characters | ASD_H3_CHARACTERS | — |
| preview | IMAGE | — |
| info | STRING | — |