Card Presets
Your saved characters, one dropdown away
- card
- voice
Here's the payoff node of the Kinburg pack's whole card system. Character Card, Entity Card, and Card Save all exist to get a character or entity into a library; Card Presets is how you get it back out. Pick a saved card from a dropdown and its ready Markdown block comes out the card output, ready to feed Context Collector and from there into your LLM's context. Build the character once - by hand or by photo - and stop re-describing the same subject every run.
It's a thin reader, and that's exactly why it's good. The library is built three ways: Card Save (photo → LLM → JSON → preset), or the save_preset_as field on Character Card / Entity Card (which saves at run time, typed or wired). Presets are rendered back through the card nodes' own logic, so the output format always matches what you'd have hand-typed - no drift between saved and fresh.
The inputs that matter:
preset- the dropdown of saved cards. This alone decides what's emitted.filter- narrows the preset list to one tag. Purely a picker convenience; it doesn't change the output. Tag cards from Card Save or the Manage dialog.
The outputs:
card- the Markdown block for the chosen preset.voice- the same voice hand-off Character Card gives Siren Cast, so a saved band member drives the music too. Empty for an entity preset, or for a character saved before the voice fields existed.
Managing the library lives on the node, not in config files: a Manage dialog edits tags and deletes entries, and a Refresh re-reads the list (the node's VALIDATE_INPUTS is permissive precisely so presets saved live validate without an object-info reload). Everything is persisted on disk, so the library survives restarts and shows up across every Card Presets node.
The workflow that makes this click: photo in → grammar-constrained LLM → Card Save → you get the card, it's filed under a name, and the next time you need that character you just pick it from the dropdown instead of feeding a photo through the vision model again. It's the "describe once, use forever" idea made real, and it's the least glamorous node in the pack - which is the best thing you can say about a preset picker.
Install via ComfyUI Manager (search "Kinburg-Nodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/Kinburg/Kinburg-Nodes
then restart. This node has no dependencies of its own - no model, no download. The library-filling flow it depends on needs the Local LLM nodes working (llama-cpp-python, auto-installed by install.py, plus your own GGUF), but reading a preset is pure string rendering. One-author personal pack, documented to a standard that's frankly better than the norm: per-package docs, 1395 automated checks, and a generated node index that can't drift from what's actually registered.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| preset | COMBO | 🚫 None | A saved Character/Entity card. Build the library with Card Save (from a photo) or the Character Card / Entity Card nodes (save_preset_as). |
| filteropt | COMBO | 🏷 All | Narrow the preset list to one tag. Purely a picker convenience — it doesn't change the output. Tag cards from Card Save / the Manage dialog. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| card | STRING | — |
| voice | KINBURG_VOICE | — |