ComfyUI Node

TS Qwen 3

A local Qwen VLM that captions, describes, and writes your prompts

By AlexYez·Created 2 years ago·Updated a day ago· 12
TS Qwen 3
  • image
  • video
  • generated_text
  • processed_image
model_namehuihui-ai/Huihui-Qwen3.5-2B-abliterated
custom_model_id
hf_token
system_presetPrompts enhance
prompt
seed42
max_new_tokens512
precisionauto
attention_modeauto
offline_modefalse
unload_after_generationfalse
enabletrue
max_image_size1024
video_max_frames16
custom_system_prompt

The name says it all: it's a Qwen 3 VL vision-language model, running locally, as a ComfyUI node. No API, no key, no per-token bill. Give it an image (or a video, or just text) and a question, and it answers - which in a ComfyUI graph means captioning training data, describing what's in a frame, or turning a rough idea into a proper prompt for the next sampler down the line. It's the same category of tool the KB calls the local prompt-enhancement worker: uncensored, offline, and free per call.

How it works

Under the hood it's a shared Qwen engine (nodes/llm/_qwen_engine.py), the same one TS Super Prompt's voice-enhancement uses - so bug fixes and performance improvements land in both nodes at once. The model downloads from Hugging Face on first use into models/LLM/, and the built-in picker offers 2B / 4B / 8B variants plus uncensored ("abliterated") builds - the default model is the huihui-ai Qwen3.5-2B abliterated, which is a sensible starting point for a 2B worker. Qwen3-VL is Apache 2.0, and as the KB's Qwen3-VL panel notes, this community's whole reason for running the abliterated builds is that the stock Instruct models carry assistant-style refusals that break explicit captioning.

The engine handles image, video, and text in one node: image takes an IMAGE, video takes a frame batch (with video_max_frames, default 16, controlling how much of the clip the model sees), and prompt is your question.

The inputs that matter

  • system_preset - behavior presets like "Prompts enhance" and "Image Edit Command Translation" (pick "Your instruction" and fill custom_system_prompt for your own).
  • precision - auto by default. int8/int4 options only appear if bitsandbytes is installed - that's the VRAM-saver that lets an 8B run on a small card.
  • attention_mode - flash_attention_2 is faster and leaner on compatible GPUs.
  • max_new_tokens - response length (512 default).
  • seed - reproducible output (default 42).
  • unload_after_generation - free the model's VRAM right after each run. Saves memory, slows repeated runs.

Two outputs: generated_text (the answer, as a STRING you can feed anywhere) and processed_image (the input image passed through unchanged - handy when the node sits in a chain). enable (default true) lets you bypass the model entirely for a pure pass-through.

The security and token warnings

This is a node that downloads from the internet and runs arbitrary local weights - the same shape as the pack that got ComfyUI in trouble, so the KB's advice applies: only install it because you trust the pack (it's a mature, well-reviewed repo, not a random fork). Two specific gotchas:

  • hf_token is saved in the workflow JSON in plain text. The tooltip warns you directly: don't share a file that contains a token. Leave it empty for public models - almost everything here is public.
  • offline_mode exists precisely for machines that shouldn't phone home: with it on, the node uses only files already in models/LLM/.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/AlexYez/comfyui-timesaver
cd comfyui-timesaver
python -m pip install -r requirements.txt

The pack requires transformers >= 5.2.0 (its default model's architecture is only understood from that version - older installs downloaded gigabytes before failing, now it checks first). For int4/int8 precision:

python -m pip install -e .[llm-quant]

Note: bitsandbytes has no Apple Silicon wheel, so on a Mac the node silently falls back to fp16/fp32 with a warning - that's expected, not a bug.

Common issues

  • OOM on an 8B. Drop precision to int8 or int4, set unload_after_generation on, and cap max_image_size / video_max_frames.
  • "Transformers does not recognize this architecture." Update transformers to 5.2.0+ - the pack now checks this before downloading, so you'll get a clean error with the fix.
  • Slow first run. That's the model downloading into models/LLM/, not a hang.

For captioning a dataset for LoRA training, or routing "user intent → edit command" into a Qwen-Edit graph, this is the local worker to wire in.

CategoryTS/LLM

Inputs (17)

NameTypeDefaultDescription
model_nameCOMBOhuihui-ai/Huihui-Qwen3.5-2B-abliteratedPick a model from the list. Choose 'Custom (manual)' for a third-party model.
custom_model_idSTRINGHuggingFace repo id (e.g. 'Qwen/Qwen2-VL-7B-Instruct') or a full local path.
hf_tokenSTRINGHuggingFace token (Write/Read) for downloading models. Leave empty for public models. WARNING: saved in the workflow JSON in plain text — do not share a file that contains the token.
system_presetCOMBOPrompts enhanceSystem-prompt preset. Controls the model's behavior and response style.
promptSTRINGYour request (prompt) to the model.
seedINT420–18446744073709550000Seed for reproducible generation.
max_new_tokensINT51264–8192Maximum number of tokens in the response (output length).
precisionCOMBOautoWeight precision. 'auto' picks the best option. int4/int8 require bitsandbytes to be installed.
attention_modeCOMBOautoAttention implementation. 'flash_attention_2' is faster and more memory-efficient but needs a compatible GPU.
offline_modeBOOLEANfalseForbid downloads. Use only files already present in the models/LLM folder.
unload_after_generationBOOLEANfalseUnload the model from memory right after generation. Saves VRAM but slows down repeated runs.
enableBOOLEANtrueEnable processing. When disabled, images pass through to the output unchanged.
max_image_sizeINT102464–4096Maximum image side length. Larger resolutions require more VRAM.
video_max_framesINT164–256How many video frames to feed the model. More frames = better context but higher memory use.
imageoptIMAGEInput image.
videooptIMAGEInput video stream (batch of images).
custom_system_promptoptSTRINGYour custom system prompt. Used when 'system_preset' is set to 'Your instruction'.

Outputs (2)

NameTypeDescription
generated_textSTRINGText generated by the model.
processed_imageIMAGEInput image passed through (unchanged).