Load Character Visual Profiles
Load Character Visual Profiles
- character_visual_profiles
- saved_file
By the time you reach this node in the MiniMax H3 Novel Pipeline, the LLM has already done the part it's good at. What's left is taste: the generator's balanced hair description is fine but you know she wears it braided, the outfit is right except the boots. You edit the JSON, and then you need the graph to read your version instead of regenerating over it.
That's it. That's the node. It loads a saved character_visual_profiles.json - including renamed and hand-edited copies - validates it, and hands the typed document downstream. No model call, no LM Studio, no writes to your file.
Why you'd bother instead of just re-running the generator
Rerunning overwrites character_visual_profiles.json. The README is blunt about that and about the consequence: preserve manual refinements in a separate copy. This loader is the other half of that advice. Save your edits as something like ellis_cinematic_v3.json inside output/minimax_h3_novel, point profiles_path at it, and every subsequent run uses your version. Iteration becomes editing text instead of re-prompting a model and hoping.
It's also how you keep two design directions alive. One file for strict_canon, one for cinematic, both loaded from the same graph when you need them - no cache fingerprint games, no regeneration cost.
The input, and the one thing that differs from the other loaders
One required input: profiles_path, default empty. Tooltip: a saved visual profiles JSON, including renamed copies, inside output/minimax_h3_novel, relative paths starting there.
Here's the gotcha worth the whole article. Unlike Load Character Evidence and Load Character Profiles, which both accept either a file or a directory and append the canonical filename for you, this one requires a file. Point it at the folder and you get "Character visual profiles file does not exist" - mildly confusing when the folder is right there and the other two loaders would have handled it. Give it the full path to the JSON:
20261024163701/character_visual_profiles/character_visual_profiles.json
Change detection hashes the file's contents, so edit-and-requeue picks up changes without restarting ComfyUI.
What it validates
Enough that you'll notice, and that's good. The envelope needs format_version, source_digest, source_document, profiles and a mode, and the version has to be the current one - an error tells you to select output from the current Character Visual Profile Generator. mode must be one of strict_canon, balanced, cinematic. The embedded source_document gets re-validated with the evidence validator, so a corrupted upstream block is caught here rather than three nodes later.
Per profile it checks the seven fields - age_appearance, skin, hair, eyes, build, default_outfit, accessories - plus blocked_fields, local_id, canonical_name, aliases, identity_status, identity_support, attributes, supporting_evidence, unresolved_conflicts and chronological_changes. Every trait needs a string description, a classification, and an evidence list of evidence_id references. Other editor metadata you add alongside is tolerated, so you can annotate freely; what you can't do is drop a required key or change a field's type.
Notably, blocked_fields is preserved rather than recomputed. If consolidation left a conflict unresolved and the generator therefore returned empty hair fields, that stays visible in the document you load. The loader doesn't quietly fill anything in.
Outputs
character_visual_profiles, typed MINIMAX_CHARACTER_VISUAL_PROFILES, matching the generator's output exactly - so it's a drop-in swap for the generator wherever a visual profiles wire is expected, including the reference-consolidation path. And saved_file, a STRING with the resolved path.
Install
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 and refresh the browser; the node is under MiniMax H3 Novel. Manager works too - search "MiniMax H3 Novel Pipeline". Python 3.10+, and jsonschema from requirements.txt does the actual work here (the README's prose dependency list omits it - trust the requirements file).
Because this node carries no lmstudio_config input, you can operate it, and everything upstream of a saved file, on a machine with LM Studio uninstalled. Good for review passes on a laptop.
Where people get burned
You "fixed" the wrong copy. The generator writes character_visual_profiles.json in out_dir; visual_designs.json sits beside it, and only that one carries added_details through regeneration. Tuning traits in the main file is fine as long as you loaded it from a renamed copy - tune it in place and the next generator run erases it.
Provenance drift. Keep evidence_id references accurate when you edit descriptions. Structural validation will accept a description whose evidence points at the wrong observation, and the review pass that caught contradictions only ran at generation time. Your edit is now unreviewed by anything.
Bad JSON from a rich-text editor. The loader accepts a UTF-8 BOM but a smart-quote or a trailing comma gets you a line X, column Y parse error. It's accurate, and it's also the most common reason this node "doesn't work". Validate the file before saving, or paste it into a JSON linter once.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| profiles_path | STRING | Saved character visual profiles JSON file, including renamed copies. Must be inside output/minimax_h3_novel; relative paths start there. Edits reload on the next execution. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| character_visual_profiles | MINIMAX_CHARACTER_VISUAL_PROFILES | — |
| saved_file | STRING | — |