Files
limbicnation ebbb25a2a3 Add dual-stream prompt refiner node
Add PromptDualStreamRefinerNode that produces a positive and negative
prompt pair in a single pass via Ollama, intended for the shipped Q8
GGUF of qwen2-5-7b-dual-stream-prompt-lora. Reuses OllamaClient for
streaming, timeouts, progress, and llama-runner crash handling, and
parses Positive/Negative output defensively across label variants.

Includes config/Modelfile.dualstream, unit tests, node registration,
and a corrected implementation plan replacing the invalid local
transformers/PEFT approach.
2026-06-10 22:10:16 +02:00

52 lines
2.3 KiB
Python

"""
ComfyUI Prompt Generator Node
Generate Stable Diffusion prompts using Qwen3-8B via Ollama
"""
try:
from .nodes.negative_prompt_node import NegativePromptNode
from .nodes.prompt_combiner_node import PromptCombinerNode
from .nodes.prompt_dual_stream_refiner_node import PromptDualStreamRefinerNode
from .nodes.prompt_generator_node import PromptGeneratorNode
from .nodes.prompt_refiner_node import PromptRefinerNode
from .nodes.style_applier_node import StyleApplierNode
except ImportError:
# Fallback for test environments where ComfyUI isn't present
from nodes.negative_prompt_node import NegativePromptNode
from nodes.prompt_combiner_node import PromptCombinerNode
from nodes.prompt_dual_stream_refiner_node import PromptDualStreamRefinerNode
from nodes.prompt_generator_node import PromptGeneratorNode
from nodes.prompt_refiner_node import PromptRefinerNode
from nodes.style_applier_node import StyleApplierNode
NODE_CLASS_MAPPINGS = {
"Limbicnation_PromptGenerator": PromptGeneratorNode,
"Limbicnation_StyleApplier": StyleApplierNode,
"Limbicnation_PromptRefiner": PromptRefinerNode,
"Limbicnation_PromptDualStreamRefiner": PromptDualStreamRefinerNode,
"Limbicnation_NegativePrompt": NegativePromptNode,
"Limbicnation_PromptCombiner": PromptCombinerNode,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"Limbicnation_PromptGenerator": "Prompt Generator (Qwen)",
"Limbicnation_StyleApplier": "Style Applier",
"Limbicnation_PromptRefiner": "Prompt Refiner",
"Limbicnation_PromptDualStreamRefiner": "Prompt Dual-Stream Refiner",
"Limbicnation_NegativePrompt": "Negative Prompt Generator",
"Limbicnation_PromptCombiner": "Prompt Combiner",
}
# Fail loudly at import time if mapping drift occurs — silent omission would just
# remove nodes from the ComfyUI menu without any error in the console.
_missing_display = set(NODE_CLASS_MAPPINGS) - set(NODE_DISPLAY_NAME_MAPPINGS)
_orphan_display = set(NODE_DISPLAY_NAME_MAPPINGS) - set(NODE_CLASS_MAPPINGS)
if _missing_display or _orphan_display:
raise RuntimeError(
"Node mapping mismatch — "
f"missing display names: {sorted(_missing_display)}; "
f"orphan display names: {sorted(_orphan_display)}"
)
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"]