
    +j                     2   S SK Jr  S SKJrJr  S SKrS SKJr  S SKr0 SS_SS_SS_SS_S	S	_S
S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"0Er	S#S$S%.r
SSSSS	S
S&S'SSS(.
rS)S*0rS&S+S,S-S.S/S0S1S2S3S4S5S6S7S8.rS9 rS:S;S<.rS=S>S?S@SA.rSB rSC rSD rSE rg)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                 V    U R                  SSS9u  p[        R                  " X!/SS9nU$ )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   s.    QA&ii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                    0 nSnSn[         R                  5        H&  u  pVU R                  U U SU 35      X$ U SU 3'   M(     [        R                  5        Hb  u  pW[        R
                  " U Vs/ s H  oU U SU 3   PM     sn5      n	XU U SU 3'   U H  nU R                  U U SU 35      n
A
M     Md     U$ s  snf )Ntransformer_blocks.zdouble_blocks..)
double_mapitemspopdouble_map_multir   r   )diffusers_state_dict	block_numcomfyui_state_dictdouble_block_prefix_diffusersdouble_block_prefix_comfyuicomfyui_suffixdiffusers_suffixlist_diffusers_suffixsuffixtensor_comfyuitemps              r   =convert_diffusers_transformer_blocks_to_comfyui_double_blocksr/   W   sI   !6/)3)9)9);%^UiUmUm  rO  qP  QZ  P[  [\  ]m  \n  oo  Vp4YKq@PQR *< /?.D.D.F*^99  zO  P  zOou6S5TU^T__`ag`h3ij  zO  P  Q.Uc34YKq@PQR%f

"
"&C%DYKqQWPX#Y
Z4 & /G 	 P   2C
c                    0 nSnSn[         R                  5        H&  u  pVU R                  U U SU 35      X$ U SU 3'   M(     [        R                  5        Hb  u  pW[        R
                  " U Vs/ s H  oU U SU 3   PM     sn5      n	XU U SU 3'   U H  nU R                  U U SU 35      n
A
M     Md     U$ s  snf )Nsingle_transformer_blocks.zsingle_blocks.r   )
single_mapr!   r"   single_map_multir   r   )r$   r%   r&   single_block_prefix_diffuserssingle_block_prefix_comfyuir)   r*   r+   r,   r-   r.   s              r   Dconvert_diffusers_single_transformer_blocks_to_comfyui_single_blocksr7   h   sI   !=/)3)9)9);%^UiUmUm  rO  qP  QZ  P[  [\  ]m  \n  oo  Vp4YKq@PQR *< /?.D.D.F*^99  zO  P  zOou6S5TU^T__`ag`h3ij  zO  P  Q.Uc34YKq@PQR%f

"
"&C%DYKqQWPX#Y
Z4 & /G 	 Pr0   c                 J   0 n[         R                  5        H  u  p#U R                  U5      X'   M     [        R                  5        H  u  p#X0;  a    OU R                  U5      X'   M!     [        R                  5        H!  u  p#[        U R                  U5      5      X'   M#     U$ N)
extras_mapr!   r"   extras_map_optionalextras_map_specialr   )r$   r&   comfyui_keydiffusers_keys       r   *convert_diffusers_extras_to_comfyui_extrasr?   y   s    #-#3#3#5[$8$<$<]$K! $6 $7#<#<#>[.$8$<$<]$K! $?
 $6#;#;#=[$45I5M5Mm5\$]! $> 	r   c                   ^
^ U R                  5       nSm
Sm[        U
4S j[        U
4S jU5       5       5      S-   n[        U4S j[        U4S jU5       5       5      S-   nU Vs/ s H4  oDR                  T
5      (       a  M  UR                  T5      (       a  M2  UPM6     nn[        R
                  " 5          0 n[        U5       H  nU[        X5      -  nM     0 n[        U5       H  nU[        X5      -  nM     [        U 5      n	S S S 5        [        R                  " 5         [        R                  R                  5         WW-  W	-  $ s  snf ! , (       d  f       NN= f)Nr   r2   c              3   z   >#    U  H0  n[        UR                  T5      R                  S SS9S   5      v   M2     g7fr      )maxsplitr   Nintremoveprefixsplit).0idouble_block_prefixs     r   	<genexpr>4convert_diffusers_to_comfyui_flux.<locals>.<genexpr>   H       v  iucdQ^^,?@FFsWXFYZ[\]]  iu   8;c                 &   > U R                  T5      $ r9   
startswith)keyrK   s    r   <lambda>3convert_diffusers_to_comfyui_flux.<locals>.<lambda>   "    |  }K  }K  L_  }`r   rC   c              3   z   >#    U  H0  n[        UR                  T5      R                  S SS9S   5      v   M2     g7frB   rE   )rI   rJ   single_block_prefixs     r   rL   rM      rN   rO   c                 &   > U R                  T5      $ r9   rQ   )rS   rX   s    r   rT   rU      rV   r   )keysmaxfilterrR   r   inference_moderanger/   r7   r?   gccollectcudaempty_cache)all_tensors_diffusersall_keys_diffusersnum_double_blocksnum_single_blocksrS   extrasdouble_block_tensorsrJ   single_block_tensorsextra_tensorsrK   rX   s             @@r   !convert_diffusers_to_comfyui_fluxrk      s   +002
 -3  vhn  p`  bt  iu  v  v  yz  z   vhn  p`  bt  iu  v  v  yz  z -  G,3^^DW5X3adaoao  qD  bE3,  G "#aXYnrr $ "#a_`uyy $ ==RS-   	33mCC+ G s   'EEE9AE
E)safetensorsr   safetensors.torchr   r   r   	itertoolsr   r_   r    r#   r3   r4   r:   r   r<   r;   r/   r7   r?   rk    r   r   <module>rp      s   ! 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r   