From acca58f50c245f11cb315dfc68858d9faa06db08 Mon Sep 17 00:00:00 2001 From: vladmandic Date: Tue, 9 Dec 2025 09:47:22 +0100 Subject: [PATCH] add kandinsky5 Signed-off-by: vladmandic --- html/reference.json | 18 ++++++++++++++++- modules/lora/lora_overrides.py | 3 +++ modules/modeldata.py | 6 ++++++ modules/sd_models.py | 4 ++++ pipelines/model_kandinsky.py | 37 ++++++++++++++++++++++++++++++++++ 5 files changed, 67 insertions(+), 1 deletion(-) diff --git a/html/reference.json b/html/reference.json index 4254e847f..db5689aae 100644 --- a/html/reference.json +++ b/html/reference.json @@ -770,7 +770,7 @@ "size": 5.15, "date": "2023 July" }, - "Kandinsky 3": { + "Kandinsky 3.0": { "path": "kandinsky-community/kandinsky-3", "desc": "Kandinsky 3.0 is an open-source text-to-image diffusion model built upon the Kandinsky2-x model family. In comparison to its predecessors, Kandinsky 3.0 incorporates more data and specifically related to Russian culture, which allows to generate pictures related to Russin culture. Furthermore, enhancements have been made to the text understanding and visual quality of the model, achieved by increasing the size of the text encoder and Diffusion U-Net models, respectively.", "preview": "kandinsky-community--kandinsky-3.jpg", @@ -779,6 +779,22 @@ "size": 27.72, "date": "2023 November" }, + "Kandinsky 5.0 T2I Lite": { + "path": "kandinskylab/Kandinsky-5.0-T2I-Lite-sft-Diffusers", + "desc": "Kandinsky 5.0 Image Lite is a 6B image generation models 1K resulution, high visual quality and strong text-writing", + "preview": "kandinskylab--Kandinsky-5.0-T2I-Lite-sft-Diffusers.jpg", + "skip": true, + "size": 33.20, + "date": "2025 November" + }, + "Kandinsky 5.0 I2I Lite": { + "path": "kandinskylab/Kandinsky-5.0-I2I-Lite-sft-Diffusers", + "desc": "Kandinsky 5.0 Image Lite is a 6B image editing models 1K resulution, high visual quality and strong text-writing", + "preview": "kandinskylab--Kandinsky-5.0-I2I-Lite-sft-Diffusers.jpg", + "skip": true, + "size": 33.20, + "date": "2025 November" + }, "Playground v1": { "path": "playgroundai/playground-v1", diff --git a/modules/lora/lora_overrides.py b/modules/lora/lora_overrides.py index b80cc9245..155524ae9 100644 --- a/modules/lora/lora_overrides.py +++ b/modules/lora/lora_overrides.py @@ -29,6 +29,8 @@ force_models_diffusers = [ # forced always # 'sd3', 'sc', 'h1', + 'kandinsky5', + 'kandinsky3', 'kandinsky', 'hunyuandit', 'hunyuanimage', @@ -43,6 +45,7 @@ force_models_diffusers = [ # forced always 'f2', # video models 'hunyuanvideo', + 'hunyuanvideo15' 'cogvideo', 'wanai', 'chrono', diff --git a/modules/modeldata.py b/modules/modeldata.py index 466d7f53b..c7358d162 100644 --- a/modules/modeldata.py +++ b/modules/modeldata.py @@ -22,6 +22,10 @@ def get_model_type(pipe): model_type = 'sd' # instaflow is compatible with sd elif "AnimateDiffPipeline" in name: model_type = 'sd' # animatediff is compatible with sd + elif "Kandinsky5" in name: + model_type = 'kandinsky5' + elif "Kandinsky3" in name: + model_type = 'kandinsky3' elif "Kandinsky" in name: model_type = 'kandinsky' elif "HunyuanDiT" in name: @@ -75,6 +79,8 @@ def get_model_type(pipe): # video models elif "CogVideo" in name: model_type = 'cogvideo' + elif 'HunyuanVideo15': + model_type = 'hunyuanvideo15' elif 'HunyuanVideoPipeline' in name or 'HunyuanSkyreels' in name: model_type = 'hunyuanvideo' elif 'LTX' in name: diff --git a/modules/sd_models.py b/modules/sd_models.py index 68752be30..e63203ecb 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -422,6 +422,10 @@ def load_diffuser_force(detected_model_type, checkpoint_info, diffusers_load_con from pipelines.model_kandinsky import load_kandinsky3 sd_model = load_kandinsky3(checkpoint_info, diffusers_load_config) allow_post_quant = False + elif model_type in ['Kandinsky 5.0']: + from pipelines.model_kandinsky import load_kandinsky5 + sd_model = load_kandinsky5(checkpoint_info, diffusers_load_config) + allow_post_quant = False elif model_type in ['NextStep']: from pipelines.model_nextstep import load_nextstep sd_model = load_nextstep(checkpoint_info, diffusers_load_config) # pylint: disable=assignment-from-none diff --git a/pipelines/model_kandinsky.py b/pipelines/model_kandinsky.py index e7f4518be..b2545e8fc 100644 --- a/pipelines/model_kandinsky.py +++ b/pipelines/model_kandinsky.py @@ -71,3 +71,40 @@ def load_kandinsky3(checkpoint_info, diffusers_load_config=None): devices.torch_gc(force=True, reason='load') return pipe + + +def load_kandinsky5(checkpoint_info, diffusers_load_config=None): + if diffusers_load_config is None: + diffusers_load_config = {} + repo_id = sd_models.path_to_repo(checkpoint_info) + sd_models.hf_auth_check(checkpoint_info) + + load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config) + shared.log.debug(f'Load model: type=Kandinsky50 repo="{repo_id}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={load_args}') + + transformer = generic.load_transformer(repo_id, cls_name=diffusers.Kandinsky5Transformer3DModel, load_config=diffusers_load_config) + text_encoder = generic.load_text_encoder(repo_id, cls_name=transformers.Qwen2_5_VLForConditionalGeneration, load_config=diffusers_load_config) + + if 'I2I' in repo_id: + cls = diffusers.Kandinsky5I2IPipeline + else: + cls = diffusers.Kandinsky5T2IPipeline + + pipe = cls.from_pretrained( + repo_id, + transformer=transformer, + text_encoder=text_encoder, + cache_dir=shared.opts.diffusers_dir, + **load_args, + ) + pipe.task_args = { + 'output_type': 'np', + } + + del text_encoder + del transformer + sd_hijack_te.init_hijack(pipe) + sd_hijack_vae.init_hijack(pipe) + + devices.torch_gc(force=True, reason='load') + return pipe