NeuralBooru Validator
Feed it any tag soup — it returns only real Danbooru tags, no LLM required
- prompt
- dropped_tags
- tags
This is the node in the NeuralBooru pack that's worth having even if you never install LM Studio. NeuralBooru Validator is the validation half of the pipeline, split out on its own: you hand it comma-separated tags, it checks every one against the real Danbooru vocabulary, cleans them up, and wraps them in your model's quality template. No LLM involved anywhere.
That makes it oddly general. Hand-typed tags, a WD14 tagger's output, a Generate Text node running Qwen3-VL, an external tagger's CSV dump - if it's text with commas, this node will turn it into tags your anime model actually knows. It exists because someone in the author's release thread pointed out that you can already run an LLM inside ComfyUI, so the LLM part of the pipeline isn't the scarce resource. Filtering is.
How it works
Under the hood it's the same whitelist the combined NeuralBooru node uses: a bundled list of ~140,000 real Danbooru tags (data/danbooru.csv, sourced from the a1111 tagcomplete project), each with a category and post count. Every candidate tag runs through the pipeline:
- Exact match - it exists as-is
- Alias remap -
boobs→breasts,blonde→blonde hair - Word-form fix -
smirking→smirk,posing→pose - Sub-phrase recovery - real tags get pulled out of multi-word junk (
black crop topyieldscrop top) - Optional fuzzy match - off by default; 0.85–0.95 remaps near-miss typos
- Drop - whatever's left is filtered out (in strict mode) and reported
Survivors get reordered into Danbooru-conventional prompt order - people counts, character, copyright, artist, general, meta - because booru-trained models are sensitive to that ordering, then dropped into the template you choose. Your template's quality tags are never validated; only the LLM's (or your) tags are.
The inputs that matter
tags- comma-separated tags to validate. Wire it toraw_tagsfrom NeuralBooruLLM, or type anything in.template_preset- one-click quality wrappers for Illustrious, Pony (score_9, score_8_up...), Animagine XL, and NovaAnimeXL, orcustomto use theprompt_templatefield.strict_tags-Truedrops candidates that match no real tag;Falselets them through raw. The heart of the node.fuzzy_cutoff- 0 disables fuzzy matching; 0.8+ remaps near-misses. Handy when your tag source is sloppy.min_post_count- drops tags rarer than N Danbooru posts.0keeps everything. Good for filtering obscure junk that a model will never have learned.exclude_categories- comma-separatedartist, character, copyright, metato drop whole categories (say, if you don't want artist tags changing your style).is_fallback- whenTrue(set by NeuralBooruLLM when its call fails), validation is skipped and tags pass straight into the template. That's what keeps a workflow alive when the LLM server dies.
The three outputs are prompt (templated, ready for CLIP Text Encode), tags (bare validated tags), and dropped_tags (what got filtered, comma-separated). Wire prompt straight into a positive CLIP encoder and you're done.
Installation
Same pack, same install, covers all three nodes. ComfyUI Manager, search NeuralBooru, or:
cd ComfyUI/custom_nodes
git clone https://github.com/ChrisJohnson89/ComfyUI-NeuralBooru
Restart ComfyUI, and it shows up under the NeuralBooru category. Zero Python dependencies - the whole pack is stdlib - and no model files to download. That's the whole appeal: no LLM, no GPU for text gen, nothing extra to run.
Common issues
- Tags keep getting dropped. That's the feature, but if it's too aggressive your source is producing too much non-vocabulary. Turn on
fuzzy_cutoffaround 0.9, or flipstrict_tagsoff. - Everything disappears at once. Check
min_post_count- if you set it high, rare-but-real tags (including a niche character you want) get culled. Leave it at 0 unless you know you need it. - Category filtering not working.
exclude_categoriestakes the namesartist, character, copyright, metaor the numeric category codes. Unknown names are ignored with a console warning. - A tag is missing that should exist. The vocabulary is a snapshot from the tagcomplete project, so very new Danbooru tags won't resolve yet - the roadmap has a refresh script on the way.
If you've got a tag pipeline already and just want to know what your model actually understands, this is the one node from the pack you should grab.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| tags | STRING | Comma-separated tags to validate. From NeuralBooruLLM or typed manually. | |
| prompt_template | STRING | masterpiece, best quality, amazing quality, 4k, very aesthetic, high resolution, ultra-detailed, absurdres, newest, scenery, {prompt}, BREAK, depth of field, volumetric lighting | Final prompt wrapper; {prompt} is replaced with the validated tags. If {prompt} is missing, tags are appended. |
| is_fallbackopt | BOOLEAN | false | When True (set by NeuralBooruLLM on error), skip validation and pass tags through into the template. Reproduces the original node's use_input_text fallback. |
| validate_tagsopt | BOOLEAN | true | Check every tag against the real Danbooru vocabulary. |
| strict_tagsopt | BOOLEAN | true | Drop candidates that match no real tag. Off keeps them raw. |
| fuzzy_cutoffopt | FLOAT | 0.000–1 | Remap near-miss tags by similarity (0.8+ recommended). 0 disables fuzzy matching. |
| min_post_countopt | INT | 00–1000000 | Drop tags with fewer Danbooru posts than this. 0 keeps all. |
| max_tagsopt | INT | 00–200 | Keep at most this many tags. 0 means no limit. |
| exclude_categoriesopt | STRING | Tag categories to drop, comma-separated: artist, character, copyright, meta, general. | |
| template_presetopt | COMBO | custom | Quality-tag wrapper for common model families. custom uses the prompt_template field above. |
| sort_tagsopt | BOOLEAN | true | Reorder tags Danbooru-style: people counts, character, copyright, artist, general, meta. Booru-trained models respond to this order. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | Validated tags wrapped in the prompt template, for your CLIP encoder. |
| dropped_tags | STRING | Candidates that failed validation, comma-separated. |
| tags | STRING | The validated tags alone, without the template. |