Qwen3.5 Prompt Enhancer (GGUF)
The Same Trick, a Smaller, More Tuned Brain
- source_video
- reference_video
- reference_image_0
- reference_image_1
- reference_image_2
- enhanced_prompt
- structured_plan
- source_video
- reference_video
- reference_image_0
- reference_image_1
- reference_image_2
Same pack, same UI, different brain. If you've seen the Bernini MLLM node from djdzzzz's ComfyUI-Bernini-PromptEnhancer, you already know how this one behaves - 13 task types, video/image references, subprocess inference, zero VRAM left behind. The difference is what's doing the thinking: instead of the 7B Qwen2.5-VL that runs the Bernini semantic planner, this node loads Qwen3.5-4B from the Yusiko/qwen3.5-prompter repo, a smaller model that was fine-tuned specifically for prompt engineering and stays multimodal.
That makes it the node to reach for when your job is mostly text - t2v and t2i where there's no footage to edit, just a rough idea that needs to become a camera-ready prompt. The 4B is lighter than the 7B Bernini model: it fits in less VRAM and reloads faster every run, which is worth real time when you know the node reloads the GGUF from disk on each execution. If you're primarily editing existing video with references, the Bernini node is the closer match; this one is the snappier text-and-image worker.
How it works
The mechanism is shared with the whole pack: the node spawns a separate Python process (worker/qwen35_worker.py), which loads the GGUF through llama-cpp-python and talks JSON lines over stdin/stdout. Run finishes → process killed → VRAM fully released. That's the design that keeps a 4B model from squatting on your card while your renderer needs it.
The one genuinely new control is thinking_mode (off by default). Flip it on and Qwen reasons before it writes - you get a chain-of-thought trace instead of a straight answer. It costs time and output tokens, and for most prompt-enhancement jobs the direct answer is what you want. Turn it on when you're staring at a confusing result and want to see the model's reasoning, then turn it back off.
Inputs and outputs
The inputs are the Bernini node's list - model, mmproj, the 13 task_type values, variant (cinematic/anime/realistic/director/etc.), template_mode (structured vs official), temperature, seed, n_ctx, n_gpu_layers, max_tokens, smart_frames, video_frames, image_max_side - plus thinking_mode. Optional inputs are source_video, reference_video, and reference_image_0/1/2.
Outputs are identical to the Bernini node's:
- enhanced_prompt (STRING) - the finished prompt, wired into whatever sampler or video model you're prompting.
- structured_plan (STRING) - the planning trace from the five-section RULES template.
source_video,reference_video,reference_image_0/1/2- passthroughs, unchanged.
One note on model selection: you need a multimodal GGUF with a matching mmproj for the image/video inputs to do anything. The dropdowns scan ComfyUI/models/clip/ at startup, so restart ComfyUI after dropping files in, or your new model simply won't be listed.
Install
If you already installed the pack for the Bernini node, you're done - this node is already in your node list; you only need to download the Qwen3.5 GGUF into ComfyUI/models/clip/ and restart. Otherwise:
cd ComfyUI/custom_nodes
git clone https://github.com/djdzzzz/ComfyUI-Bernini-PromptEnhancer.git
cd ComfyUI-Bernini-PromptEnhancer
pip install -r requirements.txt
requirements.txt is just llama-cpp-python, torch, numpy and Pillow - the model itself is the download that matters. And it's on the ComfyUI registry, so ComfyUI Manager can install the whole pack by name.
Common issues
The usual pack gotchas apply: model not in the dropdown → restart ComfyUI; OOM → lower n_gpu_layers, n_ctx or image_max_side; slow first run per session → that's the reload-on-every-execution design, normal. With thinking_mode on you'll also hit noticeably longer waits and bigger outputs - it's a debugging tool here, not a quality guarantee. And keep the honest expectation: a 4B prompt enhancer is a convenience that gets you from "rough idea" to "usable prompt," not a replacement for knowing how to prompt your target model. Use it to draft, then take the wheel.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | 1 options: <no .gguf> | |
| mmproj | COMBO | 1 options: <none> | |
| task_type | COMBO | v2v | 13 options: t2v, t2i, v2v, mv2v, i2i, i2v, +7 |
| variant | COMBO | none | 10 options: none, motion (r2v), storyboard (v2v), edit (v2v), cinematic (t2v), anime (t2v), +4 |
| prompt | STRING | — | |
| temperature | FLOAT | 0.600–2 | — |
| repeat_penalty | FLOAT | 1.151–2 | — |
| seed | INT | 00–2147483647 | — |
| n_ctx | INT | 81922048–32768 | — |
| n_gpu_layers | INT | -1-1–200 | — |
| max_tokens | INT | 4096128–16384 | — |
| video_frames | INT | 31–16 | — |
| image_max_side | INT | 5120–4096 | — |
| smart_frames | BOOLEAN | false | — |
| thinking_mode | BOOLEAN | false | — |
| source_videoopt | IMAGE | — | |
| reference_videoopt | IMAGE | — | |
| reference_image_0opt | IMAGE | — | |
| reference_image_1opt | IMAGE | — | |
| reference_image_2opt | IMAGE | — |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| enhanced_prompt | STRING | — |
| structured_plan | STRING | — |
| source_video | IMAGE | — |
| reference_video | IMAGE | — |
| reference_image_0 | IMAGE | — |
| reference_image_1 | IMAGE | — |
| reference_image_2 | IMAGE | — |