Grok PonyXL Prompter
Turn Any Image Into PonyXL Tags (Grok Vision, Zero Tagger Download)
- image
- prompt
- negative
PonyXL is a tag model. It was trained on millions of booru-tagged images, so it responds to 1girl, white_hair, solo, detailed_background - and the quality-booster tags like score_9, score_8_up that Pony expects (pony.md). The usual way to get tags from a reference image is a local WD14 tagger, but that means downloading a tagger model. The Grok PonyXL Prompter skips that: it sends your image to Grok's vision API, gets back a natural-language analysis, and converts it into proper PonyXL booru-style tags plus a matching negative.
It's from the babydjacNODES pack, and it's one of the pack's more polished nodes - a lot of knobs, sensible defaults, and env-var key fallback.
How it works
The pipeline is: image → Grok Vision → text analysis → local tag post-processing. The interesting part is everything that happens after the API call, all in plain Python:
- Tag normalization - the analysis is split, cleaned, lowercased, and spaces become underscores (
blonde hair→blonde_hair), so even if Grok returns sentences or bullets you get usable booru tokens. - Exaggeration slider -
exaggeration(0–10) injects a phrase for body emphasis at each level, and adds weighted tags like(exaggerated_breasts:1.2). - Quality boost - adds
score_9, score_8_up, score_7_up, highly_detailed, masterpiece, best_qualityif enabled. This is the Pony quality-vocabulary part. - Realism tags - a realism cluster for the
source_realisticside of Pony. - Shuffle - with
shuffle_orderon, the non-quality tags get randomized so consecutive runs don't produce identical lists.
The inputs that matter
- image - required. It uses the first frame of the batch.
- api_key / base_url - key falls back to
XAI_API_KEY/GROK_API_KEYenv vars;base_urldefaults tohttps://api.x.ai/v1and can point at any compatible endpoint (a nice escape hatch). - exaggeration - 0–10, default 5. Start at 3 if you're not looking for heavy body emphasis.
- quality_boost and add_realism_tags - keep both on for standard Pony output.
- max_tokens / temperature / top_p / frequency_penalty / presence_penalty - the LLM sampling controls; defaults are reasonable.
Outputs: prompt and negative STRINGs. Wire them to the positive/negative conditioning of your PonyXL checkpoint's text encoder.
Install
ComfyUI Manager → babydjacNODES, or git clone https://github.com/babydjac/babydjacNODES into ComfyUI/custom_nodes, restart, hard-refresh. No tagger models to download - that's the whole pitch - and no extra pip deps.
Things to watch
- Cost. Every call is a paid Grok vision call. A local WD14 tagger is free after the download; this trades that for convenience. If you're captioning a LoRA training set of hundreds of images, do the math first - this is an iteration tool, not a dataset tool.
- Attribution drift. VLMs mix up which person wears what in multi-subject images (llm-in-comfyui.md flags this as the shared weakness of every captioner). For single-subject shots it's great; for groups, sanity-check.
- It's opinionated. The exaggeration tags are explicit and the quality tag ordering is baked in - you may need to turn off
quality_boostandexaggerationif you just want the plain tags.
For "I have a reference image and I want a Pony prompt," this is the fastest route in the pack - no model downloads, no local VRAM, and a surprisingly thoughtful tag pipeline on the far side of the API call.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| api_keyopt | STRING | — | |
| base_urlopt | STRING | https://api.x.ai/v1 | — |
| exaggerationopt | INT | 50–10 | — |
| add_realism_tagsopt | BOOLEAN | true | — |
| quality_boostopt | BOOLEAN | true | — |
| custom_negativesopt | STRING | — | |
| extra_tagsopt | STRING | — | |
| instructionopt | STRING | — | |
| max_tokensopt | INT | 25632–1024 | — |
| temperatureopt | FLOAT | 0.450–1 | — |
| top_popt | FLOAT | 0.900.1–1 | — |
| frequency_penaltyopt | FLOAT | 0.20–2 | — |
| presence_penaltyopt | FLOAT | 0.00–2 | — |
| shuffle_orderopt | BOOLEAN | true | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| negative | STRING | — |