H3 Ref Character Picker
Turn a saved character into an @alias you can type
- character
- selected_character
Why you'd reach for it
Character consistency is the problem this whole ecosystem keeps failing to solve cleanly - the community's answer in 2026 was to stop regenerating and start editing against a reference. H3 RefMod applies the same logic to video: encode the character once, store the encodings, and reuse them without another VAE pass.
H3 Ref Character Picker is the node that opens one of those saved packages and decides which of its stored references this particular generation gets. Same character, different scene, different reference set, no re-encoding and no rebuilding.
How it works
A saved package is a folder holding one visual .safetensors, an optional audio .safetensors for the voice, a .character.json manifest, and small browsing thumbnails. character_path points at that package; the picker button on the node face is how you choose it normally.
Then the decisions, which are all per-workflow - nothing here edits the package:
use_saved_voice is the one that catches people. On, the package's stored voice encoding is used for @alias: dialogue. Off, the character has no automatic voice, and if you wrote @alias-voice in the prompt you'll get has no active voice at compile time - which is your cue to associate an external audio reference with the character instead.
descriptor overrides the identity line the package was created with ("a woman with short dark hair"). Usually leave it alone; the package already knows who it is. retain and change are free-text transfer guidance - what to keep from the visual reference and what to alter - and they're per-connection, so the same character can be "keep the face, change the outfit" in one node and untouched in another.
visual_references picks what actually gets sent, and it's the setting with real cost implications:
- Saved combined video - the full saved combined selection, in its saved order and canvas.
- Pictures only - the saved pictures as separate picture references.
- Pictures and video clips - both, as separate references.
- Build combined video from selected references - your chosen entries joined in memory into one video reference.
reference_selection is JSON that the picker UI writes - you won't hand-edit it, but it's worth knowing it lives in the widget, so the node re-runs on every queue (IS_CHANGED is deliberately invalidated) and your selection travels with the workflow rather than with the package.
Two outputs: character, an H3RC_CHARACTER that goes into the character socket on H3 Mod Reference to Video, and selected_character, a short string - @alice - Alice – studio - which is only really useful wired to a text preview so you can see which package you're actually using.
The defaults rule, which is where the time goes
The visual profile defaults only list profiles that every selected source of that media type has in common, matched by profile identity and settings rather than by output dimensions - two "Original size" profiles can produce different pixel sizes. An Original-size profile that produced 1600×900 for one picture and 900×1600 for another is still the same profile.
If nothing is common, you use Choose profiles individually and set each card. And if changing the selection invalidates a default, Apply stays disabled until you resolve it - the node does not silently pick a replacement. That's the right behaviour, but it means "Apply isn't working" is usually "one of your cards has no valid profile", not a bug.
Install
ComfyUI Manager → search WorkflowX Configurator, or clone it:
cd ComfyUI/custom_nodes
git clone https://github.com/haroonaslam/WorkflowX-Configurator
cd WorkflowX-Configurator && pip install -r requirements.txt
Restart, then hard-refresh the browser - this node's picker is frontend-heavy and a stale bundle leaves you with an empty character list. You'll need ComfyUI with native MiniMax H3 support for the generation half of the workflow, plus the H3 weights themselves.
Where it goes wrong
This node is not an output node, so it shows nothing on its own - an empty canvas and no error usually means the whole lane didn't execute.
Third-party RefMods (the ones derived from the upstream H3RefMods work) expose only an External profile with their existing encoding. Where source boundaries are unknown, selection, protected video-budget reduction and runtime subset assembly are unavailable; the node will tell you rather than guess.
And the standing caveat for anything in this pack: it's a one-author toolkit with a very small public footprint. The documentation is genuinely good, the community signal is close to zero, so treat a surprising result as something to read the report string about rather than something to search for.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| character_path | STRING | — | |
| use_saved_voice | BOOLEAN | true | — |
| descriptor | STRING | — | |
| 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. | |
| visual_references | COMBO | 4 options: Saved combined video, Pictures only, Pictures and video clips, Build combined video from selected references | |
| reference_selection | STRING | {} | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| character | H3RC_CHARACTER | — |
| selected_character | STRING | — |