Nodes/babydjac Nodes/Grok PonyXL Prompter
ComfyUI Node

Grok PonyXL Prompter

Turn Any Image Into PonyXL Tags (Grok Vision, Zero Tagger Download)

By babydjac·Created 7 months ago·Updated 5 months ago· 12
Grok PonyXL Prompter
  • image
  • prompt
  • negative
api_key
base_urlhttps://api.x.ai/v1
exaggeration5
add_realism_tagstrue
quality_boosttrue
custom_negatives
extra_tags
instruction
max_tokens256
temperature0.45
top_p0.90
frequency_penalty0.2
presence_penalty0.0
shuffle_ordertrue

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 hairblonde_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_quality if enabled. This is the Pony quality-vocabulary part.
  • Realism tags - a realism cluster for the source_realistic side of Pony.
  • Shuffle - with shuffle_order on, 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_KEY env vars; base_url defaults to https://api.x.ai/v1 and 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_boost and exaggeration if 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.

CategorybabydjacNODES/Prompting/PonyXL

Inputs (15)

NameTypeDefaultDescription
imageIMAGE
api_keyoptSTRING
base_urloptSTRINGhttps://api.x.ai/v1
exaggerationoptINT50–10
add_realism_tagsoptBOOLEANtrue
quality_boostoptBOOLEANtrue
custom_negativesoptSTRING
extra_tagsoptSTRING
instructionoptSTRING
max_tokensoptINT25632–1024
temperatureoptFLOAT0.450–1
top_poptFLOAT0.900.1–1
frequency_penaltyoptFLOAT0.20–2
presence_penaltyoptFLOAT0.00–2
shuffle_orderoptBOOLEANtrue

Outputs (2)

NameTypeDescription
promptSTRING
negativeSTRING