diffsynth 2.1.4__tar.gz → 2.1.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {diffsynth-2.1.4 → diffsynth-2.1.6}/PKG-INFO +16 -1
- {diffsynth-2.1.4 → diffsynth-2.1.6}/README.md +15 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/configs/model_configs.py +36 -2
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/configs/vram_management_module_maps.py +16 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/loader/config.py +2 -2
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/loader/model.py +3 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/quant/backends/bitsandbytes.py +24 -24
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/vram/layers.py +5 -2
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/diffusion/base_pipeline.py +9 -1
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/diffusion/flow_match.py +11 -1
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/diffusion/loss.py +25 -2
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/diffusion/training_module.py +1 -1
- diffsynth-2.1.6/diffsynth/models/minimax_h3_controlnet.py +105 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/minimax_h3_dit.py +4 -1
- diffsynth-2.1.6/diffsynth/models/qwen_video_edit_dit.py +89 -0
- diffsynth-2.1.6/diffsynth/models/sensenova_u1_common.py +229 -0
- diffsynth-2.1.6/diffsynth/models/sensenova_u1_dit.py +897 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/ace_step.py +2 -1
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/minimax_h3_audio_video.py +158 -1
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/minimax_music3.py +15 -1
- diffsynth-2.1.6/diffsynth/pipelines/qwen_video_edit.py +356 -0
- diffsynth-2.1.6/diffsynth/pipelines/sensenova_u1_image.py +318 -0
- diffsynth-2.1.6/diffsynth/utils/state_dict_converters/minimax_h3_controlnet.py +75 -0
- diffsynth-2.1.6/diffsynth/utils/state_dict_converters/qwen_video_edit.py +6 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/version.py +1 -1
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth.egg-info/PKG-INFO +16 -1
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth.egg-info/SOURCES.txt +8 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/LICENSE +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/configs/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/attention/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/attention/attention.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/data/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/data/operators.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/data/unified_dataset.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/device/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/device/npu_compatible_device.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/gradient/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/gradient/gradient_checkpoint.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/loader/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/loader/file.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/npu_patch/npu_fused_operator.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/offload_training/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/offload_training/manager.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/offload_training/memory_buffer.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/offload_training/offloader.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/quant/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/quant/backends/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/quant/backends/comfy_kitchen.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/quant/backends/torchao.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/quant/base.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/quant/config.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/vram/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/vram/disk_map.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/core/vram/initialization.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/diffusion/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/diffusion/ddim_scheduler.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/diffusion/dmd2.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/diffusion/logger.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/diffusion/parsers.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/diffusion/runner.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/diffusion/template.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/aesthetic.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/base.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/bioclip.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/clip.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/fid.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/hpsv2.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/hpsv3.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/image_reward.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/lpips.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/pickscore.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/qwen_image_bench.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/unified_reward_2.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/metrics/unified_reward_edit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ace_step_conditioner.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ace_step_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ace_step_residual_fsq.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ace_step_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ace_step_tokenizer.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ace_step_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/aesthetic.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/anima_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/bioclip.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/boogu_image_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/clip.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/demucs.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/dinov3_image_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ernie_image_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ernie_image_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/fid.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux2_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux2_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux2_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux_controlnet.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux_infiniteyou.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux_ipadapter.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux_lora_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux_lora_patcher.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux_redux.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux_text_encoder_clip.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux_text_encoder_t5.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/flux_value_control.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/general_modules.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/hidream_common.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/hidream_o1_image_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/hpsv2.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/hpsv3.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ideogram4_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ideogram4_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ideogram4_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/image_reward.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/joyai_image_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/joyai_image_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/krea2_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/krea2_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/lingbot_video_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/longcat_video_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/lpips.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ltx2_audio_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ltx2_common.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ltx2_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ltx2_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ltx2_upsampler.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/ltx2_video_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/minimax_h3_audio_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/minimax_h3_dit_comfy.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/minimax_h3_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/minimax_h3_video_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/minimax_music3_condition_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/minimax_music3_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/minimax_music3_rvq_depth_decoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/minimax_music3_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/minimax_music3_vocoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/model_loader.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/mova_audio_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/mova_audio_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/mova_dual_tower_bridge.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/nexus_gen.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/nexus_gen_ar_model.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/nexus_gen_projector.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/pickscore.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/qwen_image_bench.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/qwen_image_controlnet.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/qwen_image_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/qwen_image_image2lora.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/qwen_image_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/qwen_image_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/sd_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/siglip2_image_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/stable_diffusion_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/stable_diffusion_unet.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/stable_diffusion_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/stable_diffusion_xl_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/stable_diffusion_xl_unet.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/step1x_connector.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/step1x_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/unified_reward_2.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/unified_reward_edit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/wan_animate_2_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/wan_video_animate_adapter.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/wan_video_camera_controller.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/wan_video_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/wan_video_dit_s2v.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/wan_video_image_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/wan_video_mot.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/wan_video_motion_controller.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/wan_video_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/wan_video_vace.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/wan_video_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/wantodance.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/wav2vec.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/z_image_controlnet.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/z_image_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/z_image_image2lora.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/models/z_image_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/anima_image.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/boogu_image.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/ernie_image.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/flux2_image.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/flux_image.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/hidream_o1_image.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/ideogram4.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/joyai_image.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/krea2.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/lingbot_video.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/ltx2_audio_video.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/mova_audio_video.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/qwen_image.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/stable_diffusion.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/stable_diffusion_xl.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/wan_video.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/pipelines/z_image.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/controlnet/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/controlnet/annotator.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/controlnet/controlnet_input.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/data/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/data/audio.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/data/audio_video.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/data/media_io_ltx2.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/data/minimax_h3.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/demucs/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/dequantizer/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/lora/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/lora/flux.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/lora/flux_timestep.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/lora/general.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/lora/krea2.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/lora/merge.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/lora/minimax_h3.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/lora/reset_rank.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/lora/sdxl.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/quant/serialization.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/ses/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/ses/ses.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ace_step_conditioner.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ace_step_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ace_step_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ace_step_tokenizer.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/anima_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/dino_v3.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ernie_image_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux2_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_controlnet.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_infiniteyou.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_ipadapter.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_text_encoder_clip.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_text_encoder_t5.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/flux_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ideogram4_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/image_metrics.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/joyai_image_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/krea2_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/krea2_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/lingbot_video_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ltx2_audio_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ltx2_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ltx2_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/ltx2_video_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/minimax_h3_audio_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/minimax_h3_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/minimax_h3_video_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/minimax_music3_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/nexus_gen.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/nexus_gen_projector.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/qwen_image_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/sdxl.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/sdxl_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/sdxl_text_encoder_2.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/sdxl_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/stable_diffusion_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/stable_diffusion_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/stable_diffusion_xl_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/step1x_connector.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wan_video_animate_adapter.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wan_video_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wan_video_image_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wan_video_mot.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wan_video_vace.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wan_video_vae.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/wans2v_audio_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/z_image_dit.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/state_dict_converters/z_image_text_encoder.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/tile/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/tile/tile_worker.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/xfuser/__init__.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth/utils/xfuser/xdit_context_parallel.py +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth.egg-info/dependency_links.txt +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth.egg-info/requires.txt +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/diffsynth.egg-info/top_level.txt +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/pyproject.toml +0 -0
- {diffsynth-2.1.4 → diffsynth-2.1.6}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: diffsynth
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.6
|
|
4
4
|
Summary: Enjoy the magic of Diffusion models!
|
|
5
5
|
Author: ModelScope Team
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -107,6 +107,10 @@ See also:
|
|
|
107
107
|
|
|
108
108
|
> Currently, the development personnel of this project are limited, with most of the work handled by [Artiprocher](https://github.com/Artiprocher) and [mi804](https://github.com/mi804). Therefore, the progress of new feature development will be relatively slow, and the speed of responding to and resolving issues is limited. We apologize for this and ask developers to understand.
|
|
109
109
|
|
|
110
|
+
- **September 1, 2026** We have integrated [SenseNova-U1.5](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT), SenseTime's unified multimodal model, for which we provide text-to-image generation, image editing, low VRAM inference, and training support. For details, please refer to the [documentation](/docs/en/Model_Details/SenseNova-U1.md) and [example code](/examples/sensenova_u1/).
|
|
111
|
+
|
|
112
|
+
- **August 31, 2026** We have integrated [Qwen-Video-Edit](https://modelscope.cn/models/yunpeng1998/Qwen-Video-Edit), a video editing model developed by open-source community contributor [yunpeng1998](https://github.com/yunpeng1998) based on the image editing model Qwen-Image-Edit. This serves as an excellent example of exploring and expanding model capabilities.
|
|
113
|
+
|
|
110
114
|
- **August 25, 2026** We have open-sourced [DiffSynth-WebUI](https://github.com/modelscope/DiffSynth-WebUI), enabling one-click private deployment of LoRA training services. Combined with the model quantization feature, you can train large models even with consumer-grade GPUs.
|
|
111
115
|
|
|
112
116
|
- **August 19, 2026** We have released the model quantization feature. It provides a unified `QuantizeConfig` entry point supporting multiple quantization backends including bitsandbytes, torchao, and comfy-kitchen, with capabilities such as online quantization, loading pre-quantized weights, mixed quantization, saving quantized models, and quantization + LoRA training. For details, please refer to the [documentation](/docs/en/Pipeline_Usage/Quantization.md).
|
|
@@ -373,6 +377,7 @@ Quick start: experience popular and the latest models:
|
|
|
373
377
|
Model overview:
|
|
374
378
|
|
|
375
379
|
- Image generation
|
|
380
|
+
- SenseNova-U1: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/SenseNova-U1.html), [Example code](/examples/sensenova_u1/)
|
|
376
381
|
- Boogu-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Boogu-Image.html), [Example code](/examples/boogu_image/)
|
|
377
382
|
- Krea-2: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Krea-2.html), [Example code](/examples/krea2/)
|
|
378
383
|
- Ideogram 4: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Ideogram-4.html), [Example code](/examples/ideogram4/)
|
|
@@ -640,6 +645,11 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
|
|
|
640
645
|
|
|
641
646
|
| Architecture | Model ID | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training |
|
|
642
647
|
|-|-|-|-|-|-|-|-|
|
|
648
|
+
| SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT: T2I](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT.py) |
|
|
649
|
+
| SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT: Edit](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-Edit.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-Edit.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT-Edit.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT-Edit.py) |
|
|
650
|
+
| SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT-LoRAs: 8-step](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT-LoRAs) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-LoRA-8step.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-LoRA-8step.py) | - | - | - | - |
|
|
651
|
+
| SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT-SFT: T2I](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT-SFT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-SFT.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-SFT.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT-SFT.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT-SFT.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT-SFT.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT-SFT.py) |
|
|
652
|
+
| SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT-SFT: Edit](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT-SFT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-SFT-Edit.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-SFT-Edit.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT-SFT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT-SFT-Edit.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT-SFT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT-SFT-Edit.py) |
|
|
643
653
|
| MiniMax-Music3 | [MiniMax/MiniMax-Music3](https://www.modelscope.cn/models/MiniMax/MiniMax-Music3) | [code](/examples/minimax_music3/model_inference/MiniMax-Music3.py) | [code](/examples/minimax_music3/model_inference_low_vram/MiniMax-Music3.py) | — | — | — | — |
|
|
644
654
|
| MiniMax-H3 | [MiniMax/MiniMax-H3: FL2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FL2VA.py) |
|
|
645
655
|
| MiniMax-H3 | [MiniMax/MiniMax-H3: Ref2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Ref2VA.py) |
|
|
@@ -658,6 +668,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
|
|
|
658
668
|
| MiniMax-H3 | [Comfy-Org/MiniMax-H3: Ref2VA pruned fp8](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-FP8-Pruned-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FP8-Pruned-Ref2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-FP8-Pruned-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FP8-Pruned-Ref2VA.py) |
|
|
659
669
|
| MiniMax-H3 | [lightx2v/Minimax-h3-Turbo: FL2VA 4steps](https://www.modelscope.cn/models/lightx2v/Minimax-h3-Turbo) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA-Turbo.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA-Turbo.py) | - | - | - | - |
|
|
660
670
|
| MiniMax-H3 | [DiffSynth-Studio/MiniMax-H3-Text-Embeddings](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-Text-Embeddings) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Text-Embeddings.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Text-Embeddings.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Text-Embeddings.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Text-Embeddings.py) | - | - |
|
|
671
|
+
| MiniMax-H3 | [PAI/MiniMax-H3-Fun-Controlnet-Union](https://www.modelscope.cn/models/PAI/MiniMax-H3-Fun-Controlnet-Union) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Fun-Controlnet-Union.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Fun-Controlnet-Union.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Fun-Controlnet-Union.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Fun-Controlnet-Union.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Fun-Controlnet-Union.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Fun-Controlnet-Union.py) |
|
|
661
672
|
| LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_t2v.sh) | [code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_t2v.sh) | [code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_t2v.py) |
|
|
662
673
|
| LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_ti2v.sh) | [code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_ti2v.sh) | [code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_ti2v.py) |
|
|
663
674
|
| LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2i.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2i.py) | - | - | - | - |
|
|
@@ -764,6 +775,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
|
|
|
764
775
|
| Qwen-Image | [DiffSynth-Studio/Qwen-Image-In-Context-Control-Union](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-In-Context-Control-Union) | [code](/examples/qwen_image/model_inference/Qwen-Image-In-Context-Control-Union.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-In-Context-Control-Union.py) | - | - | [code](/examples/qwen_image/model_training/lora/Qwen-Image-In-Context-Control-Union.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-In-Context-Control-Union.py) |
|
|
765
776
|
| Qwen-Image | [DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix) | [code](/examples/qwen_image/model_inference/Qwen-Image-Edit-Lowres-Fix.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-Lowres-Fix.py) | - | - | - | - |
|
|
766
777
|
| Qwen-Image | [DiffSynth-Studio/Qwen-Image-i2L](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-i2L) | [code](/examples/qwen_image/model_inference/Qwen-Image-i2L.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-i2L.py) | - | - | - | - |
|
|
778
|
+
| Qwen-Video-Edit | [yunpeng1998/Qwen-Video-Edit](https://www.modelscope.cn/models/yunpeng1998/Qwen-Video-Edit) | [code](/examples/qwen_video_edit/model_inference/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_inference_low_vram/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_training/full/Qwen-Video-Edit.sh) | [code](/examples/qwen_video_edit/model_training/validate_full/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_training/lora/Qwen-Video-Edit.sh) | [code](/examples/qwen_video_edit/model_training/validate_lora/Qwen-Video-Edit.py) |
|
|
767
779
|
| Wan | [Wan-AI/Wan2.1-T2V-1.3B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B) | [code](/examples/wanvideo/model_inference/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-T2V-1.3B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-T2V-1.3B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-1.3B.py) |
|
|
768
780
|
| Wan | [Wan-AI/Wan2.1-T2V-14B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-14B) | [code](/examples/wanvideo/model_inference/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-T2V-14B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-T2V-14B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-14B.py) |
|
|
769
781
|
| Wan | [Wan-AI/Wan2.1-I2V-14B-480P](https://modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P) | [code](/examples/wanvideo/model_inference/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-I2V-14B-480P.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-I2V-14B-480P.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-I2V-14B-480P.py) |
|
|
@@ -804,6 +816,9 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
|
|
|
804
816
|
| FLUX.1 | [black-forest-labs/FLUX.1-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-dev) | [code](/examples/flux/model_inference/FLUX.1-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev.py) |
|
|
805
817
|
| FLUX.1 | [black-forest-labs/FLUX.1-Krea-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Krea-dev) | [code](/examples/flux/model_inference/FLUX.1-Krea-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-Krea-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-Krea-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-Krea-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-Krea-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-Krea-dev.py) |
|
|
806
818
|
| FLUX.1 | [black-forest-labs/FLUX.1-Kontext-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Kontext-dev) | [code](/examples/flux/model_inference/FLUX.1-Kontext-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-Kontext-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-Kontext-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-Kontext-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-Kontext-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-Kontext-dev.py) |
|
|
819
|
+
| FLUX.1 | [black-forest-labs/FLUX.1-Fill-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Fill-dev) | [code](/examples/flux/model_inference/FLUX.1-Fill-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-Fill-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-Fill-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-Fill-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-Fill-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-Fill-dev.py) |
|
|
820
|
+
| FLUX.1 | [black-forest-labs/FLUX.1-Redux-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Redux-dev) | [code](/examples/flux/model_inference/FLUX.1-Redux-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-Redux-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-Redux-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-Redux-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-Redux-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-Redux-dev.py) |
|
|
821
|
+
| FLUX.1 | [HuanJue/Insert-Anything](https://www.modelscope.cn/models/HuanJue/Insert-Anything) | [code](/examples/flux/model_inference/Insert-Anything.py) | [code](/examples/flux/model_inference_low_vram/Insert-Anything.py) | - | - | [code](/examples/flux/model_training/lora/Insert-Anything.sh) | [code](/examples/flux/model_training/validate_lora/Insert-Anything.py) |
|
|
807
822
|
| FLUX.1 | [alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta](https://www.modelscope.cn/models/alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta) | [code](/examples/flux/model_inference/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | [code](/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Inpainting-Beta.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Inpainting-Beta.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Inpainting-Beta.py) |
|
|
808
823
|
| FLUX.1 | [InstantX/FLUX.1-dev-Controlnet-Union-alpha](https://www.modelscope.cn/models/InstantX/FLUX.1-dev-Controlnet-Union-alpha) | [code](/examples/flux/model_inference/FLUX.1-dev-Controlnet-Union-alpha.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Union-alpha.py) | [code](/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Union-alpha.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Union-alpha.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Union-alpha.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Union-alpha.py) |
|
|
809
824
|
| FLUX.1 | [jasperai/Flux.1-dev-Controlnet-Upscaler](https://www.modelscope.cn/models/jasperai/Flux.1-dev-Controlnet-Upscaler) | [code](/examples/flux/model_inference/FLUX.1-dev-Controlnet-Upscaler.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Upscaler.py) | [code](/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Upscaler.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Upscaler.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Upscaler.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Upscaler.py) |
|
|
@@ -40,6 +40,10 @@ See also:
|
|
|
40
40
|
|
|
41
41
|
> Currently, the development personnel of this project are limited, with most of the work handled by [Artiprocher](https://github.com/Artiprocher) and [mi804](https://github.com/mi804). Therefore, the progress of new feature development will be relatively slow, and the speed of responding to and resolving issues is limited. We apologize for this and ask developers to understand.
|
|
42
42
|
|
|
43
|
+
- **September 1, 2026** We have integrated [SenseNova-U1.5](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT), SenseTime's unified multimodal model, for which we provide text-to-image generation, image editing, low VRAM inference, and training support. For details, please refer to the [documentation](/docs/en/Model_Details/SenseNova-U1.md) and [example code](/examples/sensenova_u1/).
|
|
44
|
+
|
|
45
|
+
- **August 31, 2026** We have integrated [Qwen-Video-Edit](https://modelscope.cn/models/yunpeng1998/Qwen-Video-Edit), a video editing model developed by open-source community contributor [yunpeng1998](https://github.com/yunpeng1998) based on the image editing model Qwen-Image-Edit. This serves as an excellent example of exploring and expanding model capabilities.
|
|
46
|
+
|
|
43
47
|
- **August 25, 2026** We have open-sourced [DiffSynth-WebUI](https://github.com/modelscope/DiffSynth-WebUI), enabling one-click private deployment of LoRA training services. Combined with the model quantization feature, you can train large models even with consumer-grade GPUs.
|
|
44
48
|
|
|
45
49
|
- **August 19, 2026** We have released the model quantization feature. It provides a unified `QuantizeConfig` entry point supporting multiple quantization backends including bitsandbytes, torchao, and comfy-kitchen, with capabilities such as online quantization, loading pre-quantized weights, mixed quantization, saving quantized models, and quantization + LoRA training. For details, please refer to the [documentation](/docs/en/Pipeline_Usage/Quantization.md).
|
|
@@ -306,6 +310,7 @@ Quick start: experience popular and the latest models:
|
|
|
306
310
|
Model overview:
|
|
307
311
|
|
|
308
312
|
- Image generation
|
|
313
|
+
- SenseNova-U1: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/SenseNova-U1.html), [Example code](/examples/sensenova_u1/)
|
|
309
314
|
- Boogu-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Boogu-Image.html), [Example code](/examples/boogu_image/)
|
|
310
315
|
- Krea-2: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Krea-2.html), [Example code](/examples/krea2/)
|
|
311
316
|
- Ideogram 4: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Ideogram-4.html), [Example code](/examples/ideogram4/)
|
|
@@ -573,6 +578,11 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
|
|
|
573
578
|
|
|
574
579
|
| Architecture | Model ID | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training |
|
|
575
580
|
|-|-|-|-|-|-|-|-|
|
|
581
|
+
| SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT: T2I](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT.py) |
|
|
582
|
+
| SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT: Edit](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-Edit.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-Edit.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT-Edit.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT-Edit.py) |
|
|
583
|
+
| SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT-LoRAs: 8-step](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT-LoRAs) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-LoRA-8step.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-LoRA-8step.py) | - | - | - | - |
|
|
584
|
+
| SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT-SFT: T2I](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT-SFT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-SFT.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-SFT.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT-SFT.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT-SFT.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT-SFT.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT-SFT.py) |
|
|
585
|
+
| SenseNova-U1 | [SenseNova/SenseNova-U1.5-8B-MoT-SFT: Edit](https://www.modelscope.cn/models/SenseNova/SenseNova-U1.5-8B-MoT-SFT) | [code](/examples/sensenova_u1/model_inference/SenseNova-U1.5-8B-MoT-SFT-Edit.py) | [code](/examples/sensenova_u1/model_inference_low_vram/SenseNova-U1.5-8B-MoT-SFT-Edit.py) | [code](/examples/sensenova_u1/model_training/full/SenseNova-U1.5-8B-MoT-SFT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_full/SenseNova-U1.5-8B-MoT-SFT-Edit.py) | [code](/examples/sensenova_u1/model_training/lora/SenseNova-U1.5-8B-MoT-SFT-Edit.sh) | [code](/examples/sensenova_u1/model_training/validate_lora/SenseNova-U1.5-8B-MoT-SFT-Edit.py) |
|
|
576
586
|
| MiniMax-Music3 | [MiniMax/MiniMax-Music3](https://www.modelscope.cn/models/MiniMax/MiniMax-Music3) | [code](/examples/minimax_music3/model_inference/MiniMax-Music3.py) | [code](/examples/minimax_music3/model_inference_low_vram/MiniMax-Music3.py) | — | — | — | — |
|
|
577
587
|
| MiniMax-H3 | [MiniMax/MiniMax-H3: FL2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FL2VA.py) |
|
|
578
588
|
| MiniMax-H3 | [MiniMax/MiniMax-H3: Ref2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Ref2VA.py) |
|
|
@@ -591,6 +601,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
|
|
|
591
601
|
| MiniMax-H3 | [Comfy-Org/MiniMax-H3: Ref2VA pruned fp8](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-FP8-Pruned-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FP8-Pruned-Ref2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-FP8-Pruned-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FP8-Pruned-Ref2VA.py) |
|
|
592
602
|
| MiniMax-H3 | [lightx2v/Minimax-h3-Turbo: FL2VA 4steps](https://www.modelscope.cn/models/lightx2v/Minimax-h3-Turbo) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA-Turbo.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA-Turbo.py) | - | - | - | - |
|
|
593
603
|
| MiniMax-H3 | [DiffSynth-Studio/MiniMax-H3-Text-Embeddings](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-Text-Embeddings) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Text-Embeddings.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Text-Embeddings.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Text-Embeddings.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Text-Embeddings.py) | - | - |
|
|
604
|
+
| MiniMax-H3 | [PAI/MiniMax-H3-Fun-Controlnet-Union](https://www.modelscope.cn/models/PAI/MiniMax-H3-Fun-Controlnet-Union) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Fun-Controlnet-Union.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Fun-Controlnet-Union.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Fun-Controlnet-Union.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Fun-Controlnet-Union.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Fun-Controlnet-Union.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Fun-Controlnet-Union.py) |
|
|
594
605
|
| LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_t2v.sh) | [code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_t2v.sh) | [code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_t2v.py) |
|
|
595
606
|
| LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_ti2v.sh) | [code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_ti2v.sh) | [code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_ti2v.py) |
|
|
596
607
|
| LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2i.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2i.py) | - | - | - | - |
|
|
@@ -697,6 +708,7 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
|
|
|
697
708
|
| Qwen-Image | [DiffSynth-Studio/Qwen-Image-In-Context-Control-Union](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-In-Context-Control-Union) | [code](/examples/qwen_image/model_inference/Qwen-Image-In-Context-Control-Union.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-In-Context-Control-Union.py) | - | - | [code](/examples/qwen_image/model_training/lora/Qwen-Image-In-Context-Control-Union.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-In-Context-Control-Union.py) |
|
|
698
709
|
| Qwen-Image | [DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix) | [code](/examples/qwen_image/model_inference/Qwen-Image-Edit-Lowres-Fix.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-Lowres-Fix.py) | - | - | - | - |
|
|
699
710
|
| Qwen-Image | [DiffSynth-Studio/Qwen-Image-i2L](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-i2L) | [code](/examples/qwen_image/model_inference/Qwen-Image-i2L.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-i2L.py) | - | - | - | - |
|
|
711
|
+
| Qwen-Video-Edit | [yunpeng1998/Qwen-Video-Edit](https://www.modelscope.cn/models/yunpeng1998/Qwen-Video-Edit) | [code](/examples/qwen_video_edit/model_inference/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_inference_low_vram/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_training/full/Qwen-Video-Edit.sh) | [code](/examples/qwen_video_edit/model_training/validate_full/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_training/lora/Qwen-Video-Edit.sh) | [code](/examples/qwen_video_edit/model_training/validate_lora/Qwen-Video-Edit.py) |
|
|
700
712
|
| Wan | [Wan-AI/Wan2.1-T2V-1.3B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B) | [code](/examples/wanvideo/model_inference/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-T2V-1.3B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-T2V-1.3B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-1.3B.py) |
|
|
701
713
|
| Wan | [Wan-AI/Wan2.1-T2V-14B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-14B) | [code](/examples/wanvideo/model_inference/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-T2V-14B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-T2V-14B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-14B.py) |
|
|
702
714
|
| Wan | [Wan-AI/Wan2.1-I2V-14B-480P](https://modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P) | [code](/examples/wanvideo/model_inference/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-I2V-14B-480P.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-I2V-14B-480P.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-I2V-14B-480P.py) |
|
|
@@ -737,6 +749,9 @@ https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-44
|
|
|
737
749
|
| FLUX.1 | [black-forest-labs/FLUX.1-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-dev) | [code](/examples/flux/model_inference/FLUX.1-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev.py) |
|
|
738
750
|
| FLUX.1 | [black-forest-labs/FLUX.1-Krea-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Krea-dev) | [code](/examples/flux/model_inference/FLUX.1-Krea-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-Krea-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-Krea-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-Krea-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-Krea-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-Krea-dev.py) |
|
|
739
751
|
| FLUX.1 | [black-forest-labs/FLUX.1-Kontext-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Kontext-dev) | [code](/examples/flux/model_inference/FLUX.1-Kontext-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-Kontext-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-Kontext-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-Kontext-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-Kontext-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-Kontext-dev.py) |
|
|
752
|
+
| FLUX.1 | [black-forest-labs/FLUX.1-Fill-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Fill-dev) | [code](/examples/flux/model_inference/FLUX.1-Fill-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-Fill-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-Fill-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-Fill-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-Fill-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-Fill-dev.py) |
|
|
753
|
+
| FLUX.1 | [black-forest-labs/FLUX.1-Redux-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Redux-dev) | [code](/examples/flux/model_inference/FLUX.1-Redux-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-Redux-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-Redux-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-Redux-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-Redux-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-Redux-dev.py) |
|
|
754
|
+
| FLUX.1 | [HuanJue/Insert-Anything](https://www.modelscope.cn/models/HuanJue/Insert-Anything) | [code](/examples/flux/model_inference/Insert-Anything.py) | [code](/examples/flux/model_inference_low_vram/Insert-Anything.py) | - | - | [code](/examples/flux/model_training/lora/Insert-Anything.sh) | [code](/examples/flux/model_training/validate_lora/Insert-Anything.py) |
|
|
740
755
|
| FLUX.1 | [alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta](https://www.modelscope.cn/models/alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta) | [code](/examples/flux/model_inference/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | [code](/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Inpainting-Beta.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Inpainting-Beta.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Inpainting-Beta.py) |
|
|
741
756
|
| FLUX.1 | [InstantX/FLUX.1-dev-Controlnet-Union-alpha](https://www.modelscope.cn/models/InstantX/FLUX.1-dev-Controlnet-Union-alpha) | [code](/examples/flux/model_inference/FLUX.1-dev-Controlnet-Union-alpha.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Union-alpha.py) | [code](/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Union-alpha.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Union-alpha.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Union-alpha.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Union-alpha.py) |
|
|
742
757
|
| FLUX.1 | [jasperai/Flux.1-dev-Controlnet-Upscaler](https://www.modelscope.cn/models/jasperai/Flux.1-dev-Controlnet-Upscaler) | [code](/examples/flux/model_inference/FLUX.1-dev-Controlnet-Upscaler.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Upscaler.py) | [code](/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Upscaler.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Upscaler.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Upscaler.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Upscaler.py) |
|
|
@@ -80,6 +80,23 @@ qwen_image_series = [
|
|
|
80
80
|
},
|
|
81
81
|
]
|
|
82
82
|
|
|
83
|
+
qwen_video_edit_series = [
|
|
84
|
+
{
|
|
85
|
+
# Example: ModelConfig(model_id="yunpeng1998/Qwen-Video-Edit", origin_file_pattern="360P/step-30000.safetensors")
|
|
86
|
+
"model_hash": "8ae0ca4ab286d00197f08986c7fbbade",
|
|
87
|
+
"model_name": "qwen_video_edit_dit",
|
|
88
|
+
"model_class": "diffsynth.models.qwen_image_dit.QwenImageDiT",
|
|
89
|
+
"state_dict_converter": "diffsynth.utils.state_dict_converters.qwen_video_edit.QwenVideoEditDiTStateDictConverter",
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
# Example: ModelConfig(model_id="yunpeng1998/Qwen-Video-Edit", origin_file_pattern="360P/step-30000.safetensors")
|
|
93
|
+
"model_hash": "8ae0ca4ab286d00197f08986c7fbbade",
|
|
94
|
+
"model_name": "qwen_video_edit_adapter",
|
|
95
|
+
"model_class": "diffsynth.models.qwen_video_edit_dit.QwenVideoEditAdapter",
|
|
96
|
+
"state_dict_converter": "diffsynth.utils.state_dict_converters.qwen_video_edit.QwenVideoEditAdapterStateDictConverter",
|
|
97
|
+
},
|
|
98
|
+
]
|
|
99
|
+
|
|
83
100
|
wan_series = [
|
|
84
101
|
{
|
|
85
102
|
# Example: ModelConfig(model_id="Wan-AI/Wan2.2-Animate-2-14B", origin_file_pattern="wan_animate_2/wan_animate_2_bf16.safetensors")
|
|
@@ -1509,6 +1526,14 @@ minimax_h3_series = [
|
|
|
1509
1526
|
"quant_config": {"method": "bitsandbytes_nf4", "load_prequantized": True},
|
|
1510
1527
|
"state_dict_converter": "diffsynth.utils.state_dict_converters.minimax_h3_audio_vae.MiniMaxH3AudioVAEStateDictConverter"
|
|
1511
1528
|
},
|
|
1529
|
+
{
|
|
1530
|
+
# Example: ModelConfig(model_id="PAI/MiniMax-H3-Fun-Controlnet-Union", origin_file_pattern="MiniMax-H3-Fun-Controlnet-Union.safetensors")
|
|
1531
|
+
"model_hash": "91179e6f6150c072cd8e5fa29f58576e",
|
|
1532
|
+
"model_name": "minimax_h3_controlnet",
|
|
1533
|
+
"model_class": "diffsynth.models.minimax_h3_controlnet.MiniMaxH3ControlNet",
|
|
1534
|
+
"extra_kwargs": {'control_layers': (0, 10, 20, 30, 40), 'control_in_dim': 49, 'control_apply_audio': False, 'hidden_size': 5376, 'num_attention_heads': 56, 'attention_head_dim': 128, 'ffn_hidden_size': 14336, 'time_embed_dim': 2688, 'adaln_out_features': 96768, 'patch_size': (1, 2, 2), 'norm_eps': 1e-05, 'qk_norm_eps': 1e-05},
|
|
1535
|
+
"state_dict_converter": "diffsynth.utils.state_dict_converters.minimax_h3_controlnet.MiniMaxH3ControlNetStateDictConverter"
|
|
1536
|
+
},
|
|
1512
1537
|
]
|
|
1513
1538
|
|
|
1514
1539
|
minimax_music3_series = [
|
|
@@ -1545,8 +1570,17 @@ minimax_music3_series = [
|
|
|
1545
1570
|
},
|
|
1546
1571
|
]
|
|
1547
1572
|
|
|
1573
|
+
sensenova_u1_series = [
|
|
1574
|
+
{
|
|
1575
|
+
# Example: ModelConfig(model_id="SenseNova/SenseNova-U1.5-8B-MoT", origin_file_pattern="model*.safetensors")
|
|
1576
|
+
"model_hash": "90bb0c235120a99ea78f9912471de82a",
|
|
1577
|
+
"model_name": "sensenova_u1_dit",
|
|
1578
|
+
"model_class": "diffsynth.models.sensenova_u1_dit.SenseNovaU1DiT",
|
|
1579
|
+
},
|
|
1580
|
+
]
|
|
1581
|
+
|
|
1548
1582
|
MODEL_CONFIGS = (
|
|
1549
|
-
stable_diffusion_xl_series + stable_diffusion_series + qwen_image_series + wan_series + flux_series + flux2_series + ernie_image_series
|
|
1583
|
+
stable_diffusion_xl_series + stable_diffusion_series + qwen_image_series + qwen_video_edit_series + wan_series + flux_series + flux2_series + ernie_image_series
|
|
1550
1584
|
+ z_image_series + ltx2_series + anima_series + mova_series + joyai_image_series + boogu_image_series + ace_step_series + hidream_o1_image_series
|
|
1551
|
-
+ image_metrics_series + ideogram4_series + krea2_series + lingbot_video_series + minimax_h3_series + minimax_music3_series
|
|
1585
|
+
+ image_metrics_series + ideogram4_series + krea2_series + lingbot_video_series + minimax_h3_series + minimax_music3_series + sensenova_u1_series
|
|
1552
1586
|
)
|
|
@@ -62,6 +62,10 @@ VRAM_MANAGEMENT_MODULE_MAPS = {
|
|
|
62
62
|
"torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
|
|
63
63
|
"torch.nn.Embedding": "diffsynth.core.vram.layers.AutoWrappedModule",
|
|
64
64
|
},
|
|
65
|
+
"diffsynth.models.qwen_video_edit_dit.QwenVideoEditAdapter": {
|
|
66
|
+
"torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
|
|
67
|
+
"torch.nn.Conv3d": "diffsynth.core.vram.layers.AutoWrappedModule",
|
|
68
|
+
},
|
|
65
69
|
"diffsynth.models.qwen_image_text_encoder.QwenImageTextEncoder": {
|
|
66
70
|
"torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
|
|
67
71
|
"torch.nn.Embedding": "diffsynth.core.vram.layers.AutoWrappedModule",
|
|
@@ -496,6 +500,18 @@ VRAM_MANAGEMENT_MODULE_MAPS = {
|
|
|
496
500
|
"torch.nn.Embedding": "diffsynth.core.vram.layers.AutoWrappedModule",
|
|
497
501
|
"transformers.models.qwen3.modeling_qwen3.Qwen3RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
|
|
498
502
|
},
|
|
503
|
+
"diffsynth.models.minimax_h3_controlnet.MiniMaxH3ControlNet": {
|
|
504
|
+
"torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
|
|
505
|
+
"torch.nn.RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
|
|
506
|
+
},
|
|
507
|
+
"diffsynth.models.sensenova_u1_dit.SenseNovaU1DiT": {
|
|
508
|
+
"diffsynth.models.sensenova_u1_dit.SenseNovaU1TimestepEmbedder": "diffsynth.core.vram.layers.AutoWrappedModule",
|
|
509
|
+
"diffsynth.models.sensenova_u1_dit.SenseNovaU1VisionEmbeddings": "diffsynth.core.vram.layers.AutoWrappedModule",
|
|
510
|
+
"torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear",
|
|
511
|
+
"torch.nn.Embedding": "diffsynth.core.vram.layers.AutoWrappedModule",
|
|
512
|
+
"torch.nn.Conv2d": "diffsynth.core.vram.layers.AutoWrappedModule",
|
|
513
|
+
"diffsynth.models.sensenova_u1_dit.SenseNovaU1RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule",
|
|
514
|
+
},
|
|
499
515
|
}
|
|
500
516
|
|
|
501
517
|
def QwenImageTextEncoder_Module_Map_Updater():
|
|
@@ -75,11 +75,11 @@ class ModelConfig:
|
|
|
75
75
|
def parse_download_source(self):
|
|
76
76
|
if self.download_source is None:
|
|
77
77
|
if os.environ.get('DIFFSYNTH_DOWNLOAD_SOURCE') is not None:
|
|
78
|
-
return os.environ.get('DIFFSYNTH_DOWNLOAD_SOURCE')
|
|
78
|
+
return os.environ.get('DIFFSYNTH_DOWNLOAD_SOURCE').lower()
|
|
79
79
|
else:
|
|
80
80
|
return "modelscope"
|
|
81
81
|
else:
|
|
82
|
-
return self.download_source
|
|
82
|
+
return self.download_source.lower()
|
|
83
83
|
|
|
84
84
|
def parse_skip_download(self):
|
|
85
85
|
if self.skip_download is None:
|
|
@@ -119,6 +119,9 @@ def load_model(model_class, path, config=None, torch_dtype=torch.bfloat16, devic
|
|
|
119
119
|
# Because some models override the behavior of `to()`,
|
|
120
120
|
# especially those from libraries like Transformers.
|
|
121
121
|
model = model.to(dtype=torch_dtype, device=device)
|
|
122
|
+
if quantize is not None:
|
|
123
|
+
# Downstream steps (e.g. LoRA hot-loading) need the config to handle the quantized layers.
|
|
124
|
+
model.quantize_config = quantize
|
|
122
125
|
if hasattr(model, "eval"):
|
|
123
126
|
model = model.eval()
|
|
124
127
|
return model
|
|
@@ -11,26 +11,27 @@ except ImportError:
|
|
|
11
11
|
BITSANDBYTES_AVAILABLE = False
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
14
|
+
if BITSANDBYTES_AVAILABLE:
|
|
15
|
+
class BitsAndBytesLinear4bit(bnb.nn.Linear4bit):
|
|
16
|
+
def _load_from_state_dict(self, state_dict, prefix, local_metadata, strict, missing_keys, unexpected_keys, error_msgs):
|
|
17
|
+
local_names = set()
|
|
18
|
+
for name, current in list(self._parameters.items()) + list(self._buffers.items()):
|
|
19
|
+
if current is None:
|
|
20
|
+
continue
|
|
21
|
+
local_names.add(name)
|
|
22
|
+
key = prefix + name
|
|
23
|
+
if key in state_dict:
|
|
24
|
+
value = state_dict[key]
|
|
25
|
+
if name in self._parameters:
|
|
26
|
+
self._parameters[name] = value if isinstance(value, torch.nn.Parameter) else torch.nn.Parameter(value, requires_grad=False)
|
|
27
|
+
else:
|
|
28
|
+
self._buffers[name] = value
|
|
29
|
+
elif strict:
|
|
30
|
+
missing_keys.append(key)
|
|
31
|
+
if strict:
|
|
32
|
+
for key in state_dict:
|
|
33
|
+
if key.startswith(prefix) and key[len(prefix):].split(".", 1)[0] not in local_names:
|
|
34
|
+
unexpected_keys.append(key)
|
|
34
35
|
|
|
35
36
|
|
|
36
37
|
@register_quant_backend("bitsandbytes")
|
|
@@ -55,7 +56,7 @@ class BitsAndBytesQuantBackend(QuantBackend):
|
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
def quantized_linear_classes(self):
|
|
58
|
-
return (
|
|
59
|
+
return (BitsAndBytesLinear4bit,)
|
|
59
60
|
|
|
60
61
|
def create_quantized_linear(self, linear, compute_device=None, model_device=None):
|
|
61
62
|
"""The `meta` shell avoids allocating an fp weight; bnb quantizes while `Params4bit` moves to `compute_device`."""
|
|
@@ -65,7 +66,7 @@ class BitsAndBytesQuantBackend(QuantBackend):
|
|
|
65
66
|
compute_device = linear.weight.device
|
|
66
67
|
|
|
67
68
|
with torch.device("meta"):
|
|
68
|
-
quant_linear =
|
|
69
|
+
quant_linear = BitsAndBytesLinear4bit(
|
|
69
70
|
linear.in_features,
|
|
70
71
|
linear.out_features,
|
|
71
72
|
bias=linear.bias is not None,
|
|
@@ -89,7 +90,7 @@ class BitsAndBytesQuantBackend(QuantBackend):
|
|
|
89
90
|
|
|
90
91
|
def create_quantized_linear_shell(self, linear, compute_dtype):
|
|
91
92
|
with torch.device("meta"):
|
|
92
|
-
shell =
|
|
93
|
+
shell = BitsAndBytesLinear4bit(
|
|
93
94
|
linear.in_features,
|
|
94
95
|
linear.out_features,
|
|
95
96
|
bias=linear.bias is not None,
|
|
@@ -98,7 +99,6 @@ class BitsAndBytesQuantBackend(QuantBackend):
|
|
|
98
99
|
quant_type=self.config.quant_type,
|
|
99
100
|
quant_storage=self.config.quant_storage,
|
|
100
101
|
)
|
|
101
|
-
shell._load_from_state_dict = _assign_params_from_state_dict.__get__(shell)
|
|
102
102
|
return shell
|
|
103
103
|
|
|
104
104
|
def unflatten_state_dict(self, state_dict, metadata):
|
|
@@ -442,7 +442,7 @@ class AutoWrappedLinear(torch.nn.Linear, AutoTorchModule, LoRAHotLoadMixin):
|
|
|
442
442
|
return out
|
|
443
443
|
|
|
444
444
|
|
|
445
|
-
class AutoWrappedQuantizedModule(AutoTorchModule, LoRAHotLoadMixin):
|
|
445
|
+
class AutoWrappedQuantizedModule(torch.nn.Linear, AutoTorchModule, LoRAHotLoadMixin):
|
|
446
446
|
def __init__(
|
|
447
447
|
self,
|
|
448
448
|
module: torch.nn.Module,
|
|
@@ -467,7 +467,8 @@ class AutoWrappedQuantizedModule(AutoTorchModule, LoRAHotLoadMixin):
|
|
|
467
467
|
"Disk offload for quantized layers requires both `disk_map` and `quantize`, "
|
|
468
468
|
"so each layer can rebuild its packed weight and quant state lazily."
|
|
469
469
|
)
|
|
470
|
-
|
|
470
|
+
AutoTorchModule.__init__(
|
|
471
|
+
self,
|
|
471
472
|
offload_dtype,
|
|
472
473
|
offload_device,
|
|
473
474
|
onload_dtype,
|
|
@@ -478,6 +479,8 @@ class AutoWrappedQuantizedModule(AutoTorchModule, LoRAHotLoadMixin):
|
|
|
478
479
|
computation_device,
|
|
479
480
|
vram_limit,
|
|
480
481
|
)
|
|
482
|
+
self.in_features = module.in_features
|
|
483
|
+
self.out_features = module.out_features
|
|
481
484
|
self.module = module
|
|
482
485
|
self.name = name
|
|
483
486
|
self.disk_offload = disk_offload
|
|
@@ -240,6 +240,13 @@ class BasePipeline(torch.nn.Module):
|
|
|
240
240
|
module.computation_device = device
|
|
241
241
|
|
|
242
242
|
|
|
243
|
+
def check_quant_hot_load(self, module: torch.nn.Module):
|
|
244
|
+
# A quantized weight cannot absorb a fused LoRA, so hot-loading is the only option for it.
|
|
245
|
+
if getattr(module, "quantize_config", None) is None:
|
|
246
|
+
return module
|
|
247
|
+
return self.enable_lora_hot_loading(module)
|
|
248
|
+
|
|
249
|
+
|
|
243
250
|
def load_lora(
|
|
244
251
|
self,
|
|
245
252
|
module: torch.nn.Module,
|
|
@@ -249,6 +256,7 @@ class BasePipeline(torch.nn.Module):
|
|
|
249
256
|
state_dict=None,
|
|
250
257
|
verbose=1,
|
|
251
258
|
):
|
|
259
|
+
module = self.check_quant_hot_load(module)
|
|
252
260
|
if state_dict is None:
|
|
253
261
|
if isinstance(lora_config, str):
|
|
254
262
|
lora = load_state_dict(lora_config, torch_dtype=self.torch_dtype, device=self.device)
|
|
@@ -370,7 +378,7 @@ class BasePipeline(torch.nn.Module):
|
|
|
370
378
|
"computation_dtype": self.torch_dtype,
|
|
371
379
|
"computation_device": self.device,
|
|
372
380
|
}
|
|
373
|
-
model = enable_vram_management(model, module_map, vram_config=vram_config)
|
|
381
|
+
model = enable_vram_management(model, module_map, vram_config=vram_config, quantize=getattr(model, "quantize_config", None))
|
|
374
382
|
return model
|
|
375
383
|
|
|
376
384
|
def compile_pipeline(self, mode: str = "default", dynamic: bool = True, fullgraph: bool = False, compile_models: list = None, **kwargs):
|
|
@@ -5,7 +5,7 @@ from typing_extensions import Literal
|
|
|
5
5
|
|
|
6
6
|
class FlowMatchScheduler():
|
|
7
7
|
|
|
8
|
-
def __init__(self, template: Literal["FLUX.1", "Wan", "Qwen-Image", "FLUX.2", "Z-Image", "LTX-2", "Qwen-Image-Lightning", "ERNIE-Image", "ACE-Step", "Ideogram4", "Krea-2", "Boogu", "MiniMax-H3", "MiniMax-Music3", "LingBot-Video"] = "FLUX.1"):
|
|
8
|
+
def __init__(self, template: Literal["FLUX.1", "Wan", "Qwen-Image", "FLUX.2", "Z-Image", "LTX-2", "Qwen-Image-Lightning", "ERNIE-Image", "ACE-Step", "Ideogram4", "Krea-2", "Boogu", "MiniMax-H3", "MiniMax-Music3", "LingBot-Video", "SenseNova-U1"] = "FLUX.1"):
|
|
9
9
|
self.set_timesteps_fn = {
|
|
10
10
|
"FLUX.1": FlowMatchScheduler.set_timesteps_flux,
|
|
11
11
|
"Wan": FlowMatchScheduler.set_timesteps_wan,
|
|
@@ -23,6 +23,7 @@ class FlowMatchScheduler():
|
|
|
23
23
|
"MiniMax-H3": FlowMatchScheduler.set_timesteps_minimax_h3,
|
|
24
24
|
"MiniMax-Music3": FlowMatchScheduler.set_timesteps_minimax_music3,
|
|
25
25
|
"LingBot-Video": FlowMatchScheduler.set_timesteps_lingbot_video,
|
|
26
|
+
"SenseNova-U1": FlowMatchScheduler.set_timesteps_sensenova_u1,
|
|
26
27
|
}.get(template, FlowMatchScheduler.set_timesteps_flux)
|
|
27
28
|
self.num_train_timesteps = 1000
|
|
28
29
|
|
|
@@ -173,6 +174,15 @@ class FlowMatchScheduler():
|
|
|
173
174
|
timesteps = sigmas * num_train_timesteps
|
|
174
175
|
return sigmas, timesteps
|
|
175
176
|
|
|
177
|
+
@staticmethod
|
|
178
|
+
def set_timesteps_sensenova_u1(num_inference_steps=50, denoising_strength=1.0, shift=3.0):
|
|
179
|
+
num_train_timesteps = 1000
|
|
180
|
+
sigmas = torch.linspace(denoising_strength, 0.0, num_inference_steps + 1)[:-1]
|
|
181
|
+
if shift is not None and shift != 1.0:
|
|
182
|
+
sigmas = shift * sigmas / (1 + (shift - 1) * sigmas)
|
|
183
|
+
timesteps = sigmas * num_train_timesteps
|
|
184
|
+
return sigmas, timesteps
|
|
185
|
+
|
|
176
186
|
@staticmethod
|
|
177
187
|
def set_timesteps_ace_step(num_inference_steps=8, denoising_strength=1.0, shift=3.0):
|
|
178
188
|
num_train_timesteps = 1000
|
|
@@ -63,7 +63,7 @@ def FlowMatchSFTAudioVideoLoss(pipe: BasePipeline, **inputs):
|
|
|
63
63
|
return loss
|
|
64
64
|
|
|
65
65
|
|
|
66
|
-
def FlowMatchSFTMiniMaxH3AudioVideoLoss(pipe: BasePipeline, **inputs):
|
|
66
|
+
def FlowMatchSFTMiniMaxH3AudioVideoLoss(pipe: BasePipeline, training_cfg_scale: float = 1.0, audio_loss_weight: float = 1.0, inputs_nega: dict | None = None, **inputs):
|
|
67
67
|
max_timestep_boundary = int(inputs.get("max_timestep_boundary", 1) * len(pipe.scheduler.timesteps))
|
|
68
68
|
min_timestep_boundary = int(inputs.get("min_timestep_boundary", 0) * len(pipe.scheduler.timesteps))
|
|
69
69
|
|
|
@@ -81,16 +81,39 @@ def FlowMatchSFTMiniMaxH3AudioVideoLoss(pipe: BasePipeline, **inputs):
|
|
|
81
81
|
training_target_audio = pipe.scheduler_audio.training_target(inputs["audio_input_latents"], audio_noise, timestep_audio)
|
|
82
82
|
|
|
83
83
|
models = {name: getattr(pipe, name) for name in pipe.in_iteration_models}
|
|
84
|
+
if training_cfg_scale > 1.0:
|
|
85
|
+
if not inputs_nega:
|
|
86
|
+
raise ValueError(
|
|
87
|
+
"MiniMax-H3 CFG-aware training requires unconditional inputs. "
|
|
88
|
+
"When using split training, rebuild the data cache with the same "
|
|
89
|
+
"--training_cfg_scale value."
|
|
90
|
+
)
|
|
91
|
+
inputs_uncond = {**inputs, **inputs_nega}
|
|
92
|
+
inputs_uncond["use_gradient_checkpointing"] = False
|
|
93
|
+
inputs_uncond["use_gradient_checkpointing_offload"] = False
|
|
94
|
+
with torch.no_grad():
|
|
95
|
+
noise_pred_uncond, noise_pred_audio_uncond = pipe.model_fn(
|
|
96
|
+
**models, **inputs_uncond,
|
|
97
|
+
timestep_video=timestep_video, timestep_audio=timestep_audio,
|
|
98
|
+
)
|
|
99
|
+
|
|
84
100
|
noise_pred, noise_pred_audio = pipe.model_fn(
|
|
85
101
|
**models, **inputs,
|
|
86
102
|
timestep_video=timestep_video, timestep_audio=timestep_audio,
|
|
87
103
|
)
|
|
88
104
|
|
|
105
|
+
if training_cfg_scale > 1.0:
|
|
106
|
+
# The checkpoint's conditional prediction has CFG distilled into it.
|
|
107
|
+
# Rearrange the CFG equation to recover the raw velocity fitted to the
|
|
108
|
+
# standard flow-matching target, using the current model as the teacher.
|
|
109
|
+
noise_pred = (noise_pred + (training_cfg_scale - 1.0) * noise_pred_uncond) / training_cfg_scale
|
|
110
|
+
noise_pred_audio = (noise_pred_audio + (training_cfg_scale - 1.0) * noise_pred_audio_uncond) / training_cfg_scale
|
|
111
|
+
|
|
89
112
|
loss = torch.nn.functional.mse_loss(noise_pred.float(), training_target.float())
|
|
90
113
|
loss = loss * pipe.scheduler.training_weight(timestep_video)
|
|
91
114
|
if "audio_input_latents" in inputs:
|
|
92
115
|
loss_audio = torch.nn.functional.mse_loss(noise_pred_audio.float(), training_target_audio.float())
|
|
93
|
-
loss_audio = loss_audio * pipe.scheduler_audio.training_weight(timestep_audio)
|
|
116
|
+
loss_audio = loss_audio * pipe.scheduler_audio.training_weight(timestep_audio) * audio_loss_weight
|
|
94
117
|
loss = loss + loss_audio
|
|
95
118
|
return loss
|
|
96
119
|
|
|
@@ -359,7 +359,7 @@ class DiffusionTrainingModule(torch.nn.Module):
|
|
|
359
359
|
# TODO: set `remove_unnecessary_params` to `True` by default
|
|
360
360
|
remove_unnecessary_params=False,
|
|
361
361
|
# TODO: move `loss_required_params` to `loss.py`
|
|
362
|
-
loss_required_params=("input_latents", "max_timestep_boundary", "min_timestep_boundary", "first_frame_latents", "video_latents", "audio_input_latents", "num_inference_steps"),
|
|
362
|
+
loss_required_params=("input_latents", "max_timestep_boundary", "min_timestep_boundary", "first_frame_latents", "video_latents", "audio_input_latents", "num_inference_steps", "cfg_scale"),
|
|
363
363
|
force_remove_params_shared=tuple(),
|
|
364
364
|
force_remove_params_posi=tuple(),
|
|
365
365
|
force_remove_params_nega=tuple(),
|