H3 Audio Reference
Name your sound design instead of describing it
- audio
- named_reference
- selected_audio
- selection_report
Why you'd reach for it
MiniMax H3 is the odd one out among open video models: it generates the picture and the sound in the same pass, so dialogue, room tone and effects come out of the sampling loop rather than a foley model bolted onto the end. That's the whole pitch, and it's why the licence geofence (US, EU, UK and Korea are excluded from the Community License) stings as much as it does.
The catch to all that power is that H3's prompt is a description, and you can only describe a specific recording in words so many times before you give up. You want the hum of that fan, the ambience of that room. The H3 RefMod suite in WorkflowX solves this by letting you register media, tag it, and then @mention the tag anywhere in the scene prompt - and H3 Audio Reference is the node that does it for sound.
How it works
Every reference node in this suite follows the same shape: pick a source, give the thing a tag, say what role it plays, and hand the resulting H3RC_REFERENCE to H3 Mod Reference to Video. At compile time the node expands @your_tag into an H3 label - <Audio 1>, <Audio 2> and so on, numbered independently of pictures and video.
source decides where the clip comes from: Connected input for an AUDIO socket, or Load file to read one directly. start_seconds and duration_seconds trim it, and a duration_seconds of 0 means "use the rest of the recording" - handy for one-shots you don't want to measure.
The interesting part is reference_type, which is the author's own prompt indicator:
referenceborrows sound characteristics - timbre, texture.weak_referenceborrows atmosphere, nothing specific.partially_copyasks for selected layers or intervals.fully_copyasks for the complete recording as the final soundtrack. Yes, that is as literal as it sounds.
role labels the purpose - character voice, ambience, music, sound effect, complete soundtrack, or custom - and descriptor is what H3 actually reads. For a custom role it becomes <Audio N> is your description, so write it as a sentence, not a filename. retain and change are the two fields people forget: leave them blank and you get the role's defaults, which is usually fine, but "keep the room reverb, drop the traffic noise" is how you get out of the defaults' way.
The one that needs care is associated_character. Put an alias in there and the clip is bound to that character; that's how you give a character a voice from outside their saved package - associate the audio reference with the character and disable Use saved voice on its picker. Note that the tag @alias-voice is reserved for the automatic saved-voice association, so don't try to reuse it.
Three outputs: named_reference (wire it into the main node's named-reference sockets), selected_audio (the trimmed audio, if you want to hear or reuse exactly what was sent), and selection_report (a string - send it to text preview; it tells you the trimmed range, which is the fastest way to catch a clip you trimmed to 0.4 seconds by accident).
Install
ComfyUI Manager → search WorkflowX Configurator, or:
cd ComfyUI/custom_nodes
git clone https://github.com/haroonaslam/WorkflowX-Configurator
cd WorkflowX-Configurator && pip install -r requirements.txt
Restart ComfyUI and hard-refresh the browser (the pack ships frontend extensions; a soft refresh leaves them half-loaded). The pack's own dependencies are small - PyWORLD, numpy, scipy - because everything here rides on ComfyUI's native support, so you also need a ComfyUI recent enough to have MiniMax H3 nodes built in. Get the H3 weights before you start; the full-precision set is reported around 42.5 GB, and no consumer hardware floor has been published, so don't plan around a laptop.
Where it goes wrong
Connect the audio VAE to H3 Mod Reference to Video if you use this node with regular (non-saved) audio - saved voices from a character package are already encoded and don't need it, but anything coming through this socket does, and the node says so plainly when it's missing.
An unrecognised tag is a hard error, not a warning: Unknown @tag. Connect its character or reference. That's the compiler being honest. If you typed @voice_ref in the prompt but the tag widget says voice, you'll get that message and no output.
Finally, keep in mind what a reference is. H3 still owns generation - it listens to your clip and is asked to borrow from it. Voice timbre, exact dB and mood adherence vary, and the honest state of the whole audio layer is that the models are good and the prompting is still loose. Don't expect a clone.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| source | COMBO | 2 options: Connected input, Load file | |
| file | STRING | — | |
| tag | STRING | voice_ref | — |
| role | COMBO | 6 options: character voice, ambience, music, sound effect, complete soundtrack, custom | |
| associated_character | STRING | — | |
| use_instructions | STRING | — | |
| reference_type | COMBO | Prompt indicator: reference borrows sound characteristics; weak_reference borrows atmosphere; partially_copy requests selected layers or intervals; fully_copy requests the complete recording as the final soundtrack. Specify details in Retain and Change. | |
| descriptor | STRING | Describe what this audio represents. For Custom, H3 receives: <Audio N> is your description. Use its @tag in the scene prompt. | |
| start_seconds | FLOAT | 0.00 | — |
| duration_seconds | FLOAT | 0.00 | 0 uses the remaining recording. |
| retain | STRING | What H3 should keep from this source. Example: facial identity, voice timbre, room layout, or camera movement. Leave blank for the selected role defaults. | |
| change | STRING | What H3 should change or exclude. Example: change the jacket to red; exclude people; generate new dialogue instead of source words. Does not alter the saved source. | |
| audioopt | AUDIO | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| named_reference | H3RC_REFERENCE | — |
| selected_audio | AUDIO | — |
| selection_report | STRING | — |