
    +j                     4   d dl mZ d dlmZmZ d dlZd dlmZ d dlZi ddddddddd	d	d
d
dddddddddddddddddddddd d!d"iZ	d#d$d%Z
ddddd	d
d&d'ddd(
Zd)d*iZd&d+d,d-d.d/d0d1d2d3d4d5d6d7d8Zd9 Zd:d;d<Zd=d>d?d@dAZdB ZdC ZdD ZdE ZdS )F    )	safe_open)	load_file	save_fileN)chainencoded_exponentgapslutsoutput_positionssign_mantissasplit_positionszimg_attn.norm.key_norm.scalezattn.norm_k.weightzimg_attn.norm.query_norm.scalezattn.norm_q.weightzimg_attn.proj.biaszattn.to_out.0.biaszimg_mlp.0.biaszff.net.0.proj.biaszimg_mlp.2.biaszff.net.2.biaszimg_mod.lin.biasznorm1.linear.biasztxt_attn.norm.key_norm.scalezattn.norm_added_k.weightztxt_attn.norm.query_norm.scalezattn.norm_added_q.weightztxt_attn.proj.biaszattn.to_add_out.biasztxt_mlp.0.biaszff_context.net.0.proj.biasztxt_mlp.2.biaszff_context.net.2.biasztxt_mod.lin.biasznorm1_context.linear.bias)attn.to_q.biasattn.to_k.biasattn.to_v.bias)zattn.add_q_proj.biaszattn.add_k_proj.biaszattn.add_v_proj.bias)zimg_attn.qkv.biasztxt_attn.qkv.biaszproj_out.biasznorm.linear.bias)
r   r   r	   r
   r   r   zlinear2.biaszmodulation.lin.biasznorm.key_norm.scaleznorm.query_norm.scalezlinear1.bias)r   r   r   zproj_mlp.biaszproj_out.weightzx_embedder.biaszx_embedder.weightz/time_text_embed.timestep_embedder.linear_1.biasz1time_text_embed.timestep_embedder.linear_1.weightz/time_text_embed.timestep_embedder.linear_2.biasz1time_text_embed.timestep_embedder.linear_2.weightzcontext_embedder.biaszcontext_embedder.weightz+time_text_embed.text_embedder.linear_1.biasz-time_text_embed.text_embedder.linear_1.weightz+time_text_embed.text_embedder.linear_2.biasz-time_text_embed.text_embedder.linear_2.weight)zfinal_layer.linear.biaszfinal_layer.linear.weightzimg_in.biaszimg_in.weightztime_in.in_layer.biasztime_in.in_layer.weightztime_in.out_layer.biasztime_in.out_layer.weightztxt_in.biasztxt_in.weightzvector_in.in_layer.biaszvector_in.in_layer.weightzvector_in.out_layer.biaszvector_in.out_layer.weightc                 j    |                      dd          \  }}t          j        ||gd          }|S )N   r   )dim)chunktorchcat)weightshiftscale
new_weights       \/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-DFloat11-Extended/convert_fixed_tensors.pyswap_scale_shiftr   F   s9    QA&&iA...    znorm_out.linear.biasznorm_out.linear.weight)z#final_layer.adaLN_modulation.1.biasz%final_layer.adaLN_modulation.1.weightz/time_text_embed.guidance_embedder.linear_1.biasz1time_text_embed.guidance_embedder.linear_1.weightz/time_text_embed.guidance_embedder.linear_2.biasz1time_text_embed.guidance_embedder.linear_2.weight)zguidance_in.in_layer.biaszguidance_in.in_layer.weightzguidance_in.out_layer.biaszguidance_in.out_layer.weightc                    
 i }d
d}t                                           D ]+\  }}                     
  d|           ||  d| <   ,t                                          D ]U\  }}t	          j         
fd|D                       }|||  d| <   |D ]}                     
  d|           }	~	 V|S )Ntransformer_blocks.zdouble_blocks..c                 .    g | ]}  d |          S r    ).0suffix	block_numdiffusers_state_dictdouble_block_prefix_diffuserss     r   
<listcomp>zQconvert_diffusers_transformer_blocks_to_comfyui_double_blocks.<locals>.<listcomp>`   H      P  P  Pou26S3iU^3i3iag3i3ij  P  P  Pr   )
double_mapitemspopdouble_map_multir   r   )r&   r%   comfyui_state_dictdouble_block_prefix_comfyuicomfyui_suffixdiffusers_suffixlist_diffusers_suffixtensor_comfyuir$   tempr'   s   ``        @r   =convert_diffusers_transformer_blocks_to_comfyui_double_blocksr5   W   s   !6/)3)9)9);); p p%^%UiUmUm  rO  oo  QZ  oo  oo  ]m  oo  oo  Vp  Vp3QYQQQQRR.>.D.D.F.F  *^*9  P  P  P  P  P  P  zO  P  P  P  Q  Q.Uc3QYQQQQR%  f

"
"&C#YY#Y#YQW#Y#Y
Z
Z4t 	r   c                    
 i }d
d}t                                           D ]+\  }}                     
  d|           ||  d| <   ,t                                          D ]U\  }}t	          j         
fd|D                       }|||  d| <   |D ]}                     
  d|           }	~	 V|S )Nsingle_transformer_blocks.zsingle_blocks.r   c                 .    g | ]}  d |          S r!   r"   )r#   r$   r%   r&   single_block_prefix_diffuserss     r   r(   zXconvert_diffusers_single_transformer_blocks_to_comfyui_single_blocks.<locals>.<listcomp>q   r)   r   )
single_mapr+   r,   single_map_multir   r   )r&   r%   r.   single_block_prefix_comfyuir0   r1   r2   r3   r$   r4   r9   s   ``        @r   Dconvert_diffusers_single_transformer_blocks_to_comfyui_single_blocksr=   h   s   !=/)3)9)9);); p p%^%UiUmUm  rO  oo  QZ  oo  oo  ]m  oo  oo  Vp  Vp3QYQQQQRR.>.D.D.F.F  *^*9  P  P  P  P  P  P  zO  P  P  P  Q  Q.Uc3QYQQQQR%  f

"
"&C#YY#Y#YQW#Y#Y
Z
Z4t 	r   c                 z   i }t                                           D ]\  }}|                     |          ||<   t                                          D ]#\  }}|| vr n|                     |          ||<   $t                                          D ]*\  }}t          |                     |                    ||<   +|S N)
extras_mapr+   r,   extras_map_optionalextras_map_specialr   )r&   r.   comfyui_keydiffusers_keys       r   *convert_diffusers_extras_to_comfyui_extrasrE   y   s    #-#3#3#5#5 L L[-$8$<$<]$K$K[!!#6#<#<#>#> L L[-...5$8$<$<]$K$K[!!#5#;#;#=#= ^ ^[-$45I5M5Mm5\5\$]$][!!r   c                   	
 |                                  }d	d
t          	fdt          	fd|          D                       dz   }t          
fdt          
fd|          D                       dz   }	
fd|D             }t          j                    5  i }t          |          D ]}|t          | |          z  }i }t          |          D ]}|t          | |          z  }t          |           }d d d            n# 1 swxY w Y   t          j
                     t          j                                         ||z  |z  S )	Nr   r7   c              3      K   | ]A}t          |                                                  d d          d                   V  BdS r      )maxsplitr   Nintremoveprefixsplit)r#   idouble_block_prefixs     r   	<genexpr>z4convert_diffusers_to_comfyui_flux.<locals>.<genexpr>   k        v  vcdQ^^,?@@FFsWXFYYZ[\]]  v  v  v  v  v  vr   c                 .    |                                S r?   
startswith)keyrP   s    r   <lambda>z3convert_diffusers_to_comfyui_flux.<locals>.<lambda>   +    |  }K  }K  L_  }`  }` r   rI   c              3      K   | ]A}t          |                                                  d d          d                   V  BdS rH   rK   )r#   rO   single_block_prefixs     r   rQ   z4convert_diffusers_to_comfyui_flux.<locals>.<genexpr>   rR   r   c                 .    |                                S r?   rT   )rV   rZ   s    r   rW   z3convert_diffusers_to_comfyui_flux.<locals>.<lambda>   rX   r   c                 h    g | ].}|                               |                               ,|/S r"   rT   )r#   rV   rP   rZ   s     r   r(   z5convert_diffusers_to_comfyui_flux.<locals>.<listcomp>   sd      G  G  G3S^^DW5X5X  Gadaoao  qD  bE  bE  G3  G  G  Gr   )keysmaxfilterr   inference_moderanger5   r=   rE   gccollectcudaempty_cache)all_tensors_diffusersall_keys_diffusersnum_double_blocksnum_single_blocksextrasdouble_block_tensorsrO   single_block_tensorsextra_tensorsrP   rZ   s            @@r   !convert_diffusers_to_comfyui_fluxrn      s   +0022
 -3  v  v  v  vhn  p`  p`  p`  p`  bt  iu  iu  v  v  v  v  v  yz  z   v  v  v  vhn  p`  p`  p`  p`  bt  iu  iu  v  v  v  v  v  yz  z G  G  G  G  G,  G  G  G  
T 
T"## s saXYnpqrrr"## z za_`uwxyyy<=RSS-
T 
T 
T 
T 
T 
T 
T 
T 
T 
T 
T 
T 
T 
T 
T  	33mCCs   ADD	D	)safetensorsr   safetensors.torchr   r   r   	itertoolsr   rb   r*   r-   r:   r;   r@   r   rB   rA   r5   r=   rE   rn   r"   r   r   <module>rr      sU   ! ! ! ! ! ! 2 2 2 2 2 2 2 2        				(& & (	
 ? &  "6 "$8 , ( O )  "< "$>  .!$ 0%& +'( 1) 
0 N_   )

("&!+-/ 
 #%lm 
 -0"&LPMQ(,JNK O! 
&   *@+C    Q!T Q"U	    "  "  $%D %D %D %D %Dr   