Nodes/ComfyUI-RE-CustomUtils/Character Loader
ComfyUI Node

Character Loader

A character sheet for your prompts — same face, every batch

By relhamdi·Created 7 months ago·Updated 2 months ago· 1
Character Loader
    • eyes
    • hair_type
    • hair_style
    • makeup
    • jewelry
    • body_type
    character_file
    eyes
    hair_type
    hair_style
    makeup
    jewelry
    body_type

    Here's the honest pitch for CharacterLoader: it won't give you consistent characters by itself. It's not IP-Adapter, it's not a LoRA, and it doesn't touch your model. What it is is a tidy, reusable way to store the prompt fragments that describe one character - eyes, hair, makeup, body type - so the same tags end up in every generation and you stop retyping them.

    That matters more than it sounds. One of the oldest tricks for pseudo-consistency is exactly this: keep the descriptive tags fixed and batch over everything else - "batch 32 and get the same person across different cameras, lighting and moods, no training involved." CharacterLoader is a native ComfyUI version of that habit, organized per character instead of per clipboard.

    What it does

    You keep JSON files under data/characters/ inside the pack folder, one per character:

    {
      "eyes": "blue eyes, detailed eyes",
      "hair_type": "long hair, black hair",
      "hair_style": "ponytail, hair ribbon",
      "makeup": "eyeliner",
      "jewelry": "gold earrings, necklace",
      "body_type": "slim, tall"
    }
    

    Pick a character in the dropdown, and the node pushes those tags out as plain strings. Wire them into whatever assembles your prompt - a PromptLayoutFiller slot, a concat node, a text box - and you've got one consistent block of identity tags you can reuse forever.

    Inputs and outputs

    Six string inputs - eyes, hair_type, hair_style, makeup, jewelry, body_type - and six matching outputs. In the editor these are just multiline text fields you can edit directly, and the character_file dropdown picks which JSON populates them.

    Under the hood the node is a glorified passthrough: the frontend reads the JSON over a local endpoint and fills the widget fields, and the node hands those values back out. No model loading, no CLIP work, nothing to go wrong at inference time.

    The buttons in the header are the useful part: ➕ New, 💾 Save, 📋 Clone and 🗑️ Delete let you manage characters without touching the file system. Subfolders are supported, so anime/heroine.json and realism/erin.json can coexist.

    Installing it

    It's part of ComfyUI-RE-CustomUtils - search that in ComfyUI Manager, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/relhamdi/ComfyUI-RE-CustomUtils
    

    Restart ComfyUI. No extra dependencies, no downloads; the pack declares only torch, which you already run.

    Where people get burned

    • The folder. JSON files go in ComfyUI-RE-CustomUtils/data/characters/. The README sometimes calls it src/data/characters/, but the code resolves to data/characters/ at the pack root. Put a file in the wrong place and the dropdown stays empty.
    • Refresh. Files you add externally only show up after a browser refresh (F5). Files created via the button appear immediately - that's the difference.
    • It's not magic. Keep expectations honest: if you want true identity consistency, this is the organization layer, and you pair it with a trained LoRA or an identity method for the actual lock. What it does give you for free is a reusable character definition that survives across workflows and is easy to swap.

    The boring nodes are the ones that actually keep your workflow clean, and this is the pack's most boring node in the best way.

    CategoryRE-CustomUtils

    Inputs (7)

    NameTypeDefaultDescription
    character_fileCOMBO1 options: --
    eyesSTRING
    hair_typeSTRING
    hair_styleSTRING
    makeupSTRING
    jewelrySTRING
    body_typeSTRING

    Outputs (6)

    NameTypeDescription
    eyesSTRING
    hair_typeSTRING
    hair_styleSTRING
    makeupSTRING
    jewelrySTRING
    body_typeSTRING