ComfyUI Node

Fibo Edit VLM

The node that writes the JSON so you never have to

By boredcoderyt·Created 7 months ago·Updated 7 months ago· 4
Fibo Edit VLM
  • image
  • STRING
quantizationnone
temperature0.2
top_p0.9
max_new_tokens4096
seed-1
keep_model_loadedfalse
prompt
json_prompt

This is the front half of the Bria FIBO-Edit experience. The other node in this pack, FiboEdit, refuses to run on anything but a structured JSON caption with an edit_instruction key. FiboEdit_VLM is the escape hatch: it runs briaai/FIBO-vlm, a Qwen3-VL-based vision-language model (~4B params, about 9 GB), that looks at your image and/or your plain-English instruction and produces that JSON for you.

If you've ever tried to hand-write a FIBO caption you know why this node exists. These aren't sentences - they're annotated essays: per-object descriptions, lighting conditions, composition, photographic characteristics, aesthetic scores. Writing one by hand is miserable and error-prone, and getting it slightly wrong is how you get edits that change more than you asked. Let the VLM do it.

How it works

The node figures out what you want from which inputs you plug in:

  • prompt onlygenerate: turns a text description into a structured caption for a fresh image.
  • image + promptrefine: your instruction becomes the edit_instruction, everything else gets captioned from the image. This is the editing path.
  • image onlyinspire: captions an image with no edit, which is handy for round-trips.
  • json_prompt + promptrefine against an existing caption.

It builds a chat message, runs generation through the loaded Qwen3-VL model with the sampling settings you set, then emits the cleaned JSON string. On first use it downloads the model into ComfyUI/models/fibo_vlm/ (again, not a standard models folder, so the download is on you to notice).

The inputs that matter

  • quantization - none, 4bit, or 8bit, via bitsandbytes. Default is none, meaning the full ~9 GB VLM loads. The example workflow uses 8bit, which is a reasonable middle ground.
  • temperature (0.2) and top_p (0.9) - sampling controls for the captioning. Defaults are fine; lower temperature if the JSON comes back sloppy.
  • max_new_tokens (4096) - captions get long; 4096 is a lot of room and rarely the limit you hit.
  • seed (-1 = random). keep_model_loaded - off by default, which means the model unloads after every run. Great for memory, terrible for iterating: every run re-loads ~9 GB.
  • Optional prompt, image, json_prompt - the routing inputs above.

Output is a STRING: the JSON caption (with edit_instruction appended when you gave a prompt). Wire it straight into FiboEdit's json_prompt.

Installing it

Same pack, same steps as the sibling node: search "Fibo Edit Node for ComfyUI" in ComfyUI Manager, or

cd ComfyUI/custom_nodes
git clone https://github.com/boredcoderyt/ComfyUI-Fibo-Edit
cd ComfyUI-Fibo-Edit
pip install -r requirements.txt

Where people get burned

  • bitsandbytes is required even when quantization is none - the import is unconditional. It's the dependency most likely to break your install when it doesn't match your torch/CUDA build, so if the pack fails to load, that's the first suspect.
  • keep_model_loaded off means every run pays a ~9 GB reload. If you're dialing in a prompt, flip it on and eat the VRAM; flip it back off when you're done and want your card back.
  • bf16 needs an Ampere-or-newer GPU (compute capability 8+). On older cards the node silently falls back to fp16 - fine, just not identical.
  • The full stack is heavy. VLM (9 GB) plus the 8-bit FiboEdit (~16 GB) is a ~25 GB download before you've generated a single pixel. The 4-bit FiboEdit repo trims that to ~21 GB.

The ritual that actually works: FiboEdit_VLM (image + "change the armor to red roses") → STRING → FiboEdit → done. The VLM is what makes FIBO usable at all - without it, you're writing JSON by hand.

CategoryComfyUI-Fibo-Edit-VLM

Inputs (9)

NameTypeDefaultDescription
quantizationCOMBOnone3 options: none, 4bit, 8bit
temperatureFLOAT0.20–1
top_pFLOAT0.90–1
max_new_tokensINT4096128–8192
seedINT-1
keep_model_loadedBOOLEANfalse
promptoptSTRING
imageoptIMAGE
json_promptoptSTRING

Outputs (1)

NameTypeDescription
STRINGSTRING