ialhabbal VLLM Advanced
Same Qwen3-VL, but now you get to fiddle with temperature and beams
- image
- video
- RESPONSE
The basic ialhabbal_VLLM node does one thing well: describe the image. This is the same node with the training wheels off - every knob the transformers backend actually has, exposed on the canvas. If you only ever want "describe this picture," skip it. If you want the same answer twice, want it faster, want it on your Mac's GPU, or want to steer how creative the model gets, this is the version you reach for.
It loads the same Qwen3-VL HuggingFace checkpoints into models/LLM/Qwen-VL, runs through the same processor and AutoModelForVision2Seq machinery, and even defaults to the same 2B instruct model. Everything the plain node does, this does - it just lets you change the sampling behavior that was previously hardcoded.
The inputs that matter
Beyond model_name, quantization, preset_prompt/custom_prompt, max_tokens (now up to 4096) and keep_model_loaded, you get:
- temperature (0.1β1.0, default 0.6) - sampling randomness. The tooltip's framing is right: 0.2β0.4 for focused, predictable output, 0.7+ for creative. For captioning a LoRA set, keep it low; for prompt writing, nudge it up.
- top_p (0β1, default 0.9) - nucleus sampling. Leave it near default unless output feels incoherent.
- num_beams (1β8, default 1) - beam search. This one's a trap in a good way: set it above 1 and it disables temperature/top_p and switches to greedy, more stable decoding at the cost of speed. Beam search and sampling are mutually exclusive in the code, so don't crank both expecting them to combine.
- repetition_penalty (default 1.2) - >1 punishes repeated phrases. If your caption loops, raise it; if it sounds stilted, bring it down toward 1.0.
- frame_count (1β64, default 16) - how many frames get sampled from a video input. More frames = more context, more time, more VRAM.
- device -
auto,cpu,mps, or explicitcuda:0/cuda:1for multi-GPU rigs. This is the Mac escape hatch:mpsruns on Apple Silicon instead of silently using the CPU. - use_torch_compile - off by default; on compatible CUDA/Torch 2.1+ builds it pays a one-time compile cost for faster subsequent runs. Only worth it for batch jobs.
Everything else - the preset prompts, seed, keep_model_loaded, attention_mode - behaves exactly like the base node. Output is a single RESPONSE string.
Why you'd actually pick this one
Two scenarios, honestly. First, reproducibility: with num_beams on and a fixed seed, you get deterministic output, which matters if you're captioning a training set and don't want the model to describe the same image differently on the tenth run. Second, resource control: the device selector plus frame_count are how you squeeze this onto a machine where the plain node's defaults would OOM.
Installing and running
Same suite, same install - ComfyUI Manager search "ComfyUI-ialhabbal", or:
cd ComfyUI/custom_nodes
git clone https://github.com/ialhabbal/ComfyUI-ialhabbal.git
Restart, then find ialhabbal VLLM Advanced in the node browser. The heavy dependencies (transformers, bitsandbytes, accelerate) come with the pack.
Common issues
- Nothing changes when I move temperature - check
num_beams. If it's above 1, sampling is off by design. - torch.compile stalls on first run - that's the compile pass, not a hang. It can take minutes; subsequent runs are faster.
- MPS still slow - 4-bit quantization is your friend on Mac; 4-bit plus
mpsis the way people actually run this on Apple Silicon. - VRAM contention - you're now running an LLM and a diffusion model.
keep_model_loadedoff between runs, or use a 4-bit quant.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | Qwen3-VL-2B-Instruct | Pick the Qwen-VL checkpoint. First run downloads weights into models/LLM/Qwen-VL, so leave disk space. |
| quantization | COMBO | None (FP16) | Precision vs VRAM. FP16 gives the best quality if memory allows; 8-bit suits 8β16 GB GPUs; 4-bit fits 6 GB or lower but is slower. |
| attention_mode | COMBO | auto | auto tries flash-attn v2 when installed and falls back to SDPA. Only override when debugging attention backends. |
| use_torch_compile | BOOLEAN | false | Enable torch.compile('reduce-overhead') on supported CUDA/Torch 2.1+ builds for extra throughput after the first compile. |
| device | COMBO | auto | Choose where to run the model: auto, cpu, mps, or cuda:x for multi-GPU systems. |
| preset_prompt | COMBO | πΌοΈ Detailed Description | Built-in instruction describing how Qwen-VL should analyze the media input. |
| custom_prompt | STRING | Optional overrideβwhen filled it completely replaces the preset template. | |
| max_tokens | INT | 51264β4096 | Maximum number of new tokens to decode. Larger values yield longer answers but consume more time and memory. |
| temperature | FLOAT | 0.600.1β1 | Sampling randomness when num_beams == 1. 0.2β0.4 is focused, 0.7+ is creative. |
| top_p | FLOAT | 0.900β1 | Nucleus sampling cutoff when num_beams == 1. Lower values keep only top tokens; 0.9β0.95 allows more variety. |
| num_beams | INT | 11β8 | Beam-search width. Values >1 disable temperature/top_p and trade speed for more stable answers. |
| repetition_penalty | FLOAT | 1.200.5β2 | Values >1 (e.g., 1.1β1.3) penalize repeated phrases; 1.0 leaves logits untouched. |
| frame_count | INT | 161β64 | Number of frames extracted from video inputs before prompting Qwen-VL. More frames provide context but cost time. |
| keep_model_loaded | BOOLEAN | true | Keeps the model resident in VRAM/RAM after the run so the next prompt skips loading. |
| seed | INT | 11β4294967295 | Seed controlling sampling and frame picking; reuse it to reproduce results. |
| imageopt | IMAGE | β | |
| videoopt | IMAGE | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| RESPONSE | STRING | β |