TS Qwen 3
A local Qwen VLM that captions, describes, and writes your prompts
- image
- video
- generated_text
- processed_image
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 fillcustom_system_promptfor your own).precision-autoby default.int8/int4options only appear ifbitsandbytesis installed - that's the VRAM-saver that lets an 8B run on a small card.attention_mode-flash_attention_2is 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_tokenis 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_modeexists precisely for machines that shouldn't phone home: with it on, the node uses only files already inmodels/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
precisionto int8 or int4, setunload_after_generationon, and capmax_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.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | huihui-ai/Huihui-Qwen3.5-2B-abliterated | Pick a model from the list. Choose 'Custom (manual)' for a third-party model. |
| custom_model_id | STRING | HuggingFace repo id (e.g. 'Qwen/Qwen2-VL-7B-Instruct') or a full local path. | |
| hf_token | STRING | HuggingFace 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_preset | COMBO | Prompts enhance | System-prompt preset. Controls the model's behavior and response style. |
| prompt | STRING | Your request (prompt) to the model. | |
| seed | INT | 420–18446744073709550000 | Seed for reproducible generation. |
| max_new_tokens | INT | 51264–8192 | Maximum number of tokens in the response (output length). |
| precision | COMBO | auto | Weight precision. 'auto' picks the best option. int4/int8 require bitsandbytes to be installed. |
| attention_mode | COMBO | auto | Attention implementation. 'flash_attention_2' is faster and more memory-efficient but needs a compatible GPU. |
| offline_mode | BOOLEAN | false | Forbid downloads. Use only files already present in the models/LLM folder. |
| unload_after_generation | BOOLEAN | false | Unload the model from memory right after generation. Saves VRAM but slows down repeated runs. |
| enable | BOOLEAN | true | Enable processing. When disabled, images pass through to the output unchanged. |
| max_image_size | INT | 102464–4096 | Maximum image side length. Larger resolutions require more VRAM. |
| video_max_frames | INT | 164–256 | How many video frames to feed the model. More frames = better context but higher memory use. |
| imageopt | IMAGE | Input image. | |
| videoopt | IMAGE | Input video stream (batch of images). | |
| custom_system_promptopt | STRING | Your custom system prompt. Used when 'system_preset' is set to 'Your instruction'. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| generated_text | STRING | Text generated by the model. |
| processed_image | IMAGE | Input image passed through (unchanged). |