Nodes/MiniMax H3 Novel Pipeline/Load Character Visual Profiles
ComfyUI Node

Load Character Visual Profiles

Load Character Visual Profiles

By yuyuki·Created 2 months ago·Updated a day ago· 5
Load Character Visual Profiles
    • character_visual_profiles
    • saved_file
    ◄profiles_path►

    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.

    CategoryMiniMax H3 Novel

    Inputs (1)

    NameTypeDefaultDescription
    profiles_pathSTRINGSaved 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)

    NameTypeDescription
    character_visual_profilesMINIMAX_CHARACTER_VISUAL_PROFILES—
    saved_fileSTRING—