o
    i_                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZdd Z	g fddZ
dd Zddd	Zdd
dZdddZdd Zdd ZdddZdd ZdddZdS )    Nc                 C   sD   d}	 d}| D ]}| ||rd} nq|dkr	 |S |d7 }q)Nr   TF   
startswithformat)state_dict_keysprefix_stringcountck r   3/mnt/c/Users/fbmor/ComfyUI/comfy/model_detection.pycount_blocks
   s   r   c                 C   s&   |D ]}d |||| v r dS qdS )Nz{}{}{}TF)r   )keysprefixmainsuffix_listxr   r   r   any_suffix_in   s
   r   c           	         s   d }d}| d  t tt fdd|}t|dkr[t| d }|d  jd }t|d	|  jd
k}d| |v pEd| |v }d| |v pSd| |v }|||||fS d S )NFz1.transformer_blocks.c                    
   |   S Nr   atransformer_prefixr   r   <lambda>"      
 z-calculate_transformer_depth.<locals>.<lambda>r   {}z{}0.attn2.to_k.weightr   z{}1.proj_in.weight   z"{}1.time_stack.0.attn1.to_q.weightz'{}1.time_mix_blocks.0.attn1.to_q.weightz"{}1.time_stack.0.attn2.to_q.weightz'{}1.time_mix_blocks.0.attn2.to_q.weight)sortedlistfilterlenr   r   shape)	r   r   
state_dictcontext_dimuse_linear_in_transformertransformer_keyslast_transformer_depth
time_stacktime_stack_crossr   r   r   calculate_transformer_depth   s   r+   c           E         s   t |  }d |v ri }| d  jd |d< | d  jd }||d< d }|| v r?| | jd ||  |d	< | d  jd d
 |d< d |d< d }||v rc| | jd |d< d }||v r| | jd }	| | jd }
d|	|
dd|d< d }||v r| | jd }||d< tt||d< d }||v rd|d< d |d< d }||v rt|d d |d< g |d< |D ]&}|d  r|	d!r|t
d  t
d!  }|d t| q|S d" |v ri }d# }||v rDd$|d%< | | }|jd d&kr6d&|d'< d&d&g|d(< d)d)g|d*< d+d,gd,d+gg|d-< |S |jd d.krBd.|d'< |S d/ |v rd0|d%< | d1  }|jd2 d3krg d4|d(< g d5|d*< g d6g d7g|d-< g d8g d9g|d:< |S |jd2 d;krg d<|d(< g d=|d*< g d>g d?g|d-< g d8g d@g|d:< |S dA |v ri }dB|dC< |S dD |v ri }| dE  jd |dF< | dG  jd |dH< t|dI d }t|dJ d }||dK< || |dL< |S dM |v rPi }dN|dO< t|dP d |d< | d  jd |dQ< |dQ dRkr5|d dSkr5dT|dU< | dV  jd dWkrNdX|dY< dX|dZ< d[|dO< |S d\ |v rei }| d]  }| d  }d^|dO< |jd |d< t |jdd  |d< |jd t|d  |d	< t fd_d`|D rda|db< nd |db< t
|d dkrd
d
g|dc< ng dd|dc< t fded`|D rdX|df< ndg|df< | dh  jd |di< |jd |dQ< dj|dU< |jd dk |dl< t|dm d |d< t|dn d |do< dp|dq< dX|dr< ds | v rdX|dt< ndg|dt< t t fdudv|}t
|dk|dw< dx |v r=dX|dy< ndg|dy< dz |v r[| dz  jd |d{< dX|d|< |S d |d{< dg|d|< |S t| d}d~dgrFd |v st| dd~dgrFi }d |v rd|dO< g d|dc< d|dl< d|dU< d|dq< dk|d	< dX|d< dX|d< dg|dr< dg|d< d|d< d|d< dg|d< d}n$d|dO< g dd|dc< d)|dl< dj|dU< d|dq< d|d	< dX|dr< g |d< d}d|d< d|dQ< d|di< ||d< d }||v r| | }|jd ||  |d< |jd |dQ< d }||v r5| | }|jd |di< |jd |dQ< d }||v rI| | jd |db< nd |db< |dQ t|dc  |dl< t|dm d |d< t|dn d |do< t| dd~dgst| dd~dgrd|dO< d
|d< d
|d	< d
|d< d|d< d|d< d|dL< t| dd~dgr d|dO< d|d< d|d	< | d jd2d|d< d
|d< d+|d< d+|d< d|d< d|d< t| dd~dgrdnd|d< tj|d< d |v rdX|d< |S dg|d< |S d |v |dw< d |v |d< t| dd~dg|d< |d r/|d r/ddg|d< |didkrD|db d u rDddg|d< |S d |v ri }d|dO< d|d< d|d< d)|dl< d|d< d&|d< dj|d< dj|d< dg|d< d,|d< dX|d< dg|dr< dX|d< d|d< dX|d< dX|d< dX|d< dg|d< d|d< dX|d< d|d< dp|d< d|d< |S d̠ |v rd͠ |v rd S d̠ |v ri }  dΝ|v rdnd|dO< t|dѠ d |d< | dӠ  j}|d d |d< |d |d< |d urd|v r|t|d di  |S d٠ |v rxi }d|dC< dk|d< d|d< d|d< d|d< d|d< d|d< d|dU< d|d< d)|d< d|d	< ddg|d< d|d< d|d< da|d< ddg|d< ddag|d< ddg|d< d|d< d|d< |S d |v rd}i }d|dl< ||d< d|dQ< d+|d< t|dP d |d< d }||v r| | jd |d< d }||v rtt| | jd | |d< |d d
 |d< d }||v rd|dO< dX|d< |S d|dO< dg|d< |S d |v ri }d|dO< d|d< d|d< dk|d< dX}| d  jd d+ t| |d< d|d	< d|d < d|d< | d  jd |d< d|d< ||d< d|d< dg|d< d	|d
< d|d< dX|d< dX|d< dp|d< |d dkrd|d< d|dl< dX|d< d|d< d|d< d|d< d|d< |S d|d< dS|dl< dX|d< d|d< d|d< d|d< d|d< d|d< d|d< d|d< |S d |v 	rhd |v 	rhi }d |dO< d|d< d|d< | d  }|jd |d!< |jd |d"< t|d# d |dL< dX|d< |d! d$krhd)|d%< d|d&< g d'|d(< g d)|d*< d|d< dj|d+< | d, d } | d urf| jd |d-< |S |d! d.k	rfd/|d%< d/|d&< g d0|d(< g d1|d*< d2|d< d3|d+< dX|d4< d|d5< ztj| d6 |dL d  dgd7 d8k |d9< W n
 ty   Y nw d: |v rd|d;< | d< d }!|!d ur|!jd |d=< d> }"|"|v 	rfd?|dO< | d@  jd }#| dA  jd }$| dB  }%|$}&t|#d dC |d< d|d< |&|dD< | |" jd |dE< t|dF d |dG< t|%jd |& dC |dH< d |v 	rfdX|d< |S dI |v 
ri }dJ|dO< | dI  jd2 }'| dK  jd d+ }(|'|d!< |(|d< |'dk |dl< | dL  jd |dM< t|dP d |d< dN|d< dp|dO< dP|dQ< dX|d< dX|dR< dS|dT< | dU  jd |d< dV |v 
rdW|dX< | dV  jd |dY< t|dZ d |d[< nvd\ |v 
r1d] |v 
r*d^|dX< n]d_|dX< nVd` |v 
rAda|dX< nFdb |v 
rQdc|dX< n6dd |v 
rade|dX< n&df |v 
rqdg|dX< nd] |v 
rdh|dX< ndi|dX< | dj })|)d u
r|)jd |dk< | dl }*|*d u
r|*jd |dm< |d u
rd|v 
r|t|d di  |S dn |v r.| dn  j}+i }do|dO< |+d |d< | dp  jd |di< |+d |dQ< dj|dU< d|dl< t|dm d |d< t|dn d |do< dX|dr< d |v |dw< |S   dq|v r  dr|v ri }ds|dO< |   dt jd |d< d|du< |   dt jd |dQ< dj|dU< d|dl< t|  dv|d< dg|dr< d |dw< |S dx |v ri }dy|dO< dk|d< g dz|d{< ddg|d|< dkdkg|d}< d|d< g d~|d< d|d< d+|d< d|d< d|d< d|d< d|d	< d|d< d.|d< |S d |v ri }d|dO< d |v rd|dO< d|d< d|d< dk|d< dX}| d  jd d+ t| |d< d|d	< d|d < d|d< | d  jd |d< ||d< d|d< d|d< dX|d< d	|d
< d|d< d/|d< dX|d< dp|d< |d d.kr|d|d< d|dl< n|d dkrd|d< dS|dl< |d dkrdg|d< dj|d< dj|d< d|d< n@|d dkr|d d.krdg|d< d|d< d|d< d|d< n|d dkrd|d< d|d< d|d< d|d< d|d< d|d< dg|d< |S d |v rdi }d|dO< g d|d< g d|d*< d |d+< d|dQ< d|d< dp|d< d|d< d|d< d|d< d|d< d|d< d |d	< d|d< d.|d< d|d< |S d |v ri }d|dO< | d  jd |d< t|dѠ d |d< d |v rd|d< d |v rdX|d< d|d< |S d |v r;i }| d  jd },|,|d< |,dv rd0|d(< |,dkrd|d< n|,dkrd|d(< | d  jd |d< d|dO< | d  jd |d< | d  jd |d< t|d d |d< t|d d |d< |S d |v rMi }d|dC< |S d |v rmi }d|dO< | d  jd |d< |S d |vrxd S dgddXdgd}d }-|-|v rd|d< | |- jd |d< nd |d< | d  jd }.| d  jd }/d }0|0| v r| |0 jd }1nd+}1g }2g }3g }4g }5d }6dg}7dg}8dg}9d}:d};d}<d}=t|d d }>t|>D ]};dà |;dĠ |>|; d tt tfddv|}?t
|?dkr ntt tfddv|}@dǠ|?v ra|2|< |3|= |:d9 }:d}<d}=t|| }A|Ad urZ|5|Ad  q|5d qdȠ}B|B|?v r|<d7 }<| dɠ jd |. }=t|| }A|Ad ur|4|Ad  |6d u r|Ad }6|Ad }7|Ad }8|Ad+ }9n|4d dȠ}B|B|@v rt|| }A|Ad ur|5|Ad  q|5d q|2|< |3|= dʠ |v rt|dˠ d }Cnd͠ |v rd2}Cnd}C|/|d< |1|d	< |.|d< |2|d< |4|d< |5|d< |3|d< |C|d< |7|d< |6|du< |8r`dX|d< dX|d< d|d< d|d< g dڢ|d< dX|d< dX|d< |9 |d< n
dg|d< dg|d< dߠ }D|D|v rzdX|d< |S (  Nz.{}joint_blocks.0.context_block.attn.qkv.weightz{}x_embedder.proj.weightr   in_channelsr   
patch_sizez{}final_layer.linear.weightr   out_channels@   depth
input_sizez{}y_embedder.mlp.0.weightadm_in_channelsz{}context_embedder.weightztorch.nn.Linear)in_featuresout_features)targetparamscontext_embedder_configz{}pos_embednum_patchespos_embed_max_sizez/{}joint_blocks.0.context_block.attn.ln_q.weightrmsqk_normpos_embed_scaling_factorz,{}context_processor.layers.0.attn.qkv.weightz{}context_processor.layers.z{}.context_processor_layersx_block_self_attn_layersz{}joint_blocks.z.x_block.attn2.qkv.weightz{}clf.1.weightz{}clip_txt_mapper.weightr	   stable_cascade_stage   c_condc_hidden   nhead      blocks   z{}clip_mapper.weightbz&{}down_blocks.1.0.channelwise.0.weight  )@  rK      rM   )rJ   rJ      rN   )r         rO   )rO   rP   rO   r   )r   r   r   r   )   rQ   r   r   block_repeat@  )rL   rS     rT   )rJ   	      rV   )r   rE      rE   )rE   rW   rE   r   r   r   r   r   z%{}transformer.rotary_pos_emb.inv_freqzdit1.0audio_modelz!{}double_layers.0.attn.w1q.weightz{}positional_encodingmax_seqz{}cond_seq_linear.weightcond_seq_dimz{}double_layers.z{}single_layers.n_double_layersn_layersz{}mlp_t5.0.weighthyditimage_modelz	{}blocks.hidden_sizei  (   g8mt@	mlp_ratioz{}extra_embedder.0.weighti  T	size_conduse_style_condhydit1z7{}txt_in.individual_token_refiner.blocks.0.norm1.weightz{}img_in.proj.weighthunyuan_videoc                 3        | ]}| d  V  qdS )z{}vector_in.Nr   .0s
key_prefixr   r   	<genexpr>       z%detect_unet_config.<locals>.<genexpr>   
vec_in_dimaxes_dim)   8   rs   c                 3   rg   )z{}time_r_in.Nr   rh   rk   r   r   rm      rn   meanflowFz{}txt_in.input_embedder.weightcontext_in_dimg      @   	num_headsz{}double_blocks.z{}single_blocks.depth_single_blocks   thetaqkv_biasz{}byt5_in.fc1.weightbyt5c                    s   |  d S )Nz{}guidance_in.r   r   rk   r   r   r      s    z$detect_unet_config.<locals>.<lambda>guidance_embedz{}cond_type_embedding.weightuse_cond_type_embeddingz{}vision_in.proj.0.weightvision_in_dimmeanflow_sumz'double_blocks.0.img_attn.norm.key_norm.weightscalez{}img_in.weightz!distilled_guidance_layer.norms.0.z){}double_stream_modulation_img.lin.weightflux2)    r   r   r   0   g      @i  global_modulationmlp_silu_actops_biasindexdefault_ref_methodg      $@ref_index_scalerQ   txt_ids_dimsfluxi'  rr   i      z{}txt_in.weightz{}vector_in.in_layer.weightz#distilled_guidance_layer.0.norms.0.chromain_dimout_dimi   
hidden_dim   znerf_blocks.0.norm.chroma_radiancez{}img_in_patch.weight)dimnerf_hidden_sizenerf_mlp_ratio
nerf_depth   nerf_max_freqs   nerf_tile_sizeznerf_final_layer_conv.norm.convlinearnerf_final_head_typenerf_embedder_dtypez{}__x0__use_x0z{}guidance_in.in_layer.weightz*{}double_blocks.0.img_mlp.gate_proj.weightyak_mlpz	txt_norm.txt_normi   z{}t5_yproj.weightmochi_previewhidden_size_xhidden_size_ymlp_ratio_xmlp_ratio_ylearn_sigmaout_biasg        	attn_droppatch_embed_biasposenc_preserve_areatimestep_mlp_biasattend_to_paddingg     @@timestep_scaleuse_t5t5_feat_dimt5_token_lengthg     @
rope_thetaz2{}adaln_single.emb.timestep_embedder.linear_1.biasz{}pos_embed.proj.biasz audio_adaln_single.linear.weightltxavltxvz{}transformer_blocks.
num_layersz({}transformer_blocks.0.attn2.to_k.weightr   attention_head_dimcross_attention_dimconfigtransformerz{}genre_embedder.weightace 
  	inner_dim
max_heighti   max_position	max_widthg      @rN   num_attention_headsg    .Aspeaker_embedding_dimtext_embedding_dimssl_encoder_depths   ssl_latent_dimsmertzm-hubert	ssl_namesi%  lyric_encoder_vocab_sizelyric_hidden_sizez{}t_block.1.weightrT   z{}y_embedder.y_embeddingmodel_max_lengthpe_interpolationz{}ar_embedder.mlp.0.weightpixart_alphamicro_conditionpixart_sigmaz1{}blocks.block0.blocks.0.block.attn.to_q.0.weightcosmos   	max_img_h	max_img_w
max_framesz{}x_embedder.proj.1.weightpatch_spatialpatch_temporalmodel_channelsz	FA-CA-MLPblock_configconcat_padding_maskrope3dpos_emb_clspos_emb_learnablecroppos_emb_interpolationTHWBDblock_x_formataffline_emb_normuse_adaln_loraadaln_lora_dimrP   
num_blocksextra_per_block_abs_pos_emb      ?rope_h_extrapolation_ratiorope_w_extrapolation_ratiog       @rope_t_extrapolation_ratio	learnable extra_per_block_abs_pos_emb_type$   extra_h_extrapolation_ratioextra_w_extrapolation_ratioextra_t_extrapolation_ratioz{}cap_embedder.1.weightz){}noise_refiner.0.attention.k_norm.weightlumina2r   cap_feat_dimz	{}layers.i 	  n_heads
n_kv_heads)r   r   r   	axes_dims)i,  r   r   	axes_lensffn_dim_multiplierz {}clip_text_pooled_proj.0.weightclip_text_dimi      )r   r   r   )r@   r   r   g      p@gUUUUUU@z_image_modulation
time_scalez{}layers.{}.ffn_norm1.weight)unbiasedgzG?
allow_fp16z{}cap_pad_tokenpad_tokens_multiplez{}siglip_embedder.0.weightsiglip_feat_dimz{}dec_net.cond_embed.weightzimage_pixelz{}x_embedder.weightz#{}dec_net.final_layer.linear.weightz*{}dec_net.input_embedder.embedder.0.weightg      ?decoder_in_channelsdecoder_hidden_sizez{}dec_net.res_blocks.decoder_num_res_blocksdecoder_max_freqsz{}head.modulationzwan2.1z{}head.head.weightz{}blocks.0.ffn.0.weightffn_dim)r   r   r   freq_dim)rJ   rJ   window_sizecross_attn_normgư>epsz{}patch_embedding.weightz{}vace_patch_embedding.weightvace
model_typevace_in_dimz{}vace_blocks.vace_layersz{}control_adapter.conv.weightz{}img_emb.proj.0.biascameraz
camera_2.2z2{}casual_audio_encoder.encoder.final_linear.weights2vz){}audio_proj.audio_proj_glob_1.layer.biashumoz+{}face_adapter.fuser_blocks.0.k_norm.weightanimatez{}patch_embedding_pose.weightscaili2vt2vz{}img_emb.emb_posflf_pos_embed_token_numberz{}ref_conv.weightin_dim_ref_convz{}latent_in.weight
hunyuan3d2z{}cond_in.weightzt_embedder.mlp.2.weightzblocks.0.attn1.k_norm.weighthunyuan3d2_1x_embedder.weightr%   z	blocks.{}guidance_cond_proj_dimz${}caption_projection.0.linear.weighthidream)r/   r   r   axes_dims_ropecaption_channelsmax_resolution)0r   r   r   rQ   rE   r   rO      r   rU   
      rF      rW      rr      rV      rN            rC            rP      r      r-  r-  r-  r-  r-  r-  r-  r-  r-  r-  r-  r-  r-  r-  r-  r-  llama_layersnum_routed_expertsnum_activated_expertsnum_single_layerstext_emb_dimz{}blocks.0.mlp.layer1.weightcosmos_predict2z/{}llm_adapter.blocks.0.cross_attn.q_proj.weightanimacrossattn_emb_channelsmin_fpsmax_fpsr$  g?rope_enable_fps_modulationz4{}time_caption_embed.timestep_embedder.linear_1.biasomnigen2)ra   ra   ra   axes_dim_rope)r     r;  i	  multiple_ofgh㈵>norm_epsr&  r  num_kv_headsnum_refiner_layerstext_feat_dimz{}txt_norm.weight
qwen_imagez{}__index_timestep_zero__index_timestep_zeroz-{}time_text_embed.addition_t_embedding.weightuse_additional_t_condnegative_indexz={}visual_transformer_blocks.0.cross_attention.key_norm.weightz!{}visual_embeddings.in_layer.bias	model_dim)r   r   )r   r   r   rope_scale_factori   )rr   rC   rC   z{}time_embeddings.in_layer.biastime_dim
kandinsky5z:{}visual_transformer_blocks.0.feed_forward.in_layer.weightff_dimz#{}visual_embeddings.in_layer.weightvisual_embed_dimz{}text_transformer_blocks.num_text_blocksz{}visual_transformer_blocks.num_visual_blocksz7{}encoder.lyric_encoder.layers.0.input_layernorm.weightzace1.5z&{}encoder.pan_blocks.1.cv4.conv.weight
RT_DETR_v4enc_hz{}input_blocks.0.0.weight)use_checkpoint
image_sizeuse_spatial_transformerlegacyz{}label_emb.0.0.weight
sequentialnum_classesz{}out.2.weightz{}input_blocksz.{}.z{}input_blocks.{}.z{}output_blocks.{}.c                    r   r   r   r   )r   r   r   r     r   c                    r   r   r   r   )prefix_outputr   r   r     r   z{}0.op.weightz{}0.in_layers.0.weightz{}0.out_layers.3.weightz{}middle_block.1.proj_in.weightz${}middle_block.1.transformer_blocks.r   z#{}middle_block.0.in_layers.0.weightnum_res_blockstransformer_depthtransformer_depth_outputchannel_multtransformer_depth_middler&   extra_ff_mix_layeruse_spatial_contextlearned_with_imagesmerge_strategymerge_factor)rQ   r   r   video_kernel_sizeuse_temporal_resblockuse_temporal_attentiondisable_temporal_crossattentionz#{}heatmap_head.conv_layers.0.weightheatmap_head)r    r   r   r#   roundmathsqrtr   r   endswithr"   appendintprodanyr!   r   sumgetsizetorchfloat32updatejsonloadsstditem	Exceptionranger   r+   )Er$   rl   metadatar   unet_configr-   final_layery_keycontext_keyr3   r4   num_patches_keyr8   rms_qkcontext_processorkeylayertext_mapper_namewdouble_layerssingle_layers
dit_configin_wout_wguidance_keysin_key
txt_in_key
vec_in_keyr#   pe_keyar_keyr   
ctd_weight
sig_weightdec_cond_keyx_emb_indec_out
embedder_w	dec_in_chr   r   
flf_weightref_conv_weightin_shaperE  y_inputr   r,   out_keyr.   rW  rZ  rX  rY  r%   r&   video_modelvideo_model_crosscurrent_resr   last_res_blockslast_channel_multinput_block_count
block_keysblock_keys_outputoutres_block_prefixr[  heatmap_keyr   )rl   r   rU  r   detect_unet_config,   sh  











8






( 

 



 

$








$




,


:













$









$






























































r  c                 C   s:   t jjD ]}|| |r||   S qtd|  d S )Nzno match {})comfysupported_modelsmodelsmatchesloggingerrorr   )r{  r$   model_configr   r   r   model_config_from_unet_configE  s   r  Fc                 C   sb   t | ||d}|d u rd S t|| }|d u r|rtj|}tj| |}|r/||_t	d |S )N)rz  z%Detected mixed precision quantization)
r  r  r  supported_models_baseBASEutilsdetect_layer_quantizationquant_configr  info)r$   unet_key_prefixuse_base_if_no_matchrz  r{  r  r  r   r   r   model_config_from_unetM  s   

r  c                 C   sj   g d}dd |D }| D ]}|D ]}| |r"||  d7  <  nqqt||jd}|| dkr3|S dS )N)zmodel.diffusion_model.zmodel.model.znet.c                 S   s   i | ]}|d qS )r   r   )ri   r
   r   r   r   
<dictcomp>b  s    z/unet_prefix_from_state_dict.<locals>.<dictcomp>r   )r  r   zmodel.)r   maxro  )r$   
candidatescountsr
   r	   topr   r   r   unet_prefix_from_state_dict]  s   
r  c                 C   s  |   }|dd }|dd }t|trt||g }d|v r|d}|dd }|dd }t|tr=t||g }|d u rE|d }g }g }d}	tt|D ]$}
||
 }d}|	|v ra||
 }||g| 7 }||g|d  7 }|	d	9 }	qQ|}||d< ||d
< ||d< ||d< |S )NrW  rZ  attention_resolutionsrX  r[  rJ   r   r   r   rY  )copyro  
isinstancerk  r"   popry  )r{  
new_configrW  rZ  r  rX  r[  t_int_outrj   iresdr   r   r   convert_configp  s<   



r  c           !      C   s  d| vrd S i }g }d}t | d}t|D ]R}t | d|d }t | d|d }t|D ]#}	t | d||	d }
||
 |
dkrR| d	||	 jd |d
< q/|d9 }|dkrgt|D ]}|d q_q||d< | d jd |d< | d jd |d< d |d< d| v r| d jd |d< nd| v r| d jd |d< i ddddddddddddddd|ddddd g d!dg d"d#g d$d%d&d'dd
d(d)d*g d+ddd,}i dddddddddddddd-d|dddd.d g d/dg d0d#g d1d%dd'dd
d2d)d*g d3ddd,}i dddddddddddd d|ddddd g d/dg d4d#g d1d%dd'dd
d5d)d*d6g d7ddd8}i dddddddddddddd(d|ddddd g d/dg d4d#g d1d%dd'dd
d5d)d*g d7ddd,}i dddddddddddddd9d|ddddd g d/dg d4d#g d1d%dd'dd
d5d)d*g d7ddd,}i dddddddddddd d|ddddd g d/dg d4d#g d1d%dd'dd
d:d;d<d6g d7ddd8}i ddddddddddddddd|ddddd g d!dg d=d#g d$d%dd'dd
d(d)d*g d>ddd,}i ddddddddddddddd|ddddd g d!dg d?d#g d$d%dd'dd)d*d
dg d@ddd,}i ddddddddddddddd|ddAddd g d!dg d"d#g d$d%d&d'dd
d(d)d*g d+ddd,}i ddddddddddddddd|dd<ddd g d!dg d"d#g d$d%d&d'dd
d(d)d*g d+ddd,}i ddddddddddddddd|ddddd g d!dg dBd6g dCd#g d$d%dDd'dd
d(d*dddE}i ddddddddddddddd|ddddd g d!dg dFd6g dGd#g d$d%dDd'dd
d(d*dddE}i ddddddddddddddd|ddddd g dHdg dId6g dJd#g d$d%dKd'dd
d(d*dddE}i ddddddddddddddd|ddddd g dHdg dLd6g dMd#g d$d%dNd'dd
d(d*dddE}i dddddddddddd d|ddddd g dHdg dHd#g d$d%dKd'dd
d5d)d*d6g dOddg dPdQ}i dddddddddddd d|ddddd g dHdg dRd#g d$d%dKd'dd
d:d)d*d6g dSddd8}i dddddddddddd d|ddAddd g d/dg d4d#g d1d%dd'dd
d:d;d<d6g d7ddd8}i ddddddddddddd|ddddd g d/dg d4d#g d1d%dd'dd
d5d)d*d6g d7ddd8}||||||||||||||||||g}|D ]!}d}|D ]} ||  ||  kr{d} nql|rt|  S qfd S )TNzconv_in.weightr   zdown_blocks.{}zdown_blocks.{}.attentions.r   zdown_blocks.{}.resnets.z0down_blocks.{}.attentions.{}.transformer_blocks.r   zCdown_blocks.{}.attentions.{}.transformer_blocks.0.attn2.to_k.weightr%   r   rX  r   r,   r2   zclass_embedding.linear_1.weightzadd_embedding.linear_1.weightrO  FrP  r   r.   rE   rQ  TrR  rT  rS  i   dtyperL   rW  )r   r   r   )r   r   r   r   r   r   rZ  )r   r   rE   r[  r   r&   rH   num_head_channelsr/   )	r   r   r   r   r   r   r   r   r   )rY  rc  rb  r   i  rX   )r   r   rE   rE   rE   rE   r   r   )r   r   rE   rE   rM   )r   r   r   rE   rE   rE   rE   rE   rE   r   r   r   )r   r   r   r   r   r   r   r   r   rY  )r   r   r   r   r   r   r   r   r   r   r   r   )rc  rb  r@   ro   rw   r   )r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   rU   )r   r   r   r   rE   rE   )	r   r   r   r   r   r   r   rE   rE   rJ   )r  rc  rb  )r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   )r   r   r   )r   r   r   )r   r   r   r   r   r   rV  )r   r   rO   )r   r   r   r   rO   rO   rO   )r   r   r   r   r   r   )TFF)rc  rb  disable_self_attentions)r   r   r   )r   r   r   r   r   r   )r   ry  r   rj  r#   r  )!r$   r  matchrX  attn_resdown_blocksr  attn_blocks
res_blocksabtransformer_countSDXLSDXL_refinerSD21SD21_uncliphSD21_uncliplSD15SDXL_mid_cnetSDXL_small_cnetSDXL_diffusers_inpaintSDXL_diffusers_ip2pSSD_1BSegmind_Vega
KOALA_700MKOALA_1BSD09_XSSD_XSSD15_diffusers_inpaintLotusDr  r{  r  r
   r   r   r   unet_config_from_diffusers_unet  s(  

     &         
 &&(r  c                 C   s   t | }|d urt|S d S r   )r  r  )r$   r{  r   r   r    model_config_from_diffusers_unet/  s   r   c                 C   s  i }d| v rt | d}t | d}tjj||| d|d}nd| v r6d| v r6t | d}tjjd	|i|d}nod
| v r_t | d}| d jd }tjj||d|d}| D ]
}	|	|vr]|	||	< qSnFd| v rt | d}
t | d}| d jd }tjj|
||d|d}n$d| v rd| v rt | d}| d jd d }
tjj|
|d|d}nd S |D ]}	| 	|	d }|d urf||	 }t
|ts]t|dkr|d }ndd }|d }|d ur?|	|d d }|d u rt|}|j|d  |d |d  k rt|j}|d |d  ||d < tj||j|jd}||d |jd < |}||	|d d u r1tjjr1| }||d |d |d }ntjjrH| }|}|}|||d d < |d }|||< n|||< | |	 q|S )Nz1joint_transformer_blocks.0.attn.add_k_proj.weightzjoint_transformer_blocks.{}.zsingle_transformer_blocks.{}.)r\   r]   )output_prefixz0adaln_single.emb.timestep_embedder.linear_1.biaszpos_embed.proj.biasztransformer_blocks.{}.r0   z'noise_refiner.0.attention.norm_k.weightz
layers.{}.z%noise_refiner.0.attention.to_k.weightr   )r]   r   r  zx_embedder.bias)r0   rx   r`   z+transformer_blocks.0.attn.add_q_proj.weightzpos_embed.proj.weightr/   )r0   r   r   c                 S   s   | S r   r   r   r   r   r   r   [  s    z)convert_diffusers_mmdit.<locals>.<lambda>r   )devicer  )r   r  r  auraflow_to_diffuserspixart_to_diffusersr#   z_image_to_diffusersflux_to_diffusersmmdit_to_diffusersro  r  strr"   rq  
empty_liker    emptyr  r  memory_managementaimdo_enabledclonenarrowr  )r$   r  out_sd	num_joint
num_singlesd_mapr   r]   r   r
   r0   rx   r`   r   tfunoffset
old_weightexpnewr  r   r   r   convert_diffusers_mmdit5  sx   










 
 


r  r   )FN)r  )rt  comfy.memory_managementr  comfy.supported_modelscomfy.supported_models_basecomfy.utilsrg  r  rq  r   r   r+   r  r  r  r  r  r  r  r  r   r   r   r   <module>   s4    
      


& 