π LLM Dual Prompt
The Two Text Boxes the Runners Actually Need
- system_prompt
- user_prompt
π LLM Dual Prompt looks suspiciously like a do-nothing node, and that's the honest review: it passes both strings straight through untouched. The code is a passthrough - type in system_prompt, type in user_prompt, and you get them back out the other side. What it actually does is fix a real ergonomics problem in this pack.
The π Gemini and π OpenAI API Runners both declare their system_prompt and user_prompt inputs with forceInput: true in the source. That means the runners don't want you typing into their widgets - they expect the text to come from another node's output. This node exists to be that other node. You get two clean, labeled, multiline text boxes on the canvas, and their outputs (system_prompt, user_prompt, both STRING) wire straight into the corresponding runner inputs. It's the pack's README-recommended way to structure your prompts, and it's genuinely nicer than hunting for a bare text node that outputs the right type.
Why the system/user split actually matters here
The distinction isn't cosmetic, and this pack proves it. Read the runners' source and you'll see the two roles are treated differently depending on the model:
- Gemini's Gemma models and OpenAI's o1 family don't accept a real system instruction, so those runners fold your system prompt into the user message as an
[System Instruction]block. Your system prompt still reaches the model - it just arrives in the same message. - Everything else gets it as a proper system message, which is where system prompts do their best work (setting the model's role, constraints, and output format).
So the node isn't teaching you anything new - but it does make you write both fields explicitly, which is the cheapest way to get decent LLM results in the graph. A good system prompt here is the difference between a model that follows your format and one that improvises.
Setup
Defaults: system_prompt starts as "You are a helpful AI assistant." and user_prompt as empty - both fine starting points. No other settings, no model, no API call. It runs instantly, costs nothing, and works with zero configuration.
Install
Part of ComfyUI-Universal-LLM-Suite, so the install is the pack's: ComfyUI Manager β search "Universal LLM Suite", or clone into custom_nodes:
cd ComfyUI/custom_nodes/
git clone https://github.com/alice-ai-wonder/ComfyUI-Universal-LLM-Suite
Restart and the pack auto-installs its Python deps (google-genai, openai, librosa) on boot - this node itself needs none of them, but the pack loads them anyway.
When you'd skip it
If you already have a prompt-building or text-formatting node feeding the runners - a wildcard processor, a template composer, whatever - Dual Prompt is redundant; just wire that into the runner's inputs instead. It earns its place when you want the simple two-box workflow or a visual reminder that "assistant's role" and "your instruction" are separate things. It's also handy as a reference: keep the model's persona and your current task in one small node and you can read the whole workflow's intent at a glance.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| system_prompt | STRING | You are a helpful AI assistant. | β |
| user_prompt | STRING | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| system_prompt | STRING | β |
| user_prompt | STRING | β |