Prompt Dual-Stream Refiner
One description in, a positive AND negative prompt out — in a single LLM call
- positive_prompt
- negative_prompt
Prompt Dual-Stream Refiner is the pack's power move: you feed it a raw description and it returns both the positive prompt and the negative prompt from a single generation pass. Instead of running the generator and then the negative node separately, you get the complete pair in one call. It's also the most niche node here - it was built around a dedicated fine-tuned model the author publishes - so let's be clear-eyed about when it earns its place.
How it works
The node sends your description to the LLM with a strict instruction: respond in exactly this format, no explanations -
Positive: <positive prompt>
Negative: <negative prompt>
Then it parses the response. The parsing is deliberately careful: it strips reasoning blocks first (so a "Negative:" mention inside Qwen3's thinking can't cause a mis-split), looks for the Negative: label anchored at a line start (so "negative space" appearing mid-sentence in the positive prompt doesn't trigger a split), and cuts everything after it off as the negative. Whatever's before becomes the positive, minus the leading "Positive:" label. The format is imposed by the instruction prompt, not baked into a specific model - which is why it works with any chat-capable Ollama model, not just the special one.
The special one is where it gets interesting. The pack ships a config/Modelfile.dualstream that registers a Q8 GGUF of the author's Limbicnation/qwen2-5-7b-dual-stream-prompt-lora (a Qwen2.5-7B LoRA trained to emit positive/negative pairs) with Ollama. Setting that up is real work:
# 1. Download the pre-merged GGUF into the pack folder
huggingface-cli download Limbicnation/qwen2-5-7b-dual-stream-prompt-lora \
qwen2-5-7b-dual-stream-q8.gguf --local-dir .
# 2. Register it with Ollama
ollama create limbicnation-dualstream-prompt -f config/Modelfile.dualstream
# 3. Sanity-check the output format before trusting the parser
ollama run limbicnation-dualstream-prompt "a mystical forest at twilight"
That's a ~7 GB Q8 download plus a manual Ollama registration step, and the model dropdown is designed to surface it (anything with "prompt" in the name sorts to the top). If you skip all of it and just use qwen3:8b, the node still works fine - the format is enforced by the instruction, remember.
Inputs and outputs
prompt(required) - the raw description, exactly what you'd type into the generator.model- dropdown populated fromollama list, dual-stream/LoRA models first;qwen3:8b,qwen3:4b,llama3.2:latestas defaults.temperature(0.7),top_p(0.9),seed(-1 = random),timeout(120s).
Two outputs - this is the node's signature:
positive_prompt(STRING) → CLIP Text Encode (Positive)negative_prompt(STRING) → CLIP Text Encode (Negative)
Install and the honest take
Same pack install (git clone + pip install -r requirements.txt, or Manager → "Prompt Generator"), and the usual Ollama prerequisites.
Should you use it? It's the fastest path to a complete, matched positive/negative pair in one call, and for batch workflows that's genuinely valuable. But be honest about the trade: if you're on a guidance-distilled model running at CFG 1, that carefully generated negative is inert (no unconditional pass exists), and the whole dual-stream design loses its point. And if you're not batching, running the plain Generator plus the Negative Prompt node separately gives you more control over each half for the same Ollama setup. Reach for this when you want the pair fast and don't plan to hand-tune either half - it's the one-click order, not the fine-dining option.
The troubleshooting to know: if the split ever looks wrong, run the model manually and check it actually emits Positive:/Negative: lines - the pack's own docs say to adjust the instruction prompt if a custom model's trained format differs.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| model | COMBO | qwen3:8b | Select Ollama model. Dual-stream/LoRA models appear first. |
| temperatureopt | FLOAT | 0.70.1–1 | — |
| top_popt | FLOAT | 0.90.1–1 | — |
| seedopt | INT | -1-1–2147483647 | — |
| timeoutopt | INT | 12030–600 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive_prompt | STRING | — |
| negative_prompt | STRING | — |