From c9f39e7f2f19d88acb6e80f277b14352e2dc2182 Mon Sep 17 00:00:00 2001 From: Morpheus Date: Sat, 15 Aug 2026 18:06:19 +0000 Subject: [PATCH] Add FLUX.2-klein multi-reference workflow --- .../README.md | 52 ++ .../workflow.json | 568 ++++++++++++++++++ 2 files changed, 620 insertions(+) create mode 100644 models/flux2klein/geceff-flux2klein9b-multiref-3image/README.md create mode 100644 models/flux2klein/geceff-flux2klein9b-multiref-3image/workflow.json diff --git a/models/flux2klein/geceff-flux2klein9b-multiref-3image/README.md b/models/flux2klein/geceff-flux2klein9b-multiref-3image/README.md new file mode 100644 index 0000000..cd723b4 --- /dev/null +++ b/models/flux2klein/geceff-flux2klein9b-multiref-3image/README.md @@ -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: +- Workflow file: +- 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. diff --git a/models/flux2klein/geceff-flux2klein9b-multiref-3image/workflow.json b/models/flux2klein/geceff-flux2klein9b-multiref-3image/workflow.json new file mode 100644 index 0000000..6c21644 --- /dev/null +++ b/models/flux2klein/geceff-flux2klein9b-multiref-3image/workflow.json @@ -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" + } + } +} \ No newline at end of file