diff --git a/CHANGELOG.md b/CHANGELOG.md index b979e528a..0a7be2368 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,11 @@ # Change Log for SD.Next -## Update for 2025-10-25 +## Update for 2025-10-26 + +### Highlights for 2025-10-26 + +### Details for 2025-10-26 -- **Models** - - [Tencent HunyuanImage 2.1](https://huggingface.co/tencent/HunyuanImage-2.1) in *full*, *distilled* and *refiner* variants - HunyuanImage-2.1 is a large (51GB) T2I model capable of natively generating 2K images and uses Qwen2.5 + T5 text-encoders and 32x VAE - **Reference** networks section is now split into actual *Base* models plus: - **Quantized**: pre-quantized variants of the base models using SDNQ-SVD quantization for optimal quality and smallest possible resource usage examples: *FLUX.1-Dev/Krea/Kontext/Schnell, Qwen-Image/Edit/2509, Chroma1-HD, WAN-2.2-A44B, etc.* @@ -12,6 +13,9 @@ examples: *Turbo, Lightning, Lite, SRPO, Distill, Pruning, etc.* - **Community**: community highlights examples: *Tempest, Juggernaut, Illustrious, Pony, NoobAI, etc.* +- **Models** + - [Tencent HunyuanImage 2.1](https://huggingface.co/tencent/HunyuanImage-2.1) in *full*, *distilled* and *refiner* variants + HunyuanImage-2.1 is a large (51GB) T2I model capable of natively generating 2K images and uses Qwen2.5 + T5 text-encoders and 32x VAE - **Features** - **offline mode**: enable in *settings -> hugginface* enables fully offline mode where previously downloaded models can be used as-is @@ -28,6 +32,8 @@ - enhance `--optional` flag to pre-install optional packages - add `[lora]` to recognized filename patterns - add **Apple DepthPro** controlnet processor, thanks @nolbert82 + - add **Qwen 3-VL** llm for interrogate and prompt enhance, thanks @CalamitousFelicitousness + this includes *2B, 4B and 8B* variants - when using **shared-t5** *(default)*, it will load standard or pre-quant depending on model - **Fixes** - startup error with `--profile` enabled if using `--skip` @@ -45,6 +51,7 @@ - installer handle different `opencv` package variants - fix using pre-quantized shared-t5 - catch `xet` warnings + - validate pipelines on import ## Update for 2025-10-18 diff --git a/modules/video_models/models_def.py b/modules/video_models/models_def.py index 0b97935d0..54fde1d8b 100644 --- a/modules/video_models/models_def.py +++ b/modules/video_models/models_def.py @@ -39,344 +39,354 @@ try: url='https://huggingface.co/tencent/HunyuanVideo', vae_remote=True, repo='hunyuanvideo-community/HunyuanVideo', - repo_cls=diffusers.HunyuanVideoPipeline, - te_cls=transformers.LlamaModel, - dit_cls=diffusers.HunyuanVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'HunyuanVideoPipeline', None), + te_cls=getattr(transformers, 'LlamaModel', None), + dit_cls=getattr(diffusers, 'HunyuanVideoTransformer3DModel', None)), Model(name='Hunyuan Video 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=diffusers.HunyuanVideoImageToVideoPipeline, - te_cls=transformers.LlavaForConditionalGeneration, - dit_cls=diffusers.HunyuanVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'HunyuanVideoImageToVideoPipeline', None), + te_cls=getattr(transformers, 'LlavaForConditionalGeneration', None), + dit_cls=getattr(diffusers, 'HunyuanVideoTransformer3DModel', None)), Model(name='SkyReels Hunyuan 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=diffusers.HunyuanVideoPipeline, - te_cls=transformers.LlamaModel, + repo_cls=getattr(diffusers, 'HunyuanVideoPipeline', None), + te_cls=getattr(transformers, 'LlamaModel', None), dit='Skywork/SkyReels-V1-Hunyuan-T2V', dit_folder=None, - dit_cls=diffusers.HunyuanVideoTransformer3DModel), + dit_cls=getattr(diffusers, 'HunyuanVideoTransformer3DModel', None)), Model(name='SkyReels Hunyuan 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=diffusers.HunyuanSkyreelsImageToVideoPipeline, - te_cls=transformers.LlamaModel, + repo_cls=getattr(diffusers, 'HunyuanSkyreelsImageToVideoPipeline', None), + te_cls=getattr(transformers, 'LlamaModel', None), dit='Skywork/SkyReels-V1-Hunyuan-I2V', dit_folder=None, - dit_cls=diffusers.HunyuanVideoTransformer3DModel), + dit_cls=getattr(diffusers, 'HunyuanVideoTransformer3DModel', None)), Model(name='Fast Hunyuan 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=diffusers.HunyuanVideoPipeline, - te_cls=transformers.LlamaModel, + repo_cls=getattr(diffusers, 'HunyuanVideoPipeline', None), + te_cls=getattr(transformers, 'LlamaModel', None), dit='FastVideo/FastHunyuan-diffusers', - dit_cls=diffusers.HunyuanVideoTransformer3DModel), + dit_cls=getattr(diffusers, 'HunyuanVideoTransformer3DModel', None)), ], 'LTX Video': [ Model(name='None'), Model(name='LTXVideo 0.9.8 13B', url='https://huggingface.co/Lightricks/LTX-Video-0.9.8-13B-distilled', repo='Lightricks/LTX-Video-0.9.8-13B-distilled', - repo_cls=diffusers.LTXConditionPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.LTXVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'LTXConditionPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'LTXVideoTransformer3DModel', None)), Model(name='LTXVideo 0.9.7 13B', 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=diffusers.LTXConditionPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.LTXVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'LTXConditionPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'LTXVideoTransformer3DModel', None)), Model(name='LTXVideo 0.9.6 2B T2V', url='https://huggingface.co/Lightricks/LTX-Video', repo='Lightricks/LTX-Video', - repo_cls=diffusers.LTXConditionPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.LTXVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'LTXConditionPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'LTXVideoTransformer3DModel', None)), Model(name='LTXVideo 0.9.6 2B I2V', url='https://huggingface.co/Lightricks/LTX-Video', repo='Lightricks/LTX-Video', - repo_cls=diffusers.LTXConditionPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.LTXVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'LTXConditionPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'LTXVideoTransformer3DModel', None)), 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=diffusers.LTXConditionPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.LTXVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'LTXConditionPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'LTXVideoTransformer3DModel', None)), 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=diffusers.LTXConditionPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.LTXVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'LTXConditionPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'LTXVideoTransformer3DModel', None)), 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=diffusers.LTXConditionPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.LTXVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'LTXConditionPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'LTXVideoTransformer3DModel', None)), 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=diffusers.LTXConditionPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.LTXVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'LTXConditionPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'LTXVideoTransformer3DModel', None)), 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=diffusers.LTXPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.LTXVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'LTXPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'LTXVideoTransformer3DModel', None)), 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=diffusers.LTXImageToVideoPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.LTXVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'LTXImageToVideoPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'LTXVideoTransformer3DModel', None)), 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=diffusers.LTXPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.LTXVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'LTXPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'LTXVideoTransformer3DModel', None)), 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=diffusers.LTXImageToVideoPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.LTXVideoTransformer3DModel), + repo_cls=getattr(diffusers, 'LTXImageToVideoPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'LTXVideoTransformer3DModel', None)), ], '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=diffusers.WanPipeline, - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.WanTransformer3DModel), + repo_cls=getattr(diffusers, 'WanPipeline', None), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'WanTransformer3DModel', None)), 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=diffusers.WanImageToVideoPipeline, - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.WanTransformer3DModel), + repo_cls=getattr(diffusers, 'WanImageToVideoPipeline', None), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'WanTransformer3DModel', None)), 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=diffusers.WanPipeline, - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.WanTransformer3DModel, + repo_cls=getattr(diffusers, 'WanPipeline', None), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'WanTransformer3DModel', None), 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=diffusers.WanImageToVideoPipeline, - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.WanTransformer3DModel, + repo_cls=getattr(diffusers, 'WanImageToVideoPipeline', None), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'WanTransformer3DModel', None), 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=diffusers.WanVACEPipeline, - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.WanVACETransformer3DModel, + repo_cls=getattr(diffusers, 'WanVACEPipeline', None), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'WanVACETransformer3DModel', None), 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=diffusers.WanPipeline, - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.WanTransformer3DModel), + repo_cls=getattr(diffusers, 'WanPipeline', None), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'WanTransformer3DModel', None)), 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=diffusers.WanPipeline, - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.WanTransformer3DModel), + repo_cls=getattr(diffusers, 'WanPipeline', None), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'WanTransformer3DModel', None)), 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=diffusers.WanImageToVideoPipeline, - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.WanTransformer3DModel), + repo_cls=getattr(diffusers, 'WanImageToVideoPipeline', None), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'WanTransformer3DModel', None)), 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=diffusers.WanImageToVideoPipeline, - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.WanTransformer3DModel), + repo_cls=getattr(diffusers, 'WanImageToVideoPipeline', None), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'WanTransformer3DModel', None)), 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=diffusers.WanImageToVideoPipeline, - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.WanTransformer3DModel), + repo_cls=getattr(diffusers, 'WanImageToVideoPipeline', None), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'WanTransformer3DModel', None)), 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=diffusers.WanVACEPipeline, - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.WanVACETransformer3DModel), + repo_cls=getattr(diffusers, 'WanVACEPipeline', None), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'WanVACETransformer3DModel', None)), 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=diffusers.WanVACEPipeline, - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.WanVACETransformer3DModel), + repo_cls=getattr(diffusers, 'WanVACEPipeline', None), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'WanVACETransformer3DModel', None)), ], '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=diffusers.SkyReelsV2DiffusionForcingPipeline, + repo_cls=getattr(diffusers, 'SkyReelsV2DiffusionForcingPipeline', None), repo_revision='refs/pr/1', - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.SkyReelsV2Transformer3DModel), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'SkyReelsV2Transformer3DModel', None)), 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=diffusers.SkyReelsV2DiffusionForcingPipeline, + repo_cls=getattr(diffusers, 'SkyReelsV2DiffusionForcingPipeline', None), repo_revision='refs/pr/1', - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.SkyReelsV2Transformer3DModel), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'SkyReelsV2Transformer3DModel', None)), 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=diffusers.SkyReelsV2DiffusionForcingImageToVideoPipeline, + repo_cls=getattr(diffusers, 'SkyReelsV2DiffusionForcingImageToVideoPipeline', None), repo_revision='refs/pr/1', - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.SkyReelsV2Transformer3DModel), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'SkyReelsV2Transformer3DModel', None)), 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=diffusers.SkyReelsV2Pipeline, + repo_cls=getattr(diffusers, 'SkyReelsV2Pipeline', None), repo_revision='refs/pr/1', - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.SkyReelsV2Transformer3DModel), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'SkyReelsV2Transformer3DModel', None)), 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=diffusers.SkyReelsV2ImageToVideoPipeline, + repo_cls=getattr(diffusers, 'SkyReelsV2ImageToVideoPipeline', None), repo_revision='refs/pr/1', - te_cls=transformers.UMT5EncoderModel, - dit_cls=diffusers.SkyReelsV2Transformer3DModel), + te_cls=getattr(transformers, 'UMT5EncoderModel', None), + dit_cls=getattr(diffusers, 'SkyReelsV2Transformer3DModel', None)), ], '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=diffusers.MochiPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.MochiTransformer3DModel), + repo_cls=getattr(diffusers, 'MochiPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'MochiTransformer3DModel', None)), ], '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=diffusers.LattePipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.LatteTransformer3DModel), + repo_cls=getattr(diffusers, 'LattePipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'LatteTransformer3DModel', None)), ], 'Allegro Video': [ Model(name='None'), Model(name='Allegro T2V', url='https://huggingface.co/rhymes-ai/Allegro', repo='rhymes-ai/Allegro', - repo_cls=diffusers.AllegroPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.AllegroTransformer3DModel), + repo_cls=getattr(diffusers, 'AllegroPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'AllegroTransformer3DModel', None)), ], '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=diffusers.CogVideoXPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.CogVideoXTransformer3DModel), + repo_cls=getattr(diffusers, 'CogVideoXPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'CogVideoXTransformer3DModel', None)), Model(name='CogVideoX 1.0 5B T2V', url='https://huggingface.co/THUDM/CogVideoX-5b', repo='THUDM/CogVideoX-5b', - repo_cls=diffusers.CogVideoXPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.CogVideoXTransformer3DModel), + repo_cls=getattr(diffusers, 'CogVideoXPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'CogVideoXTransformer3DModel', None)), Model(name='CogVideoX 1.0 5B I2V', url='https://huggingface.co/THUDM/CogVideoX-5b-I2V', repo='THUDM/CogVideoX-5b-I2V', - repo_cls=diffusers.CogVideoXImageToVideoPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.CogVideoXTransformer3DModel), + repo_cls=getattr(diffusers, 'CogVideoXImageToVideoPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'CogVideoXTransformer3DModel', None)), Model(name='CogVideoX 1.5 5B T2V', url='https://huggingface.co/THUDM/CogVideoX1.5-5B', repo='THUDM/CogVideoX1.5-5B', - repo_cls=diffusers.CogVideoXPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.CogVideoXTransformer3DModel), + repo_cls=getattr(diffusers, 'CogVideoXPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'CogVideoXTransformer3DModel', None)), Model(name='CogVideoX 1.5 5B I2V', url='https://huggingface.co/THUDM/CogVideoX1.5-5B-I2V', repo='THUDM/CogVideoX1.5-5B-I2V', - repo_cls=diffusers.CogVideoXImageToVideoPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.CogVideoXTransformer3DModel), + repo_cls=getattr(diffusers, 'CogVideoXImageToVideoPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'CogVideoXTransformer3DModel', None)), 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=diffusers.CogVideoXImageToVideoPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.CogVideoXTransformer3DModel), + repo_cls=getattr(diffusers, 'CogVideoXImageToVideoPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'CogVideoXTransformer3DModel', None)), 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=diffusers.CogVideoXImageToVideoPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.CogVideoXTransformer3DModel), + repo_cls=getattr(diffusers, 'CogVideoXImageToVideoPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'CogVideoXTransformer3DModel', None)), ], 'nVidia Cosmos': [ Model(name='nvidia Cosmos Predict2 2B I2V', url='https://huggingface.co/nvidia/Cosmos-Predict2-2B-Text2Image', repo='nvidia/Cosmos-Predict2-2B-Video2World', - repo_cls=diffusers.Cosmos2VideoToWorldPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.CosmosTransformer3DModel), + repo_cls=getattr(diffusers, 'Cosmos2VideoToWorldPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'CosmosTransformer3DModel', None)), Model(name='nvidia Cosmos Predict2 2B I2V', url='https://huggingface.co/nvidia/Cosmos-Predict2-2B-Text2Image', repo='nvidia/Cosmos-Predict2-2B-Video2World', - repo_cls=diffusers.Cosmos2VideoToWorldPipeline, - te_cls=transformers.T5EncoderModel, - dit_cls=diffusers.CosmosTransformer3DModel), + repo_cls=getattr(diffusers, 'Cosmos2VideoToWorldPipeline', None), + te_cls=getattr(transformers, 'T5EncoderModel', None), + dit_cls=getattr(diffusers, 'CosmosTransformer3DModel', None)), ], 'Kandinsky': [ Model(name='Kandinsky 5.0 Lite SFT T2V', url='https://huggingface.co/ai-forever/Kandinsky-5.0-T2V-Lite-sft-5s-Diffusers', repo='ai-forever/Kandinsky-5.0-T2V-Lite-sft-5s-Diffusers', - repo_cls=diffusers.Kandinsky5T2VPipeline, - te_cls=transformers.Qwen2_5_VLForConditionalGeneration, - dit_cls=diffusers.Kandinsky5Transformer3DModel), + repo_cls=getattr(diffusers, 'Kandinsky5T2VPipeline', None), + te_cls=getattr(transformers, 'Qwen2_5_VLForConditionalGeneration', None), + dit_cls=getattr(diffusers, 'Kandinsky5Transformer3DModel', None)), Model(name='Kandinsky 5.0 Lite CFG-distilled T2V', url='https://huggingface.co/ai-forever/Kandinsky-5.0-T2V-Lite-nocfg-5s-Diffusers', repo='ai-forever/Kandinsky-5.0-T2V-Lite-nocfg-5s-Diffusers', - repo_cls=diffusers.Kandinsky5T2VPipeline, - te_cls=transformers.Qwen2_5_VLForConditionalGeneration, - dit_cls=diffusers.Kandinsky5Transformer3DModel), + repo_cls=getattr(diffusers, 'Kandinsky5T2VPipeline', None), + te_cls=getattr(transformers, 'Qwen2_5_VLForConditionalGeneration', None), + dit_cls=getattr(diffusers, 'Kandinsky5Transformer3DModel', None)), Model(name='Kandinsky 5.0 Lite Steps-distilled T2V', url='https://huggingface.co/ai-forever/Kandinsky-5.0-T2V-Lite-distilled16steps-5s-Diffusers', repo='ai-forever/Kandinsky-5.0-T2V-Lite-distilled16steps-5s-Diffusers', - repo_cls=diffusers.Kandinsky5T2VPipeline, - te_cls=transformers.Qwen2_5_VLForConditionalGeneration, - dit_cls=diffusers.Kandinsky5Transformer3DModel), + repo_cls=getattr(diffusers, 'Kandinsky5T2VPipeline', None), + te_cls=getattr(transformers, 'Qwen2_5_VLForConditionalGeneration', None), + dit_cls=getattr(diffusers, 'Kandinsky5Transformer3DModel', None)), ], } t1 = time.time() - total = sum([len(models[model]) for model in models.keys()]) - log.info(f'Networks: type="video" engines={len(models)} models={total} time={t1 - t0:.2f}') + errors = 0 + total = 0 + for model in models.values(): + for m in model: + if m.name == 'None': + continue + if (m.repo_cls is None) or (m.dit_cls is None) or (m.te_cls is None): + log.error(f'Video: pipeline="{m.name}" not available') + errors += 1 + else: + 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}')