Nodes/MiniMax H3 Novel Pipeline/Load Character Evidence
ComfyUI Node

Load Character Evidence

Load Character Evidence

By yuyuki·Created 2 months ago·Updated a day ago· 5
Load Character Evidence
    • character_evidence
    • saved_file
    ◄evidence_path►

    Nothing about this node is glamorous. It reads a JSON file off disk and hands it to the graph. But it's the node that makes the MiniMax H3 Novel Pipeline affordable to iterate on, and it's the one I'd wire in permanently if I were using this pack at all.

    Here's why it matters. Extraction is the slowest, most expensive stage: hundreds of LLM requests for a full novel. Once it's done, you do not want to re-run it because you felt like tweaking a character. Fix the JSON by hand, load it, consolidate. No model calls, no LM Studio, no waiting.

    How it works

    You give it one input, evidence_path, and it resolves that to a file inside output/minimax_h3_novel. The tooltip says it best: a saved evidence JSON including renamed copies, or a directory containing character_evidence.json. Relative paths start from that output root, so 20261024163701/character_evidence works as an input and the node appends the filename itself.

    Then it does three things and stops. It parses the JSON as UTF-8 (a BOM is tolerated). It validates the document envelope - format_version, location_convention, chapters, and for every single observation a provenance block with chapter, passage and character/line locations. And it returns the data plus the resolved path. It never calls the model, never writes to your file, and never reconstructs anything you edited.

    Reloading is the nice bit. The node's change-detection hashes the file's bytes, so editing the JSON on disk and hitting queue picks up your edits on the next execution - no restart, no cache-clearing ritual. If the path is bad, that same check deliberately fails into a re-run so run() can give you a real error message instead of a silent stale value. That's a detail most packs get wrong.

    The inputs and outputs that matter

    Just the one required input: evidence_path, default empty. Empty is an error, not a wildcard - it must name something. Everything must stay inside output/minimax_h3_novel; .. is rejected by design, and so are Windows device names and colon characters on every platform, so a workflow doesn't break when you move it between machines.

    Outputs are character_evidence, typed MINIMAX_CHARACTER_EVIDENCE and identical in shape to what the extractor emits, so you can swap the wire straight into Consolidate Character Profiles. The second output is saved_file, a plain STRING with the absolute path it loaded - handy for a note node or a filename you want to log.

    There's no lmstudio_config input here at all. That's not an oversight; it's the design. This half of the pack works on a machine with no LM Studio installed.

    Install

    Same pack as the rest:

    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
    

    Then restart ComfyUI and refresh the browser; the node lives under MiniMax H3 Novel. You can also install it through ComfyUI Manager by searching the pack title "MiniMax H3 Novel Pipeline". Note what you're actually installing: openai, httpx, pypdf and jsonschema all land in ComfyUI's environment even if you only ever use the loaders. jsonschema is what validates these documents; the README's dependency paragraph omits it, requirements.txt is the accurate list.

    Where people get burned

    Format version drift. The loader checks format_version and refuses older documents with a message telling you to re-export from the current extractor. If you're loading evidence generated three versions of the pack ago, that's the wall you hit. Nothing to fix but re-extraction, or hand-editing the version plus whatever shape changed - and honestly, re-extract the two chapters you care about instead.

    Editing structure, not values. The validator is strict about types on individual observations and their provenance locations. Adding a location without end_char, or pasting in a quotation that changes the source text, gets rejected at load time. This is a feature: it's telling you your edit broke the guarantee the pipeline depends on. Keep edits to the content of observations and leave source_text, offsets and provenance alone.

    Pointing it at the run folder. The path resolves relative to the output root, not to the run. 20261024163701 alone won't find anything because the evidence sits one level deeper, in character_evidence. Pass the directory that contains the file, or the file itself.

    Assuming it repairs. It doesn't. Nothing is normalised, nothing is re-verified against the source, and the $schema reference in the document is never fetched over the network. If your hand edit is semantically wrong but structurally valid, the loader will happily pass it downstream. The model never sees your mistake until consolidation starts producing odd profiles.

    CategoryMiniMax H3 Novel

    Inputs (1)

    NameTypeDefaultDescription
    evidence_pathSTRINGSaved character evidence JSON file (including renamed copies), or a directory containing character_evidence.json. Must be inside output/minimax_h3_novel; relative paths start there. Edits reload on the next execution.

    Outputs (2)

    NameTypeDescription
    character_evidenceMINIMAX_CHARACTER_EVIDENCE—
    saved_fileSTRING—