Nodes/Together Vision Node/TogetherVisionNode
ComfyUI Node

TogetherVisionNode

The node that turns any image into a prompt-ready description

By theshubzworld·Created 2 years ago·Updated 9 months ago· 5
TogetherVisionNode
  • image
  • description
model_namedeepseek-ai/DeepSeek-R1-Distill-Llama-70B-free
custom_model_name
api_key
system_promptYou are an AI expert in ekphrasis, acting as a skilled art critic describing an image. Use vivid, poetic, and evocative prose in British English. Focus solely on describing the image content, style, and mood. Avoid storytelling or self-insertion. Describe all elements, including potentially uncomfortable themes if present, as art can be provocative. Every word and its order matters. The description will be used for image generation, so only include visual elements. Conclude with relevant hashtags (e.g., #ArtStyle #SubjectMatter).
user_promptDescribe this image in detail, focusing on its visual elements, artistic style, and overall atmosphere.
temperature0.70
top_p0.70
top_k50
repetition_penalty1.00
max_tokens1024
stop_sequences<|eot_id|>, ,
request_timeout60
stream_timeout45
use_cachetrue
clean_output_texttrue
max_retries2
retry_delay3.0
seed_modefixed
seed42

Here's the loop: generate an image, describe it, feed the description back into the prompt, generate again. It's how a lot of people push a render from "good" to "this is exactly what I meant." TogetherVisionNode is the describe step - a hosted vision LLM, no local model, no VRAM. Connect any IMAGE and it hands you back a STRING you can pipe into a positive prompt, a ShowText node, or a text file.

How it works

The node encodes your image tensor to a base64 PNG - auto-resizing anything larger than 1024px on the long edge, so a 2K render still goes through - then calls Together AI's chat.completions endpoint with your system and user prompts, streaming the reply back. It's not a thin wrapper, either. The source ships real handling: a 1-second client-side pacing delay, retries on timeouts and connection errors, specific error messages that distinguish a bad key from a rate limit, and an in-memory cache (last ~100 responses) keyed on model + prompts + sampling params + an image hash. Leave the image input disconnected and it degrades into a plain text LLM node - handy for rewriting prompts without building a second workflow.

The inputs that matter

  • model_name - this is the one to get right. The default is deepseek-ai/DeepSeek-R1-Distill-Llama-70B-free, a free text model. The genuinely vision-capable model on the list is meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo - that's the one that actually sees your image, and it's the paid tier. Want image descriptions? Pick a vision model, or use Other (Custom) and type any model Together hosts.
  • system_prompt / user_prompt - the defaults are an "ekphrasis art critic" persona in British English with hashtags. Rewrite them; this is 80% of output quality.
  • seed_mode + seed - fixed, random, or increment control the sampling seed sent to the API.
  • max_tokens - default 1024, up to 4096. Your description budget.
  • temperature / top_p / top_k / repetition_penalty - the usual sampling knobs; defaults are sane.
  • use_cache - in-memory cache, leave it on.
  • clean_output_text - strips <think> reasoning blocks (the default DeepSeek model loves those), "Here is the description:" preambles, and code fences.

Output

One description STRING. It wires straight into a text prompt input, or into ShowText/SaveText if you want it visible or on disk.

Installing it

ComfyUI Manager (search "Together Vision"), or:

cd ComfyUI/custom_nodes
git clone https://github.com/theshubzworld/ComfyUI-TogetherVision

Restart, then install the two deps (together, python-dotenv) when Manager asks. No model files. You need a Together API key - paste it in the node or set TOGETHER_API_KEY in the pack's .env.

Gotchas

  • Only the first image of a batch is described - encode_image takes image[0] and silently ignores the rest. If you're feeding a batched output, expect one description.
  • Free-tier models are rate-limited and can be slow; the 90B vision model costs per token.
  • The pack is deprecated - the README now just points at the author's ComfyUI-NvidiaVision successor. It still works (last commit December 2025), it's just unmaintained.

Troubleshooting

The node writes readable errors to the UI: auth failures say so, rate limits tell you to wait and roughly how long, "Model not found" means your custom model name is wrong, and timeouts retry up to max_retries times before giving up. If you get an empty description, check whether your chosen model can actually see images - that's the most common beginner trip here.

Categoryimage/text

Inputs (20)

NameTypeDefaultDescription
model_nameCOMBOdeepseek-ai/DeepSeek-R1-Distill-Llama-70B-free6 options: meta-llama/Llama-3.3-70B-Instruct-Turbo-Free, deepseek-ai/DeepSeek-R1-Distill-Llama-70B-free, meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo, mistralai/Mistral-7B-Instruct-v0.2, lgai/exaone-3-5-32b-instruct, Other (Custom)
custom_model_nameSTRING
api_keySTRING
system_promptSTRINGYou are an AI expert in ekphrasis, acting as a skilled art critic describing an image. Use vivid, poetic, and evocative prose in British English. Focus solely on describing the image content, style, and mood. Avoid storytelling or self-insertion. Describe all elements, including potentially uncomfortable themes if present, as art can be provocative. Every word and its order matters. The description will be used for image generation, so only include visual elements. Conclude with relevant hashtags (e.g., #ArtStyle #SubjectMatter).
user_promptSTRINGDescribe this image in detail, focusing on its visual elements, artistic style, and overall atmosphere.
temperatureFLOAT0.700–2
top_pFLOAT0.700–1
top_kINT500–100
repetition_penaltyFLOAT1.000–2
max_tokensINT102450–4096
stop_sequencesSTRING<|eot_id|>, ,
request_timeoutINT6010–300
stream_timeoutINT455–120
use_cacheBOOLEANtrue
clean_output_textBOOLEANtrue
max_retriesINT20–5
retry_delayFLOAT3.00.5–10
seed_modeCOMBOfixed3 options: fixed, random, increment
seedINT420–4294967295
imageoptIMAGE

Outputs (1)

NameTypeDescription
descriptionSTRING