Character Vault (World Weaver)
Save a character to your hard drive, not a LoRA
- text
World Weaver's pitch is that you don't need a trained LoRA to keep a character consistent - you need a really good written description, stored somewhere you can reuse it. This node is the "stored somewhere" part. Character Vault takes a character description, gives it a name, and writes it into the pack's JSON database. The next time you restart ComfyUI, that name shows up in the pack's Character Select dropdown and you can summon the whole person in one click.
It's a database writer with a text passthrough, and the database is just a JSON file. No models, no API, no magic. That's the whole philosophy in one node: your "character DNA" is a block of text, so saving a character is a file write, not a training run.
How it works
You give it three things:
text- the character description. It ships with a sensible skeleton:**Ethnicity:**,**Face structure:**,**Face shape:**,**Hair:**,**Eyes:**,**Mouth:**,**Body type:**. You're expected to fill this in (or paste the output of the pack's Gemini-powered Prompt Helper) and, importantly, leave placeholders where you want variation later.character_name- the unique key. The node refuses to overwrite: if the name already exists in the database, it prints an error and saves nothing. Unique names or it bounces.save_to_db- a boolean that'sfalseby default. Flip it totrueto actually write the file.
The output is text, the same string you put in. So this node can sit quietly in your workflow doing nothing but holding a description while you test it, and only commit to the database when you toggle the flag. That's a genuinely nice pattern - iterate on the prompt in the graph, save it only when it's good.
The placeholder trick, and why it matters
The author's advice in the pack docs is the real meat here. Before you save, edit your description so the things you'll want to change later - clothes, hair, accessories - are {placeholders} rather than fixed text:
dressed in {clothing}so you can swap outfits without editing the whole description- keep the hair features you won't change (color, length) as fixed text, and put only the changeable bit in
{hairstyle} - drop permanent accessories and use
{accessories}instead
The Character Select node fills those placeholders in on every generation. Get this right and changing a character's outfit is a text field, not a LoRA retrain. Get it wrong - save every outfit as its own character - and you've built yourself a maintenance problem.
Installing it
Same as the rest of the pack: ComfyUI Manager, search "world weaver", install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/Creepybits/World_weaver
Restart, let it install dependencies (google-genai, opencv-python, numpy, Pillow, requests, sounddevice - no models to download). It's all local file writes after that.
Where people get burned
First, the restart. The Vault writes characters.json live, but the Character Select dropdown was built at ComfyUI startup. Save a character, restart, then look for them in the dropdown. The pack docs spell this out, and it's still the most common "where is my character" moment.
Second, the file lives at assets/scripts/characters.json inside the pack's folder. Update World Weaver and the update can overwrite your roster. The database is tiny - copy it somewhere safe before pulling updates, or keep it in version control.
Third, the silent failure mode: if you leave save_to_db off, everything looks fine, nothing saves, and your character is gone after the session. That boolean defaulting to false has eaten a lot of people's work. Check the ComfyUI console for the [Creepybits] SUCCESS line - that's your confirmation it actually wrote.
One honest caveat: a text description is a weak anchor compared to trained weights, and this whole approach is a bet against the community's LoRA-and-editing consensus. But for keeping a cast of characters organized - especially stylized or illustrated characters where a LoRA is overkill - it's a refreshingly lightweight system.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | **Ethnicity:** **Face structure:** **Face shape:** **Hair:** **Eyes:** **Mouth:** **Body type:** | — |
| character_name | STRING | — | |
| save_to_db | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |