Prompt Library
Your whole character stack behind one node
- model
- clip
- vae
- style_tags
- base_prompt
- combined
- negative
If you generate the same cast of characters over and over - same checkpoint, same LoRAs, same style tags, same negative - then every workflow you build starts with the same five nodes wired identically. Prompt Library is the node that eats all of that. It's a full character and prompt database that lives inside a single node: pick a character from a gallery canvas and it outputs the loaded model (checkpoint plus LoRAs already applied), the CLIP, the VAE, and the character's prompt strings, ready to plug straight into your sampler.
Under the hood it's a local JSON database plus a browser UI. The pack registers REST routes: the node's canvas lets you manage characters, set the base checkpoint and LoRA stack, and for each character store style tags, a base prompt, text blocks, a negative, and optionally a model override (its own checkpoint and LoRAs). Everything persists to custom_nodes/Steaked-nodes/library/library.json. When you run it, the node loads the checkpoint via ComfyUI's own loader, applies the base LoRAs, then the character's LoRAs (or replaces the whole stack if the character has an override), and concatenates style tags + base prompt + enabled text blocks into the combined string. There's even a Civitai integration that looks up a LoRA's metadata by file hash and saves it as a .civitai.info sidecar - handy for remembering what a LoRA actually does.
Inputs and outputs
The inputs are thin because the UI does the work: selected_character and snap_data are hidden-in-practice widgets the canvas manages (snap_data exists so the model/prompt choices appear verbatim in your saved workflow's PNG metadata). Outputs are the payoff:
model,clip,vae- your loaded checkpoint with LoRAs applied. Wire into a KSampler and you're done.style_tags- the character's persistent style string.base_prompt- the character's main prompt.combined- style_tags + base_prompt + enabled text blocks, joined and cleaned. This is the one you usually encode.negative- the character's negative prompt.
Where it fits
This is character-consistency plumbing. The point isn't one-off generation, it's that every workflow you build for a character starts from a stable, versioned base - same LoRAs, same tags - instead of you re-typing tags from memory and silently drifting. The PNG-metadata angle is the clever bit: because the choices are serialized into the workflow file, an image you save remembers exactly which character and stack produced it.
Install
Part of Steaked-nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/StealthNinja1O1/Steaked-nodes
Restart, or install via ComfyUI Manager ("Steaked-nodes"). No models ship with it - you point it at checkpoints/LoRAs already in your ComfyUI folders. Note it does an async call to the Civitai API when you fetch LoRA metadata, so that specific feature needs internet.
Common issues
If the node outputs nothing, the library has no checkpoint configured - set the base checkpoint first. If a LoRA silently doesn't apply, check the filename matches what's in ComfyUI/models/loras; the loader skips missing files with a console log. And remember the whole thing is one JSON file - back it up if you care about your library, and expect odd behavior if two ComfyUI instances write to it at once.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| selected_characteropt | STRING | — | |
| snap_dataopt | STRING | — |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| vae | VAE | — |
| style_tags | STRING | — |
| base_prompt | STRING | — |
| combined | STRING | — |
| negative | STRING | — |