Shibiko AI - LM Studio Vision
A local vision model that reads your images — no API key, no cloud
- image
- image_2
- image_3
- video_frames
- response_text
The name is a lie in the best way: this node doesn't call any API that needs a key and it doesn't send your images anywhere. "LMS" is LM Studio, and this node is a controller for a vision-language model running locally on your own machine. Point it at an image or a video, ask a question, and it returns text - "describe the content," "what's the lighting here," "draft a prompt for this frame" - all generated locally.
That makes it the odd one out in this pack and the fiddliest to set up. Everything else here is self-contained; this one needs a second piece of software running. The trade is real, though: local VLM analysis means your images never leave the box, and the response text can be fed back into your workflow as a prompt or a caption. The implementation descends from dandancow874's LMStudio controller (credited in the README), with ComfyUI progress tracking added by the Shibiko author.
How it works
Three moving parts, all local:
- The
lmsCLI. At node setup it runslms lsto list your downloaded models into the dropdown. Loading and unloading go through the same CLI (lms load/lms unload), so LM Studio must be installed with its CLI reachable - on Windows the node checks the standard LM Studio install paths; elsewhere it expectslmson your PATH. - Image prep. Your inputs - up to three
imagesockets plus avideo_framessocket - are collected, downsampled tomax_total_images(using even frame sampling when you have more frames than that), resized so the longest side hitsmax_image_side, and JPEG-encoded as base64. - The OpenAI-compatible API. It posts to
base_url(defaulthttp://localhost:1234/v1, LM Studio's local server) as a chat-completions request with the images inline, and returns the model's text. You're effectively talking to LM Studio's built-in server over the same endpoint any OpenAI client would use.
There's even a progress bar that tells you which image is being processed, which genuinely helps on big batches.
The inputs that matter
- user_prompt - what you're asking. Required, multiline.
- model_name - the dropdown of models from
lms ls. If it readsError: lms ls failed, LM Studio isn't running or the CLI isn't found - that's the first thing to check. - max_total_images (default 8) - cap on how many frames get sent, to keep the request fast.
- gpu_offload (0–1, default 1.0) - 1.0 means "max" GPU offload; 0 runs on CPU.
- context_length (default 8192), max_tokens (1024), temperature (0.6), seed - standard LLM knobs.
- unload_after - off by default; flip it on to unload the model from VRAM after each run if you're juggling a diffusion model.
- Optional: image / image_2 / image_3, video_frames, system_prompt, base_url.
Output: response_text, a STRING - wire it into a text conditioning node, a prompt builder, or anywhere text goes.
Install and setup
Install is the usual pack story:
cd ComfyUI/custom_nodes
git clone https://github.com/Shibiko-AI/ShibikoAI-ComfyUI-Tools
Or ComfyUI Manager → "Shibiko", restart. Then you need LM Studio running with a vision-capable model loaded - LLaVA-class models are the standard choice - and the lms CLI available. Model loads can take a while (the CLI waits up to 180 seconds), so the first run isn't the time to panic. If you're tight on VRAM, set unload_after to true so the VLM isn't hogging memory while the diffusion model runs. It's the most setup of any node in this pack - but the payoff, a local model that looks at your frames and tells you what's in them, is hard to beat.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| user_prompt | STRING | Describe the content of the images/video. | — |
| model_name | COMBO | 1 options: Error: lms ls failed | |
| max_total_images | INT | 81–64 | — |
| gpu_offload | FLOAT | 1.000–1 | — |
| context_length | INT | 8192512–32768 | — |
| max_image_side | INT | 1024256–4096 | — |
| max_tokens | INT | 10241–32768 | — |
| temperature | FLOAT | 0.600–2 | — |
| seed | INT | 00–18446744073709550000 | — |
| unload_after | BOOLEAN | false | — |
| imageopt | IMAGE | — | |
| image_2opt | IMAGE | — | |
| image_3opt | IMAGE | — | |
| video_framesopt | IMAGE | — | |
| system_promptopt | STRING | You are a helpful AI assistant. | — |
| base_urlopt | STRING | http://localhost:1234/v1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| response_text | STRING | — |