👤 User Prompt
Add a turn to the conversation — text, or a whole batch of images
- message_in
- image
- MESSAGE
👤 User Prompt is the node that actually asks the question. It adds a user message to the conversation your workflow is building - plain text, or text plus images if you're doing vision. Every "can you look at this image and describe it / critique it / caption it" workflow in this pack starts here. It's also the node that makes the whole thing multi-turn: because it accepts an incoming MESSAGE, you can chain it after a 📡 LMStudio Request and keep the conversation going indefinitely.
The inputs
- user_prompt (required) - your question, in a multiline box. The actual thing you're asking the model.
- message_in (optional) - a
MESSAGEobject from a System Prompt or a previous Request. If present, the node copies that conversation and appends this turn to it. Leave it empty and it starts a fresh conversation. This is what turns a one-shot call into a real chat. - image (optional) - an
IMAGEinput, straight from aLoad Imagenode. Here's a nice touch: it accepts a whole batch of images, not just one. Connect a batch and each image gets attached to the message.
How the vision part works
When you feed it an image, the node encodes each image as a base64 PNG data URL and packages it in the OpenAI vision format - a content array with text and image_url parts. That's the exact shape vision-capable models expect, which is why the whole thing just works with a model like Qwen2-VL or Gemma 3 loaded in LM Studio. One thing to know: it always encodes as PNG, so very large images mean chunky base64 payloads - keep your test images reasonable.
Two behavior details worth knowing:
- If you provide both text and image, you get text + image in one message ("What's wrong with this composition?" + the picture).
- If neither
user_promptnorimagehas content, the node adds nothing - an empty user turn is silently skipped. Not a bug, but it's why a blank prompt in a chained workflow doesn't break the conversation.
The output is a single MESSAGE - the conversation with your new user message appended - which you then feed into 📡 LMStudio Request.
What people actually use it for
Two patterns dominate. The first is captioning / image analysis: load an image, ask the model to describe it, and pipe the reply somewhere useful - including training-data captioning, which the LoRA community treats as a quality gate (garbage captions, garbage results). The second is interactive prompt iteration: send an image with "rewrite this prompt to emphasize lighting," get text back, feed it into a CLIP text encode or a text-to-image loop. Because the node handles image batches, it's also the natural spot for batch captioning inside the graph rather than exporting images out to a separate tool.
Install and prerequisites
Pack install is the usual: ComfyUI Manager → search "LM Studio Tools", or git clone https://github.com/Hazukiaoi/ComfyUI-LM_Studio_Tools into ComfyUI/custom_nodes, then restart. Only dependency is requests; no model downloads - the vision model lives in LM Studio. And the vision model is the real prerequisite: this node's image input does nothing for you unless the model you selected in 🏷️ Select Model actually supports images. Text-only models will error or ignore the image payload, so pick your model in LM Studio accordingly.
The node is a thin wrapper, but it's the wrapper that gives the pack its two superpowers - conversation continuity and vision. Everything else is configuration.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| user_prompt | STRING | — | |
| message_inopt | MESSAGE | — | |
| imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MESSAGE | MESSAGE | — |