Nodes/Violet Tools ๐Ÿ’…/๐Ÿ’– Character Curator
ComfyUI Node

๐Ÿ’– Character Curator

Save your character as a JSON preset, not a wire

By leylahvioletยทCreated 12 months agoยทUpdated 10 months agoยท 14
๐Ÿ’– Character Curator
    • name
    โ—„save_characterโ–บ
    โ—„load_characterNoneโ–บ

    Keeping the same character across generations is the hobby's eternal unsolved problem, and Character Curator is the low-tech version of an answer. It doesn't touch identity - no IP-Adapter, no InstantID, no face reference. What it does is save every prompt selection you've made across the Violet Tools nodes as a named JSON preset, then load it back with one click. Same written character, every time. That's a baseline you'd be surprised how often people skip.

    What it is. One node that does Save, Load, and Delete through buttons in its own UI - the pack calls it "wireless" because there's no canvas wiring required. You configure your Violet prompt nodes (hair, makeup, pose, aesthetic, the works), click Save Character and give it a name, and the whole configuration is persisted. Later, Load Character to All pushes it back into every Violet prompt node on the canvas. Characters are stored as plain versioned JSON under ComfyUI/user/default/comfyui-violet-tools/characters, so you can back them up or commit them to git and share your cast of characters with your future self.

    How it works. Behind the buttons is a small REST API - GET/POST/DELETE on /violet/character - plus a web extension that powers the autocomplete and browse overlay in the node. That's a lightweight design worth appreciating: the node itself is dumb, the frontend does the work. The two inputs are save_character (type the name to save) and load_character (dropdown: None, random, or your saved characters). The single output, name, is just a STRING with the selected character's name - it exists for optional metadata wiring, not because you need to route anything through it. In 2.x the old Character Creator/Cache nodes were removed; if you have characters saved from before, they still load fine.

    The honest take. Save this for what it is: prompt-level consistency, which is text, not identity. If you want the same face, a saved prompt string will not get you there - that's what image-based tooling is for. But "same look, same tags, same vibe" is a real chunk of character consistency, and it's the part people lose because they don't write the description down. Think of it as version control for your character's written description, not a face bank.

    The inputs that matter:

    • save_character - the name you're saving the current selections under.
    • load_character - what to load. "random" is there for when you want to rediscover a preset.

    Install. Same story as the rest of the pack. ComfyUI Manager: search "ComfyUI-Violet-Tools". Or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/leylahkrell/ComfyUI-Violet-Tools
    

    Restart ComfyUI. It's a lightweight pack - PyYAML comes with ComfyUI, and the only extra Python deps are rapidfuzz and requests. No model files to hunt down. One note: the README's clone URL still points at the author's old GitHub handle; the repo now lives at leylahkrell, which is what the URL above uses.

    Troubleshooting. If saved characters don't show up in the dropdown, check the path above actually exists - the pack reads strictly from the user directory, no legacy fallback. If you delete a character, it's gone from disk, not just the list. And if the button UI seems missing entirely, restart ComfyUI after install so the web extension registers.

    CategoryViolet Tools ๐Ÿ’…/Character

    Inputs (2)

    NameTypeDefaultDescription
    save_characterSTRINGEnter a name to save current selections (wireless)
    load_characterCOMBONoneSelect saved character or random

    Outputs (1)

    NameTypeDescription
    nameSTRINGโ€”