Files
Vladimir Mandic 1714657cf7 change minimax defaults
Signed-off-by: Vladimir Mandic <mandic00@live.com>
2026-08-24 18:51:30 +02:00

887 lines
43 KiB
Python

from dataclasses import dataclass
import sys
import time
from modules import errors
from modules.logger import log
@dataclass
class Model:
name: str
url: str = ''
repo: str = None
custom: str = None
repo_cls: classmethod = None
repo_revision: str = None
dit: str = None
dit_cls: classmethod = None
dit_folder: str = 'transformer'
dit_kwarg: str = None # pipeline argument the folder loads into, when the two differ
dit_revision: str = None
te: str = None
te_cls: classmethod = None
te_folder: str = 'text_encoder'
te_hijack: bool = True
te_revision: str = None
image_hijack: bool = True
vae_hijack: bool = True
vae_remote: bool = False
workflow: str = None
base: bool = False # also registered as a base model: caches into the diffusers folder so the model scan lists it in the dropdown
def __str__(self):
return f'name="{self.name}" url="{self.url}" repo="{self.repo}" repo_cls="{self.repo_cls}" dit="{self.dit}" dit_cls="{self.dit_cls}" dit_folder="{self.dit_folder}" te="{self.te}" te_cls="{self.te_cls}" te_folder="{self.te_folder}" te_hijack={self.te_hijack} vae_hijack={self.vae_hijack} vae_remote={self.vae_remote} workflow="{self.workflow}" base={self.base}'
def getpipe(package, name, _default=None):
if package is None:
return None
try:
cls = getattr(package, name, _default)
return cls
except Exception as e:
log.error(f'Load video: error loading class "{name}" from package "{package.__name__}": {e}')
return None
def init_overrides():
from pipelines.cosmos import safety_checker
sys.modules['cosmos_guardrail'] = safety_checker
try:
t0 = time.time()
init_overrides()
models = {
'None': [],
'Hunyuan Video': [
Model(name='None'),
Model(name='Hunyuan Video 1.5 T2V 720p',
url='https://huggingface.co/tencent/HunyuanVideo-1.5',
vae_remote=False,
repo='hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-720p_t2v',
repo_cls='HunyuanVideo15Pipeline',
te_cls='Qwen2_5_VLTextModel',
dit_cls='HunyuanVideo15Transformer3DModel'),
Model(name='Hunyuan Video 1.5 I2V 720p',
url='https://huggingface.co/tencent/HunyuanVideo-1.5',
vae_remote=False,
repo='hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-720p_i2v',
repo_cls='HunyuanVideo15ImageToVideoPipeline',
te_cls='Qwen2_5_VLTextModel',
dit_cls='HunyuanVideo15Transformer3DModel'),
Model(name='Hunyuan Video 1.5 I2V 720p Distilled',
url='https://huggingface.co/tencent/HunyuanVideo-1.5',
vae_remote=False,
repo='hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-720p_i2v_distilled',
repo_cls='HunyuanVideo15ImageToVideoPipeline',
te_cls='Qwen2_5_VLTextModel',
dit_cls='HunyuanVideo15Transformer3DModel'),
Model(name='Hunyuan Video 1.5 T2V 480p',
url='https://huggingface.co/tencent/HunyuanVideo-1.5',
vae_remote=False,
repo='hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-480p_t2v',
repo_cls='HunyuanVideo15Pipeline',
te_cls='Qwen2_5_VLTextModel',
dit_cls='HunyuanVideo15Transformer3DModel'),
Model(name='Hunyuan Video 1.5 T2V 480p Distilled',
url='https://huggingface.co/tencent/HunyuanVideo-1.5',
vae_remote=False,
repo='hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-480p_t2v_distilled',
repo_cls='HunyuanVideo15Pipeline',
te_cls='Qwen2_5_VLTextModel',
dit_cls='HunyuanVideo15Transformer3DModel'),
Model(name='Hunyuan Video 1.5 I2V 480p',
url='https://huggingface.co/tencent/HunyuanVideo-1.5',
vae_remote=False,
repo='hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-480p_i2v',
repo_cls='HunyuanVideo15ImageToVideoPipeline',
te_cls='Qwen2_5_VLTextModel',
dit_cls='HunyuanVideo15Transformer3DModel'),
Model(name='Hunyuan Video 1.5 I2V 480p Distilled',
url='https://huggingface.co/tencent/HunyuanVideo-1.5',
vae_remote=False,
repo='hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-480p_i2v_distilled',
repo_cls='HunyuanVideo15ImageToVideoPipeline',
te_cls='Qwen2_5_VLTextModel',
dit_cls='HunyuanVideo15Transformer3DModel'),
Model(name='Hunyuan Video 1.0 T2V',
url='https://huggingface.co/tencent/HunyuanVideo',
vae_remote=True,
repo='hunyuanvideo-community/HunyuanVideo',
repo_cls='HunyuanVideoPipeline',
te_cls='LlamaModel',
dit_cls='HunyuanVideoTransformer3DModel'),
Model(name='Hunyuan Video 1.0 I2V', # https://github.com/huggingface/diffusers/pull/10983
url='https://huggingface.co/tencent/HunyuanVideo-I2V',
vae_remote=True,
repo='hunyuanvideo-community/HunyuanVideo-I2V',
repo_cls='HunyuanVideoImageToVideoPipeline',
te_cls='LlavaForConditionalGeneration',
dit_cls='HunyuanVideoTransformer3DModel'),
Model(name='SkyReels Hunyuan 1.0 T2V', # https://github.com/huggingface/diffusers/pull/10837
url='https://huggingface.co/Skywork/SkyReels-V1-Hunyuan-T2V',
vae_remote=True,
repo='hunyuanvideo-community/HunyuanVideo',
repo_cls='HunyuanVideoPipeline',
te_cls='LlamaModel',
dit='Skywork/SkyReels-V1-Hunyuan-T2V',
dit_folder=None,
dit_cls='HunyuanVideoTransformer3DModel'),
Model(name='SkyReels Hunyuan 1.0 I2V', # https://github.com/huggingface/diffusers/pull/10837
url='https://huggingface.co/Skywork/SkyReels-V1-Hunyuan-I2V',
vae_remote=True,
repo='hunyuanvideo-community/HunyuanVideo',
repo_cls='HunyuanSkyreelsImageToVideoPipeline',
te_cls='LlamaModel',
dit='Skywork/SkyReels-V1-Hunyuan-I2V',
dit_folder=None,
dit_cls='HunyuanVideoTransformer3DModel'),
Model(name='Fast Hunyuan 1.0 T2V', # https://github.com/hao-ai-lab/FastVideo/blob/8a77cf22c9b9e7f931f42bc4b35d21fd91d24e45/fastvideo/models/hunyuan/inference.py#L213
url='https://huggingface.co/FastVideo/FastHunyuan',
vae_remote=True,
repo='hunyuanvideo-community/HunyuanVideo',
repo_cls='HunyuanVideoPipeline',
te_cls='LlamaModel',
dit='FastVideo/FastHunyuan-diffusers',
dit_cls='HunyuanVideoTransformer3DModel'),
],
'LTX Video': [
Model(name='None'),
Model(name='─────── LTX-2.5 ───────'),
Model(name='─── Distilled ───'),
Model(name='LTXVideo 2.5 22B T2V Distilled',
url='https://huggingface.co/Lightricks/LTX-2.5',
repo='Lightricks/LTX-2.5-Diffusers',
repo_cls='LTX2Pipeline',
te_cls='Gemma4UnifiedForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.5 22B I2V Distilled',
url='https://huggingface.co/Lightricks/LTX-2.5',
repo='Lightricks/LTX-2.5-Diffusers',
repo_cls='LTX2ImageToVideoPipeline',
te_cls='Gemma4UnifiedForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.5 22B Condition Distilled',
url='https://huggingface.co/Lightricks/LTX-2.5',
repo='Lightricks/LTX-2.5-Diffusers',
repo_cls='LTX2ConditionPipeline',
te_cls='Gemma4UnifiedForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='─── Dev ───'), # transformer_full is the guided model, transformer the distilled one
Model(name='LTXVideo 2.5 22B T2V Dev',
url='https://huggingface.co/Lightricks/LTX-2.5',
repo='Lightricks/LTX-2.5-Diffusers',
repo_cls='LTX2Pipeline',
te_cls='Gemma4UnifiedForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel',
dit_folder='transformer_full',
dit_kwarg='transformer'),
Model(name='LTXVideo 2.5 22B I2V Dev',
url='https://huggingface.co/Lightricks/LTX-2.5',
repo='Lightricks/LTX-2.5-Diffusers',
repo_cls='LTX2ImageToVideoPipeline',
te_cls='Gemma4UnifiedForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel',
dit_folder='transformer_full',
dit_kwarg='transformer'),
Model(name='LTXVideo 2.5 22B Condition Dev',
url='https://huggingface.co/Lightricks/LTX-2.5',
repo='Lightricks/LTX-2.5-Diffusers',
repo_cls='LTX2ConditionPipeline',
te_cls='Gemma4UnifiedForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel',
dit_folder='transformer_full',
dit_kwarg='transformer'),
Model(name='─────── LTX-2.3 v1.1 ───────'),
Model(name='LTXVideo 2.3-1.1 22B T2V Distilled',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3-Distilled-1.1',
repo_cls='LTX2Pipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.3-1.1 22B I2V Distilled',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3-Distilled-1.1',
repo_cls='LTX2ImageToVideoPipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.3-1.1 22B T2V Distilled SDNQ-4Bit',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3-Distilled-1.1-sdnq-dynamic-int4',
repo_cls='LTX2Pipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.3-1.1 22B I2V Distilled SDNQ-4Bit',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3-Distilled-1.1-sdnq-dynamic-int4',
repo_cls='LTX2ImageToVideoPipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='─────── LTX-2.3 v1.0 ───────'),
Model(name='─── Base ───'),
Model(name='LTXVideo 2.3 22B T2V',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3',
repo_cls='LTX2Pipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.3 22B I2V',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3',
repo_cls='LTX2ImageToVideoPipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.3 22B Condition',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3',
repo_cls='LTX2ConditionPipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.3 22B T2V SDNQ-4Bit',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3-sdnq-dynamic-int4',
repo_cls='LTX2Pipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.3 22B I2V SDNQ-4Bit',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3-sdnq-dynamic-int4',
repo_cls='LTX2ImageToVideoPipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.3 22B Condition SDNQ-4Bit',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3-sdnq-dynamic-int4',
repo_cls='LTX2ConditionPipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='─── Distilled ───'),
Model(name='LTXVideo 2.3 22B T2V Distilled',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3-Distilled',
repo_cls='LTX2Pipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.3 22B I2V Distilled',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3-Distilled',
repo_cls='LTX2ImageToVideoPipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.3 22B Condition Distilled',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3-Distilled',
repo_cls='LTX2ConditionPipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.3 22B T2V Distilled SDNQ-4Bit',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3-Distilled-sdnq-dynamic-int4',
repo_cls='LTX2Pipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.3 22B I2V Distilled SDNQ-4Bit',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3-Distilled-sdnq-dynamic-int4',
repo_cls='LTX2ImageToVideoPipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.3 22B Condition Distilled SDNQ-4Bit',
url='https://huggingface.co/Lightricks/LTX-2.3',
repo='OzzyGT/LTX-2.3-Distilled-sdnq-dynamic-int4',
repo_cls='LTX2ConditionPipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='─────── LTX-2.0 ───────'),
Model(name='LTXVideo 2.0 19B T2V Dev',
url='https://huggingface.co/Lightricks/LTX-2',
repo='Lightricks/LTX-2',
repo_cls='LTX2Pipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.0 19B I2V Dev',
url='https://huggingface.co/Lightricks/LTX-2',
repo='Lightricks/LTX-2',
repo_cls='LTX2ImageToVideoPipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.0 19B T2V Dev SDNQ-4Bit',
url='https://huggingface.co/Disty0/LTX-2-SDNQ-4bit-dynamic',
repo='Disty0/LTX-2-SDNQ-4bit-dynamic',
repo_cls='LTX2Pipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='LTXVideo 2.0 19B I2V Dev SDNQ-4Bit',
url='https://huggingface.co/Disty0/LTX-2-SDNQ-4bit-dynamic',
repo='Disty0/LTX-2-SDNQ-4bit-dynamic',
repo_cls='LTX2ImageToVideoPipeline',
te_cls='Gemma3ForConditionalGeneration',
dit_cls='LTX2VideoTransformer3DModel'),
Model(name='─────── LTX-0.9.x ───────'),
Model(name='─── Base ───'),
Model(name='LTXVideo 0.9.7 13B Dev',
url='https://huggingface.co/Lightricks/LTX-Video-0.9.7-dev',
repo='a-r-r-o-w/LTX-Video-0.9.7-diffusers',
repo_cls='LTXConditionPipeline',
te_cls='T5EncoderModel',
dit_cls='LTXVideoTransformer3DModel'),
Model(name='LTXVideo 0.9.6 2B T2V',
url='https://huggingface.co/Lightricks/LTX-Video',
repo='Lightricks/LTX-Video',
repo_cls='LTXConditionPipeline',
te_cls='T5EncoderModel',
dit_cls='LTXVideoTransformer3DModel'),
Model(name='LTXVideo 0.9.6 2B I2V',
url='https://huggingface.co/Lightricks/LTX-Video',
repo='Lightricks/LTX-Video',
repo_cls='LTXConditionPipeline',
te_cls='T5EncoderModel',
dit_cls='LTXVideoTransformer3DModel'),
Model(name='LTXVideo 0.9.5 T2V', # https://github.com/huggingface/diffusers/pull/10968
url='https://huggingface.co/Lightricks/LTX-Video-0.9.5',
repo='Lightricks/LTX-Video-0.9.5',
repo_cls='LTXConditionPipeline',
te_cls='T5EncoderModel',
dit_cls='LTXVideoTransformer3DModel'),
Model(name='LTXVideo 0.9.5 I2V',
url='https://huggingface.co/Lightricks/LTX-Video-0.9.5',
repo='Lightricks/LTX-Video-0.9.5',
repo_cls='LTXConditionPipeline',
te_cls='T5EncoderModel',
dit_cls='LTXVideoTransformer3DModel'),
Model(name='LTXVideo 0.9.1 T2V',
url='https://huggingface.co/a-r-r-o-w/LTX-Video-0.9.1-diffusers',
repo='a-r-r-o-w/LTX-Video-0.9.1-diffusers',
repo_cls='LTXPipeline',
te_cls='T5EncoderModel',
dit_cls='LTXVideoTransformer3DModel'),
Model(name='LTXVideo 0.9.1 I2V',
url='https://huggingface.co/a-r-r-o-w/LTX-Video-0.9.1-diffusers',
repo='a-r-r-o-w/LTX-Video-0.9.1-diffusers',
repo_cls='LTXImageToVideoPipeline',
te_cls='T5EncoderModel',
dit_cls='LTXVideoTransformer3DModel'),
Model(name='LTXVideo 0.9.0 T2V',
url='https://huggingface.co/a-r-r-o-w/LTX-Video-diffusers',
repo='a-r-r-o-w/LTX-Video-diffusers',
repo_cls='LTXPipeline',
te_cls='T5EncoderModel',
dit_cls='LTXVideoTransformer3DModel'),
Model(name='LTXVideo 0.9.0 I2V',
url='https://huggingface.co/a-r-r-o-w/LTX-Video-diffusers',
repo='a-r-r-o-w/LTX-Video-diffusers',
repo_cls='LTXImageToVideoPipeline',
te_cls='T5EncoderModel',
dit_cls='LTXVideoTransformer3DModel'),
Model(name='─── Distilled ───'),
Model(name='LTXVideo 0.9.8 13B Distilled',
url='https://huggingface.co/Lightricks/LTX-Video-0.9.8-13B-distilled',
repo='Lightricks/LTX-Video-0.9.8-13B-distilled',
repo_cls='LTXConditionPipeline',
te_cls='T5EncoderModel',
dit_cls='LTXVideoTransformer3DModel'),
Model(name='LTXVideo 0.9.6 2B T2V Distilled',
url='https://huggingface.co/Lightricks/LTX-Video-2B-0.9.6-Distilled-04-25',
repo='Lightricks/LTX-Video-2B-0.9.6-Distilled-04-25',
repo_cls='LTXConditionPipeline',
te_cls='T5EncoderModel',
dit_cls='LTXVideoTransformer3DModel'),
Model(name='LTXVideo 0.9.6 2B I2V Distilled',
url='https://huggingface.co/Lightricks/LTX-Video-2B-0.9.6-Distilled-04-25',
repo='Lightricks/LTX-Video-2B-0.9.6-Distilled-04-25',
repo_cls='LTXConditionPipeline',
te_cls='T5EncoderModel',
dit_cls='LTXVideoTransformer3DModel'),
],
'WAN Video': [
Model(name='None'),
Model(name='WAN 2.2 5B T2V',
url='https://huggingface.co/Wan-AI/Wan2.2-TI2V-5B-Diffusers',
repo='Wan-AI/Wan2.2-TI2V-5B-Diffusers',
repo_cls='WanPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanTransformer3DModel'),
Model(name='WAN 2.2 5B I2V',
url='https://huggingface.co/Wan-AI/Wan2.2-TI2V-5B-Diffusers',
repo='Wan-AI/Wan2.2-TI2V-5B-Diffusers',
repo_cls='WanImageToVideoPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanTransformer3DModel'),
Model(name='WAN 2.2 A14B T2V',
url='https://huggingface.co/Wan-AI/Wan2.2-T2V-A14B-Diffusers',
repo='Wan-AI/Wan2.2-T2V-A14B-Diffusers',
repo_cls='WanPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanTransformer3DModel',
dit_folder=("transformer", "transformer_2")),
Model(name='WAN 2.2 A14B I2V',
url='https://huggingface.co/Wan-AI/Wan2.2-I2V-A14B-Diffusers',
repo='Wan-AI/Wan2.2-I2V-A14B-Diffusers',
repo_cls='WanImageToVideoPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanTransformer3DModel',
dit_folder=("transformer", "transformer_2")),
Model(name='WAN 2.2 A14B SDNQ T2V',
url='https://huggingface.co/Disty0/Wan2.2-T2V-A14B-SDNQ-uint4-svd-r32',
repo='Disty0/Wan2.2-T2V-A14B-SDNQ-uint4-svd-r32',
repo_cls='WanPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanTransformer3DModel',
dit_folder=("transformer", "transformer_2")),
Model(name='WAN 2.2 A14B SDNQ I2V',
url='https://huggingface.co/Disty0/Wan2.2-I2V-A14B-SDNQ-uint4-svd-r32',
repo='Disty0/Wan2.2-I2V-A14B-SDNQ-uint4-svd-r32',
repo_cls='WanImageToVideoPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanTransformer3DModel',
dit_folder=("transformer", "transformer_2")),
Model(name='WAN 2.2 14B VACE',
url='https://huggingface.co/linoyts/Wan2.2-VACE-Fun-14B-diffusers',
repo='linoyts/Wan2.2-VACE-Fun-14B-diffusers',
repo_cls='WanVACEPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanVACETransformer3DModel',
dit_folder=("transformer", "transformer_2")),
Model(name='WAN 2.1 1.3B T2V',
url='https://huggingface.co/Wan-AI/Wan2.1-T2V-1.3B-Diffusers',
repo='Wan-AI/Wan2.1-T2V-1.3B-Diffusers',
repo_cls='WanPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanTransformer3DModel'),
Model(name='WAN 2.1 14B T2V',
url='https://huggingface.co/Wan-AI/Wan2.1-T2V-14B-Diffusers',
repo='Wan-AI/Wan2.1-T2V-14B-Diffusers',
repo_cls='WanPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanTransformer3DModel'),
Model(name='WAN 2.1 14B I2V 480p',
url='https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-480P-Diffusers',
repo='Wan-AI/Wan2.1-I2V-14B-480P-Diffusers',
repo_cls='WanImageToVideoPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanTransformer3DModel'),
Model(name='WAN 2.1 14B I2V 720p',
url='https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-720P-Diffusers',
repo='Wan-AI/Wan2.1-I2V-14B-720P-Diffusers',
repo_cls='WanImageToVideoPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanTransformer3DModel'),
Model(name='WAN 2.1 14B FLF2V 720p',
url='https://huggingface.co/Wan-AI/Wan2.1-FLF2V-14B-720P',
repo='Wan-AI/Wan2.1-FLF2V-14B-720P-diffusers',
repo_cls='WanImageToVideoPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanTransformer3DModel'),
Model(name='WAN 2.1 VACE 1.3B',
url='https://huggingface.co/Wan-AI/Wan2.1-VACE-1.3B-diffusers',
repo='Wan-AI/Wan2.1-VACE-1.3B-diffusers',
repo_cls='WanVACEPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanVACETransformer3DModel'),
Model(name='WAN 2.1 VACE 14B',
url='https://huggingface.co/Wan-AI/Wan2.1-VACE-14B-diffusers',
repo='Wan-AI/Wan2.1-VACE-14B-diffusers',
repo_cls='WanVACEPipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanVACETransformer3DModel'),
Model(name='WAN 2.2 Animate 14B',
url='https://huggingface.co/Wan-AI/Wan2.2-Animate-14B-Diffusers',
repo='Wan-AI/Wan2.2-Animate-14B-Diffusers',
repo_cls='WanAnimatePipeline',
te_cls='UMT5EncoderModel',
dit_cls='WanAnimateTransformer3DModel'),
],
'SkyReels V2': [
Model(name='None'),
Model(name='SkyReels-V2 T2V-DF 1.3B-540P',
url='https://huggingface.co/Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers',
repo='Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers',
repo_cls='SkyReelsV2DiffusionForcingPipeline',
repo_revision='refs/pr/1',
te_cls='UMT5EncoderModel',
dit_cls='SkyReelsV2Transformer3DModel'),
Model(name='SkyReels-V2 T2V-DF 14B-720P',
url='https://huggingface.co/Skywork/SkyReels-V2-DF-14B-720P-Diffusers',
repo='Skywork/SkyReels-V2-DF-14B-720P-Diffusers',
repo_cls='SkyReelsV2DiffusionForcingPipeline',
repo_revision='refs/pr/1',
te_cls='UMT5EncoderModel',
dit_cls='SkyReelsV2Transformer3DModel'),
Model(name='SkyReels-V2 I2V-DF 14B-720P',
url='https://huggingface.co/Skywork/SkyReels-V2-DF-14B-720P-Diffusers',
repo='Skywork/SkyReels-V2-DF-14B-720P-Diffusers',
repo_cls='SkyReelsV2DiffusionForcingImageToVideoPipeline',
repo_revision='refs/pr/1',
te_cls='UMT5EncoderModel',
dit_cls='SkyReelsV2Transformer3DModel'),
Model(name='SkyReels-V2 T2V 14B-720P',
url='https://huggingface.co/Skywork/SkyReels-V2-T2V-14B-720P-Diffusers',
repo='Skywork/SkyReels-V2-T2V-14B-720P-Diffusers',
repo_cls='SkyReelsV2Pipeline',
repo_revision='refs/pr/1',
te_cls='UMT5EncoderModel',
dit_cls='SkyReelsV2Transformer3DModel'),
Model(name='SkyReels-V2 I2V 14B-720P',
url='https://huggingface.co/Skywork/SkyReels-V2-I2V-14B-720P-Diffusers',
repo='Skywork/SkyReels-V2-I2V-14B-720P-Diffusers',
repo_cls='SkyReelsV2ImageToVideoPipeline',
repo_revision='refs/pr/1',
te_cls='UMT5EncoderModel',
dit_cls='SkyReelsV2Transformer3DModel'),
],
'Mochi Video': [
Model(name='None'),
Model(name='Mochi 1 20B T2V',
url='https://huggingface.co/genmo/mochi-1-preview',
repo='genmo/mochi-1-preview',
repo_cls='MochiPipeline',
te_cls='T5EncoderModel',
dit_cls='MochiTransformer3DModel'),
],
'Latte Video': [
Model(name='None'),
Model(name='Latte 1 1B T2V',
url='https://huggingface.co/maxin-cn/Latte-1',
repo='maxin-cn/Latte-1',
repo_cls='LattePipeline',
te_cls='T5EncoderModel',
dit_cls='LatteTransformer3DModel'),
],
'Allegro Video': [
Model(name='None'),
Model(name='Allegro 2.8B T2V',
url='https://huggingface.co/rhymes-ai/Allegro',
repo='rhymes-ai/Allegro',
repo_cls='AllegroPipeline',
te_cls='T5EncoderModel',
dit_cls='AllegroTransformer3DModel'),
],
'Cog Video': [
Model(name='None'),
Model(name='CogVideoX 1.0 2B T2V',
url='https://huggingface.co/THUDM/CogVideoX-2b',
repo='THUDM/CogVideoX-2b',
repo_cls='CogVideoXPipeline',
te_cls='T5EncoderModel',
dit_cls='CogVideoXTransformer3DModel'),
Model(name='CogVideoX 1.0 5B T2V',
url='https://huggingface.co/THUDM/CogVideoX-5b',
repo='THUDM/CogVideoX-5b',
repo_cls='CogVideoXPipeline',
te_cls='T5EncoderModel',
dit_cls='CogVideoXTransformer3DModel'),
Model(name='CogVideoX 1.0 5B I2V',
url='https://huggingface.co/THUDM/CogVideoX-5b-I2V',
repo='THUDM/CogVideoX-5b-I2V',
repo_cls='CogVideoXImageToVideoPipeline',
te_cls='T5EncoderModel',
dit_cls='CogVideoXTransformer3DModel'),
Model(name='CogVideoX 1.5 5B T2V',
url='https://huggingface.co/THUDM/CogVideoX1.5-5B',
repo='THUDM/CogVideoX1.5-5B',
repo_cls='CogVideoXPipeline',
te_cls='T5EncoderModel',
dit_cls='CogVideoXTransformer3DModel'),
Model(name='CogVideoX 1.5 5B I2V',
url='https://huggingface.co/THUDM/CogVideoX1.5-5B-I2V',
repo='THUDM/CogVideoX1.5-5B-I2V',
repo_cls='CogVideoXImageToVideoPipeline',
te_cls='T5EncoderModel',
dit_cls='CogVideoXTransformer3DModel'),
Model(name='Index Anisora 1.0 5B I2V',
url='https://huggingface.co/Disty0/Index-anisora-5B-diffusers',
repo='Disty0/Index-anisora-5B-diffusers',
repo_cls='CogVideoXImageToVideoPipeline',
te_cls='T5EncoderModel',
dit_cls='CogVideoXTransformer3DModel'),
Model(name='Index Anisora 1.0 5B RL I2V',
url='https://huggingface.co/Disty0/Index-anisora-5B_RL-diffusers',
repo='Disty0/Index-anisora-5B_RL-diffusers',
repo_cls='CogVideoXImageToVideoPipeline',
te_cls='T5EncoderModel',
dit_cls='CogVideoXTransformer3DModel'),
],
'nVidia Cosmos': [
Model(name='nvidia Cosmos Predict2 2B I2V',
url='https://huggingface.co/nvidia/Cosmos-Predict2-2B-Video2World',
repo='nvidia/Cosmos-Predict2-2B-Video2World',
repo_cls='Cosmos2VideoToWorldPipeline',
te_cls='T5EncoderModel',
dit_cls='CosmosTransformer3DModel'),
],
'nVidia SANA': [
Model(name='SANA Video 2B 480p T2V',
url='https://huggingface.co/Efficient-Large-Model/SANA-Video_2B_480p_diffusers',
repo='Efficient-Large-Model/SANA-Video_2B_480p_diffusers',
repo_cls='SanaVideoPipeline',
te_cls='Gemma2Model',
dit_cls='SanaVideoTransformer3DModel'),
],
'Kandinsky': [
Model(name='Kandinsky 5.0 Lite 5s SFT T2V',
url='https://huggingface.co/kandinskylab/Kandinsky-5.0-T2V-Lite-sft-5s-Diffusers',
repo='kandinskylab/Kandinsky-5.0-T2V-Lite-sft-5s-Diffusers',
repo_cls='Kandinsky5T2VPipeline',
te_cls='Qwen2_5_VLForConditionalGeneration',
dit_cls='Kandinsky5Transformer3DModel'),
Model(name='Kandinsky 5.0 Lite 5s CFG-distilled T2V',
url='https://huggingface.co/kandinskylab/Kandinsky-5.0-T2V-Lite-nocfg-5s-Diffusers',
repo='kandinskylab/Kandinsky-5.0-T2V-Lite-nocfg-5s-Diffusers',
repo_cls='Kandinsky5T2VPipeline',
te_cls='Qwen2_5_VLForConditionalGeneration',
dit_cls='Kandinsky5Transformer3DModel'),
Model(name='Kandinsky 5.0 Lite 5s Steps-distilled T2V',
url='https://huggingface.co/kandinskylab/Kandinsky-5.0-T2V-Lite-distilled16steps-5s-Diffusers',
repo='kandinskylab/Kandinsky-5.0-T2V-Lite-distilled16steps-5s-Diffusers',
repo_cls='Kandinsky5T2VPipeline',
te_cls='Qwen2_5_VLForConditionalGeneration',
dit_cls='Kandinsky5Transformer3DModel'),
Model(name='Kandinsky 5.0 Lite 10s SFT T2V',
url='https://huggingface.co/kandinskylab/Kandinsky-5.0-T2V-Lite-sft-10s-Diffusers',
repo='kandinskylab/Kandinsky-5.0-T2V-Lite-sft-10s-Diffusers',
repo_cls='Kandinsky5T2VPipeline',
te_cls='Qwen2_5_VLForConditionalGeneration',
dit_cls='Kandinsky5Transformer3DModel'),
Model(name='Kandinsky 5.0 Lite 10s CFG-distilled T2V',
url='https://huggingface.co/kandinskylab/Kandinsky-5.0-T2V-Lite-nocfg-10s-Diffusers',
repo='kandinskylab/Kandinsky-5.0-T2V-Lite-nocfg-10s-Diffusers',
repo_cls='Kandinsky5T2VPipeline',
te_cls='Qwen2_5_VLForConditionalGeneration',
dit_cls='Kandinsky5Transformer3DModel'),
Model(name='Kandinsky 5.0 Lite 10s Steps-distilled T2V',
url='https://huggingface.co/kandinskylab/Kandinsky-5.0-T2V-Lite-distilled16steps-10s-Diffusers',
repo='kandinskylab/Kandinsky-5.0-T2V-Lite-distilled16steps-10s-Diffusers',
repo_cls='Kandinsky5T2VPipeline',
te_cls='Qwen2_5_VLForConditionalGeneration',
dit_cls='Kandinsky5Transformer3DModel'),
Model(name='Kandinsky 5.0 Pro 5s SFT T2V',
url='https://huggingface.co/kandinskylab/Kandinsky-5.0-T2V-Pro-sft-5s-Diffusers',
repo='kandinskylab/Kandinsky-5.0-T2V-Pro-sft-5s-Diffusers',
repo_cls='Kandinsky5T2VPipeline',
te_cls='Qwen2_5_VLForConditionalGeneration',
dit_cls='Kandinsky5Transformer3DModel'),
Model(name='Kandinsky 5.0 Pro 5s SFT I2V',
url='https://huggingface.co/kandinskylab/Kandinsky-5.0-I2V-Pro-sft-5s-Diffusers',
repo='kandinskylab/Kandinsky-5.0-I2V-Pro-sft-5s-Diffusers',
repo_cls='Kandinsky5I2VPipeline',
te_cls='Qwen2_5_VLForConditionalGeneration',
dit_cls='Kandinsky5Transformer3DModel'),
],
'MiniMax': [
Model(name='None'),
Model(name='MiniMax H3 SDNQ uint4',
url='https://huggingface.co/MiniMaxAI/MiniMax-H3',
repo='OzzyGT/MiniMax_H3_sdnq_dynamic_4bit',
repo_cls='MiniMaxH3ModularPipeline',
workflow='fl2va',
base=True,
te_cls=None,
dit_cls=None,
te_hijack=False,
image_hijack=False,
vae_hijack=False,
vae_remote=False),
Model(name='MiniMax H3 SDNQ uint4 Ref2VA',
url='https://huggingface.co/MiniMaxAI/MiniMax-H3',
repo='OzzyGT/MiniMax_H3_sdnq_dynamic_4bit',
repo_cls='MiniMaxH3ModularPipeline',
workflow='ref2va',
base=True,
te_cls=None,
dit_cls=None,
te_hijack=False,
image_hijack=False,
vae_hijack=False,
vae_remote=False),
Model(name='MiniMax H3 Pruned SDNQ uint4',
url='https://huggingface.co/MiniMaxAI/MiniMax-H3',
repo='OzzyGT/MiniMax_H3_sdnq_4bit_pruned',
repo_cls='MiniMaxH3ModularPipeline',
workflow='fl2va',
base=True,
te_cls=None,
dit_cls=None,
te_hijack=False,
image_hijack=False,
vae_hijack=False,
vae_remote=False),
Model(name='MiniMax H3 Pruned SDNQ uint4 Ref2VA',
url='https://huggingface.co/MiniMaxAI/MiniMax-H3',
repo='OzzyGT/MiniMax_H3_sdnq_4bit_pruned',
repo_cls='MiniMaxH3ModularPipeline',
workflow='ref2va',
base=True,
te_cls=None,
dit_cls=None,
te_hijack=False,
image_hijack=False,
vae_hijack=False,
vae_remote=False),
Model(name='MiniMax H3',
url='https://huggingface.co/MiniMaxAI/MiniMax-H3',
repo='MiniMaxAI/MiniMax-H3',
repo_cls='MiniMaxH3ModularPipeline',
workflow='fl2va',
base=True,
te_cls=None,
dit_cls=None,
te_hijack=False,
image_hijack=False,
vae_hijack=False,
vae_remote=False),
Model(name='MiniMax H3 Ref2VA',
url='https://huggingface.co/MiniMaxAI/MiniMax-H3',
repo='MiniMaxAI/MiniMax-H3',
repo_cls='MiniMaxH3ModularPipeline',
workflow='ref2va',
base=True,
te_cls=None,
dit_cls=None,
te_hijack=False,
image_hijack=False,
vae_hijack=False,
vae_remote=False),
],
'Google Veo': [
Model(name='Google Veo 3.1 T2V',
url='https://gemini.google/overview/video-generation/',
repo='veo-3.1-generate-preview',
custom='GoogleVeoVideoPipeline',
repo_cls=None,
te_cls=None,
dit_cls=None),
Model(name='Google Veo 3.1 I2V',
url='https://gemini.google/overview/video-generation/',
repo='veo-3.1-generate-preview',
custom='GoogleVeoVideoPipeline',
repo_cls=None,
te_cls=None,
dit_cls=None),
],
}
t1 = time.time()
errors = 0
total = 0
for model in models.values():
for m in model:
if m.name == 'None':
continue
total += 1
log.debug(f'Networks: type="video" engines={len(models)} models={total} errors={errors} time={t1 - t0:.2f}')
except Exception as e:
models = {}
log.error(f'Networks: type="video" {e}')
def is_model(row: Model) -> bool:
"""Rows that name a loadable model; the 'None' placeholder and the dropdown separators do not."""
return row.name != 'None' and not row.name.startswith('─')
def engines() -> list[str]:
"""Engine families with at least one real model, sentinel rows excluded."""
return [engine for engine, rows in models.items() if any(is_model(row) for row in rows)]
def model_names(engine: str) -> list[str]:
"""Real model names for an engine, sentinel rows excluded."""
return [row.name for row in models.get(engine, []) if is_model(row)]
def find(engine: str, name: str) -> Model | None:
"""Case-insensitive exact-name lookup; sentinel rows are not models."""
for family, rows in models.items():
if family.lower() != (engine or '').lower():
continue
for row in rows:
if is_model(row) and row.name.lower() == (name or '').lower():
return row
return None
def workflow_for_class(cls_name: str) -> str | None:
"""Workflow of the first registry row whose pipeline class matches, if any."""
for rows in models.values():
for row in rows:
if row.workflow is not None and row.repo_cls is not None:
row_cls = row.repo_cls if isinstance(row.repo_cls, str) else row.repo_cls.__name__
if row_cls == cls_name:
return row.workflow
return None
def pipeline_classes() -> set[str]:
"""Class names of every registry pipeline; repo_cls is a string before load and a class after video_load resolves it in place."""
classes = set()
for rows in models.values():
for row in rows:
if row.repo_cls is not None:
classes.add(row.repo_cls if isinstance(row.repo_cls, str) else row.repo_cls.__name__)
if row.custom is not None:
classes.add(row.custom)
return classes
NAME_MODES = ( # markers a row name carries to declare its inputs, in the order run() tests them
('T2V', 't2v'),
('I2V', 'i2v'),
('FLF2V', 'flf2v'),
('VACE', 'vace'),
('Animate', 'animate'),
)
CLASS_MODES = { # the mode a pipeline class implies, for rows whose name declares nothing
'HunyuanVideoPipeline': 't2v',
'HunyuanVideo15Pipeline': 't2v',
'HunyuanVideoImageToVideoPipeline': 'i2v',
'HunyuanVideo15ImageToVideoPipeline': 'i2v',
'HunyuanSkyreelsImageToVideoPipeline': 'i2v',
'LTXPipeline': 't2v',
'LTX2Pipeline': 't2v',
'LTXImageToVideoPipeline': 'i2v',
'LTX2ImageToVideoPipeline': 'i2v',
'LTXConditionPipeline': 'condition',
'LTX2ConditionPipeline': 'condition',
'WanPipeline': 't2v',
'WanImageToVideoPipeline': 'i2v',
'WanVACEPipeline': 'vace',
'WanAnimatePipeline': 'animate',
'SkyReelsV2Pipeline': 't2v',
'SkyReelsV2DiffusionForcingPipeline': 't2v',
'SkyReelsV2ImageToVideoPipeline': 'i2v',
'SkyReelsV2DiffusionForcingImageToVideoPipeline': 'i2v',
'MochiPipeline': 't2v',
'LattePipeline': 't2v',
'AllegroPipeline': 't2v',
'CogVideoXPipeline': 't2v',
'CogVideoXImageToVideoPipeline': 'i2v',
'Cosmos2VideoToWorldPipeline': 'i2v',
'SanaVideoPipeline': 't2v',
'Kandinsky5T2VPipeline': 't2v',
'Kandinsky5I2VPipeline': 'i2v',
'MiniMaxH3ModularPipeline': 'workflow',
'GoogleVeoVideoPipeline': 't2v',
}
def dispatch_mode(row: Model) -> str:
"""How a row's inputs are wired: workflow, t2v, i2v, flf2v, vace, animate, condition, or unknown.
Name markers are read before the pipeline class, since one class serves several modes: six
LTXConditionPipeline rows are named T2V or I2V and generate as such.
"""
if row is None:
return 'unknown'
if row.workflow is not None:
return 'workflow'
for marker, mode in NAME_MODES:
if marker in (row.name or ''):
return mode
cls = row.repo_cls if isinstance(row.repo_cls, str) else getattr(row.repo_cls, '__name__', None)
return CLASS_MODES.get(cls or row.custom, 'unknown')