LLM Studio - Options
Caption locally, privately, without a cloud key — LM Studio as your caption brain
- llm_studio_options
The Gemini nodes are great until your media is something you'd rather not send to Google, or you're on a budget and every caption costs a fraction of a cent that adds up. That's the whole pitch for the LLM Studio half of this pack: run a vision-language model locally through LM Studio's OpenAI-compatible server, and caption as much as you want for the price of your electricity. LLM Studio - Options is the config node that packages that connection so the describe nodes downstream don't each need eight fields.
It's a pure config packager - one output, llm_studio_options, consumed by MediaDescribe and friends. The fields you set: base_url (default http://192.168.50.41:1234, the classic LM Studio local server address), model_name (default qwen/qwen3-vl-30b - a solid vision-language choice, but put whatever model you loaded), prompt_style (same Text2Image/ImageEdit split as the Gemini side), temperature (default 0.5), and two video-sampling knobs: sample_rate (frames per second to extract from video, default 2.0) and max_duration (how many seconds of video to sample at most, default 5). change_clothing_color mirrors the Gemini toggle, and verbose toggles detailed console logging when you're debugging.
The local-first angle is worth taking seriously. The community has been running Qwen-VL and friends inside ComfyUI for exactly this - prompt brain, captioner, editor - and the appeal is that nothing leaves your machine. Your input media stays local, your prompts stay local, and you never touch a cloud API key. The trade-off is speed and quality: a 30B model on a local GPU is slower than Gemini Flash, and the output quality gap to the 2.5 series is real for tricky descriptions. For bulk captioning of content you'd rather keep private, that's usually a fine deal.
Installing
Ships with Swiss Army Knife (same as the Gemini nodes):
- ComfyUI Manager: search "Swiss Army Knife", install, restart.
- Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/sammykumar/ComfyUI-SwissArmyKnife.git
cd ComfyUI-SwissArmyKnife
pip install -e .
LM Studio itself is separate - install it, load a vision model, and make sure the local server is running (default port 1234) before you run the graph.
Gotchas
- The default base URL is a LAN address. If your LM Studio runs on the same machine, change it to
http://localhost:1234or127.0.0.1:1234. This one trips up more people than anything else. model_namemust match what LM Studio reports, including the/-style path (e.g.qwen/qwen3-vl-30b). Copy it from LM Studio's model list, don't guess.sample_rate×max_durationcontrols your cost in time. 2 fps over 5 seconds is 10 frames per clip - reasonable. Cranking both up makes each video much slower to caption.
Config nodes never win beauty contests, but this one is the difference between a tidy MediaDescribe graph and a spaghetti of repeated connection fields. If you're going local with your captioning, this is the node that makes it one object instead of a mess.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| base_url | STRING | http://192.168.50.41:1234 | LM Studio server URL (e.g. http://192.168.50.41:1234) |
| model_name | STRING | qwen/qwen3-vl-30b | Model name in LM Studio (e.g. qwen/qwen3-vl-30b) |
| prompt_style | COMBO | Text2Image | Text2Image: Generates descriptive prompts for models like FLUX Dev, SDXL, etc. ImageEdit: Generates instruction prompts with words like 'change to...', 'modify this...' for image editing models like FLUX Redux/Kontext, Nano Banana, Qwen Image Edit |
| temperature | FLOAT | 0.50–2 | Temperature for text generation |
| sample_rate | FLOAT | 2.00.1–30 | Frames per second to extract (e.g., 1.0 = 1 frame/sec, 2.0 = 2 frames/sec) |
| max_duration | FLOAT | 5.01–60 | Maximum duration in seconds to sample from video |
| change_clothing_color | COMBO | No | If enabled, adjust clothing color descriptions to new colors that harmonize with the scene and differ from the original colors |
| verbose | BOOLEAN | false | Show detailed processing information in console |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| llm_studio_options | LLM_STUDIO_OPTIONS | — |