Vision Settings (GGUF)
The Small Node That Makes Your Local LLM See
- vision
A text-only GGUF LLM is a prompt writer; add an mmproj and it becomes a captioner, a critic, a vision judge. Vision Settings (GGUF) is the small node that makes that happen for the Kinburg pack's LLM nodes. It carries the multimodal projector and a couple of knobs, and its single vision output plugs into the Local LLM Settings (GGUF) node's optional vision input. Leave it unconnected and the whole stack is text-only; connect it and your Local LLM (GGUF) and chat nodes can take images.
What it takes
mmproj- the projector.gguf(themmproj-qwen…file that ships alongside vision models). It's picked fromComfyUI/models/llm, subfolders included, so you can keep a model and its projector in one folder. Files namedmmprojsort first.mmproj_path- full path when the dropdown is on the placeholder. Quotes stripped, same as the model path fields elsewhere in the pack.vision_handler-auto (MTMD)is llama.cpp's generic multimodal loader and fits most modern vision GGUFs. Switch to the model's family only ifautofails. In practice: leave it on auto until you have a reason not to.image_max_side- downscale each image so its longest side is at most this many pixels before it goes to the model.0= full size. This is the one you'll touch, because vision tokens scale with resolution - feeding a 4K screenshot to a small model wastes context and rarely buys accuracy.
Output is the single vision bundle. The tooltip sums it up: wire it into Settings to enable vision; leave it off for text-only.
How it fits
The mechanism worth knowing: the projector is attached per request, not at model load. So mixing picture turns with plain text turns is cheap - the LLM stays loaded in VRAM and only the much smaller clip is loaded and released around each vision call. That's why vision here doesn't wreck the "keep the model warm for chat" workflow the pack defaults to. And it's why the image input exists on the LLM nodes themselves (and the chat node), gated by whether this node is wired up: connect an image with no mmproj set and the node tells you.
Where people get burned: grabbing a text-only GGUF and wondering why vision "doesn't work." The mmproj is a separate file, and not every quant of a model family ships with a projector - check the model card for mmproj before you download. Also worth knowing: this node is for the GGUF path. If you want vision through an already-running server, that's the separate Local LLM (server client, text) node's territory, and it's text-only by design.
Install
Part of the Kinburg-Nodes pack: ComfyUI Manager (search "Kinburg-Nodes"), or cd ComfyUI/custom_nodes && git clone https://github.com/Kinburg/Kinburg-Nodes, restart. It's config only - the heavy lift is llama-cpp-python, which the pack's install.py handles (run automatically by Manager, or by hand with ComfyUI's Python). No extra downloads beyond your mmproj file. Small node, big difference: this is what turns your local LLM from a text gadget into a captioning workhorse.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| mmproj | COMBO | Projector mmproj .gguf from ComfyUI/models/llm (subfolders included, so you can keep a model + its mmproj together in one folder; mmproj-named files first). Choose the placeholder to type a path in mmproj_path. | |
| mmproj_path | STRING | Full path to the mmproj .gguf (when mmproj is the placeholder). Surrounding quotes are stripped. | |
| vision_handler | COMBO | auto (MTMD) | auto (MTMD) is llama.cpp's generic multimodal loader and fits most modern vision GGUFs. Switch to the model's family only if auto fails. |
| image_max_side | INT | 10240–4096 | Downscale each image so its longest side is at most this many px before sending. 0 = full size. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| vision | KINBURG_VISION_CONFIG | — |