Pattern 1: Base + Refiner
The base model generates a latent at low resolution, the refiner model improves detail:
LoadCheckpoint (base) → CLIPTextEncode → KSampler (base, denoise=1.0)
→ KSampler (refiner, denoise=0.3) → VAEDecode → SaveImage
LoadCheckpoint (refiner) → CLIPTextEncode (refiner)
def build_base_refiner_workflow(prompt: str, negative: str = "",
base_ckpt: str = "sd_xl_base_1.0.safetensors",
refiner_ckpt: str = "sd_xl_refiner_1.0.safetensors",
seed: int = 42) -> dict:
"""Build a base+refiner workflow."""
return {
# Base checkpoint
"1": {"class_type": "CheckpointLoaderSimple",
"inputs": {"ckpt_name": base_ckpt}},
# Refiner checkpoint
"2": {"class_type": "CheckpointLoaderSimple",
"inputs": {"ckpt_name": refiner_ckpt}},
# Positive prompt (base)
"3": {"class_type": "CLIPTextEncode",
"inputs": {"clip": ["1", 1], "text": prompt}},
# Negative prompt (base)
"4": {"class_type": "CLIPTextEncode",
"inputs": {"clip": ["1", 1], "text": negative}},
# Positive prompt (refiner)
"5": {"class_type": "CLIPTextEncode",
"inputs": {"clip": ["2", 1], "text": prompt}},
# Negative prompt (refiner)
"6": {"class_type": "CLIPTextEncode",
"inputs": {"clip": ["2", 1], "text": negative}},
# Empty latent
"7": {"class_type": "EmptyLatentImage",
"inputs": {"width": 1024, "height": 1024, "batch_size": 1}},
# Base KSampler (full denoise)
"8": {"class_type": "KSampler",
"inputs": {"seed": seed, "steps": 25, "cfg": 8.0,
"sampler_name": "dpmpp_2m", "scheduler": "karras",
"denoise": 1.0, "model": ["1", 0],
"positive": ["3", 0], "negative": ["4", 0],
"latent_image": ["7", 0]}},
# Refiner KSampler (low denoise — only refine detail)
"9": {"class_type": "KSampler",
"inputs": {"seed": seed, "steps": 25, "cfg": 8.0,
"sampler_name": "dpmpp_2m", "scheduler": "karras",
"denoise": 0.3, "model": ["2", 0],
"positive": ["5", 0], "negative": ["6", 0],
"latent_image": ["8", 0]}},
# VAE Decode
"10": {"class_type": "VAEDecode",
"inputs": {"samples": ["9", 0], "vae": ["1", 2]}},
# Save
"11": {"class_type": "SaveImage",
"inputs": {"images": ["10", 0], "filename_prefix": "refined"}},
}
Key: The refiner's denoise=0.3 means it only changes 30% of the image — refining detail without altering composition.