mirror of
https://github.com/vladmandic/automatic
synced 2026-09-11 23:56:44 +02:00
2c66039c37
Two ladders decided how a model's inputs get wired, and they had drifted: the api reported an unrecognized row as t2v while run() fell through to a branch that wires nothing. Eight LTX condition rows sat in that gap, advertised as text to video and generating without their conditioning. dispatch_mode answers once from the row, reading name markers before the pipeline class because one class serves several modes: six LTXConditionPipeline rows are named T2V or I2V and generate as such. Rows that declare nothing now resolve as condition, and the api reports that instead of guessing t2v.
887 lines
43 KiB
Python
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 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 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 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.info(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')
|