Nodes/ComfyUI-PromptGenerator/Prompt Dual-Stream Refiner
ComfyUI Node

Prompt Dual-Stream Refiner

One description in, a positive AND negative prompt out — in a single LLM call

By Limbicnation·Created 9 months ago·Updated 2 months ago· 10
Prompt Dual-Stream Refiner
    • positive_prompt
    • negative_prompt
    prompt
    modelqwen3:8b
    temperature0.7
    top_p0.9
    seed-1
    timeout120

    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 from ollama list, dual-stream/LoRA models first; qwen3:8b, qwen3:4b, llama3.2:latest as 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.

    Categorytext/generation

    Inputs (6)

    NameTypeDefaultDescription
    promptSTRING
    modelCOMBOqwen3:8bSelect Ollama model. Dual-stream/LoRA models appear first.
    temperatureoptFLOAT0.70.1–1
    top_poptFLOAT0.90.1–1
    seedoptINT-1-1–2147483647
    timeoutoptINT12030–600

    Outputs (2)

    NameTypeDescription
    positive_promptSTRING
    negative_promptSTRING