The node previously only asked the LLM for real booru tags via the system
prompt, which a small general model cannot reliably honor (e.g. it emits
"dark atmosphere", which is not a real tag). This adds a whitelist
validation layer so the LLM proposes and the vocabulary disposes.
- tags.py: loads data/danbooru.csv (~140k tags + aliases), resolves each
candidate by exact match, alias remap, or optional fuzzy match
- Only the LLM output is validated; the template (quality boosters like
"masterpiece") passes through untouched
- New node inputs: validate_tags, strict_tags, fuzzy_cutoff,
min_post_count, max_tags
- New second output "dropped_tags" reports what was filtered
- Tag data vendored from DominikDoom/a1111-sd-webui-tagcomplete
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>