Dart Prompt ๐
Build the structured seed string Dart actually expects
- STRING
Dart Generate takes a plain prompt string, but the Dart model itself was trained on a specific structured layout - rating, then copyright, then character, then general tags - not free-form text. This node builds that structured string for you from separate fields, so you're filling in a form instead of remembering the exact formatting Dart wants. Skip this and you can still hand DartGenerate a hand-typed string, but you're on your own for getting the format right.
The fields, and what they map onto
Danbooru's own tag taxonomy (Rating, Character, Copyright, General, Meta) is what this node mirrors, because that's the vocabulary Dart was trained on:
- rating - a dropdown, Danbooru's content-rating axis (general/sensitive/questionable/explicit, in the board's own terms). This isn't decorative - Dart uses it to shape what kind of tags it predicts around your seed.
- copyright - the series or franchise, e.g.
genshin_impact. Defaults tooriginalif you're not working from an existing IP. - character - a character name tag, e.g.
hatsune_miku, if you're generating a known character. - general - your actual seed tags: pose, clothing, setting, whatever you already know you want. Multiline, so you can lay one tag per line if that's easier to read.
- long - a combo controlling how long a tag list Dart should aim for. Defaults to
long.
Output is a single STRING - the assembled seed, ready to feed straight into DartGenerate's prompt input.
Installing it
ComfyUI Manager, search "cgem156-ComfyUI", or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/laksjdjf/cgem156-ComfyUI
Restart ComfyUI. This node does no model work itself - it's a string formatter, so there's nothing to download for it specifically. It only matters in combination with LoadDart and DartGenerate downstream.
Why bother with the structured fields instead of just typing tags
The whole point of Danbooru-style prompting is that these categories aren't interchangeable window dressing - a character tag and a general tag pull different weight in a model trained on the real taxonomy, and Dart inherited that structure from its training data. Feeding rating, copyright, and character into their own slots rather than dumping everything into general gives Dart a cleaner signal to condition on, which tends to produce more coherent tag completions than an unstructured blob would.
Common issues
Leave character filled in with a name Dart's training data never saw much of, and you'll likely get thin, generic completions around it - the model can only extrapolate from tags it actually learned co-occurrence patterns for, same limitation any Danbooru-trained model has with obscure or brand-new characters. If your copyright and character don't actually belong to the same series, don't expect DartGenerate to reconcile that for you - it'll just predict tags around whatever conflicting signal you gave it. And if downstream output feels oddly generic regardless of what you put in general, check the rating field first - an unintended rating choice can quietly steer the whole tag distribution before your general tags even get a say. If you find yourself wanting more control over aspect ratio or a named identity axis, that's exactly what its sibling, Dart Prompt V2, adds.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| rating | COMBO | 6 options: general, sensitive, questionable, explicit, sfw, nsfw | |
| copyright | STRING | original | โ |
| character | STRING | โ | |
| general | STRING | โ | |
| long | COMBO | long | 4 options: very_short, short, long, very_long |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | โ |