Nodes/ComfyUI-Dart/Dart Generate
ComfyUI Node

Dart Generate

Dart Generate (DanbooruTagsTransformerGenerate) — ComfyUI node guide

By nkchocoai·Created 2 years ago·Updated about a year ago· 33
Dart Generate
  • model
  • tokenizer
  • setting
  • STRING
prompt<|bos|><rating>rating:sfw, rating:general</rating><copyright>original</copyright><character></character><general><|long|>1girl<|input_end|>
seed0
animagine_ordertrue
ban_tags
remove_tags

Dart Generate is the node people actually mean when they say "the Dart node." It's the one that takes a half-written prompt and hands back a full, plausible Danbooru tag list - ready to drop straight into a CLIP Text Encode. If you've ever stared at a blank prompt box wondering what the right combination of pose, clothing, and camera tags is for an Illustrious or NoobAI checkpoint, this is what that whole pack exists to do.

Why this exists

Danbooru tags aren't a description, they're a controlled vocabulary - 1girl, looking at viewer, dutch angle, blush - and that vocabulary is what Illustrious, NoobAI, and their merges were actually trained on. Getting good, varied results means knowing which tags exist and which combinations read well, and that's a real skill people build over months of prompting. Dart Generate automates the "which tags go together" part: it's a small language model trained on real Danbooru tag lists, so it knows what tends to co-occur - style tags with certain poses, certain clothing with certain settings - better than a guess. It's not a captioner like the WD14 tagger, which reads tags out of an existing image; Dart works the other way, generating a tag list from scratch (or from a partial one) with no image involved at all.

Inputs that matter

You need model and tokenizer - both DART_MODEL/DART_TOKENIZER from Dart Load - and a prompt string, normally built by Dart Compose Prompt (v1 models) or Dart Compose Prompt V2 (v2 models) rather than typed by hand. The default prompt shows why: it's a soup of special tokens like <|bos|><rating>rating:sfw, rating:general</rating><copyright>original</copyright>...<|input_end|>. That's the model's actual training format, and getting it wrong by hand is the fastest way to a bad generation.

seed works exactly like an image-generation seed: same seed, same prompt, same settings gets you the same tag list back, so it's worth locking a good result down or sweeping seeds to see variations. animagine_order (on by default) rearranges the output into the tag order Animagine XL's own prompt guide recommends - order matters for Danbooru-tag models generally, since earlier tags in a prompt get more attention weight, so this is a sane default rather than cosmetic.

Two optional inputs are worth knowing apart: ban_tags (a string, normally fed from Dart Ban Tags From Regex) stops matching tags from being generated at all, while remove_tags is a plain string that strips tags from the finished output - the README is explicit that "tags specified with remove_tags will not be output." Use ban_tags to steer the generation away from something entirely; use remove_tags as a cleanup pass. The optional setting input (DART SETTING, from Dart Generation Config) controls the sampling behavior - how random vs. conservative the generation is.

The single STRING output is the finished tag list, ready to wire into a CLIP Text Encode node.

Installing and common snags

Install via ComfyUI Manager (search "ComfyUI-Dart") or git clone https://github.com/nkchocoai/ComfyUI-Dart.git into custom_nodes and restart. No extra models to fetch by hand - the model comes down automatically the first time Dart Load runs with a given choice.

The gotcha that actually bites: model/prompt mismatch. dart-v1-sft expects a v1-style prompt from Dart Compose Prompt; dart-v2-sft/dart-v2-moe-sft expect the V2 format, which adds aspect ratio and identity fields the v1 format doesn't have. Load one, compose with the other, and you get garbage or an outright error. And if you hand-edit the prompt string instead of using a Compose Prompt node, keep the special-token structure intact - the model was trained on that exact shape, not on loose comma-separated tags.

CategoryDart

Inputs (8)

NameTypeDefaultDescription
modelDART_MODEL
tokenizerDART_TOKENIZER
promptSTRING<|bos|><rating>rating:sfw, rating:general</rating><copyright>original</copyright><character></character><general><|long|>1girl<|input_end|>
seedINT00–4294967295
animagine_orderBOOLEANtrue
settingoptDART SETTING
ban_tagsoptSTRING
remove_tagsoptSTRING

Outputs (1)

NameTypeDescription
STRINGSTRING