ComfyUI Node

Load Character

Where ComfyUI Looks for Your .char Files

By omnichar·Created 22 days ago·Updated 15 days ago· 96
Load Character
    • char
    ◄char▾►
    ◄char_path►

    Every Omnichar graph starts here. This is a one-output node that opens a .char file and puts it on a CHARACTER wire; Decode Character, Apply Character LoRA and the rest do the actual work with it. If your dropdown is empty, nothing else in the pack will run.

    The mechanism, since it explains the behaviour

    The pack registers a characters folder category with ComfyUI at startup and creates ComfyUI/models/characters/ if it doesn't exist. That's where the dropdown comes from - it lists whatever ComfyUI's own filename list has for that category, so what you see is the truth about your disk at load time, no separate index.

    Two implementation choices are worth knowing because they show up as user-facing behaviour. First, the node's cache key is a stat - modification time plus size - not a content hash. The author notes that hashing a character carrying an adapter costs over a second, so it's a stat instead. Second, inputs are validated on every queue before the node runs: the file gets opened through the SDK's reader, which means the container's own caps apply and a damaged or truncated .char fails with a readable message instead of an explosion halfway through a render.

    Inputs and outputs

    char is a dropdown of .char files found in the characters folder, plus whatever a second registered directory holds. char_path is the optional override, and it's deliberately constrained: the path is resolved with symlinks and must land inside a registered character directory. Point it at something in your Downloads folder and you get an error listing the directories it's allowed to read, plus a nudge toward INLINE_CHARACTERS_DIR. That's a sensible default - a workflow JSON is not a great place to find out someone can point a node at /etc.

    Output is a single char socket. Wire it to Decode Character for references and a prompt, and to Apply Character LoRA if the character carries a trained adapter.

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/omnichar/ComfyUI-Omnichar
    cd ComfyUI-Omnichar
    pip install -r requirements.txt
    

    Restart ComfyUI, or install from ComfyUI Manager by searching Omnichar. No models to download - the sole dependency is the omnichar-sdk reader, which is pure Python and has no dependencies of its own.

    If you also run Omnichar Studio locally, set INLINE_CHARACTERS_DIR to its characters directory and both apps read the same files. One character, two tools, no copying.

    Common issues

    Empty dropdown. Either models/characters/ is empty, or you dropped the file in while ComfyUI was running. The folder is created on startup but the listing is cached, so a file added afterwards needs a reload. Restarting the server is the sledgehammer; reloading the node is usually enough.

    "is not in the character directories." You're looking at the wrong folder. ComfyUI has several models directories depending on how you installed it - portable builds put them under ComfyUI/models, while an instance launched with --base-directory or a custom extra_model_paths.yaml will not. Put the file where ComfyUI's own loader panel tells you it lives.

    Nothing in the community tells you what's in the file. This is a vendor format, and as of writing you'll find essentially no discussion of Omnichar in Reddit threads - so if a file misbehaves, go read it instead of googling. The SDK ships a CLI for exactly that:

    omnichar-sdk inspect /path/to/sia.char --json
    

    It prints the name, description, how many references there are, which architectures have compiled sets and which have adapters, so you can tell at a glance whether the character you loaded is actually the one you thought.

    Use it deliberately. .char is a bet on a format, not a settled standard - the SDK is Apache-2.0 so other tools can read it, which is the adoption play, but nothing else reads it yet. The upside is real: one set of references and one description, same face and wardrobe on FLUX.2 and on a video model, without rebuilding your dataset per family.

    CategoryOmnichar

    Inputs (2)

    NameTypeDefaultDescription
    charCOMBOA .char file from models/characters.
    char_pathoptSTRINGOpen a file by path instead of by name. It must sit inside a registered character directory.

    Outputs (1)

    NameTypeDescription
    charCHARACTER—