[Diffusion] migrate the whole _register_configs from registry.py to the model own config file (#40475)

This commit is contained in:
ronnie_zheng
2026-09-21 20:45:53 +03:00
committed by GitHub
parent 7a6191c4b9
commit e6931ca889
32 changed files with 936 additions and 857 deletions
@@ -202,3 +202,24 @@ class Cosmos3Config(PipelineConfig):
keep_resident_min_available_gb=threshold_gb,
keep_resident_components=("dit", "vae"),
)
def register():
from sglang.multimodal_gen.configs.sample.cosmos3 import (
Cosmos3SamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=Cosmos3SamplingParams,
pipeline_config_cls=Cosmos3Config,
hf_model_paths=[
"nvidia/Cosmos3-Nano",
"nvidia/Cosmos3-Nano-Policy-DROID",
"nvidia/Cosmos3-Super",
"nvidia/Cosmos3-Super-Text2Image",
"nvidia/Cosmos3-Super-Image2Video",
"nvidia/Cosmos3-Edge",
],
model_detectors=[lambda hf_id: "cosmos3omni" in hf_id.lower()],
)
@@ -258,3 +258,22 @@ class ErnieImagePipelineConfig(ImagePipelineConfig):
def post_denoising_loop(self, latents, batch):
return latents
def register():
from sglang.multimodal_gen.configs.sample.ernie_image import (
ErnieImageSamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=ErnieImageSamplingParams,
pipeline_config_cls=ErnieImagePipelineConfig,
hf_model_paths=[
"baidu/ERNIE-Image",
"baidu/ERNIE-Image-Turbo",
],
model_detectors=[
lambda hf_id: "ernie-image" in hf_id.lower(),
],
)
@@ -823,3 +823,61 @@ class Flux2KleinBasePipelineConfig(Flux2KleinPipelineConfig):
txt_seq_lens,
)
}
def register():
from sglang.multimodal_gen.configs.sample.flux import (
Flux2KleinBaseSamplingParams,
Flux2KleinSamplingParams,
Flux2SamplingParams,
FluxSamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=FluxSamplingParams,
pipeline_config_cls=FluxPipelineConfig,
hf_model_paths=[
"black-forest-labs/FLUX.1-dev",
],
model_detectors=[lambda hf_id: "flux.1" in hf_id.lower()],
)
register_configs(
sampling_param_cls=Flux2KleinSamplingParams,
pipeline_config_cls=Flux2KleinPipelineConfig,
hf_model_paths=[
"black-forest-labs/FLUX.2-klein-4B",
"black-forest-labs/FLUX.2-klein-9B",
],
model_detectors=[
lambda hf_id: (
("flux.2-klein" in hf_id.lower() or "flux2-klein" in hf_id.lower())
and "base" not in hf_id.lower()
)
],
)
register_configs(
sampling_param_cls=Flux2KleinBaseSamplingParams,
pipeline_config_cls=Flux2KleinBasePipelineConfig,
hf_model_paths=[
"black-forest-labs/FLUX.2-klein-base-4B",
"black-forest-labs/FLUX.2-klein-base-9B",
],
model_detectors=[
lambda hf_id: (
("flux.2-klein" in hf_id.lower() or "flux2-klein" in hf_id.lower())
and "base" in hf_id.lower()
)
],
)
register_configs(
sampling_param_cls=Flux2SamplingParams,
pipeline_config_cls=Flux2PipelineConfig,
hf_model_paths=[
"black-forest-labs/FLUX.2-dev",
"black-forest-labs/FLUX.2-dev-NVFP4",
],
model_detectors=[
lambda hf_id: "flux.2" in hf_id.lower() and "klein" not in hf_id.lower()
],
)
@@ -118,3 +118,16 @@ class GlmImagePipelineConfig(SpatialImagePipelineConfig):
def post_decoding(self, frames, server_args):
return self.image_processor.postprocess(frames, output_type="latent")
def register():
from sglang.multimodal_gen.configs.sample.glmimage import (
GlmImageSamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=GlmImageSamplingParams,
pipeline_config_cls=GlmImagePipelineConfig,
model_detectors=[lambda hf_id: "glm-image" in hf_id.lower()],
)
@@ -128,3 +128,41 @@ class HeliosDistilledConfig(HeliosT2VConfig):
pyramid_num_inference_steps_list: list[int] = field(
default_factory=lambda: [10, 10, 10]
)
def register():
from sglang.multimodal_gen.configs.sample.helios import (
HeliosDistilledSamplingParams,
HeliosMidSamplingParams,
HeliosT2VSamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=HeliosT2VSamplingParams,
pipeline_config_cls=HeliosT2VConfig,
hf_model_paths=[
"BestWishYsh/Helios-Base",
],
model_detectors=[
lambda hf_id: (
"helios" in hf_id.lower()
and "mid" not in hf_id.lower()
and "distill" not in hf_id.lower()
)
],
)
register_configs(
sampling_param_cls=HeliosMidSamplingParams,
pipeline_config_cls=HeliosMidConfig,
hf_model_paths=[
"BestWishYsh/Helios-Mid",
],
)
register_configs(
sampling_param_cls=HeliosDistilledSamplingParams,
pipeline_config_cls=HeliosDistilledConfig,
hf_model_paths=[
"BestWishYsh/Helios-Distilled",
],
)
@@ -169,3 +169,27 @@ class FastHunyuanConfig(HunyuanConfig):
keep_resident_min_available_gb=60,
keep_resident_components=("dit", "vae"),
)
def register():
from sglang.multimodal_gen.configs.sample.hunyuan import (
FastHunyuanSamplingParam,
HunyuanSamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=HunyuanSamplingParams,
pipeline_config_cls=HunyuanConfig,
hf_model_paths=[
"hunyuanvideo-community/HunyuanVideo",
],
model_detectors=[lambda hf_id: "hunyuanvideo" in hf_id.lower()],
)
register_configs(
sampling_param_cls=FastHunyuanSamplingParam,
pipeline_config_cls=FastHunyuanConfig,
hf_model_paths=[
"FastVideo/FastHunyuan-diffusers",
],
)
@@ -78,3 +78,19 @@ class Hunyuan3D2PipelineConfig(PipelineConfig):
latent_shape = self.vae_config.arch_config.latent_shape
shape = (batch_size, *latent_shape)
return shape
def register():
from sglang.multimodal_gen.configs.sample.hunyuan3d import (
Hunyuan3DSamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=Hunyuan3DSamplingParams,
pipeline_config_cls=Hunyuan3D2PipelineConfig,
hf_model_paths=[
"tencent/Hunyuan3D-2",
],
model_detectors=[lambda hf_id: "hunyuan3d" in hf_id.lower()],
)
@@ -308,3 +308,39 @@ class Ideogram4PipelineConfig(ImagePipelineConfig):
@dataclass
class Ideogram4DistilledPipelineConfig(Ideogram4PipelineConfig):
dit_config: DiTConfig = field(default_factory=Ideogram4DistilledDiTConfig)
def register():
from sglang.multimodal_gen.configs.sample.ideogram import (
Ideogram4FastSamplingParams,
Ideogram4InstantSamplingParams,
Ideogram4SamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=Ideogram4FastSamplingParams,
pipeline_config_cls=Ideogram4DistilledPipelineConfig,
hf_model_paths=["fal/ideogram-v4-fast"],
)
register_configs(
sampling_param_cls=Ideogram4InstantSamplingParams,
pipeline_config_cls=Ideogram4DistilledPipelineConfig,
hf_model_paths=["fal/ideogram-v4-instant"],
)
register_configs(
sampling_param_cls=Ideogram4SamplingParams,
pipeline_config_cls=Ideogram4PipelineConfig,
hf_model_paths=[
"ideogram-ai/ideogram-4-fp8",
"ideogram-ai/ideogram-4-nf4",
"Comfy-Org/Ideogram-4",
],
model_detectors=[
lambda hf_id: "ideogram4pipeline" in hf_id.lower(),
lambda hf_id: "ideogram-4-fp8" in hf_id.lower(),
lambda hf_id: "ideogram-4-nf4" in hf_id.lower(),
lambda hf_id: "comfy-org/ideogram-4" in hf_id.lower(),
lambda hf_id: "comfy-org--ideogram-4" in hf_id.lower(),
],
)
@@ -58,3 +58,24 @@ class JoyEchoPipelineConfig(LTX2PipelineConfig):
video_memory_frame_selection_mode: str = "center"
late_layer_ratio: float = 0.7
def register():
from sglang.multimodal_gen.configs.sample.joy_echo import (
JoyEchoSamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=JoyEchoSamplingParams,
pipeline_config_cls=JoyEchoPipelineConfig,
hf_model_paths=[
"jdopensource/JoyAI-Echo",
],
model_detectors=[
lambda hf_id: (
("joy-echo" in hf_id.lower() or "joyai-echo" in hf_id.lower())
and "image-edit" not in hf_id.lower()
),
],
)
@@ -428,3 +428,21 @@ class JoyImageEditPipelineConfig(ImagePipelineConfig):
cond_norm = torch.norm(noise_pred_cond, dim=2, keepdim=True)
noise_norm = torch.norm(noise_pred, dim=2, keepdim=True).clamp_min(1e-12)
return noise_pred * (cond_norm / noise_norm)
def register():
from sglang.multimodal_gen.configs.sample.joy_image import (
JoyImageEditSamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=JoyImageEditSamplingParams,
pipeline_config_cls=JoyImageEditPipelineConfig,
hf_model_paths=[
"jdopensource/JoyAI-Image-Edit-Diffusers",
],
model_detectors=[
lambda hf_id: "joyai-image-edit" in hf_id.lower(),
],
)
@@ -163,3 +163,17 @@ class Krea2PipelineConfig(ImagePipelineConfig):
)
latents = latents.reshape(batch_size, channels // (2 * 2), 1, height, width)
return latents
def register():
from sglang.multimodal_gen.configs.sample.krea2 import (
Krea2SamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=Krea2SamplingParams,
pipeline_config_cls=Krea2PipelineConfig,
hf_model_paths=["krea/Krea-2"],
model_detectors=[lambda hf_id: "krea-2" in hf_id.lower()],
)
@@ -84,3 +84,18 @@ class LingBotVideoMoEPipelineConfig(PipelineConfig):
1, -1, 1, 1, 1
)
return 1.0 / std, mean
def register():
from sglang.multimodal_gen.configs.sample.lingbot_video_moe import (
LingBotVideoMoESamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=LingBotVideoMoESamplingParams,
pipeline_config_cls=LingBotVideoMoEPipelineConfig,
model_detectors=[
lambda hf_id: "lingbot-video-moe" in hf_id.lower(),
],
)
@@ -449,3 +449,26 @@ class LingBotWorldV2CausalDMDConfig(LingBotWorldCausalDMDConfig):
dmd_denoising_steps: list[int] | None = field(
default_factory=lambda: [1000, 750, 500, 250]
)
def register():
from sglang.multimodal_gen.configs.sample.lingbot_world import (
LingBotWorldSamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=LingBotWorldSamplingParams,
pipeline_config_cls=LingBotWorldCausalDMDConfig,
hf_model_paths=[
"IPostYellow/lingbot-world-fast-diffusers",
"robbyant/lingbot-world-fast-diffusers",
],
)
register_configs(
sampling_param_cls=LingBotWorldSamplingParams,
pipeline_config_cls=LingBotWorldV2CausalDMDConfig,
hf_model_paths=[
"robbyant/lingbot-world-v2-14b-causal-fast-diffusers",
],
)
@@ -604,3 +604,52 @@ class LongCatImageEditPipelineConfig(LongCatImagePipelineConfig):
if latents.shape[1] > expected:
latents = latents[:, :expected, :]
return super().post_denoising_loop(latents, batch)
def register():
from sglang.multimodal_gen.configs.sample.longcat_image import (
LongCatImageEditSamplingParams,
LongCatImageEditTurboSamplingParams,
LongCatImageSamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=LongCatImageSamplingParams,
pipeline_config_cls=LongCatImagePipelineConfig,
hf_model_paths=[
"meituan-longcat/LongCat-Image",
],
model_detectors=[
lambda hf_id: "longcat" in hf_id.lower() and "edit" not in hf_id.lower(),
],
)
# LongCat-Image-Edit-Turbo (registered before Edit so its detector wins)
register_configs(
sampling_param_cls=LongCatImageEditTurboSamplingParams,
pipeline_config_cls=LongCatImageEditPipelineConfig,
hf_model_paths=[
"meituan-longcat/LongCat-Image-Edit-Turbo",
],
model_detectors=[
lambda hf_id: (
"longcat" in hf_id.lower()
and "edit" in hf_id.lower()
and "turbo" in hf_id.lower()
),
],
)
register_configs(
sampling_param_cls=LongCatImageEditSamplingParams,
pipeline_config_cls=LongCatImageEditPipelineConfig,
hf_model_paths=[
"meituan-longcat/LongCat-Image-Edit",
],
model_detectors=[
lambda hf_id: (
"longcat" in hf_id.lower()
and "edit" in hf_id.lower()
and "turbo" not in hf_id.lower()
),
],
)
@@ -70,3 +70,19 @@ class LongLive2T2VConfig(Wan2_2_TI2V_5B_Config):
super().__post_init__()
self.vae_config.load_encoder = True
self.vae_config.load_decoder = True
def register():
from sglang.multimodal_gen.configs.sample.longlive2 import (
LongLive2SamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=LongLive2SamplingParams,
pipeline_config_cls=LongLive2T2VConfig,
hf_model_paths=[
"Rabinovich/LongLive-2.0-5B-Diffusers",
"Efficient-Large-Model/LongLive-2.0-5B",
],
)
@@ -726,3 +726,37 @@ class LTX23PipelineConfig(LTX2PipelineConfig):
# original-mode lora swaps invalidate post-warmup timing calibration
supports_auto_residency: bool = False
def register():
from sglang.multimodal_gen.configs.sample.ltx_2 import (
LTX2SamplingParams,
LTX23HQSamplingParams,
LTX23SamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=LTX2SamplingParams,
pipeline_config_cls=LTX2PipelineConfig,
hf_model_paths=["Lightricks/LTX-2"],
model_detectors=[
lambda path: "ltx" in path.lower() and "video" in path.lower(),
lambda path: (
"ltx-2" in path.lower()
and "ltx-2.3" not in path.lower()
and "ltx-2.5" not in path.lower()
),
],
)
register_configs(
sampling_param_cls=LTX23SamplingParams,
pipeline_config_cls=LTX23PipelineConfig,
hf_model_paths=["Lightricks/LTX-2.3"],
model_detectors=[
lambda path: "ltx-2.3" in path.lower(),
],
pipeline_config_registry_entries={
"LTX2TwoStageHQPipeline": (LTX2PipelineConfig, LTX23HQSamplingParams),
},
)
@@ -55,3 +55,17 @@ class LTX25PipelineConfig(LTX2PipelineConfig):
default_sigmas: tuple[float, ...] | None = field(
default_factory=lambda: LTX25_DISTILLED_SIGMA_VALUES
)
def register():
from sglang.multimodal_gen.configs.sample.ltx_2_5 import LTX25SamplingParams
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=LTX25SamplingParams,
pipeline_config_cls=LTX25PipelineConfig,
hf_model_paths=["Lightricks/LTX-2.5-Diffusers"],
model_detectors=[
lambda path: "ltx-2.5" in path.lower(),
],
)
@@ -356,3 +356,38 @@ class FastH3PipelineConfig(MiniMaxH3PipelineConfig):
__all__ = ["FastH3PipelineConfig", "MiniMaxH3PipelineConfig"]
def register():
from sglang.multimodal_gen.configs.sample.minimax_h3 import (
FastH3SamplingParams,
MiniMaxH3SamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=MiniMaxH3SamplingParams,
pipeline_config_cls=MiniMaxH3PipelineConfig,
hf_model_paths=[
"MiniMaxAI/MiniMax-H3",
"MiniMax/MiniMax-H3",
],
model_detectors=[
lambda model_id: (
"minimaxh3" in model_id.lower().replace("-", "").replace("_", "")
and "vdn" not in model_id.lower()
)
],
)
register_configs(
sampling_param_cls=FastH3SamplingParams,
pipeline_config_cls=FastH3PipelineConfig,
hf_model_paths=[
"FastVideo/FastVideo-FastH3-4-step-Preview-v1-VSA-DataFree",
],
model_detectors=[
lambda model_id: (
"fasth3" in model_id.lower().replace("-", "").replace("_", "")
)
],
)
@@ -74,3 +74,24 @@ class VDNH3PipelineConfig(MiniMaxH3PipelineConfig):
__all__ = ["VDNH3PipelineConfig"]
def register():
from sglang.multimodal_gen.configs.sample.minimax_h3_vdn import (
VDNH3SamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=VDNH3SamplingParams,
pipeline_config_cls=VDNH3PipelineConfig,
hf_model_paths=[
"OpenVDN/vdn-minimax-h3",
],
model_detectors=[
lambda model_id: (
"vdn" in model_id.lower()
and "minimaxh3" in model_id.lower().replace("-", "").replace("_", "")
)
],
)
@@ -195,3 +195,26 @@ class MOVA720PConfig(MOVAPipelineConfig):
"""Configuration for MOVA 720P (text+image -> video+audio) pipelines."""
max_area: int = 720 * 1280
def register():
from sglang.multimodal_gen.configs.sample.mova import (
MOVA_360P_SamplingParams,
MOVA_720P_SamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=MOVA_360P_SamplingParams,
pipeline_config_cls=MOVA360PConfig,
model_detectors=[
lambda hf_id: "mova" in hf_id.lower() and "360p" in hf_id.lower()
],
)
register_configs(
sampling_param_cls=MOVA_720P_SamplingParams,
pipeline_config_cls=MOVA720PConfig,
model_detectors=[
lambda hf_id: "mova" in hf_id.lower() and "720p" in hf_id.lower()
],
)
@@ -164,3 +164,21 @@ class Pi05PipelineConfig(PipelineConfig):
def get_model_deployment_config(self) -> ModelDeploymentConfig:
return ModelDeploymentConfig()
def register():
from sglang.multimodal_gen.configs.sample.pi05 import Pi05SamplingParams
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=Pi05SamplingParams,
pipeline_config_cls=Pi05PipelineConfig,
hf_model_paths=[
"lerobot/pi05_base",
"lerobot/pi05_libero_base",
],
model_detectors=[
lambda hf_id: "pi05" in hf_id.lower(),
lambda hf_id: "pi0.5" in hf_id.lower(),
],
)
@@ -895,3 +895,72 @@ class QwenImageLayeredPipelineConfig(QwenImageEditPipelineConfig):
latents = latents.permute(0, 2, 1, 3, 4).view(-1, c, 1, h, w)
# latents = latents.reshape(batch_size, channels // (2 * 2), 1, height, width)
return latents
def register():
from sglang.multimodal_gen.configs.sample.qwenimage import (
QwenImage2512SamplingParams,
QwenImageEditPlusSamplingParams,
QwenImageLayeredSamplingParams,
QwenImageSamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=QwenImageSamplingParams,
pipeline_config_cls=QwenImagePipelineConfig,
hf_model_paths=["Qwen/Qwen-Image", "nvidia/Qwen-Image-NVFP4"],
model_detectors=[
lambda hf_id: (
"qwen-image" in hf_id.lower()
and "edit" not in hf_id.lower()
and "layered" not in hf_id.lower()
and "2512" not in hf_id.lower()
and "qwen-image-2.1" not in hf_id.lower()
)
],
)
register_configs(
sampling_param_cls=QwenImage2512SamplingParams,
pipeline_config_cls=QwenImagePipelineConfig,
hf_model_paths=["Qwen/Qwen-Image-2512"],
model_detectors=[lambda hf_id: "qwen-image-2512" in hf_id.lower()],
)
register_configs(
sampling_param_cls=QwenImageSamplingParams,
pipeline_config_cls=QwenImageEditPipelineConfig,
hf_model_paths=["Qwen/Qwen-Image-Edit"],
model_detectors=[
lambda hf_id: (
"qwen-image-edit" in hf_id.lower()
and "2509" not in hf_id.lower()
and "2511" not in hf_id.lower()
)
],
)
register_configs(
sampling_param_cls=QwenImageEditPlusSamplingParams,
pipeline_config_cls=QwenImageEditPlusPipelineConfig,
hf_model_paths=["Qwen/Qwen-Image-Edit-2509"],
model_detectors=[lambda hf_id: "qwen-image-edit-2509" in hf_id.lower()],
)
register_configs(
sampling_param_cls=QwenImageEditPlusSamplingParams,
pipeline_config_cls=QwenImageEditPlus_2511_PipelineConfig,
hf_model_paths=["Qwen/Qwen-Image-Edit-2511"],
model_detectors=[lambda hf_id: "qwen-image-edit-2511" in hf_id.lower()],
)
register_configs(
sampling_param_cls=QwenImageLayeredSamplingParams,
pipeline_config_cls=QwenImageLayeredPipelineConfig,
hf_model_paths=["Qwen/Qwen-Image-Layered"],
model_detectors=[lambda hf_id: "qwen-image-layered" in hf_id.lower()],
)
register_configs(
sampling_param_cls=QwenImageEditPlusSamplingParams,
pipeline_config_cls=QwenImageEditPlusPipelineConfig,
hf_model_paths=[
"FireRedTeam/FireRed-Image-Edit-1.0",
"FireRedTeam/FireRed-Image-Edit-1.1",
],
)
@@ -86,3 +86,17 @@ class QwenImage21PipelineConfig(ImagePipelineConfig):
def preprocess_condition_image(self, image, **kwargs):
return image
def register():
from sglang.multimodal_gen.configs.sample.qwenimage21 import (
QwenImage21SamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=QwenImage21SamplingParams,
pipeline_config_cls=QwenImage21PipelineConfig,
hf_model_paths=["Qwen/Qwen-Image-2.1"],
model_detectors=[lambda hf_id: "qwen-image-2.1" in hf_id.lower()],
)
@@ -127,3 +127,30 @@ class SanaPipelineConfig(SpatialImagePipelineConfig):
def gather_latents_for_sp(self, latents):
return latents
def register():
from sglang.multimodal_gen.configs.sample.sana import SanaSamplingParams
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=SanaSamplingParams,
pipeline_config_cls=SanaPipelineConfig,
hf_model_paths=[
"Efficient-Large-Model/SANA1.5_1.6B_1024px_diffusers",
"Efficient-Large-Model/SANA1.5_4.8B_1024px_diffusers",
"Efficient-Large-Model/Sana_1600M_1024px_diffusers",
"Efficient-Large-Model/Sana_600M_1024px_diffusers",
"Efficient-Large-Model/Sana_1600M_512px_diffusers",
"Efficient-Large-Model/Sana_600M_512px_diffusers",
],
model_detectors=[
lambda hf_id: (
"sana" in hf_id.lower()
and "sana-wm" not in hf_id.lower()
and "sana_wm" not in hf_id.lower()
and "sana-video" not in hf_id.lower()
and "sana_video" not in hf_id.lower()
)
],
)
@@ -116,3 +116,19 @@ class SanaVideoPipelineConfig(PipelineConfig):
def gather_latents_for_sp(self, latents, batch=None):
return latents
def register():
from sglang.multimodal_gen.configs.sample.sana_video import SanaVideoSamplingParams
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=SanaVideoSamplingParams,
pipeline_config_cls=SanaVideoPipelineConfig,
hf_model_paths=[
"Efficient-Large-Model/SANA-Video_2B_480p_diffusers",
],
model_detectors=[
lambda hf_id: "sana-video" in hf_id.lower() or "sana_video" in hf_id.lower()
],
)
@@ -339,3 +339,20 @@ class SanaWMRealtimeConfig(SanaWMPipelineConfig):
keep_resident_components=("dit",),
auto_enable_cfg_parallel=False,
)
def register():
from sglang.multimodal_gen.configs.sample.sana_wm import SanaWMSamplingParams
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=SanaWMSamplingParams,
pipeline_config_cls=SanaWMPipelineConfig,
hf_model_paths=[
"Efficient-Large-Model/SANA-WM_bidirectional",
"Efficient-Large-Model/SANA-WM_streaming",
],
model_detectors=[
lambda hf_id: "sana-wm" in hf_id.lower() or "sana_wm" in hf_id.lower(),
],
)
@@ -197,3 +197,18 @@ class SenseNovaU1PipelineConfig(PipelineConfig):
auto_enable_cfg_parallel=False,
supports_cfg_parallel=False,
)
def register():
from sglang.multimodal_gen.configs.sample.sensenova_u1 import (
SenseNovaU1SamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=SenseNovaU1SamplingParams,
pipeline_config_cls=SenseNovaU1PipelineConfig,
hf_model_paths=[
"sensenova/SenseNova-U1.5-8B-MoT",
],
)
@@ -200,3 +200,33 @@ class StableDiffusion3PipelineConfig(SpatialImagePipelineConfig):
batch.height // spatial_ratio,
batch.width // spatial_ratio,
)
def register():
from sglang.multimodal_gen.configs.sample.stablediffusion3 import (
StableDiffusion3SamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=StableDiffusion3SamplingParams,
pipeline_config_cls=StableDiffusion3PipelineConfig,
hf_model_paths=[
"stabilityai/stable-diffusion-3-medium",
"stabilityai/stable-diffusion-3-medium-diffusers",
"stabilityai/stable-diffusion-3.5-medium",
"stabilityai/stable-diffusion-3.5-medium-diffusers",
"stabilityai/stable-diffusion-3.5-large",
"stabilityai/stable-diffusion-3.5-large-diffusers",
],
model_detectors=[
lambda hf_id: (
"stable-diffusion-3-medium" in hf_id.lower()
or "stable-diffusion-3.5-medium" in hf_id.lower()
or "stable-diffusion-3.5-large" in hf_id.lower()
or "sd3-medium" in hf_id.lower()
or "sd3.5-medium" in hf_id.lower()
or "sd3.5-large" in hf_id.lower()
)
],
)
@@ -312,3 +312,114 @@ class SelfForcingWanT2V480PConfig(WanT2V480PConfig):
default_factory=lambda: [1000, 750, 500, 250]
)
warp_denoising_step: bool = True
def register():
from sglang.multimodal_gen.configs.sample.wan import (
FastWanT2V480PConfig,
Turbo_Wan2_2_I2V_A14B_SamplingParam,
Wan2_1_Fun_1_3B_InP_SamplingParams,
Wan2_2_I2V_A14B_SamplingParam,
Wan2_2_T2V_A14B_SamplingParam,
Wan2_2_TI2V_5B_SamplingParam,
WanI2V_14B_480P_SamplingParam,
WanI2V_14B_720P_SamplingParam,
WanT2V_1_3B_SamplingParams,
WanT2V_14B_SamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=WanT2V_1_3B_SamplingParams,
pipeline_config_cls=WanT2V480PConfig,
hf_model_paths=[
"Wan-AI/Wan2.1-T2V-1.3B-Diffusers",
],
model_detectors=[lambda hf_id: "wanpipeline" in hf_id.lower()],
)
register_configs(
sampling_param_cls=WanT2V_1_3B_SamplingParams,
pipeline_config_cls=TurboWanT2V1_3B480PConfig,
hf_model_paths=[
"IPostYellow/TurboWan2.1-T2V-1.3B-Diffusers",
],
)
register_configs(
sampling_param_cls=WanT2V_14B_SamplingParams,
pipeline_config_cls=WanT2V720PConfig,
hf_model_paths=[
"Wan-AI/Wan2.1-T2V-14B-Diffusers",
],
)
register_configs(
sampling_param_cls=WanT2V_14B_SamplingParams,
pipeline_config_cls=TurboWanT2V480PConfig,
hf_model_paths=[
"IPostYellow/TurboWan2.1-T2V-14B-Diffusers",
"IPostYellow/TurboWan2.1-T2V-14B-720P-Diffusers",
],
)
register_configs(
sampling_param_cls=WanI2V_14B_480P_SamplingParam,
pipeline_config_cls=WanI2V480PConfig,
hf_model_paths=[
"Wan-AI/Wan2.1-I2V-14B-480P-Diffusers",
],
model_detectors=[lambda hf_id: "wanimagetovideo" in hf_id.lower()],
)
register_configs(
sampling_param_cls=WanI2V_14B_720P_SamplingParam,
pipeline_config_cls=WanI2V720PConfig,
hf_model_paths=[
"Wan-AI/Wan2.1-I2V-14B-720P-Diffusers",
],
)
register_configs(
sampling_param_cls=Turbo_Wan2_2_I2V_A14B_SamplingParam,
pipeline_config_cls=TurboWanI2V720Config,
hf_model_paths=[
"IPostYellow/TurboWan2.2-I2V-A14B-Diffusers",
],
)
register_configs(
sampling_param_cls=Wan2_1_Fun_1_3B_InP_SamplingParams,
pipeline_config_cls=WanI2V480PConfig,
hf_model_paths=[
"weizhou03/Wan2.1-Fun-1.3B-InP-Diffusers",
],
)
register_configs(
sampling_param_cls=Wan2_2_TI2V_5B_SamplingParam,
pipeline_config_cls=Wan2_2_TI2V_5B_Config,
hf_model_paths=[
"Wan-AI/Wan2.2-TI2V-5B-Diffusers",
],
)
register_configs(
sampling_param_cls=Wan2_2_TI2V_5B_SamplingParam,
pipeline_config_cls=FastWan2_2_TI2V_5B_Config,
hf_model_paths=[
"FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers",
"FastVideo/FastWan2.2-TI2V-5B-Diffusers",
],
)
register_configs(
sampling_param_cls=Wan2_2_T2V_A14B_SamplingParam,
pipeline_config_cls=Wan2_2_T2V_A14B_Config,
hf_model_paths=[
"Wan-AI/Wan2.2-T2V-A14B-Diffusers",
"nvidia/Wan2.2-T2V-A14B-Diffusers-NVFP4",
],
)
register_configs(
sampling_param_cls=Wan2_2_I2V_A14B_SamplingParam,
pipeline_config_cls=Wan2_2_I2V_A14B_Config,
hf_model_paths=["Wan-AI/Wan2.2-I2V-A14B-Diffusers"],
)
register_configs(
sampling_param_cls=FastWanT2V480PConfig,
pipeline_config_cls=FastWan2_1_T2V_480P_Config,
hf_model_paths=[
"FastVideo/FastWan2.1-T2V-1.3B-Diffusers",
],
)
@@ -515,3 +515,30 @@ class ZImagePipelineConfig(ZImageRolloutPipelineMixin, ImagePipelineConfig):
dtype=torch.long,
),
}
def register():
from sglang.multimodal_gen.configs.sample.zimage import (
ZImageSamplingParams,
ZImageTurboSamplingParams,
)
from sglang.multimodal_gen.registry import register_configs
register_configs(
sampling_param_cls=ZImageTurboSamplingParams,
pipeline_config_cls=ZImagePipelineConfig,
hf_model_paths=[
"Tongyi-MAI/Z-Image-Turbo",
],
model_detectors=[lambda hf_id: "z-image-turbo" in hf_id.lower()],
)
register_configs(
sampling_param_cls=ZImageSamplingParams,
pipeline_config_cls=ZImagePipelineConfig,
hf_model_paths=[
"Tongyi-MAI/Z-Image",
],
model_detectors=[
lambda hf_id: "z-image" in hf_id.lower() and "turbo" not in hf_id.lower()
],
)
+59 -837
View File
@@ -27,193 +27,7 @@ from typing import (
if TYPE_CHECKING:
from sglang.multimodal_gen.runtime.server_args import Backend
from sglang.multimodal_gen.configs.pipeline_configs import (
Cosmos3Config,
FastH3PipelineConfig,
FastHunyuanConfig,
FluxPipelineConfig,
HeliosDistilledConfig,
HeliosMidConfig,
HeliosT2VConfig,
HunyuanConfig,
LingBotWorldCausalDMDConfig,
LingBotWorldV2CausalDMDConfig,
MiniMaxH3PipelineConfig,
WanI2V480PConfig,
WanI2V720PConfig,
WanT2V480PConfig,
WanT2V720PConfig,
ZImagePipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.base import PipelineConfig
from sglang.multimodal_gen.configs.pipeline_configs.ernie_image import (
ErnieImagePipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.flux import (
Flux2KleinBasePipelineConfig,
Flux2KleinPipelineConfig,
Flux2PipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.glm_image import (
GlmImagePipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.hunyuan3d import (
Hunyuan3D2PipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.ideogram import (
Ideogram4DistilledPipelineConfig,
Ideogram4PipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.joy_echo import (
JoyEchoPipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.joy_image import (
JoyImageEditPipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.krea2 import Krea2PipelineConfig
from sglang.multimodal_gen.configs.pipeline_configs.lingbot_video_moe import (
LingBotVideoMoEPipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.longcat_image import (
LongCatImageEditPipelineConfig,
LongCatImagePipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.longlive2 import LongLive2T2VConfig
from sglang.multimodal_gen.configs.pipeline_configs.ltx_2 import (
LTX2PipelineConfig,
LTX23PipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.ltx_2_5 import LTX25PipelineConfig
from sglang.multimodal_gen.configs.pipeline_configs.minimax_h3_vdn import (
VDNH3PipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.mova import (
MOVA360PConfig,
MOVA720PConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.pi05 import Pi05PipelineConfig
from sglang.multimodal_gen.configs.pipeline_configs.qwen_image import (
QwenImageEditPipelineConfig,
QwenImageEditPlus_2511_PipelineConfig,
QwenImageEditPlusPipelineConfig,
QwenImageLayeredPipelineConfig,
QwenImagePipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.qwen_image21 import (
QwenImage21PipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.sana import SanaPipelineConfig
from sglang.multimodal_gen.configs.pipeline_configs.sana_video import (
SanaVideoPipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.sana_wm import SanaWMPipelineConfig
from sglang.multimodal_gen.configs.pipeline_configs.sensenova_u1 import (
SenseNovaU1PipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.stablediffusion3 import (
StableDiffusion3PipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.wan import (
FastWan2_1_T2V_480P_Config,
FastWan2_2_TI2V_5B_Config,
TurboWanI2V720Config,
TurboWanT2V1_3B480PConfig,
TurboWanT2V480PConfig,
Wan2_2_I2V_A14B_Config,
Wan2_2_T2V_A14B_Config,
Wan2_2_TI2V_5B_Config,
)
from sglang.multimodal_gen.configs.sample.cosmos3 import Cosmos3SamplingParams
from sglang.multimodal_gen.configs.sample.ernie_image import ErnieImageSamplingParams
from sglang.multimodal_gen.configs.sample.flux import (
Flux2KleinBaseSamplingParams,
Flux2KleinSamplingParams,
Flux2SamplingParams,
FluxSamplingParams,
)
from sglang.multimodal_gen.configs.sample.glmimage import GlmImageSamplingParams
from sglang.multimodal_gen.configs.sample.helios import (
HeliosDistilledSamplingParams,
HeliosMidSamplingParams,
HeliosT2VSamplingParams,
)
from sglang.multimodal_gen.configs.sample.hunyuan import (
FastHunyuanSamplingParam,
HunyuanSamplingParams,
)
from sglang.multimodal_gen.configs.sample.hunyuan3d import Hunyuan3DSamplingParams
from sglang.multimodal_gen.configs.sample.ideogram import (
Ideogram4FastSamplingParams,
Ideogram4InstantSamplingParams,
Ideogram4SamplingParams,
)
from sglang.multimodal_gen.configs.sample.joy_echo import JoyEchoSamplingParams
from sglang.multimodal_gen.configs.sample.joy_image import (
JoyImageEditSamplingParams,
)
from sglang.multimodal_gen.configs.sample.krea2 import (
Krea2SamplingParams,
)
from sglang.multimodal_gen.configs.sample.lingbot_video_moe import (
LingBotVideoMoESamplingParams,
)
from sglang.multimodal_gen.configs.sample.lingbot_world import (
LingBotWorldSamplingParams,
)
from sglang.multimodal_gen.configs.sample.longcat_image import (
LongCatImageEditSamplingParams,
LongCatImageEditTurboSamplingParams,
LongCatImageSamplingParams,
)
from sglang.multimodal_gen.configs.sample.longlive2 import LongLive2SamplingParams
from sglang.multimodal_gen.configs.sample.ltx_2 import (
LTX2SamplingParams,
LTX23HQSamplingParams,
LTX23SamplingParams,
)
from sglang.multimodal_gen.configs.sample.ltx_2_5 import LTX25SamplingParams
from sglang.multimodal_gen.configs.sample.minimax_h3 import (
FastH3SamplingParams,
MiniMaxH3SamplingParams,
)
from sglang.multimodal_gen.configs.sample.minimax_h3_vdn import VDNH3SamplingParams
from sglang.multimodal_gen.configs.sample.mova import (
MOVA_360P_SamplingParams,
MOVA_720P_SamplingParams,
)
from sglang.multimodal_gen.configs.sample.pi05 import Pi05SamplingParams
from sglang.multimodal_gen.configs.sample.qwenimage import (
QwenImage2512SamplingParams,
QwenImageEditPlusSamplingParams,
QwenImageLayeredSamplingParams,
QwenImageSamplingParams,
)
from sglang.multimodal_gen.configs.sample.qwenimage21 import QwenImage21SamplingParams
from sglang.multimodal_gen.configs.sample.sana import SanaSamplingParams
from sglang.multimodal_gen.configs.sample.sana_video import SanaVideoSamplingParams
from sglang.multimodal_gen.configs.sample.sana_wm import SanaWMSamplingParams
from sglang.multimodal_gen.configs.sample.sensenova_u1 import (
SenseNovaU1SamplingParams,
)
from sglang.multimodal_gen.configs.sample.stablediffusion3 import (
StableDiffusion3SamplingParams,
)
from sglang.multimodal_gen.configs.sample.wan import (
FastWanT2V480PConfig,
Turbo_Wan2_2_I2V_A14B_SamplingParam,
Wan2_1_Fun_1_3B_InP_SamplingParams,
Wan2_2_I2V_A14B_SamplingParam,
Wan2_2_T2V_A14B_SamplingParam,
Wan2_2_TI2V_5B_SamplingParam,
WanI2V_14B_480P_SamplingParam,
WanI2V_14B_720P_SamplingParam,
WanT2V_1_3B_SamplingParams,
WanT2V_14B_SamplingParams,
)
from sglang.multimodal_gen.configs.sample.zimage import (
ZImageSamplingParams,
ZImageTurboSamplingParams,
)
from sglang.multimodal_gen.configs.sensenova_u1 import (
SENSENOVA_U1_MODEL_IDS,
is_sensenova_u1_adapter_only_model,
@@ -375,6 +189,9 @@ def register_configs(
pipeline_config_cls: Type[PipelineConfig],
hf_model_paths: Optional[List[str]] = None,
model_detectors: Optional[List[Callable[[str], bool]]] = None,
pipeline_config_registry_entries: Optional[
Dict[str, Tuple[Type[PipelineConfig], Type[Any]]]
] = None,
) -> str:
"""
Registers configuration classes for a new model family.
@@ -396,6 +213,11 @@ def register_configs(
if model_detectors:
for detector in model_detectors:
_MODEL_NAME_DETECTORS.append((model_id, detector))
if pipeline_config_registry_entries:
for pipeline_name, (pc_cls, sp_cls) in pipeline_config_registry_entries.items():
_PIPELINE_CONFIG_REGISTRY.setdefault(pipeline_name, (pc_cls, sp_cls))
return model_id
@@ -459,6 +281,56 @@ def register_pipeline(
)
_configs_discovered: bool = False
# SANA-WM (register BEFORE generic SANA T2I to prevent "sana" detector false-match)
# SANA-Video (register before generic SANA to avoid detector overlap).
_CONFIG_REGISTER_PRIORITY: Tuple[str, ...] = ("sana_wm", "sana_video")
def _discover_and_register_configs() -> None:
global _configs_discovered
if _configs_discovered:
return
_configs_discovered = True
package_name = "sglang.multimodal_gen.configs.pipeline_configs"
package = importlib.import_module(package_name)
discovered = []
for _, module_name, ispkg in pkgutil.walk_packages(
package.__path__, package.__name__ + "."
):
if not ispkg:
try:
config_module = importlib.import_module(module_name)
except Exception as exc:
logger.warning(
f"Skipping config module {module_name} during discovery due to import failure: {exc}",
)
continue
if hasattr(config_module, "register"):
discovered.append((module_name, config_module))
def _sort_key(item):
short_name = item[0].rsplit(".", 1)[-1]
try:
return (0, _CONFIG_REGISTER_PRIORITY.index(short_name))
except ValueError:
return (1, 0)
discovered.sort(key=_sort_key)
for module_name, config_module in discovered:
try:
config_module.register()
except Exception as exc:
logger.warning(
f"register() failed for {module_name}: {exc}",
exc_info=True,
)
def get_model_short_name(model_id: str) -> str:
if "/" in model_id:
return model_id.rstrip("/").split("/")[-1]
@@ -809,657 +681,7 @@ def get_model_info(
return model_info
# Registration of model configs
def _register_configs():
# Pi0.5 / OpenPI / LeRobot action policies.
register_configs(
sampling_param_cls=Pi05SamplingParams,
pipeline_config_cls=Pi05PipelineConfig,
hf_model_paths=[
"lerobot/pi05_base",
"lerobot/pi05_libero_base",
],
model_detectors=[
lambda hf_id: "pi05" in hf_id.lower(),
lambda hf_id: "pi0.5" in hf_id.lower(),
],
)
# LTX-2
register_configs(
sampling_param_cls=LTX2SamplingParams,
pipeline_config_cls=LTX2PipelineConfig,
hf_model_paths=["Lightricks/LTX-2"],
model_detectors=[
lambda path: "ltx" in path.lower() and "video" in path.lower(),
lambda path: (
"ltx-2" in path.lower()
and "ltx-2.3" not in path.lower()
and "ltx-2.5" not in path.lower()
),
],
)
register_configs(
sampling_param_cls=LTX23SamplingParams,
pipeline_config_cls=LTX23PipelineConfig,
hf_model_paths=["Lightricks/LTX-2.3"],
model_detectors=[
lambda path: "ltx-2.3" in path.lower(),
],
)
# Keeps the LTX-2 pipeline class; only component geometry and the pinned
# distilled schedule differ. Only the `-Diffusers` repo is listed --
# `Lightricks/LTX-2.5` is a split pack of bare `.safetensors` and would need
# a model overlay first.
register_configs(
sampling_param_cls=LTX25SamplingParams,
pipeline_config_cls=LTX25PipelineConfig,
hf_model_paths=["Lightricks/LTX-2.5-Diffusers"],
model_detectors=[
lambda path: "ltx-2.5" in path.lower(),
],
)
# register dedicated sampling params for LTX2TwoStageHQPipeline
_PIPELINE_CONFIG_REGISTRY.setdefault(
"LTX2TwoStageHQPipeline",
(LTX2PipelineConfig, LTX23HQSamplingParams),
)
# Hunyuan
register_configs(
sampling_param_cls=HunyuanSamplingParams,
pipeline_config_cls=HunyuanConfig,
hf_model_paths=[
"hunyuanvideo-community/HunyuanVideo",
],
model_detectors=[lambda hf_id: "hunyuanvideo" in hf_id.lower()],
)
register_configs(
sampling_param_cls=FastHunyuanSamplingParam,
pipeline_config_cls=FastHunyuanConfig,
hf_model_paths=[
"FastVideo/FastHunyuan-diffusers",
],
)
# Wan
register_configs(
sampling_param_cls=WanT2V_1_3B_SamplingParams,
pipeline_config_cls=WanT2V480PConfig,
hf_model_paths=[
"Wan-AI/Wan2.1-T2V-1.3B-Diffusers",
],
model_detectors=[lambda hf_id: "wanpipeline" in hf_id.lower()],
)
register_configs(
sampling_param_cls=WanT2V_1_3B_SamplingParams,
pipeline_config_cls=TurboWanT2V1_3B480PConfig,
hf_model_paths=[
"IPostYellow/TurboWan2.1-T2V-1.3B-Diffusers",
],
)
register_configs(
sampling_param_cls=WanT2V_14B_SamplingParams,
pipeline_config_cls=WanT2V720PConfig,
hf_model_paths=[
"Wan-AI/Wan2.1-T2V-14B-Diffusers",
],
)
register_configs(
sampling_param_cls=WanT2V_14B_SamplingParams,
pipeline_config_cls=TurboWanT2V480PConfig,
hf_model_paths=[
"IPostYellow/TurboWan2.1-T2V-14B-Diffusers",
"IPostYellow/TurboWan2.1-T2V-14B-720P-Diffusers",
],
)
register_configs(
sampling_param_cls=WanI2V_14B_480P_SamplingParam,
pipeline_config_cls=WanI2V480PConfig,
hf_model_paths=[
"Wan-AI/Wan2.1-I2V-14B-480P-Diffusers",
],
model_detectors=[lambda hf_id: "wanimagetovideo" in hf_id.lower()],
)
register_configs(
sampling_param_cls=WanI2V_14B_720P_SamplingParam,
pipeline_config_cls=WanI2V720PConfig,
hf_model_paths=[
"Wan-AI/Wan2.1-I2V-14B-720P-Diffusers",
],
)
register_configs(
sampling_param_cls=Turbo_Wan2_2_I2V_A14B_SamplingParam,
pipeline_config_cls=TurboWanI2V720Config,
hf_model_paths=[
"IPostYellow/TurboWan2.2-I2V-A14B-Diffusers",
],
)
register_configs(
sampling_param_cls=Wan2_1_Fun_1_3B_InP_SamplingParams,
pipeline_config_cls=WanI2V480PConfig,
hf_model_paths=[
"weizhou03/Wan2.1-Fun-1.3B-InP-Diffusers",
],
)
register_configs(
sampling_param_cls=Wan2_2_TI2V_5B_SamplingParam,
pipeline_config_cls=Wan2_2_TI2V_5B_Config,
hf_model_paths=[
"Wan-AI/Wan2.2-TI2V-5B-Diffusers",
],
)
register_configs(
sampling_param_cls=Wan2_2_TI2V_5B_SamplingParam,
pipeline_config_cls=FastWan2_2_TI2V_5B_Config,
hf_model_paths=[
"FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers",
"FastVideo/FastWan2.2-TI2V-5B-Diffusers",
],
)
register_configs(
sampling_param_cls=Wan2_2_T2V_A14B_SamplingParam,
pipeline_config_cls=Wan2_2_T2V_A14B_Config,
hf_model_paths=[
"Wan-AI/Wan2.2-T2V-A14B-Diffusers",
"nvidia/Wan2.2-T2V-A14B-Diffusers-NVFP4",
],
)
register_configs(
sampling_param_cls=Wan2_2_I2V_A14B_SamplingParam,
pipeline_config_cls=Wan2_2_I2V_A14B_Config,
hf_model_paths=["Wan-AI/Wan2.2-I2V-A14B-Diffusers"],
)
register_configs(
sampling_param_cls=LingBotWorldSamplingParams,
pipeline_config_cls=LingBotWorldCausalDMDConfig,
hf_model_paths=[
"IPostYellow/lingbot-world-fast-diffusers",
"robbyant/lingbot-world-fast-diffusers",
],
)
register_configs(
sampling_param_cls=LingBotWorldSamplingParams,
pipeline_config_cls=LingBotWorldV2CausalDMDConfig,
hf_model_paths=[
"robbyant/lingbot-world-v2-14b-causal-fast-diffusers",
],
)
register_configs(
sampling_param_cls=LongLive2SamplingParams,
pipeline_config_cls=LongLive2T2VConfig,
hf_model_paths=[
# Since LongLive-2.0-5B does not have official diffusers release
"Rabinovich/LongLive-2.0-5B-Diffusers",
"Efficient-Large-Model/LongLive-2.0-5B",
],
)
register_configs(
sampling_param_cls=FastWanT2V480PConfig,
pipeline_config_cls=FastWan2_1_T2V_480P_Config,
hf_model_paths=[
"FastVideo/FastWan2.1-T2V-1.3B-Diffusers",
],
)
# MOVA
register_configs(
sampling_param_cls=MOVA_360P_SamplingParams,
pipeline_config_cls=MOVA360PConfig,
model_detectors=[
lambda hf_id: "mova" in hf_id.lower() and "360p" in hf_id.lower()
],
)
register_configs(
sampling_param_cls=MOVA_720P_SamplingParams,
pipeline_config_cls=MOVA720PConfig,
model_detectors=[
lambda hf_id: "mova" in hf_id.lower() and "720p" in hf_id.lower()
],
)
register_configs(
sampling_param_cls=MiniMaxH3SamplingParams,
pipeline_config_cls=MiniMaxH3PipelineConfig,
hf_model_paths=[
"MiniMaxAI/MiniMax-H3",
"MiniMax/MiniMax-H3",
],
model_detectors=[
lambda model_id: (
"minimaxh3" in model_id.lower().replace("-", "").replace("_", "")
and "vdn" not in model_id.lower()
)
],
)
register_configs(
sampling_param_cls=SenseNovaU1SamplingParams,
pipeline_config_cls=SenseNovaU1PipelineConfig,
hf_model_paths=[
"sensenova/SenseNova-U1.5-8B-MoT",
],
)
register_configs(
sampling_param_cls=FastH3SamplingParams,
pipeline_config_cls=FastH3PipelineConfig,
hf_model_paths=[
"FastVideo/FastVideo-FastH3-4-step-Preview-v1-VSA-DataFree",
],
model_detectors=[
lambda model_id: (
"fasth3" in model_id.lower().replace("-", "").replace("_", "")
)
],
)
register_configs(
sampling_param_cls=VDNH3SamplingParams,
pipeline_config_cls=VDNH3PipelineConfig,
hf_model_paths=[
"OpenVDN/vdn-minimax-h3",
],
model_detectors=[
lambda model_id: (
"vdn" in model_id.lower()
and "minimaxh3" in model_id.lower().replace("-", "").replace("_", "")
)
],
)
# FLUX
register_configs(
sampling_param_cls=FluxSamplingParams,
pipeline_config_cls=FluxPipelineConfig,
hf_model_paths=[
"black-forest-labs/FLUX.1-dev",
],
model_detectors=[lambda hf_id: "flux.1" in hf_id.lower()],
)
register_configs(
sampling_param_cls=Flux2KleinSamplingParams,
pipeline_config_cls=Flux2KleinPipelineConfig,
hf_model_paths=[
"black-forest-labs/FLUX.2-klein-4B",
"black-forest-labs/FLUX.2-klein-9B",
],
model_detectors=[
lambda hf_id: (
("flux.2-klein" in hf_id.lower() or "flux2-klein" in hf_id.lower())
and "base" not in hf_id.lower()
)
],
)
register_configs(
sampling_param_cls=Flux2KleinBaseSamplingParams,
pipeline_config_cls=Flux2KleinBasePipelineConfig,
hf_model_paths=[
"black-forest-labs/FLUX.2-klein-base-4B",
"black-forest-labs/FLUX.2-klein-base-9B",
],
model_detectors=[
lambda hf_id: (
("flux.2-klein" in hf_id.lower() or "flux2-klein" in hf_id.lower())
and "base" in hf_id.lower()
)
],
)
register_configs(
sampling_param_cls=Flux2SamplingParams,
pipeline_config_cls=Flux2PipelineConfig,
hf_model_paths=[
"black-forest-labs/FLUX.2-dev",
"black-forest-labs/FLUX.2-dev-NVFP4",
],
model_detectors=[
lambda hf_id: "flux.2" in hf_id.lower() and "klein" not in hf_id.lower()
],
)
register_configs(
sampling_param_cls=ZImageTurboSamplingParams,
pipeline_config_cls=ZImagePipelineConfig,
hf_model_paths=[
"Tongyi-MAI/Z-Image-Turbo",
],
model_detectors=[lambda hf_id: "z-image-turbo" in hf_id.lower()],
)
register_configs(
sampling_param_cls=ZImageSamplingParams,
pipeline_config_cls=ZImagePipelineConfig,
hf_model_paths=[
"Tongyi-MAI/Z-Image",
],
model_detectors=[
lambda hf_id: "z-image" in hf_id.lower() and "turbo" not in hf_id.lower()
],
)
# Krea-2 (K2)
register_configs(
sampling_param_cls=Krea2SamplingParams,
pipeline_config_cls=Krea2PipelineConfig,
hf_model_paths=["krea/Krea-2"],
model_detectors=[lambda hf_id: "krea-2" in hf_id.lower()],
)
# Qwen-Image
register_configs(
sampling_param_cls=QwenImage21SamplingParams,
pipeline_config_cls=QwenImage21PipelineConfig,
hf_model_paths=["Qwen/Qwen-Image-2.1"],
model_detectors=[lambda hf_id: "qwen-image-2.1" in hf_id.lower()],
)
register_configs(
sampling_param_cls=QwenImageSamplingParams,
pipeline_config_cls=QwenImagePipelineConfig,
hf_model_paths=["Qwen/Qwen-Image", "nvidia/Qwen-Image-NVFP4"],
model_detectors=[
lambda hf_id: (
"qwen-image" in hf_id.lower()
and "edit" not in hf_id.lower()
and "layered" not in hf_id.lower()
and "2512" not in hf_id.lower()
and "qwen-image-2.1" not in hf_id.lower()
)
],
)
register_configs(
sampling_param_cls=QwenImage2512SamplingParams,
pipeline_config_cls=QwenImagePipelineConfig,
hf_model_paths=["Qwen/Qwen-Image-2512"],
model_detectors=[lambda hf_id: "qwen-image-2512" in hf_id.lower()],
)
register_configs(
sampling_param_cls=QwenImageSamplingParams,
pipeline_config_cls=QwenImageEditPipelineConfig,
hf_model_paths=["Qwen/Qwen-Image-Edit"],
model_detectors=[
lambda hf_id: (
"qwen-image-edit" in hf_id.lower()
and "2509" not in hf_id.lower()
and "2511" not in hf_id.lower()
)
],
)
register_configs(
sampling_param_cls=QwenImageEditPlusSamplingParams,
pipeline_config_cls=QwenImageEditPlusPipelineConfig,
hf_model_paths=["Qwen/Qwen-Image-Edit-2509"],
model_detectors=[lambda hf_id: "qwen-image-edit-2509" in hf_id.lower()],
)
register_configs(
sampling_param_cls=QwenImageEditPlusSamplingParams,
pipeline_config_cls=QwenImageEditPlus_2511_PipelineConfig,
hf_model_paths=["Qwen/Qwen-Image-Edit-2511"],
model_detectors=[lambda hf_id: "qwen-image-edit-2511" in hf_id.lower()],
)
register_configs(
sampling_param_cls=QwenImageLayeredSamplingParams,
pipeline_config_cls=QwenImageLayeredPipelineConfig,
hf_model_paths=["Qwen/Qwen-Image-Layered"],
model_detectors=[lambda hf_id: "qwen-image-layered" in hf_id.lower()],
)
register_configs(
sampling_param_cls=StableDiffusion3SamplingParams,
pipeline_config_cls=StableDiffusion3PipelineConfig,
hf_model_paths=[
"stabilityai/stable-diffusion-3-medium",
"stabilityai/stable-diffusion-3-medium-diffusers",
"stabilityai/stable-diffusion-3.5-medium",
"stabilityai/stable-diffusion-3.5-medium-diffusers",
"stabilityai/stable-diffusion-3.5-large",
"stabilityai/stable-diffusion-3.5-large-diffusers",
],
model_detectors=[
lambda hf_id: (
"stable-diffusion-3-medium" in hf_id.lower()
or "stable-diffusion-3.5-medium" in hf_id.lower()
or "stable-diffusion-3.5-large" in hf_id.lower()
or "sd3-medium" in hf_id.lower()
or "sd3.5-medium" in hf_id.lower()
or "sd3.5-large" in hf_id.lower()
)
],
)
register_configs(
sampling_param_cls=GlmImageSamplingParams,
pipeline_config_cls=GlmImagePipelineConfig,
model_detectors=[lambda hf_id: "glm-image" in hf_id.lower()],
)
register_configs(
sampling_param_cls=Hunyuan3DSamplingParams,
pipeline_config_cls=Hunyuan3D2PipelineConfig,
hf_model_paths=[
"tencent/Hunyuan3D-2",
],
model_detectors=[lambda hf_id: "hunyuan3d" in hf_id.lower()],
)
# Helios
register_configs(
sampling_param_cls=HeliosT2VSamplingParams,
pipeline_config_cls=HeliosT2VConfig,
hf_model_paths=[
"BestWishYsh/Helios-Base",
],
model_detectors=[
lambda hf_id: (
"helios" in hf_id.lower()
and "mid" not in hf_id.lower()
and "distill" not in hf_id.lower()
)
],
)
register_configs(
sampling_param_cls=HeliosMidSamplingParams,
pipeline_config_cls=HeliosMidConfig,
hf_model_paths=[
"BestWishYsh/Helios-Mid",
],
)
register_configs(
sampling_param_cls=HeliosDistilledSamplingParams,
pipeline_config_cls=HeliosDistilledConfig,
hf_model_paths=[
"BestWishYsh/Helios-Distilled",
],
)
# SANA-WM (register BEFORE generic SANA T2I to prevent "sana" detector false-match)
register_configs(
sampling_param_cls=SanaWMSamplingParams,
pipeline_config_cls=SanaWMPipelineConfig,
hf_model_paths=[
"Efficient-Large-Model/SANA-WM_bidirectional",
"Efficient-Large-Model/SANA-WM_streaming",
],
model_detectors=[
# Match "sana-wm" or "sana_wm" but NOT plain T2I "sana" checkpoints.
lambda hf_id: "sana-wm" in hf_id.lower() or "sana_wm" in hf_id.lower(),
],
)
# SANA-Video (register before generic SANA to avoid detector overlap).
register_configs(
sampling_param_cls=SanaVideoSamplingParams,
pipeline_config_cls=SanaVideoPipelineConfig,
hf_model_paths=[
"Efficient-Large-Model/SANA-Video_2B_480p_diffusers",
],
model_detectors=[
lambda hf_id: "sana-video" in hf_id.lower() or "sana_video" in hf_id.lower()
],
)
# Cosmos3 — single checkpoint serves T2V, I2V, and T2I. Mode is dispatched
# per-request inside the pipeline from ``num_frames`` and ``image_path``.
# All variants share the same pipeline; arch dimensions (size, activation,
# QK-norm) come from ``transformer/config.json`` via ``update_model_arch``.
register_configs(
sampling_param_cls=Cosmos3SamplingParams,
pipeline_config_cls=Cosmos3Config,
hf_model_paths=[
"nvidia/Cosmos3-Nano",
"nvidia/Cosmos3-Nano-Policy-DROID",
"nvidia/Cosmos3-Super",
"nvidia/Cosmos3-Super-Text2Image",
"nvidia/Cosmos3-Super-Image2Video",
"nvidia/Cosmos3-Edge",
],
# Match both the new ``Cosmos3OmniPipeline`` and the legacy
# ``Cosmos3OmniDiffusersPipeline`` ``_class_name`` (diffusers rename).
model_detectors=[lambda hf_id: "cosmos3omni" in hf_id.lower()],
)
# SANA
register_configs(
sampling_param_cls=SanaSamplingParams,
pipeline_config_cls=SanaPipelineConfig,
hf_model_paths=[
"Efficient-Large-Model/SANA1.5_1.6B_1024px_diffusers",
"Efficient-Large-Model/SANA1.5_4.8B_1024px_diffusers",
"Efficient-Large-Model/Sana_1600M_1024px_diffusers",
"Efficient-Large-Model/Sana_600M_1024px_diffusers",
"Efficient-Large-Model/Sana_1600M_512px_diffusers",
"Efficient-Large-Model/Sana_600M_512px_diffusers",
],
model_detectors=[
lambda hf_id: (
"sana" in hf_id.lower()
and "sana-wm" not in hf_id.lower()
and "sana_wm" not in hf_id.lower()
and "sana-video" not in hf_id.lower()
and "sana_video" not in hf_id.lower()
)
],
)
# FireRed-Image-Edit
register_configs(
sampling_param_cls=QwenImageEditPlusSamplingParams,
pipeline_config_cls=QwenImageEditPlusPipelineConfig,
hf_model_paths=[
"FireRedTeam/FireRed-Image-Edit-1.0",
"FireRedTeam/FireRed-Image-Edit-1.1",
],
)
# ErnieImage
register_configs(
sampling_param_cls=ErnieImageSamplingParams,
pipeline_config_cls=ErnieImagePipelineConfig,
hf_model_paths=[
"baidu/ERNIE-Image",
"baidu/ERNIE-Image-Turbo",
],
model_detectors=[
lambda hf_id: "ernie-image" in hf_id.lower(),
],
)
# JoyAI
register_configs(
sampling_param_cls=JoyImageEditSamplingParams,
pipeline_config_cls=JoyImageEditPipelineConfig,
hf_model_paths=[
"jdopensource/JoyAI-Image-Edit-Diffusers",
],
model_detectors=[
lambda hf_id: "joyai-image-edit" in hf_id.lower(),
],
)
register_configs(
sampling_param_cls=JoyEchoSamplingParams,
pipeline_config_cls=JoyEchoPipelineConfig,
hf_model_paths=[
"jdopensource/JoyAI-Echo",
],
model_detectors=[
lambda hf_id: (
("joy-echo" in hf_id.lower() or "joyai-echo" in hf_id.lower())
and "image-edit" not in hf_id.lower()
),
],
)
# Ideogram 4
register_configs(
sampling_param_cls=Ideogram4FastSamplingParams,
pipeline_config_cls=Ideogram4DistilledPipelineConfig,
hf_model_paths=["fal/ideogram-v4-fast"],
)
register_configs(
sampling_param_cls=Ideogram4InstantSamplingParams,
pipeline_config_cls=Ideogram4DistilledPipelineConfig,
hf_model_paths=["fal/ideogram-v4-instant"],
)
register_configs(
sampling_param_cls=Ideogram4SamplingParams,
pipeline_config_cls=Ideogram4PipelineConfig,
hf_model_paths=[
"ideogram-ai/ideogram-4-fp8",
"ideogram-ai/ideogram-4-nf4",
"Comfy-Org/Ideogram-4",
],
model_detectors=[
lambda hf_id: "ideogram4pipeline" in hf_id.lower(),
lambda hf_id: "ideogram-4-fp8" in hf_id.lower(),
lambda hf_id: "ideogram-4-nf4" in hf_id.lower(),
lambda hf_id: "comfy-org/ideogram-4" in hf_id.lower(),
lambda hf_id: "comfy-org--ideogram-4" in hf_id.lower(),
],
)
register_configs(
sampling_param_cls=LingBotVideoMoESamplingParams,
pipeline_config_cls=LingBotVideoMoEPipelineConfig,
model_detectors=[
lambda hf_id: "lingbot-video-moe" in hf_id.lower(),
],
)
# LongCat-Image
register_configs(
sampling_param_cls=LongCatImageSamplingParams,
pipeline_config_cls=LongCatImagePipelineConfig,
hf_model_paths=[
"meituan-longcat/LongCat-Image",
],
model_detectors=[
lambda hf_id: "longcat" in hf_id.lower() and "edit" not in hf_id.lower(),
],
)
# LongCat-Image-Edit-Turbo (registered before Edit so its detector wins)
register_configs(
sampling_param_cls=LongCatImageEditTurboSamplingParams,
pipeline_config_cls=LongCatImageEditPipelineConfig,
hf_model_paths=[
"meituan-longcat/LongCat-Image-Edit-Turbo",
],
model_detectors=[
lambda hf_id: (
"longcat" in hf_id.lower()
and "edit" in hf_id.lower()
and "turbo" in hf_id.lower()
),
],
)
# LongCat-Image-Edit
register_configs(
sampling_param_cls=LongCatImageEditSamplingParams,
pipeline_config_cls=LongCatImageEditPipelineConfig,
hf_model_paths=[
"meituan-longcat/LongCat-Image-Edit",
],
model_detectors=[
lambda hf_id: (
"longcat" in hf_id.lower()
and "edit" in hf_id.lower()
and "turbo" not in hf_id.lower()
),
],
)
_register_configs()
_discover_and_register_configs()
def is_known_non_diffusers_multimodal_model(model_path: str) -> bool: