Character Visual Profile Generator
Character Visual Profile Generator
- character_profiles
- cinematic_chapters
- lmstudio_config
- character_visual_profiles
- saved_file
Here's the gap nobody warns you about when you decide to adapt your own novel into video: a consolidated character profile is accurate, and accurate is not the same as promptable. "Grey-green eyes, late thirties, weathered" doesn't tell a diffusion model whether you mean a wool coat or a leather jacket, and it definitely doesn't fix a wardrobe across eleven scenes.
This node bridges that. It takes the consolidated profiles and writes English design traits per character - seven fields, each one tagged with how well the source supports it.
What comes out the other end
Seven fixed fields: age_appearance, skin, hair, eyes, build, default_outfit, accessories. Each is a list of individual traits, and every trait carries a description in English, a classification of canonical, inferred or creative, and evidence references back to the original observations. Empty list means the source genuinely says nothing - not that the model forgot.
That classification axis is the point of the whole node. canonical traits are backed by the novel. inferred is conservative contextual completion. creative is design work. Because you can filter on that, you can hand an illustrator a strict-canon sheet and a cinematic one and let them pick, or you can keep the creative layer entirely to yourself. For anyone working on a character across many shots, this is the honest version of the problem described in the character consistency essay: identity doesn't persist by accident, you pin it in writing first.
How it works, and the part that bites
The node goes character by character, in sequence. For each one it assembles the consolidated evidence, sends it with your mode, validates the returned structure, then runs a second model pass as a reviewer - checking the English, whether the design contradicts the source, and whether the traits are contextually sane. If the review comes back with issues, that's treated as a failed attempt and retried within correction_attempts. Validated designs are cached per character, keyed on mode, input, model and settings.
mode is the dial you'll actually enjoy:
strict_canon- source-supported traits only. Use it when fidelity is the deliverable.balanced(default) - conservative contextual completion. Sensible starting point.cinematic- restrained creative design. This is the one that makes characters actually look good on camera.
The bit that bites: unresolved conflicts block fields. Consolidation uses broad physical categories, so if hair colour is contested, all five physical fields get blocked; a broader context conflict can block all seven. Blocked fields come back empty and are listed in blocked_fields. Nothing gets silently invented to paper over the gap - which is correct, and also means the node is only as good as the consolidation before it. If half your cast comes back naked of detail, go fix the conflicts upstream, don't crank mode to cinematic and hope.
The other output worth knowing about: the node writes a global visual_designs.json next to the profiles, covering every consolidated character with stable IDs and aliases. Point Consolidate References' visual_designs_path at it later and matching chapter entities inherit your hand-edited added_details without any LLM calls. Unmatched chapter characters just get normal design generation, with a warning. That's the seam where your manual taste survives a regeneration, so do your edits there.
Inputs
character_profiles from Consolidate Character Profiles (or Load Character Profiles), and lmstudio_config from LM Studio Configuration with the Qwen family. out_dir defaults to character_visual_profiles in the current run folder. thinking defaults true - unlike consolidation - which is defensible here because this stage makes judgement calls about what's safe to infer. temperature defaults to a very steady 0.12. max_tokens defaults 16384 with a ceiling of 100000, which is generous; a long cast with lots of evidence is where you'd raise it. correction_attempts defaults 2, force regenerates from cache-free.
Outputs: character_visual_profiles (wire it into Load Character Visual Profiles or downstream reference consolidation) and saved_file.
Install
Manager → search "MiniMax H3 Novel Pipeline". Or:
cd ComfyUI/custom_nodes
git clone https://github.com/yuyuki/ComfyUI-Minimax_H3_Novel_Pipeline
python -m pip install -r ComfyUI-Minimax_H3_Novel_Pipeline/requirements.txt
Restart, refresh. Python 3.10+, LM Studio's local server running with a Qwen model loaded, API key (lm-studio) set in ComfyUI Settings → MiniMax H3 Novel → LM Studio, endpoint http://127.0.0.1:1234/v1 in the config node. Custom endpoints also need to be registered as Trusted API URL in that same settings panel or the request is refused before it leaves your machine.
Where it breaks
The one you'll hit first: any model_family other than Qwen is rejected outright. It's Qwen-only, like the other two processing nodes in this pack.
The second is a re-run trap. Rerunning overwrites character_visual_profiles.json - the README says it plainly. Manual refinements live in a copy, or in visual_designs.json. Don't learn this one the hard way at 2am.
Third: if a character fails after every correction attempt, generation raises rather than writing a partial file. Read the error - it names the review's complaints, and they're usually "you're asking me to be creative in strict_canon about a field the sources contradict", which is a signal to fix the input, not to retry.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| character_profiles | MINIMAX_CHARACTER_PROFILES | — | |
| cinematic_chapters | MINIMAX_CINEMATIC_CHAPTERS | — | |
| lmstudio_config | MINIMAX_LMSTUDIO_CONFIG | — | |
| out_dir | STRING | character_visual_profiles | — |
| mode | COMBO | balanced | 3 options: strict_canon, balanced, cinematic |
| thinking | BOOLEAN | true | — |
| temperature | FLOAT | 0.120–2 | — |
| max_tokens | INT | 16384256–100000 | — |
| correction_attempts | INT | 20–10 | — |
| force | BOOLEAN | false | — |
| context_tokens | INT | 655364096–1000000 | — |
| visual_designs_pathopt | STRING | Reuse edited visual_designs.json from a previous chapter. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| character_visual_profiles | MINIMAX_CHARACTER_VISUAL_PROFILES | — |
| saved_file | STRING | — |