Tavern Card Info Node (zer0)
Read a character card's brain out of a PNG, field by field
- Card Name
- Card Description
- Personality
- Scenario
- First Message
- Message Examples
- Creator Notes
- Author
- Version
Every SillyTavern character card is a PNG wearing a disguise: the picture is the surface, and the character's entire brain - name, personality, scenario, first message, example dialogue - lives in a base64 JSON blob hidden in a text chunk called chara. The Tavern Card Info Node (zer0) is the extraction side of that trick. Drop a card PNG in, and it splits the brain back out into nine separate string outputs you can wire anywhere.
This is the natural companion to the pack's Tavern Card Creation Node, and it's the node you want when cards are an input to your pipeline rather than a product of it. Say you're building a workflow that renders a character from an existing card - you load the card, pull the personality and scenario out as strings, hand them to a prompt-builder node, and generate a fresh portrait. Before this, you'd be opening cards in SillyTavern and copying text by hand. Now the card is data in your graph.
How it works
The node opens the PNG, grabs the chara text chunk, base64-decodes it, JSON-parses it, and pulls the data object - the same read path SillyTavern itself uses for v2 cards. It then hands you the basic fields as nine STRING outputs, one per port:
Card Name, Card Description, Personality, Scenario, First Message, Message Examples, Creator Notes, Author, Version.
Wire them into text nodes, a list builder, a text concat - anywhere strings flow. Because every output is a plain STRING, this slots into prompt-assembly graphs without any type gymnastics.
The input is the only moving part: image, an upload widget that lists the PNGs in ComfyUI's input directory. Click it, pick your card, run.
Where people get burned
This node is strict, and it's worth knowing the strictness comes from the code, not from bad luck:
- It only reads v2-spec cards. The code reaches straight for
img.text["chara"]. If your PNG isn't a character card - or is an old v1 card with a differently-shaped payload - that lookup throws a KeyError and the node fails. You'll see the error, not a graceful "no card here." If that happens, confirm the PNG actually came from SillyTavern or a v2-compliant tool. - It returns the basic fields only. No system prompt, no post-history instructions, no character book, no alternate greetings - the full v2 spec has those, but this node deliberately stops at the nine basics. If you need the deep fields, you're reading the card elsewhere.
- The pairings are what the creation node wrote. If a card was made with the sibling Creation Node,
Authorhere maps back from thecreatorfield andVersionfromcharacter_version. Round-trips cleanly, which is the intended loop.
Install
Same as the rest of this tiny pack:
cd ComfyUI/custom_nodes
git clone https://github.com/zer0thgear/zer0-comfy-utils
Restart ComfyUI; it appears under utility. Or ComfyUI Manager → Install Custom Nodes → search "zer0 Comfy Utilities". No models to download, no new Python packages beyond the pack's single tiktoken dependency (which this node doesn't even use - it's pure PIL and stdlib). It's a small personal tool, last touched in early 2025, but the mechanism is so simple there's not much to break.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | 1 options: example.png |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| Card Name | STRING | Card info in the form of strings. |
| Card Description | STRING | — |
| Personality | STRING | — |
| Scenario | STRING | — |
| First Message | STRING | — |
| Message Examples | STRING | — |
| Creator Notes | STRING | — |
| Author | STRING | — |
| Version | STRING | — |