From 2fec01d2b39f1e1f7dbc58a5d04dd97f58b27932 Mon Sep 17 00:00:00 2001 From: leejet Date: Sun, 30 Nov 2025 21:47:10 +0800 Subject: [PATCH] add support for diffusers format lora --- name_conversion.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/name_conversion.cpp b/name_conversion.cpp index b26e1a2..8b52148 100644 --- a/name_conversion.cpp +++ b/name_conversion.cpp @@ -615,6 +615,44 @@ std::string convert_diffusers_dit_to_original_flux(std::string name) { return name; } +std::string convert_diffusers_dit_to_original_lumina2(std::string name) { + int num_layers = 30; + int num_refiner_layers = 2; + static std::unordered_map z_image_name_map; + + if (z_image_name_map.empty()) { + z_image_name_map["all_x_embedder.2-1."] = "x_embedder."; + z_image_name_map["all_final_layer.2-1."] = "final_layer."; + + // --- transformer blocks --- + auto add_attention_map = [&](const std::string& prefix, int num) { + for (int i = 0; i < num; ++i) { + std::string block_prefix = prefix + std::to_string(i) + "."; + std::string dst_prefix = prefix + std::to_string(i) + "."; + + z_image_name_map[block_prefix + "attention.norm_q."] = dst_prefix + "attention.q_norm."; + z_image_name_map[block_prefix + "attention.norm_k."] = dst_prefix + "attention.k_norm."; + z_image_name_map[block_prefix + "attention.to_out.0."] = dst_prefix + "attention.out."; + + z_image_name_map[block_prefix + "attention.to_q.weight"] = dst_prefix + "attention.qkv.weight"; + z_image_name_map[block_prefix + "attention.to_q.bias"] = dst_prefix + "attention.qkv.bias"; + z_image_name_map[block_prefix + "attention.to_k.weight"] = dst_prefix + "attention.qkv.weight.1"; + z_image_name_map[block_prefix + "attention.to_k.bias"] = dst_prefix + "attention.qkv.bias.1"; + z_image_name_map[block_prefix + "attention.to_v.weight"] = dst_prefix + "attention.qkv.weight.2"; + z_image_name_map[block_prefix + "attention.to_v.bias"] = dst_prefix + "attention.qkv.bias.2"; + } + }; + + add_attention_map("noise_refiner.", num_refiner_layers); + add_attention_map("context_refiner.", num_refiner_layers); + add_attention_map("layers.", num_layers); + } + + replace_with_prefix_map(name, z_image_name_map); + + return name; +} + std::string convert_diffusion_model_name(std::string name, std::string prefix, SDVersion version) { if (sd_version_is_sd1(version) || sd_version_is_sd2(version)) { name = convert_diffusers_unet_to_original_sd1(name); @@ -624,6 +662,8 @@ std::string convert_diffusion_model_name(std::string name, std::string prefix, S name = convert_diffusers_dit_to_original_sd3(name); } else if (sd_version_is_flux(version) || sd_version_is_flux2(version)) { name = convert_diffusers_dit_to_original_flux(name); + } else if (sd_version_is_z_image(version)) { + name = convert_diffusers_dit_to_original_lumina2(name); } return name; }