CLIP Interrogator
Turn an image back into a prompt
- image
- positive
- negative
You've got an image and you want the prompt that could have made it. That's the whole job here. Feed CLIP Interrogator a picture and it hands you back a text prompt that describes it - subject, style, medium, the artist names it thinks match. It's the reverse of a normal generation, and people reach for it to reverse-engineer a look they like, seed a variation, or just get unstuck on a blank prompt box.
Under the hood this is the classic pharmapsychotic clip-interrogator wrapped as a node, and knowing that tells you exactly how it behaves. It's a two-stage thing. First BLIP writes a plain caption of the image ("a woman standing in a field at sunset"). Then CLIP does the interesting part: it takes big lists of modifiers - artists, mediums, art movements, "trending on artstation"-style flavor text - appends them to that caption one at a time, and scores how much each one increases CLIP's similarity to your actual image. The ones that push the score up get kept and stitched together. That's why the output reads like a real Stable Diffusion prompt and not just a caption.
The inputs and outputs that matter
image- the picture you're interrogating. That's the point of the node.clip_model_name- match this to the model era you're prompting for.ViT-L-14/openaiis the SD 1.5 CLIP,ViT-H-14/laion2b_s32b_b79kis for SD 2.x, andViT-bigG-14/laion2b_s39bis the SDXL one. Pick the wrong one and the vocabulary it draws from is subtly off for your target model.pos/neg- the interrogation mode:best,fast,classic, ornegative.bestruns the full search and is the most thorough (and slowest);fastis a quicker, rougher pass.negativebuilds a prompt of what the image isn't, which is where thenegoutput comes from.keep_model_loaded(default off) - leave it off and it frees the BLIP/CLIP models after running, which you want, because they eat a chunk of VRAM you'd rather give your checkpoint.
The two outputs are positive and negative, both plain STRING. Wire positive straight into a CLIP Text Encode (or any prompt box) and you're off. use_cache and use_precomputed (both on by default) just speed up repeat runs; save_text and output_dir dump the result to disk if you want a record.
How to install it
Two ways, same as the rest of the pack:
- ComfyUI Manager - search ComfyUI-kewky_tools, install, restart.
- Manual -
cd ComfyUI/custom_nodes && git clone https://github.com/KewkLW/ComfyUI-kewky_tools.git, then restart.
Heads up on this one specifically: it's the heaviest node in an otherwise featherweight pack. On first run it pulls down the BLIP captioning model and whichever CLIP model you picked - that's a couple of gigabytes over the wire before anything happens, so the first interrogation feels frozen when it's really just downloading. The pack README doesn't even list this node (it's a sparse, older readme that documents about half of what ships), so if it throws an import error on load, pip install clip-interrogator into your ComfyUI environment and restart.
Common issues & troubleshooting
The first run hangs. It's downloading models, not stuck. Watch your console - you'll see BLIP and the CLIP weights coming down. Subsequent runs are fast.
It's chewing VRAM. Keep keep_model_loaded off so the interrogator releases its models when it's done. If you're interrogating in the same graph you're generating in, that VRAM matters.
The prompt feels dated on a modern model. This is the honest catch. CLIP Interrogator was built for the SD 1.x / 2.x world, and its output leans hard on artist names and "trending on artstation" flavor text. On a 2026 LLM-encoded model - Flux 2, Z-Image, Anima and friends - that stuff is mostly inert; those encoders read your prompt as an instruction, not a bag of CLIP tokens, so the artist-name garnish does little. For anime or booru-tagged models you'll get more usable output from a dedicated tagger (WD14, Florence2) than from CLIP Interrogator's prose. Treat what it gives you as a starting draft you edit, never gospel.
Wrong clip_model_name for your checkpoint. If your results feel off, check you matched the CLIP variant to the model you're feeding the prompt into.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | β | |
| clip_model_name | COMBO | 16 options: ViT-L-14/openai, ViT-H-14/laion2b_s32b_b79k, ViT-bigG-14/laion2b_s39b, ViT-B-32/laion2b_e16, ViT-B-32/laion400m_e31, ViT-B-32/laion400m_e32, +10 | |
| pos | COMBO | 4 options: best, fast, classic, negative | |
| neg | COMBO | 4 options: best, fast, classic, negative | |
| save_text | BOOLEAN | false | β |
| keep_model_loaded | BOOLEAN | false | β |
| output_dir | STRING | same as image | β |
| use_precomputed | BOOLEAN | true | β |
| use_cache | BOOLEAN | true | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive | STRING | β |
| negative | STRING | β |