Tag Selector Node
A clickable Danbooru tag palette so you stop typing prompts from memory
- STRING
If you prompt a tag-based anime model - Illustrious, NoobAI, Pony, Anima - you already know the pain. "Is it blunt bangs or swept bangs?" "Is that a fox_ears or animal_ears?" The models understand real Danbooru tags so much better than guesses, and every time you hand-type one you're rolling dice on the spelling. TagNode is the fix: it gives you a big clickable palette of Danbooru-style tags, grouped by category, and builds your comma-separated prompt as you click.
It ships in the same small Korean-authored pack as ExifViewer (comfyui-custom-node-sig), and like its sibling it's really a front-end product wearing a node costume. The Python class is a pure pass-through: one text input in, one STRING out. The entire experience lives in the browser.
How it works
The node loads a tag database from web/ko_KR.yaml - thousands of tags organized into categories (people, clothing, expressions, poses, environment, objects, camera) and colored groups within each. Click a tag and it's appended to a textarea that mirrors the node's text widget, so whatever you compose flows out the STRING output into the graph.
Three features make it more than a glorified clicker:
- Ctrl+Z undo, Ctrl+Y redo. The node keeps a full history of your selections, which sounds trivial until you've fat-fingered fifteen tags in a row.
- Google Translate built in. A right-click context menu runs the selected text through a server-side proxy (
/tagnode/translate) totranslate.googleapis.com. Since the tag database is Korean-labeled, this is how you convert the Korean group labels you're browsing in into the English tags the model actually wants. Handy if you read Korean; harmless if you don't. - Image previews. The pack ships sample images in
web/image/(guitar.jpg,guitar_1.jpg…), and a server endpoint scans that folder into a tag→image manifest. Tags with a matching example show a thumbnail so you can check "is this really the concept?" before you commit. The convention istagname.jpg,tagname_1.jpgfor variants.
There's also a color editor per group, which writes back to the YAML via /tagnode/update_color - and that's where the gotchas live.
Inputs and outputs
One required input, text (multiline string, default empty), and one output, also STRING. Wire the output into your CLIPTextEncode positive prompt (or into a concat node if you're building prompts in pieces). The node's palette UI is a convenience layer over that single string - everything you click just edits the text.
Installing it
Search ComfyUI Manager for comfyui-custom-node-sig, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Sigmoid99/comfyui-custom-node-sig
Restart and you're done. No requirements.txt in the pack - the Python side needs only PyYAML and aiohttp, which ship with ComfyUI by default, and there are no model downloads. Two caveats grounded in the source: the palette JS pulls js-yaml from a CDN, and the translate feature needs the internet. Fully offline, you'll get an empty node body - the console logs "YAML 로딩 실패" and gives up.
The traps (all straight from the author's README)
- The color editor rewrites the whole YAML file. The README is explicit: color changes are "real-time yaml-linked," so if you've manually edited
ko_KR.yamlin a text editor, save and close it first. Otherwise the node'supdate_colorwrites back the file from its own in-memory copy and your hand edits vanish. - No duplicate names inside a group. The color-update lookup matches by name and gets confused when the same tag appears twice - the README warns this errors out. Keep your additions unique.
- Quote special characters in the YAML. Tags with colons or brackets need quotes: the README's own example is
"> o": '>_o 표정'. An unquoted colon is a YAML syntax error that can take the whole palette down with it.
Honest take: this is not an auto-tagger - no WD14 or Florence model runs here, you click tags yourself. That's fine, it's a different job. If you build tag-based prompts by hand on the regular, a clickable palette with undo and spelling-proofed vocabulary beats typing from memory every single time.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |