Nodes/ComfyUI-FD-Tagger/FurryDiffusion Tagger 🐺
ComfyUI Node

FurryDiffusion Tagger 🐺

The FurryDiffusion Tagger that needs no API key

By loopyd·Created 2 years ago·Updated 2 years ago· 5
FurryDiffusion Tagger 🐺
  • image
  • STRING
modelJTP_PILOT2-e3-vit_so400m_patch14_siglip_384
threshold0.35
replace_underscorefalse
trailing_commafalse
exclude_tags

FurryDiffusion Tagger 🐺 (FD_FDTagger|fdtagger) looks at an image and hands you back a comma-separated list of e621-style booru tags, ready to paste into a prompt or save as a caption file. If you run furry checkpoints - Furry Diffusion itself, or Pony, which trained on an e621/Danbooru hybrid and genuinely understands that vocabulary - this is the interrogation node for your half of the hobby. The name makes it sound like it phones home to some service, but the name is a lie: everything runs locally, no API, no key, and the weights are free.

What it actually is

It's a fork of pythongosssss's well-known ComfyUI-WD14-Tagger, rebranded for the Furry Diffusion community. Instead of SmilingWolf's WD14 anime taggers, it runs RedRocket's Joint Tagger Project (JTP) - a ViT-SO400M (SigLIP) vision transformer trained on e621 with a 9,083-tag vocabulary. WD14 covers the Danbooru side of prompting; this covers the e621 side. They're the same idea, different dictionaries, and you pick based on which board your checkpoint actually understands.

How it works

Under the hood it's classic image tagging: the model converts your image into logits, a sigmoid turns those into probabilities per tag, the node keeps the top ~250 candidates, then filters by your confidence threshold, sorts by score, and joins the survivors into a string.

The part beginners get surprised by is the download. On first run the node auto-downloads both the .safetensors model and a tags.json (the tag-name→index map) from RedRocket/JointTaggerProject on HuggingFace, with progress shown right on the node. They land in the pack's own models/ and tags/ folders - no manual model step in the README, because there isn't one. The SigLIP backbone is roughly 400M parameters, so the first interrogation takes a real minute while it pulls ~800MB and warms up fp16 on your GPU.

The inputs that matter

You'll set most of these once and forget them:

  • image - any IMAGE tensor, typically straight from LoadImage.
  • model - two choices, RedRocket PILOT v1 and PILOT v2. v2 is the default and the newer one (it swaps in a gated classifier head); use it unless you've compared and have a reason not to.
  • threshold - confidence cutoff, default 0.35. Lower it when the node under-tags, raise it when you're drowning in noise. 0.35 is a sane start.
  • exclude_tags - comma-separated tags to drop from the output. The practical use: filtering out artist tags or rating tags you don't want injected into every prompt.
  • replace_underscore - e621 tags come back with spaces (blue eyes). Toggle this and you get blue_eyes, which some models and captioning pipelines want.
  • trailing_comma - appends a comma to the string; a small thing, but some dataset tools expect it.

The output is a STRING - the tag list (as a list, since it can tag batched images). Wire it into a CLIP Text Encode for a furry checkpoint, or pipe it into a captioning workflow when you're prepping a LoRA dataset. It's an output node, so it also renders the scored tags right in the ComfyUI graph, which makes it handy for eyeballing what the model sees.

Install

ComfyUI Manager: search ComfyUI-FD-Tagger and hit Try Install, then restart. Or the manual way:

cd ComfyUI/custom_nodes
git clone https://github.com/loopyd/ComfyUI-FD-Tagger.git
cd ComfyUI-FD-Tagger
pip install -r requirements.txt

Restart and you'll find the node under the 🐺 Furry Diffusion category. Dependencies are torch, torchvision, pillow, aiohttp, requests, numpy - nearly all of it already in a normal ComfyUI Python environment, so the only real install cost is the model download on first run.

Quick interrogation

There's a nice extra baked in: right-click any node that displays an image (LoadImage, SaveImage, PreviewImage) and choose FDTagger from the menu. It interrogates that image on the spot with your config.json defaults - great for reverse-engineering a prompt from art you like without building a graph.

Gotchas

Where people get burned: this model was trained on e621, so it will happily tag NSFW content - and will occasionally mislabel SFW stuff with NSFW tags. The README carries an explicit age warning for a reason. Don't run the quick-interrogate on images where the result is going to embarrass you.

Also keep in mind threshold only filters the top 250 candidates the model already picked - a very low value won't dig up tags it never considered. If output feels thin, model choice or image quality is more likely the culprit than the slider. And if the first-run download fails, the node's error message points you at setting a HuggingFace mirror in config.json.

Categoryimage

Inputs (6)

NameTypeDefaultDescription
imageIMAGE
modelCOMBOJTP_PILOT2-e3-vit_so400m_patch14_siglip_3842 options: JTP_PILOT-e4-vit_so400m_patch14_siglip_384, JTP_PILOT2-e3-vit_so400m_patch14_siglip_384
thresholdFLOAT0.350–1
replace_underscoreBOOLEANfalse
trailing_commaBOOLEANfalse
exclude_tagsSTRING

Outputs (1)

NameTypeDescription
STRINGSTRING