VGL Prompt (Thales)
Bria's own FIBO prompt, so you never write that JSON by hand
- system_prompt
- final_prompt
- images
- response_schema
- temperature
FIBO wants a small JSON document describing your picture - subject, wardrobe, lighting, camera, style, all in named fields. Writing it by hand is tedious, and every field you skip is control you handed back.
So the sensible move is to have an LLM write it - which is what Bria does themselves. Their vgl library builds one call that turns "a red fox in fresh snow at dawn" into a proper VGL. This node is that call minus the call: it renders the exact system prompt and user prompt Bria's Thales dialect sends, byte for byte, vendored from upstream at a pinned commit, and hands them to whatever LLM node you have. Local VLM, Gemini, Claude, Ollama behind a node. Doesn't care.
You could write your own "describe this image as JSON with these fields" system prompt in five minutes. It would be worse: Bria's is tuned against the model that reads the output and knows an inspire request from an edit. On FIBO the encoder is built for structured input, so JSON here isn't a trick - it's the native tongue.
One warning: FIBO's weights and code are non-commercial. This pack is MIT, but the model you're prompting isn't free for commercial work.
How it works
Pick a payload and the node fills Bria's template for it. generate invents a scene from your prompt. inspire does the same but takes an image as visual reference only - the prompt says what to borrow. caption describes an image as it is, taking no prompt because the image is the request. refine changes an existing VGL by a prompt, no images. edit changes one to four images. edit_with_mask changes the masked area of one.
That dropdown is a dynamic combo, so it also decides which slots appear: a prompt box for generate, just an image for caption, image slots one through four plus an optional VGL for edit, image and mask for edit_with_mask.
Then it prepares the images the way bria_vgl does: RGB, downscaled to about 0.26 MP, so fine texture in a 4K reference never reaches the VGL. On the mask payload the white area is painted mid-grey before the downscale, so the mask shrinks with its image.
The inputs worth touching
payload- set it first; everything else depends on it.style_preset- optional look-and-feel guidelines likemoody film noir, high contrast, 35mm grain. The tooltip has the rule right: the prompt owns the content, the preset owns the look. Don't smuggle your subject in here.schema_in_prompt- on by default; leave it unless you know why not.bria_vglguarantees valid JSON by enforcing a schema server-side, and most ComfyUI LLM nodes can't, so this appends a compact copy of the schema (~700 tokens) to the system prompt as the next best thing.
schema_dialect is the advanced one: json_schema for OpenAI-style structured output, gemini for the upper-case, nullable schema Bria sends Gemini. Set it when your LLM node wants the schema wired in - then flip schema_in_prompt off and your prompts are upstream's byte for byte.
The five outputs
system_prompt and final_prompt go to the LLM node's system prompt and user message - on Generate Text the system prompt is only used if use_default_template is on. images goes to its image input: empty for generate and refine, so leave it unwired there; mixed-size multi-image edits get centred on a black canvas, since a batch has to be one size. response_schema is for nodes that enforce schemas, and temperature is 0.2, Bria's value. The reply is a VGL, and it still needs cleaning by Parse VGL before TextEncodeFibo2 sees it.
A working generate setup
Set payload to generate, type your idea. Add Generate Text with a vision-language model as its clip, wire system_prompt → system prompt (default template on, or it's ignored), final_prompt → prompt, images → image. Push max_length to about 4096 and turn sampling mode on at temperature 0.2 - the default 512 tokens slices a VGL in half mid-JSON.
cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-VGLPrompts
Restart, and both nodes appear under VGL Prompts. ComfyUI Manager's VGL Prompts search does the same. No models, no pip step: zero declared dependencies, because torch, numpy and Pillow ship with ComfyUI, and the prompt text is copied in so bria-vgl and its litellm/openai tree aren't needed. Keep ComfyUI current, though - the nodes use the newer V3 node API.
Where people get burned
Edits are the weak spot. The standing complaint about FIBO is that "make the owl brown" reshapes the feathers too. If your edits wander, caption the image first and feed that VGL into the edit's optional first-image VGL, so the model starts from an accurate description instead of re-imagining your picture.
A mismatched mask stops the run. mask is WxH but image is AxB - it won't quietly stretch it for you.
Refer to edit images by position. The prompt uses <image_1> through <image_4>, and a batch in the first slot counts as several images, in order.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| payload | COMBO | generate: a new VGL from a prompt. inspire: from a prompt, with an image as visual reference. caption: describe an image. refine: change an existing VGL by a prompt, no images. edit: edit 1-4 images. edit_with_mask: edit the masked area of one image. | |
| schema_dialect | COMBO | json_schema | json_schema: standard JSON Schema, for OpenAI-style structured output. gemini: the schema exactly as bria_vgl sends Gemini (upper-case types, nullable). |
| schema_in_prompt | BOOLEAN | true | Append the response schema (compact) to the system prompt. bria_vgl never lets its LLM stray from the schema -- it enforces it as structured output -- and an LLM node that cannot enforce one gets the nearest thing in writing. Turn off when wiring response_schema into a node that enforces it: then the prompts are bria_vgl's exactly. |
| style_presetopt | STRING | Optional style guidelines, composed into the system prompt as bria_vgl's style_preset_prompt: the prompt owns the content, the preset owns the look. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| system_prompt | STRING | — |
| final_prompt | STRING | The user message text; the images go with it. |
| images | IMAGE | The images as sent: RGB, the mask painted grey, downscaled to about 0.26 MP. None for generate and refine. Multi-image edits of different sizes are centred on a black canvas, since a batch has one size. |
| response_schema | STRING | — |
| temperature | FLOAT | The temperature bria_vgl uses (0.2). |