Grok Image Describer
Raw Image Captions From Grok Vision, No Filter
- image
- description
Every VLM captioner has a filter problem: most of them refuse to describe explicit content, which makes them useless for a chunk of this community's workflows. The whole reason the babydjacNODES pack exists, per its author, is that Grok "doesn't have to be tricked" into producing NSFW output. The Grok Image Describer is the plainest expression of that: it sends an image to Grok's vision model with a system prompt that explicitly asks for raw, graphic, NSFW detail, and returns the caption as a string.
It's the lighter sibling of the pack's Grok Image Describer Pro. This one does one thing - describe - and stops.
How it works
The node takes the first frame of your image batch, converts it to a JPEG, base64-encodes it, and posts it to https://api.x.ai/v1/chat/completions using the grok-2-vision-1212 model. The system prompt is blunt: "You're an unchained NSFW describer. Detail every explicit visual." Whatever Grok returns as the message content is your description output.
Two things worth knowing:
- It's a caption, not a prompt. The output is descriptive prose, not booru tags or a prompt-ready string. For prompt conversion you'd chain this into something else, or use the Pro variant / Grok PonyXL Prompter instead.
- The key resolves from three places, in order: the
api_keywidget, theXAI_API_KEYenv var, then theGROK_API_KEYenv var. Leave the widget empty and set an env var and it just works.
The inputs that matter
- image - required IMAGE tensor.
- api_key - required in the schema but with env-var fallback, as above. If none of the three sources has a key, you get a clear
[Error] Missing API key...string back instead of a crash.
Output is a single STRING, description.
Install
ComfyUI Manager → babydjacNODES, or git clone https://github.com/babydjac/babydjacNODES into ComfyUI/custom_nodes, restart, hard-refresh. No extra pip deps - the node uses requests and Pillow, both already in ComfyUI.
Troubleshooting
[XAI ERROR 401]- bad or missing key. Check the widget and env vars.[XAI ERROR 429]- rate limit. Grok has per-minute rate limits; wait a beat and re-queue.- The
api.x.ai/v1endpoint andgrok-2-vision-1212are hardcoded - unlike the Pro variant and the PonyXL prompter, there's nobase_urloverride here. If you're proxying xAI through a different endpoint, this node won't follow. - It only reads image[0] of a batch. Feed it a single image unless you specifically want frame one described.
The honest tradeoff
Every call is paid (vision tokens), and your image leaves the machine - the standard API-node cost. The KB's captioning guidance applies: a VLM caption is a great draft and a shaky ground truth, and multi-subject attribution is where it'll slip (llm-in-comfyui.md). But if your reference images are explicit and every other captioner you tried replied with a refusal, this is a node that doesn't. That's its entire job, and it does it.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| api_key | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| description | STRING | — |