feat: add Flux2 support — CLIP type, model sampling, and override

- Add "flux2" to clip_types and dual_clip_types lists so CLIPType.FLUX2
  is correctly passed to ComfyUI's text encoder loader
- Add "flux2" model_sampling_override option in Builder UI dropdown
- Implement ModelSamplingFlux2 handler using fixed shift (default 2.02,
  matching ComfyUI's Flux2 supported_models.py)
- Handle "flux2" in config_builder_node.py config generation with
  default shift value

Users with Flux2 models (Klein, etc.) should set:
- CLIP Type: flux2
- Model Sampling Override: Flux2
- For best results: enable Advanced Sampling with Flux2 Scheduler

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jason Hoku
2026-03-20 20:50:46 -07:00
co-authored by Claude Opus 4.6
parent 5fc90097dc
commit 0691c26d77
2 changed files with 16 additions and 2 deletions
+4 -2
View File
@@ -644,6 +644,8 @@ class UltimateConfigBuilder:
if model_sampling_override == "flux":
config["model_sampling_flux_max_shift"] = model_sampling_flux_max_shift
config["model_sampling_flux_base_shift"] = model_sampling_flux_base_shift
elif model_sampling_override == "flux2":
config["model_sampling_shift"] = model_sampling_shift if model_sampling_shift else "2.02"
else:
config["model_sampling_shift"] = model_sampling_shift
config["use_advanced_sampling"] = use_advanced_sampling or False
@@ -1057,10 +1059,10 @@ async def get_model_lists_endpoint(request):
clip_types = [
"stable_diffusion", "stable_cascade", "sd3", "stable_audio",
"mochi", "ltxv", "pixart", "cosmos", "lumina2", "wan",
"hidream", "chroma", "ace", "flux"
"hidream", "chroma", "ace", "flux", "flux2"
]
dual_clip_types = [
"sdxl", "sd3", "flux", "hunyuan_video", "hidream",
"sdxl", "sd3", "flux", "flux2", "hunyuan_video", "hidream",
"hunyuan_image", "hunyuan_video_15"
]
+12
View File
@@ -129,6 +129,18 @@ def generate_image(
patched_model.add_object_patch("model_sampling", model_sampling)
print(f"[GridTester] 🔧 Applied ModelSamplingFlux (max_shift={max_s}, base_shift={base_s}, computed_shift={shift:.4f})")
elif model_sampling_override == "flux2":
# Flux2: uses ModelSamplingFlux with fixed shift (default 2.02, matching ComfyUI's Flux2 supported_models)
sampling_base = comfy.model_sampling.ModelSamplingFlux
sampling_type = comfy.model_sampling.CONST
class ModelSamplingAdvanced(sampling_base, sampling_type):
pass
shift = float(model_sampling_shift) if model_sampling_shift else 2.02
model_sampling = ModelSamplingAdvanced(patched_model.model.model_config)
model_sampling.set_parameters(shift=shift)
patched_model.add_object_patch("model_sampling", model_sampling)
print(f"[GridTester] 🔧 Applied ModelSamplingFlux2 (shift={shift})")
# === Flux Guidance ===
# Modify positive conditioning with guidance value (used by Flux 1 models)
if flux_guidance_value and float(flux_guidance_value) > 0: