Nodes/genereticore/ꘅ Local Vision
ComfyUI Node

ꘅ Local Vision

A local VLM that looks at your render and tells you what it sees

By languel·Created 12 days ago·Updated 9 days ago· 0
ꘅ Local Vision
  • image
  • text
  • metrics
◄model▾►
◄promptDescribe the image briefly.►
◄max_tokens128►

Why you'd wire a vision model into an image graph

ꘅ Local Vision sends an IMAGE and a prompt to Qwen3-VL 2B running locally, and gives you back text. The two jobs people actually use a VLM for in Comfy are captioning and prompt-seeding: describe a finished render so you can iterate on the prompt that produced it, or describe a reference image so you can generate something adjacent without writing the description by hand.

The third job, the interesting one, is closing a loop. Image in, description out, description becomes prompt, run again. That's not a workflow the community does much, because every VLM caption path costs either an API call or a fat amount of VRAM next to your diffusion model. Here the model runs in a helper process through macOS's Core AI stack, on a 3.3 GB download - which is why someone bothered to build it into a node.

Be realistic about the output, though. Sub-2B VLMs are good at "an abstract blue and orange composition with hand-cut paper shapes" and bad at fine attribution. The known, documented weakness of every captioner in this class is multi-subject mixups - who's wearing what, who's doing what - and that's not a bug you'll tune out with a better prompt. If you need tags rather than prose, a booru-style tagger still does that job better; if you need a faithful description of a specific image, audit it by eye before you build a pipeline on it.

Inputs and the outputs

Four required inputs, no optionals:

  • model - an enum with a single entry, qwen3-vl-2b. Not configurable. Yes, it's a one-item dropdown; it's a slot for the pack's model catalog.
  • image - an IMAGE. Read the mechanism below, because there's a real constraint here.
  • prompt - multiline, default Describe the image briefly. The model answers this about the picture. Ask for what you want in the shape you want downstream (one sentence, a comma list, a JSON blob) and it mostly complies.
  • max_tokens - 1 to 2048, default 128. Fine for a caption; raise it if you asked for a paragraph and got a fragment.

Two outputs: text (STRING) and metrics (STRING, a JSON blob with request id, backend, model, timestamp and timings).

What the source tells you that the description doesn't

Two details, both from the node's analyze method rather than any doc.

One image per run, hard. The code checks image.shape[0] != 1 and raises Vision accepts one observation, not a batch. Feed it a batch of four from a Load Image with a directory loaded, or from an Image Batch, and it refuses rather than silently analysing frame one. If you want to caption a folder, that's a loop outside Comfy.

Your image gets thumbnailed to 1024px. Before encoding, the frame is converted to a PIL image and run through thumbnail((1024, 1024)), then sent as a base64 PNG. So a 2048px render is downscaled on the way in - which kills fine text, tiny faces, and small markings. Crop to the region you care about if the question is about a detail.

The privacy property is worth a sentence too: the image is base64'd into a request to a loopback-only local helper. Nothing is uploaded to a hosted service, and the pack's API is same-origin only.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/languel/genereticore
python3 scripts/build_helper.py

Restart Comfy, or search GeneretiCore in ComfyUI Manager. Sample 04 - Local vision is the fastest path - it ships with a solid blue fixture and asks the model to describe it.

Then click ↓ on the node. This is the heavy download in the pack: roughly 3.3 GB for Qwen3-VL 2B, pulled from a pinned Hugging Face revision with checksum verification and no login. It is a separate download from the 352 MB Qwen3 0.6B that ꘅ Local Text and ꘅ Local Decision share - having text working doesn't mean vision will.

The platform gate is the same as the rest of Core AI: macOS 27+ on Apple silicon, Xcode 27 to build the helper. The README describes this as a contributor milestone, not a student-ready release.

Where people get burned

ϟ is not Run. The lightning button gives you a local preview inside the node; connected nodes do not update. If your prompt encoder or viewer never receives the caption, that's why.

The 3.3 GB surprises people who installed for text. Download it while you're doing something else; nothing fetches itself on workflow load, and the failure is an explicit Model missing. Download it explicitly from the node toolbar first.

Prompting it like a chat model. It has 128 tokens by default and a compression-to-1024 pipeline upstream. Short, concrete instructions ("name the dominant colors and the lighting, one line") land; "analyse this image in detail" gets you a truncated sentence that's less useful than the default prompt.

CategoryGenereti / Inference

Inputs (4)

NameTypeDefaultDescription
modelCOMBO1 options: qwen3-vl-2b
imageIMAGE—
promptSTRINGDescribe the image briefly.—
max_tokensINT1281–2048—

Outputs (2)

NameTypeDescription
textSTRING—
metricsSTRING—