ComfyUI Node

Save Character

The Node That Won't Overwrite Your Character

By omnichar·Created 22 days ago·Updated 15 days ago· 96
Save Character
  • char
  • path
◄filenamemodel.char►
◄overwritefalse►

This is the last node in the build loop and the only one in the pack that touches your disk. Encode Character gives you a character in memory; this writes it out as a .char in the characters folder so Load Character can see it next time.

Inputs and outputs

char comes from Encode Character (or from anything else that produces a CHARACTER). filename defaults to the deeply unimaginative model.char, so rename it - and note that .char gets appended if you leave the extension off. The name is sanitised down to a single safe component, so a filename with directory parts in it can't write outside the characters folder.

overwrite defaults to off, which is the whole personality of this node. If sia.char already exists you get an error telling you the file is already there and to turn on overwrite or pick another name - rather than silently replacing a character you spent an evening building. Turn it on deliberately.

The output is a single path string, and because the node is an output node it also prints that path in the node's own UI panel, which is a small courtesy you only notice when it's missing.

Two behaviours worth knowing

It always writes. The node reports itself as changed on every queue, on purpose - writing a file is a side effect, and a cached save is a save that never happened, complete with ComfyUI cheerfully reporting "executed in 0.00 seconds" while nothing reached disk.

And it refreshes ComfyUI's filename cache after writing, so a freshly saved character shows up in Load Character's dropdown immediately instead of after a restart. If you're iterating on a character, that's the difference between a two-minute loop and a twenty-second one.

Where it lives, and where it goes wrong

It writes into the first registered characters directory - ComfyUI/models/characters/ normally, and the same folder the loader reads. If no characters directory is registered at all, it raises "No characters directory is registered. Create ComfyUI/models/characters and restart." The pack creates that folder when it loads, so seeing this message means the pack didn't initialise properly - usually the omnichar-sdk dependency landing in a different Python environment than ComfyUI's, which leaves all eight nodes unregistered and the log line "Omnichar character nodes are not loaded".

The interesting failure is mid-render. If you overwrite a .char while another render is already running against it, that render fails with "The character file changed while this render was running. Queue it again to use the new version." That's not flakiness, it's a deliberate refusal to finish an image using a character that changed halfway through the job. Queue it again and you get the new character, consistently, all the way through.

So: building a character and saving it, then reading it on the next queue, is fine. Saving a character into the same run that's already decoding it is the shape that trips people up.

Install

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

Restart ComfyUI, or get it from ComfyUI Manager by searching Omnichar ("Omnichar Character (.char)"). No model downloads. Full loop is three nodes: Encode Character → Save Character → Load Character, and after that the character is just a file you can copy between machines or hand to someone else.

That last part is the actual point of the format. Once it's a file, the references and the tuned description travel with it, and the same character lands on FLUX.2 Klein and on a MiniMax H3 video graph without either one being retold who she is.

CategoryOmnichar

Inputs (3)

NameTypeDefaultDescription
charCHARACTER—
filenameSTRINGmodel.charWritten into the characters folder. .char is added if missing.
overwriteoptBOOLEANfalseOff by default, so a character is not lost.

Outputs (1)

NameTypeDescription
pathSTRING—