Nodes/Kinburg-Nodes/Send Image to Chat
ComfyUI Node

Send Image to Chat

Get a Picture You Just Generated Into the Conversation

By Kinburg·Created 3 months ago·Updated 6 days ago· 1
Send Image to Chat
  • image
  • image
send_asthe active persona
whenon button press
megapixels1.00
caption
shot
note_in_contextfalse

The pack's chat node lets you paste a picture by hand - but a picture your workflow just generated deserves better than a manual screenshot. Send Image to Chat is the bridge: wire an IMAGE in, and the picture lands in the chat window without you copying it out of a preview. The image passes straight through (image out = image in), so the node sits inline as a tap on the wire - it changes nothing about your pipeline, it just reports to the chat.

What it takes

  • image - the picture. A batch sends every frame.
  • send_as - me (user) drops it in the chat's tray, exactly as if you'd pasted it: the pixels go to the model with your next message. A persona instead hangs it on that persona's most recent bubble, as though they sent it - and the model is not shown those pixels, since llama.cpp only takes images on user turns anyway.
  • when - on button press saves the picture and waits for the 📌 on the node, so you can look at the result and re-roll before committing. every run pushes the moment the node executes. On-button-press is the usual choice for exactly that reason.
  • megapixels - downscale the copy that goes to the chat (0 = full size). Only affects the chat copy; image passes through untouched.
  • caption (optional) - one or two sentences of plain prose, what the model reads about the picture once the pixels are gone. This is the field people get wrong: it's not the generation prompt. A paragraph of comma-separated tags sitting in the conversation teaches the persona to write in comma-separated tags. If a "camera" persona writes both, split them - one line for the sampler, one for here.
  • shot (optional) - a keyframe label kept with the picture (shot 3 / end), so a chat can be read back as a storyboard. It never reaches the model.
  • note_in_context (optional) - for persona pictures: on, the picture leaves a note in the context. Off (default), it's purely visual and adds nothing - usually right, because the persona already described the scene it's a picture of.

Why the mechanics matter

Two things make this different from just wiring an image into the chat's image input. First, it's not a graph link - the picture is saved to input/kinburg_chat/ and referenced by name, so Send never re-runs the branch that made it (an image wired in from a sampler would regenerate on every message unless its seed is fixed). Second, the filename is a hash of the pixels, so re-running a branch that produced the same picture pushes the same reference and the chat recognizes it instead of stacking duplicates. The 📌 button reads send_as, caption, shot and note_in_context when you press it - deciding who a picture comes from is something you do after looking at it, so you can change them post-generation without re-running anything. Only megapixels needs a re-run; it changes the saved file.

The honest use case: a storyboard pipeline where the sampler makes shots and the chat's persona critiques them - Send Image to Chat after each shot, caption it, and the persona gives feedback you can act on before the next render. Output: just image, unchanged.

Install

Part of the Kinburg-Nodes pack - ComfyUI Manager (search "Kinburg-Nodes") or git clone, restart. Requires the pack's LLM stack (llama-cpp-python via install.py) and an mmproj on the target persona's Settings node for the model to actually see pixels. No extra deps beyond that.

CategoryKinburg-Nodes/LLM

Inputs (7)

NameTypeDefaultDescription
imageIMAGEThe picture to put in the chat. A batch sends every frame.
send_asCOMBOthe active personaWho the picture comes from. A persona: it hangs on that persona's last message, as though they sent it — the model is not shown the pixels. 'me (user)': it joins the chat's tray and goes out with your next message, which the model DOES see.
whenCOMBOon button press'on button press' saves the picture and waits for 📌 on this node — the usual choice, so you can look at the result first. 'every run' pushes it the moment this node executes. With 📌 you can still change send_as, caption, shot and note_in_context after the picture is generated; they are read when you press it. Only megapixels needs a re-run, since it changes the saved file itself.
megapixelsFLOAT1.000–16Downscale to about this many megapixels before saving (never upscales). 0 = keep full size. Only affects the copy that goes to the chat; the image output passes through untouched.
captionoptSTRINGOne or two sentences of plain prose — what the model reads about this picture once the pixels are gone. NOT the generation prompt: tag soup in the conversation teaches the persona to write tag soup. Leave empty for a picture that is purely something to look at.
shotoptSTRINGOptional keyframe label, e.g. 'shot 3 / end'. Stored with the picture so a chat can be read back as a storyboard; it never reaches the model.
note_in_contextoptBOOLEANfalsePersona pictures only. Off (default) the picture is purely visual and adds nothing to the context — right when the persona already described the scene it is a picture of. On, it leaves '[image: caption]' in that persona's message so the conversation records that a photo was sent.

Outputs (1)

NameTypeDescription
imageIMAGE