Nodes/SDXL Auto Prompter/APNext GPT Vision Cloner
ComfyUI Node

APNext GPT Vision Cloner

Describe an image with GPT-4o and clone its style into a prompt

By dagthomas·Created 3 years ago·Updated 17 days ago· 285
APNext GPT Vision Cloner
  • images
  • formatted_output
  • raw_json
  • faded_image
fade_percentage15.0
gpt_model
custom_prompt

You've got a reference image whose look you want - the lighting, the palette, the vibe - and you want a text prompt that recreates it, not the exact image. GptVisionCloner (APNext GPT Vision Cloner) feeds your image to GPT's vision model, asks it to describe the thing in prompt form, and hands you back text you can drop into any generation. It's an image-to-prompt captioner with a "clone this style" attitude, and it's basically the node that started this whole pack - dagthomas's early Reddit posts were exactly this: throw in a picture, get a blended prompt out.

This is the vision half of LLM-assisted prompting. Instead of you squinting at a reference and typing out "warm rim light, shallow depth of field, film grain," a multimodal model does the describing. On modern LLM-encoded image models that read prose instructions, a good caption is a good prompt, which is why this workflow took off.

How it works

The node uploads your images to the OpenAI API with a style-cloning system prompt and returns the model's description. It runs nothing locally - it's an API call, so it needs a key and it costs per image.

The inputs that matter:

  • images (IMAGE) - one or more. If you pass several, it can blend them.
  • fade_percentage (default 15) - how strongly multiple input images are blended together before/alongside analysis. At 15 you get a light mix; crank it up to lean harder into merging two references. With a single image it's largely moot.
  • gpt_model - pick a vision-capable model from the dropdown. Vision calls cost more than text, so this is where model choice actually hits your bill.
  • custom_prompt (optional) - override the built-in cloner instruction with your own, e.g. "describe only the lighting and color grade."

Three outputs, which is the useful part:

  • formatted_output (STRING) - the clean, ready-to-use prompt. This is the one you wire into your text encoder.
  • raw_json (STRING) - the structured/raw response, if you want to parse fields out of it.
  • faded_image (IMAGE) - the blended composite of your inputs, so you can see what it actually looked at when you're mixing references.

Installing it

ComfyUI Manager: search comfyui_dagthomas, install, restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/dagthomas/comfyui_dagthomas
cd comfyui_dagthomas
pip install -r requirements.txt

That pulls the pack's full dependency stack (a dozen providers' worth) even though this node only needs the OpenAI client. Then set OPENAI_API_KEY as an environment variable before launching ComfyUI - the node reads it from the environment.

Common issues

Vision is the expensive one. The pack's author measured his own vision calls at roughly a tenth of a cent per image after downscaling the input, and called the path "semi-expensive." A batch of hundreds adds up. Use a mini vision tier when you can, and don't run this on every frame of a video unless you mean to.

It describes content when you wanted style, or vice versa. The default instruction is a general cloner. If you keep getting "a woman standing in a field" when you wanted "golden hour, 85mm, Portra 400 grade," put that ask in custom_prompt explicitly - tell it to focus on lighting, lens and color, not subject.

Blend looks muddy. fade_percentage blends all your inputs; two references with very different compositions average into mush. Feed images that share a look, or drop back to a single reference and let the description do the work.

Categorycomfyui_dagthomas

Inputs (4)

NameTypeDefaultDescription
imagesIMAGE
fade_percentageFLOAT15.00.1–50
gpt_modelCOMBO6 options: gpt-5, gpt-5-mini, gpt-5-nano, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano
custom_promptoptSTRING

Outputs (3)

NameTypeDescription
formatted_outputSTRING
raw_jsonSTRING
faded_imageIMAGE