π LLM Prompt Preset
The preset editor that keeps your Qwen prompts out of a JSON file
- system_prompt
- user_prompt_template
If you run a Qwen3-VL GGUF locally inside ComfyUI - as a prompt enhancer, an image captioner, a video summarizer - you accumulate a pile of system prompts and user-prompt templates. And until the nightly update of this pack, "managing" that pile meant hand-editing system_prompts_user.json with a text editor and hoping you didn't break the JSON. This node is the fix: it's a preset browser with save/rename/delete buttons living right on the canvas, the front-end for the pack's whole prompt-preset system.
It's the little sibling of the π LLM Config node. Config handles the model parameters (paths, context, sampling); this one handles the words. Select a preset, the node fills in the system prompt and a user-prompt template, and you wire both strings into the main Simple Qwen-VL node. No file editing, no JSON, no restart to test.
How it works
Under the hood there's no inference happening at all - this node never touches the model. It reads the same _system_prompts and _user_prompt_template sections the main node reads, from the pack's config files. The dropdown lists 70+ shipped presets - Tags, Simple/Detailed/Ultra Detailed Description, Cinematic Description, Video Summary, Short Story, JSON structure, Style Identification, and more. Pick one and a bit of JavaScript fetches it from the backend and drops the text into the widgets. Save, Rename and Delete buttons are drawn right on the node, and they write to ComfyUI/user/SimpleQwenVL_configs/system_prompts_user.json through a small HTTP endpoint. Deleting one of the pack's built-in presets doesn't remove it from the base file; it writes a BANNED marker so it disappears from your lists but survives the next update.
One quirk worth knowing: the system_preset dropdown can't be wired to anything. The pack deliberately blocks connecting to that slot - it's a UI control, not a data input. The outputs are the strings.
The inputs that matter
You really only touch three of them:
system_preset- the dropdown. This is where you pick which prompt collection to load.system_prompt- the main system prompt text, loaded from the preset and editable in place. Multiline.user_prompt_template- a template for the user prompt that can hold{variables}, with{user_prompt}as the placeholder for the text you'll actually send.
Both text fields sit in collapsible groups (the π System Prompt and π User Prompt Template booleans just show/hide them), so the node stays compact.
What the outputs wire into
Two STRING outputs, both headed for the main Simple Qwen-VL node:
system_promptβ itssystem_prompt_overrideinput. Supplying that overrides the main node's ownsystem_presetdropdown, so you can drive the prompt from here instead.user_prompt_templateβ itsuser_promptinput. The template placeholders ({user_prompt},{width},{height},{image_num},{frame_num}, β¦) are resolved by the main node - with the right model preset, a template likeDescribe {user_prompt} in the style of a film stillgets the actual text substituted in before the LLM sees it.
Installing it
Same path as the whole pack, which ships more nodes than this one. Either use ComfyUI Manager and search ComfyUI_Simple_Qwen3-VL-gguf, or:
cd ComfyUI/custom_nodes
git clone https://github.com/KLL535/ComfyUI_Simple_Qwen3-VL-gguf
Restart ComfyUI, refresh the frontend (F5). The real dependency hurdle is the pack's runtime, not this node: standard llama-cpp-python doesn't support Qwen3, so the README walks you through installing the JamePeng fork (0.3.17+ for Qwen3-VL, 0.3.30+ for Qwen3.5, 0.3.35+ for Gemma4) - ideally built from source with CUDA. Prebuilt wheels work but may lack the CPU acceleration the author recommends.
Common gotchas
- Wrong file edited. The node reads from three places, in priority order: the
user/config dir (the one the buttons write to), a legacysystem_prompts_user.jsonin the node folder, andsystem_prompts.json(dev-maintained, overwritten on update). Edit the first if you must edit anything - and the UI saves you even from that. - Presets look stale. The dropdown choices are read when the node is created; after you save a new preset you may need to refresh or recreate the node to see it in other nodes' lists.
- Templates doing nothing. Placeholder replacement is off by default for backward compatibility. If
{user_prompt}comes through literally, feedvariablesinto the main node or set"enable_variables": truein its config.
This is a quality-of-life node, and it's a genuinely good one - the exact kind of "stop editing config by hand" convenience that makes a serious local-LLM workflow feel like a tool instead of a hobby.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| system_preset | COMBO | None | Select a prompt preset to load |
| π System Prompt | BOOLEAN | true | Show/hide System Prompt group |
| system_prompt | STRING | Main system prompt. Will be combined with system_prompt_opt if provided. | |
| π User Prompt Template | BOOLEAN | true | Show/hide User Prompt Template group |
| user_prompt_template | STRING | Template for user prompt. Can use {variables}. Will be combined with user_prompt_opt. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| system_prompt | STRING | β |
| user_prompt_template | STRING | β |