Add FLUX.2-klein multi-reference workflow
This commit is contained in:
@@ -0,0 +1,52 @@
|
|||||||
|
# FLUX.2-klein Multi-Reference 3-Image Workflow
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
Same-day Hugging Face workflow pack for `FLUX.2-klein 9B` with a practical multi-reference graph. This is the kind of reference-control workflow worth watching because it aims at composition and identity control, not just a style demo.
|
||||||
|
|
||||||
|
## Model Family
|
||||||
|
|
||||||
|
- `flux2klein`
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- `imported-only`
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
- Model page: <https://huggingface.co/geceff/Flux2Klein9B-comfyui>
|
||||||
|
- Workflow file: <https://huggingface.co/geceff/Flux2Klein9B-comfyui/raw/main/workflow/Flux2image-reference-api-3image.json>
|
||||||
|
- Original publisher: `geceff`
|
||||||
|
- Date imported: `2026-08-15`
|
||||||
|
|
||||||
|
## Developer notes
|
||||||
|
|
||||||
|
- The source repo ships a full `FLUX.2-klein` ecosystem plus multiple workflow JSONs and packaged weights.
|
||||||
|
- This graph uses three reference images and a `FluxKontextMultiReferenceLatentMethod` node, so it is more focused on practical reference handling than a plain text-to-image template.
|
||||||
|
|
||||||
|
## Our notes
|
||||||
|
|
||||||
|
- Worth testing if you want a more functional FLUX.2-klein reference workflow than the standard edit templates.
|
||||||
|
- The source pack looks broad and somewhat opinionated, so treat it as a workflow donor rather than a clean official baseline.
|
||||||
|
- On an `RTX 3070 8 GB`, expect this to be heavy. It is more of a benchmark or tuned workflow than a comfy default.
|
||||||
|
|
||||||
|
## Required custom nodes
|
||||||
|
|
||||||
|
- `FluxKontextMultiReferenceLatentMethod` or the Comfy/Flux extension that provides it
|
||||||
|
- Current Comfy `FLUX.2-klein` template nodes such as `ResolutionSelector`, `ReferenceLatent`, `ScheduledCFGGuidance`, `ModelSamplingAuraFlow`, `CLIPVisionLoader`, and `unCLIPConditioning`
|
||||||
|
|
||||||
|
## Required model files
|
||||||
|
|
||||||
|
- `Flux2Klein_9B_v4BaseFp8.safetensors`
|
||||||
|
- `Flux2Klein_base-bf16_master_v4.safetensors`
|
||||||
|
- `fulx2vbase-lora-master.safetensors`
|
||||||
|
- `flux-2-klein-9b_extracted_lora_rank_128-fp32.safetensors`
|
||||||
|
- `bfs_head_v1_flux-klein_9b_step3500_rank128.safetensors`
|
||||||
|
- `qwen-3-8b-flux-klein.safetensors`
|
||||||
|
- `flux.2vae-bf16.safetensors`
|
||||||
|
- `clip_vision_g.safetensors`
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- The workflow file still uses `example.png` placeholders for the image inputs.
|
||||||
|
- This is a promising reference-control donor, not a proven replacement for the current `FLUX.2-klein` edit masters.
|
||||||
@@ -0,0 +1,568 @@
|
|||||||
|
{
|
||||||
|
"1": {
|
||||||
|
"inputs": {
|
||||||
|
"text": "",
|
||||||
|
"clip": [
|
||||||
|
"2",
|
||||||
|
1
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "CLIPTextEncode",
|
||||||
|
"_meta": {
|
||||||
|
"title": "CLIP Text Encode (Prompt)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"inputs": {
|
||||||
|
"lora_name": "fulx2vbase-lora-master.safetensors",
|
||||||
|
"strength_model": 1,
|
||||||
|
"strength_clip": 1,
|
||||||
|
"model": [
|
||||||
|
"6",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"clip": [
|
||||||
|
"5",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "LoraLoader",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Load LoRA (Model and CLIP)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"inputs": {
|
||||||
|
"image": "example.png"
|
||||||
|
},
|
||||||
|
"class_type": "LoadImage",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Load Image"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"inputs": {
|
||||||
|
"clip_name": "qwen-3-8b-flux-klein.safetensors",
|
||||||
|
"type": "flux2",
|
||||||
|
"device": "default"
|
||||||
|
},
|
||||||
|
"class_type": "CLIPLoader",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Load CLIP"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"inputs": {
|
||||||
|
"unet_name": "diffusion_models/Flux2Klein_base-bf16_master_v4.safetensors",
|
||||||
|
"weight_dtype": "default"
|
||||||
|
},
|
||||||
|
"class_type": "UNETLoader",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Load Diffusion Model"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"7": {
|
||||||
|
"inputs": {
|
||||||
|
"lora_name": "flux-2-klein-9b_extracted_lora_rank_128-fp32.safetensors",
|
||||||
|
"strength_model": 0.75,
|
||||||
|
"model": [
|
||||||
|
"2",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "LoraLoaderModelOnly",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Load LoRA"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"8": {
|
||||||
|
"inputs": {
|
||||||
|
"lora_name": "bfs_head_v1_flux-klein_9b_step3500_rank128.safetensors",
|
||||||
|
"strength_model": 0.75,
|
||||||
|
"model": [
|
||||||
|
"7",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "LoraLoaderModelOnly",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Load LoRA"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"10": {
|
||||||
|
"inputs": {
|
||||||
|
"vae_name": "fulx2vae-master.safetensors"
|
||||||
|
},
|
||||||
|
"class_type": "VAELoader",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Load VAE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"18": {
|
||||||
|
"inputs": {
|
||||||
|
"noise": [
|
||||||
|
"19",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"guider": [
|
||||||
|
"98",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"sampler": [
|
||||||
|
"20",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"sigmas": [
|
||||||
|
"105",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"latent_image": [
|
||||||
|
"32",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "SamplerCustomAdvanced",
|
||||||
|
"_meta": {
|
||||||
|
"title": "SamplerCustomAdvanced"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"19": {
|
||||||
|
"inputs": {
|
||||||
|
"noise_seed": 513383871972281
|
||||||
|
},
|
||||||
|
"class_type": "RandomNoise",
|
||||||
|
"_meta": {
|
||||||
|
"title": "RandomNoise"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"20": {
|
||||||
|
"inputs": {
|
||||||
|
"sampler_name": "euler"
|
||||||
|
},
|
||||||
|
"class_type": "KSamplerSelect",
|
||||||
|
"_meta": {
|
||||||
|
"title": "KSamplerSelect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"23": {
|
||||||
|
"inputs": {
|
||||||
|
"samples": [
|
||||||
|
"18",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"vae": [
|
||||||
|
"10",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "VAEDecode",
|
||||||
|
"_meta": {
|
||||||
|
"title": "VAE Decode"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"24": {
|
||||||
|
"inputs": {
|
||||||
|
"images": [
|
||||||
|
"23",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "PreviewImage",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Preview Image"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"30": {
|
||||||
|
"inputs": {
|
||||||
|
"image": "example.png"
|
||||||
|
},
|
||||||
|
"class_type": "LoadImage",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Load Image"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"32": {
|
||||||
|
"inputs": {
|
||||||
|
"width": [
|
||||||
|
"91",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"height": [
|
||||||
|
"91",
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"batch_size": 1
|
||||||
|
},
|
||||||
|
"class_type": "EmptyLatentImage",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Empty Latent Image"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"34": {
|
||||||
|
"inputs": {
|
||||||
|
"text": "text.UI.HUD.logo,watermark,bad anatomy,bad finger,artifact,blurry,censored,",
|
||||||
|
"clip": [
|
||||||
|
"5",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "CLIPTextEncode",
|
||||||
|
"_meta": {
|
||||||
|
"title": "CLIP Text Encode (Prompt)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"44": {
|
||||||
|
"inputs": {
|
||||||
|
"shift": 3,
|
||||||
|
"model": [
|
||||||
|
"8",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "ModelSamplingAuraFlow",
|
||||||
|
"_meta": {
|
||||||
|
"title": "ModelSamplingAuraFlow"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"50": {
|
||||||
|
"inputs": {
|
||||||
|
"image": "example.png"
|
||||||
|
},
|
||||||
|
"class_type": "LoadImage",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Load Image"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"91": {
|
||||||
|
"inputs": {
|
||||||
|
"aspect_ratio": "16:9 (Widescreen)",
|
||||||
|
"megapixels": 1,
|
||||||
|
"multiple": 16
|
||||||
|
},
|
||||||
|
"class_type": "ResolutionSelector",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Resolution Selector"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"98": {
|
||||||
|
"inputs": {
|
||||||
|
"cfg": 2,
|
||||||
|
"start_percent": 0,
|
||||||
|
"end_percent": 0.9,
|
||||||
|
"model": [
|
||||||
|
"44",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"positive": [
|
||||||
|
"37:51",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"negative": [
|
||||||
|
"37:46",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "ScheduledCFGGuidance",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Scheduled CFG Guidance"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"105": {
|
||||||
|
"inputs": {
|
||||||
|
"scheduler": "simple",
|
||||||
|
"steps": 4,
|
||||||
|
"denoise": 1,
|
||||||
|
"model": [
|
||||||
|
"44",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "BasicScheduler",
|
||||||
|
"_meta": {
|
||||||
|
"title": "BasicScheduler"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"42:13": {
|
||||||
|
"inputs": {
|
||||||
|
"clip_name": "clip_vision_g.safetensors"
|
||||||
|
},
|
||||||
|
"class_type": "CLIPVisionLoader",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Load CLIP Vision"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"42:27": {
|
||||||
|
"inputs": {
|
||||||
|
"crop": "none",
|
||||||
|
"clip_vision": [
|
||||||
|
"42:13",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"image": [
|
||||||
|
"30",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "CLIPVisionEncode",
|
||||||
|
"_meta": {
|
||||||
|
"title": "CLIP Vision Encode1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"37:36": {
|
||||||
|
"inputs": {
|
||||||
|
"pixels": [
|
||||||
|
"30",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"vae": [
|
||||||
|
"10",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "VAEEncode",
|
||||||
|
"_meta": {
|
||||||
|
"title": "VAE Encode1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"42:48": {
|
||||||
|
"inputs": {
|
||||||
|
"crop": "none",
|
||||||
|
"clip_vision": [
|
||||||
|
"42:13",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"image": [
|
||||||
|
"50",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "CLIPVisionEncode",
|
||||||
|
"_meta": {
|
||||||
|
"title": "CLIP Vision Encode2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"37:45": {
|
||||||
|
"inputs": {
|
||||||
|
"pixels": [
|
||||||
|
"50",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"vae": [
|
||||||
|
"10",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "VAEEncode",
|
||||||
|
"_meta": {
|
||||||
|
"title": "VAE Encode2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"42:16": {
|
||||||
|
"inputs": {
|
||||||
|
"crop": "none",
|
||||||
|
"clip_vision": [
|
||||||
|
"42:13",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"image": [
|
||||||
|
"3",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "CLIPVisionEncode",
|
||||||
|
"_meta": {
|
||||||
|
"title": "CLIP Vision Encode"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"37:35": {
|
||||||
|
"inputs": {
|
||||||
|
"pixels": [
|
||||||
|
"3",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"vae": [
|
||||||
|
"10",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "VAEEncode",
|
||||||
|
"_meta": {
|
||||||
|
"title": "VAE Encode"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"42:43": {
|
||||||
|
"inputs": {
|
||||||
|
"conditioning": [
|
||||||
|
"34",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "ConditioningZeroOut",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Conditioning Zero Out"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"37:40": {
|
||||||
|
"inputs": {
|
||||||
|
"conditioning": [
|
||||||
|
"42:43",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"latent": [
|
||||||
|
"37:35",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "ReferenceLatent",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Set Reference Latent"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"42:17": {
|
||||||
|
"inputs": {
|
||||||
|
"strength": 0.5,
|
||||||
|
"noise_augmentation": 0,
|
||||||
|
"conditioning": [
|
||||||
|
"1",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"clip_vision_output": [
|
||||||
|
"42:16",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "unCLIPConditioning",
|
||||||
|
"_meta": {
|
||||||
|
"title": "unCLIPConditioning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"37:41": {
|
||||||
|
"inputs": {
|
||||||
|
"conditioning": [
|
||||||
|
"37:40",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"latent": [
|
||||||
|
"37:36",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "ReferenceLatent",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Set Reference Latent1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"42:28": {
|
||||||
|
"inputs": {
|
||||||
|
"strength": 0.5,
|
||||||
|
"noise_augmentation": 0,
|
||||||
|
"conditioning": [
|
||||||
|
"42:17",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"clip_vision_output": [
|
||||||
|
"42:27",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "unCLIPConditioning",
|
||||||
|
"_meta": {
|
||||||
|
"title": "unCLIPConditioning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"37:46": {
|
||||||
|
"inputs": {
|
||||||
|
"conditioning": [
|
||||||
|
"37:41",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"latent": [
|
||||||
|
"37:45",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "ReferenceLatent",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Set Reference Latent2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"42:49": {
|
||||||
|
"inputs": {
|
||||||
|
"strength": 0.5,
|
||||||
|
"noise_augmentation": 0,
|
||||||
|
"conditioning": [
|
||||||
|
"42:28",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"clip_vision_output": [
|
||||||
|
"42:48",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "unCLIPConditioning",
|
||||||
|
"_meta": {
|
||||||
|
"title": "unCLIPConditioning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"37:38": {
|
||||||
|
"inputs": {
|
||||||
|
"conditioning": [
|
||||||
|
"42:49",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"latent": [
|
||||||
|
"37:35",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "ReferenceLatent",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Set Reference Latent"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"37:39": {
|
||||||
|
"inputs": {
|
||||||
|
"conditioning": [
|
||||||
|
"37:38",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"latent": [
|
||||||
|
"37:36",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "ReferenceLatent",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Set Reference Latent1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"37:47": {
|
||||||
|
"inputs": {
|
||||||
|
"conditioning": [
|
||||||
|
"37:39",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"latent": [
|
||||||
|
"37:45",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "ReferenceLatent",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Set Reference Latent5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"37:51": {
|
||||||
|
"inputs": {
|
||||||
|
"reference_latents_method": "index",
|
||||||
|
"conditioning": [
|
||||||
|
"37:47",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "FluxKontextMultiReferenceLatentMethod",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Edit Model Reference Method"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user