
    3jv                     V   S SK r S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	rS SK
rS SKJrJr  S SKJr  S SKJr   " S S\ R                  R$                  5      r " S S	\ R                  R$                  5      r " S
 S\ R                  R$                  5      rS r " S S5      r " S S5      r " S S5      r " S S5      r " S S\5      r " S S5      r " S S5      r " S S\ R                  R$                  5      r " S S\R>                  5      r \\\\\ S.r!S S!S"S#S$S.r"g)%    N)nn)WanMultiTalkAttentionBlockMultiTalkAudioProjModel)io)
SUPIRPatchc                   :   ^  \ rS rSrSS\4U 4S jjjrS rSrU =r$ )BlockWiseControlBlock   dimc                   > [         TU ]  5         UR                  USS9U l        UR                  USS9U l        UR                  X5      U l        [        R                  R                  5       U l
        UR                  X5      U l        g )Ngư>)eps)super__init__RMSNormx_rmsy_rmsLinear
input_projtorchr   GELUactoutput_proj)selfr   devicedtype
operations	__class__s        >/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_model_patch.pyr   BlockWiseControlBlock.__init__   sr    '''6
'''6
$++C588==?%,,S6    c                     U R                  U5      U R                  U5      p!U R                  X-   5      nU R                  U5      nU R	                  U5      nU$ N)r   r   r   r   r   )r   xys      r   forwardBlockWiseControlBlock.forward   sK    zz!}djjm1OOAE"HHQKQr    )r   r   r   r   r   )   NNN)	__name__
__module____qualname____firstlineno__intr   r%   __static_attributes____classcell__r   s   @r   r	   r	      s    7C 7 7 r    r	   c            	       V   ^  \ rS rSr     S
S\S\S\S\4U 4S jjjrS rS rS	rU =r	$ )QwenImageBlockWiseControlNet"   
num_layersin_dimadditional_in_dimr   c                    > [         T	U ]  5         X0l        UR                  X#-   XEUS9U l        [
        R                  R                  [        U5       Vs/ s H  n[        XEXgS9PM     sn5      U l
        g s  snf )Nr   r   r   r   r   )r   r   r5   r   img_inr   r   
ModuleListranger	   controlnet_blocks)
r   r3   r4   r5   r   r   r   r   _r   s
            r   r   %QwenImageBlockWiseControlNet.__init__#   sx     	!2 ''(BC^c'd!&!4!4 z**A &c]*"
s   A5c                    [         R                  R                  5       R                  US S 2S S24   5      US S 2S S24'   Sn[         R                  R
                  R                  USX"45      nUR                  nUR                  US   US   US   S-  SUS   S-  S5      nUR                  SSSSSS	5      nUR                  US   US   S-  US   S-  -  US   S-  5      nU R                  U5      $ )
Nr
         r            )comfylatent_formatsWan21
process_inldm
common_ditpad_to_patch_sizeshapeviewpermutereshaper9   )r   latent_image
patch_sizehidden_states
orig_shapes        r   process_input_latent_image7QwenImageBlockWiseControlNet.process_input_latent_image5   s   $3399;FF|TUWZXZWZTZG[\QV
		,,>>|aQ[Mhi"((
%**:a=*Q-TV[\I\^_aklnaostatvwx%--aAq!Q?%--jmjnPQ>QV`acVdhiVi=jlvwxly|}l}~{{=))r    c                 ,    U R                   U   " X5      $ r"   )r<   )r   imgcontrolnet_conditioningblock_ids       r   control_block*QwenImageBlockWiseControlNet.control_block?   s    %%h/MMr    )r5   r<   r9   )<   @   r   r'   NNN)
r(   r)   r*   r+   r,   r   rV   r\   r-   r.   r/   s   @r   r1   r1   "   sU     !",0

 
 	

 
 
$*N Nr    r1   c                      ^  \ rS rSrSr      SS\S\S\S\S\4
U 4S jjjrS	 rS
\	R                  S\R                  S\R                  S\R                  S\	R                  S\	R                  4S jrSrU =r$ )SigLIPMultiFeatProjModelC   a  
SigLIP Multi-Feature Projection Model for processing style features from different layers
and projecting them into a unified hidden space.

Args:
    siglip_token_nums (int): Number of SigLIP tokens, default 257
    style_token_nums (int): Number of style tokens, default 256
    siglip_token_dims (int): Dimension of SigLIP tokens, default 1536
    hidden_size (int): Hidden layer size, default 3072
    context_layer_norm (bool): Whether to use context layer normalization, default False
siglip_token_numsstyle_token_numssiglip_token_dimshidden_sizecontext_layer_normc	                 @  > [         T	U ]  5         [        R                  " UR	                  X5      [        R
                  " 5       5      U l        U(       a  UR                  U5      O[        R                  " 5       U l	        UR	                  X4SS9U l
        [        R                  " UR	                  X5      [        R
                  " 5       5      U l        U(       a  UR                  U5      O[        R                  " 5       U l        UR	                  X4SS9U l        [        R                  " UR	                  X5      [        R
                  " 5       5      U l        U(       a  UR                  U5      O[        R                  " 5       U l        UR	                  X4SS9U l        g )NT)bias)r   r   r   
Sequentialr   SiLUhigh_embedding_linear	LayerNormIdentityhigh_layer_normhigh_projectionmid_embedding_linearmid_layer_normmid_projectionlow_embedding_linearlow_layer_normlow_projection)
r   rc   rd   re   rf   rg   r   r   r   r   s
            r   r   !SigLIPMultiFeatProjModel.__init__P   sQ    	 &(]]/BGGI&
"
 8JJ  !23r{{} 	  *001BVZ0[ %'MM/BGGI%
!
 8JJ  !23r{{} 	 )//0AUY/Z %'MM/BGGI%
!
 8JJ  !23r{{} 	 )//0AUY/Zr    c                    [        U R                  R                  5       5      R                  nU R	                  US   U R                  U R
                  U R                  U5      nU R	                  US   U R                  U R                  U R                  U5      nU R	                  US   U R                  U R                  U R                  U5      n[        R                  " X4U4SS9$ )z
Forward pass function

Args:
    siglip_outputs: Output from SigLIP model, containing hidden_states

Returns:
    torch.Tensor: Concatenated multi-layer features with shape [bs, 3*style_token_nums, hidden_size]
r@   rA   r   r   )nextrl   
parametersr   _process_layer_featuresro   rp   rq   rr   rs   rt   ru   rv   r   cat)r   siglip_outputsr   high_embeddingmid_embeddinglow_embeddings         r   r%    SigLIPMultiFeatProjModel.forwardy   s     T//::<=CC 551&&    
 441%%
 441%%
 yy.GQOOr    rT   embedding_linear
layer_norm
projectionr   returnc                     U" UR                  U5      R                  SS5      5      R                  SS5      nU" U5      nU" U5      nU$ )a[  
Helper function to process features from a single layer

Args:
    hidden_states: Input hidden states [bs, seq_len, dim]
    embedding_linear: Embedding linear layer
    layer_norm: Layer normalization
    projection: Projection layer
    dtype: Target data type

Returns:
    torch.Tensor: Processed features [bs, style_token_nums, hidden_size]
rA   r@   )to	transpose)r   rT   r   r   r   r   	embeddings          r   r|   0SigLIPMultiFeatProjModel._process_layer_features   sU    , %U#--a3

)Aq/ 	
 y)	 y)	r    )	rl   ro   rp   rt   ru   rv   rq   rr   rs   )i  r_   i  r'   TNNN)r(   r)   r*   r+   __doc__r,   boolr   r%   r   Tensorr   Moduler   r|   r-   r.   r/   s   @r   ra   ra   C   s    
 "% "!%#',0'['[ '[ 	'[
 '[ !'[ '[R(PT ||  ))  II	 
 II  {{  
   r    ra   c                    SSSSS.n0 n[        U R                  5       5       H  nX   nUnUR                  S5      (       a  U/nM$  UR                  S5      (       a  U/W-   nMB  UR                  S5      (       a-  WU/-   n[        R                  " US	S
9nUR                  SS5      nUR                  5        H  u  pxUR                  Xx5      nM     XBU'   M     U$ )Nz.attention.out.biasz.attention.k_norm.weightz.attention.q_norm.weightz.attention.out.weight)z.attention.to_out.0.biasz.attention.norm_k.weightz.attention.norm_q.weightz.attention.to_out.0.weightz.attention.to_k.weightz.attention.to_q.weightz.attention.to_v.weightr   ry   z.attention.qkv.weight)sortedkeysendswithr   r}   replaceitems)	sdreplace_keysout_sdkwk_outccrrrs	            r   z_image_convertr      s    0E0J0J2IL FBGGIE>>233B>>233rB>>233qcB		"!$AMM":<STE!'')EAMM!(E *u# & Mr    c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
ModelPatchLoader   c                 8    SS[         R                  " S5      400$ )Nrequirednamemodel_patches)folder_pathsget_filename_listss    r   INPUT_TYPESModelPatchLoader.INPUT_TYPES   s&    f|'E'Eo'V&Y   ! 	!r    MODEL_PATCHload_model_patchTzmodel/loadersc                 *   [         R                  " SU5      n[        R                  R	                  USS9n[        R                  R                  U5      nSU;   aW  US   R                  S   S-
  n[        U[        R                  R                  5       U[        R                  R                  S9nGOS	U;   ab  [        R                  R                  US
S0SS9n[        [        R                  R                  5       U[        R                  R                  S9nGOSU;   a  [        U5      n0 nSU;  a  SUS'   SUS'   SUS'   SU;   aC  SUS'   SUS'   SUS'   UR                  SS 5      nUb  [         R"                  " U5      S:X  a  SUS'   [        R$                  R&                  R(                  R*                  " S+[        R                  R                  5       U[        R                  R                  S.UD6nGOSU;   av  [-        SSSUS   R                  S   US   R                  S   US   R                  S   [        R                  R                  5       [        R                  R                  S 9nGO)S!U;   d  S"U;   Ga  0 n	S!U;   a  S#U	S$'   S%U	S&'   O
S#U	S#'   S%U	S%'   S'n
0 n[/        UR1                  5       5       H:  nUR3                  U
5      (       d  M  UR5                  U5      X[7        U
5      S  '   M<     [        R                  R                  X9SS9nUR5                  S(S 5        [        R$                  R8                  R:                  R=                  [        R                  R                  5       U[        R                  R                  S9nU(       a  Xl        [        R@                  RC                  W[        R                  RE                  5       [        R                  R                  5       S)9nURG                  X=RI                  5       S*9  U4$ ),Nr   T)	safe_loadz controlnet_blocks.0.y_rms.weightzimg_in.weightrA   r_   )r5   r   r   r   z$feature_embedder.mid_layer_norm.biaszfeature_embedder. )filter_keysr8   z!control_all_x_embedder.2-1.weightz*control_layers.4.adaLN_modulation.0.weightrE   n_control_layers   r5   refiner_controlz+control_layers.14.adaLN_modulation.0.weight   z)control_noise_refiner.0.after_proj.weightr   brokenzaudio_proj.proj1.weightrF       rD   z%blocks.0.audio_cross_attn.proj.weightzaudio_proj.norm.weight)audio_windowcontext_tokens	vae_scaler4   intermediate_dimout_dimr   r   z-model.control_model.input_hint_block.0.weightz'control_model.input_hint_block.0.weightzcontrol_model.zmodel.control_model.zproject_modules.z&model.diffusion_model.project_modules.z"first_stage_model.denoise_encoder.zcontrol_model.mask_LQ)load_deviceoffload_device)assign )%r   get_full_path_or_raiserG   utilsload_torch_fileweight_dtyperN   r1   model_managementunet_offload_deviceopsmanual_caststate_dict_prefix_replacera   r   getr   count_nonzerorK   lumina
controlnetZImage_ControlMultiTalkModelPatchlistr   
startswithpoplensupirsupir_modulesSUPIRdenoise_encoder_sdmodel_patcherCoreModelPatcherget_torch_deviceload_state_dict
is_dynamic)r   r   model_patch_pathr   r   r5   modelconfig
ref_weightprefix_replace	de_prefixr   r   r   s                 r   r   !ModelPatchLoader.load_model_patch   sC   '>>PTU[[(()9T(J((,-3 "? 3 9 9! <r A0CT]b]s]s  ^H  ^H  ^J  RW  di  dm  dm  dy  dy  zE3r966r<OQS;Tbf6gB,E4J4J4^4^4`hmz  {D  {D  {P  {P  QE0B6 $BF;2E-.)*.0*+,0()<B-/)*.0*+,0()VV$OQUV
)**:6!;+/x(II$$//>>  meF\F\FpFpFrz  MR  MV  MV  Mb  Mb  m  fl  mE&",'!"2EFLLQO%'(A%B%H%H%K78>>qA 11EEG$yy446E =BFosuFuN>"D9I56K]GH3C/05G12 =I!#"'')_<<	**=?VVAY&Y'9: % 66rW[6\BFF*D1IIOO1177u?U?U?i?i?ksx  FK  FO  FO  F[  F[7  \E!+=(++<<UPUPfPfPwPwPy  KP  Ka  Ka  Ku  Ku  Kw<  xb)A)A)CDr    r   N)r(   r)   r*   r+   classmethodr   RETURN_TYPESFUNCTIONEXPERIMENTALCATEGORYr   r-   r   r    r   r   r      s/    ! ! $L!HLH; r    r   c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
DiffSynthCnetPatchi+  Nc                     Xl         X l        X0l        X@l        XPl        UR
                  R                  U R                  U5      5      U l        UR                  S   UR                  S   4U l
        g )NrA   r@   )model_patchvaeimagestrengthmaskr   rV   encode_latent_condencoded_imagerN   encoded_image_size)r   r   r   r   r   r   s         r   r   DiffSynthCnetPatch.__init__,  s^    &
 	(..II$JaJabgJhi#(;;q>5;;q>"Br    c                    U R                   R                  U5      nU R                  R                  R                  S:  a  U R
                  cA  [        R                  " U5      S S 2S U R                  R                  R                  S-  24   nOU[        R                  R                  U R
                  R                  SSS9UR                  S   UR                  S   SS	5      n[        R                  " X#/SS
9$ U$ )Nr   rD   rA   Tr   keepdimrC   rB   bilinearnonery   )r   encoder   r   r5   r   r   	ones_likerG   r   common_upscalemeanrN   r}   )r   r   rR   mask_s       r   r   %DiffSynthCnetPatch.encode_latent_cond5  s    xxu-!!33a7yy 5a9g$:J:J:P:P:b:bfg:g9g6gh22499>>aQU>3VXdXjXjkmXnp|  qC  qC  DF  qG  IS  U[  \99l2::r    c           
      p   UR                  S5      nUR                  S5      nUR                  S5      nU R                  R                  5       nU R                  b3  U R                  UR
                  S   U-  UR
                  S   U-  4:w  Ga  [        R                  R                  U R                  R                  SS5      UR
                  S   U-  UR
                  S   U-  SS5      n[        R                  R                  S	S
9nU R                  R                  R                  U R!                  UR                  SS5      5      5      U l        UR
                  S   UR
                  S   4U l        [        R                  R#                  U5        US S 2S U R                  R
                  S   24==   U R                  R                  R%                  US S 2S U R                  R
                  S   24   U R                  R'                  UR(                  5      U5      U R*                  -  -  ss'   X1S'   U$ )Nr#   rY   block_indexrB   rC   rA   areacenterTonly_currently_used)r   r   spacial_compression_encoder   r   rN   rG   r   r   r   movedimr   loaded_modelsr   r   rV   r   load_models_gpur\   r   r   r   )r   kwargsr#   rY   r  spacial_compressionimage_scaledr
  s           r   __call__DiffSynthCnetPatch.__call__A  so   JJsOjjjj/"hhAAC%)@)@QWWR[SfEfhihohoprhs  wJ  iJ  EK  *K ;;55djj6H6HQ6OQRQXQXY[Q\_rQrtut{t{|~t  CV  uV  X^  `h  iL!22@@UY@ZM!%!1!1!7!7!R!RSWSjSjkwkk  AB  DF  lG  TH  "ID'3'9'9"'=|?Q?QRT?U&VD#""22=AA+""((+++,1A1A1G1G1U1UVYZ[]y^b^p^p^v^vwx^y]yZyVz  }A  }O  }O  }R  }R  SV  S\  S\  }]  _j  2k  nr  n{  n{  2{  	|,ur    c                     [        U[        R                  5      (       a   U R                  R	                  U5      U l        U $ r"   
isinstancer   r   r   r   r   device_or_dtypes     r   r   DiffSynthCnetPatch.toQ  1    ou||44!%!3!3!6!6!GDr    c                     U R                   /$ r"   r   r   s    r   modelsDiffSynthCnetPatch.modelsV        !!r    )r   r   r   r   r   r   r   r"   
r(   r)   r*   r+   r   r   r  r   r  r-   r   r    r   r   r   +  s    C
  
"r    r   c                   :    \ rS rSrS	S jrS	S jrS rS rS rSr	g)
ZImageControlPatchiY  Nc                    Xl         X l        X0l        XPl        X`l        X@l        U R                   R                  R                  S:  U l        SnU R                  b=  U R                  b0  U R                  R                  U R                  R                  :w  a  SnU(       a  S U l
        OU R                  U R                  U R                  5      U l
        U R                  c8  U R                  R                  S   U R                  R                  S   4U l        O7U R                  R                  S   U R                  R                  S   4U l        S U l        g )Nr   FTrA   r@   )r   r   r   inpaint_imager   r   r   r5   
is_inpaintrN   r   r   r   	temp_data)r   r   r   r   r   r"  r   skip_encodings           r   r   ZImageControlPatch.__init__Z  s   &
*	 **00BBQF::!d&8&8&Dzz4#5#5#;#;; $!%D!%!8!8TEWEW!XDzz!+/+=+=+C+CA+FHZHZH`H`abHc*d'+/::+;+;A+>

@P@PQR@S*T'r    c           	         S nUbF  [         R                  R                  5       R                  U R                  R                  U5      5      nU R                  (       Ga  Uc  [        R                  " U5      S-  nU R                  b  [         R                  R                  U R                  R                  U R                  R                  S   SU R                  R                  S   U R                  R                  S   5      R                  SSS9UR                  S   UR                  S   S	S
5      nUS-
  UR                  SS5      R!                  5       -  S-   n[         R                  R                  5       R                  U R                  R                  U5      5      nU R                  c   [        R"                  " U5      S S 2S S24   nO[         R                  R                  U R                  R                  U R                  R                  S   SU R                  R                  S   U R                  R                  S   5      R                  SSS9R%                  UR&                  S9UR                  S   UR                  S   SS
5      nUc]  [         R                  R                  5       R                  U R                  R                  [        R                  " U5      S-  5      5      n[        R(                  " X6U/SS9$ U$ )Ng      ?r   rC   rB   rA   Tr   r   r  )r   nearestry   )rG   rH   FluxrJ   r   r   r#  r   r   r   r   r   rO   rN   r   r	  round
zeros_liker   r   r}   )r   control_imager"  rR   mask_inpaintinpaint_image_latentr   s          r   r   %ZImageControlPatch.encode_latent_condr  sG   $ //446AA$((//R_B`aL???$ % > Dyy$${{99$))..YZI[]_aeajajapapqsatvzvv  wF  wF  GI  wJ  ;K  ;P  ;P  UV  `d  ;P  ;e  gt  gz  gz  {}  g~  @M  @S  @S  TV  @W  Yc  em   n"/#"59M9MaQS9T9Z9Z9\!\`c c#(#7#7#<#<#>#I#I$((//ZgJh#i yy (()=>q"1"uE22499>>$))//RSBTVXZ^ZcZcZiZijlZmosoxoxo~o~  @B  pC  4D  4I  4I  NO  Y]  4I  4^  4a  4a  i}  iD  iD  4a  4E  G[  Ga  Ga  bd  Ge  g{  gA  gA  BD  gE  GP  RZ  [#$3388:EEdhhooV[VeVefsVtwzVzF{|99l3GHaPPr    c           
      |   UR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nUR                  SS	5      n	U R                  R                  5       n
U R                  b3  U R                  UR
                  S
   U
-  UR
                  S   U
-  4:w  Ga  S nU R                  b  [        R                  R                  U R                  R                  SS5      UR
                  S   U
-  UR
                  S
   U
-  SS5      R                  SS5      nUR
                  S   UR
                  S
   4U l        S nU R                  b  [        R                  R                  U R                  R                  SS5      UR
                  S   U
-  UR
                  S
   U
-  SS5      R                  SS5      nUR
                  S   UR
                  S
   4U l        [        R                  R                  SS9nU R                  X5      U l        [        R                  R                  U5        U R                   R"                  R$                  n['        SU-  5      nX-  nX-  nUR)                  S5        UR)                  S5        UUS-
  :  a	  S U l        U$ U R*                  b  U R*                  S   U:  a  U	S:X  aI  SS U R                   R#                  XPR                  R-                  UR.                  5      Xg5      44U l        OHSS U R                   R#                  XPR                  R-                  UR.                  5      Xg5      44U l        U	S:X  a  U R*                  S   S-   nUU R                   R"                  R1                  XR*                  S   S   US S 2S U R*                  S   S   R
                  S   24   S Xg5      4U l        U R*                  S   S   bM  US S 2S U R*                  S   S   R
                  S   24==   U R*                  S   S   U R2                  -  -  ss'   U$ U R*                  S   U:  a  U R*                  S   S-   U:  a  U R*                  S   S-   nUU R                   R"                  R5                  UU R*                  S   S   US S 2S U R*                  S   S   R
                  S   24   S Xg5      4U l        U R*                  S   U:  a  U R*                  S   S-   U:  a  M  UU R*                  S   :X  ai  US S 2S U R*                  S   S   R
                  S   24==   U R*                  S   S   U R2                  -  -  ss'   XR*                  S   S-   :X  a  S U l        U$ )Nr#   rY   	img_inputtxtpevecr  
block_typer   rB   rC   rA   r  r  r(  Tr     r   noise_refiner)r   r   r  r   r   rN   r   rG   r   r   r	  r"  r   r
  r   r  r   r   r   r+  r   r$  r   r   forward_noise_refiner_blockr   forward_control_block)r   r  r#   rY   r2  r3  r4  r5  r  r6  r  r  inpaint_scaledr
  cnet_blocksdiv
cnet_indexcnet_index_float
next_layers                      r   r  ZImageControlPatch.__call__  s   JJsOjjJJ{+	jjZZjjjj/ZZb1
"hhAAC%)@)@QWWR[SfEfhihohoprhs  wJ  iJ  EK  *KLzz%${{99$**:L:LRQR:SUVU\U\]_U`cvUvxyxx  AC  yD  GZ  yZ  \b  dl   m   u   u  vw  y{   |+7+=+=b+A<CUCUVXCY*Z'!N!!-!&!;!;D<N<N<V<VWY[\<]_`_f_fgi_j  nA  `A  CD  CJ  CJ  KM  CN  Qd  Cd  fl  nv  "w  "  "  @A  CE  "F+9+?+?+C^EYEYZ\E]*^'!22@@UY@ZM!%!8!8!VD""22=A&&,,==B$%!(
'-

5

5{Q/!DNM>>!T^^A%6%C_,"$tT-=-=-C-CCI[I[I^I^_b_h_hIikm-s&t!u"$tT-=-=-C-CCI[I[I^I^_b_h_hIikm-s&t!u(*Q.J($*:*:*@*@*\*\]hjxjxyzj{|}j~  AJ  KL  Nl  OS  O]  O]  ^_  O`  ab  Oc  Oi  Oi  jk  Ol  Nl  Kl  Am  os  uw  +}  ~DN~~a #/A5q)!,22155564>>!;LQ;ORVR_R_;_`6  ..#j0dnnQ6G!6K{5Z!^^A.2
",d.>.>.D.D.Z.Z[egkguguvwgxyzg{  ~G  HI  Ki  LP  LZ  LZ  [\  L]  ^_  L`  Lf  Lf  gh  Li  Ki  Hi  ~j  lp  rt  /z  "{ ..#j0dnnQ6G!6K{5Z  4>>!#44A5q)!,22155564>>!;LQ;ORVR_R_;_`6.."3a"77%)DNr    c                     [        U[        R                  5      (       a4  U R                  b   U R                  R	                  U5      U l        S U l        U $ r"   )r  r   r   r   r   r$  r  s     r   r   ZImageControlPatch.to  sD    ou||44!!-%)%7%7%:%:?%K"!DNr    c                     U R                   /$ r"   r  r  s    r   r  ZImageControlPatch.models  r  r    )
r   r   r   r"  r#  r   r   r   r$  r   )NNr  r   r    r   r   r   Y  s    0 6;z"r    r   c                   >    \ rS rSr\S 5       rSrSrSrSr	S
S jr
S	rg)QwenImageDiffsynthControlneti  c           
      *    SSSSSSSSS	S
.4S.SS0S.$ )NMODELr   VAEIMAGEFLOAT      ?      $      $@{Gz?defaultminmaxstep)r   r   r   r   r   r   MASKr   optionalr   r   s    r   r   (QwenImageDiffsynthControlnet.INPUT_TYPES  s:    '1-=%-'1+2EZ^hl4m*n	  $Y/1 	1r    rI  diffsynth_controlnetTzmodel/patch/qwenNc           	      2   UR                  5       nUb  US S 2S S 2S S 2S S24   nUb  US S 2S S 2S S 2S S24   nUbG  UR                  S:X  a  UR                  S5      nUR                  S:X  a  UR                  S5      nSU-
  n[        UR                  [
        R                  R                  R                  R                  5      (       a0  [        X#XEXgS9n	UR                  U	5        UR                  U	5        U4$ UR                  [        X#XEU5      5        U4$ )NrE   rA   rD   r@   rP  )r"  r   )clonendim	unsqueezer  r   rG   rK   r   r   r   r   set_model_noise_refiner_patchset_model_double_block_patchr   )
r   r   r   r   r   r   r"  r   model_patchedpatchs
             r   r^  1QwenImageDiffsynthControlnet.diffsynth_controlnet  s
   !Q2A2+&E$)!Q2A2+6MyyA~~~a(yyA~~~a(:Dk'')9)9)D)D)S)STT&{XeqE77>66u=  667I+\amq7rsr    r   )NrP  NN)r(   r)   r*   r+   r   r   r   r   r   r   r^  r-   r   r    r   rG  rG    s/    1 1 L%HL!H r    rG  c                   (    \ rS rSr\S 5       rSrSrg)ZImageFunControlneti  c           	      ,    SSSSSSSSS	.4S
.SSSS.S.$ )NrI  r   rK  rO  rP  rQ  rR  rS  rT  )r   r   r   r   rM  rY  )r   r"  r   r[  r   r   s    r   r   ZImageFunControlnet.INPUT_TYPES  s<    '1-=%-+2EZ^hl4m*n 
 '1:W`ac 	cr    zmodel/patch/z-imager   N)r(   r)   r*   r+   r   r   r   r-   r   r    r   ri  ri    s    c c %Hr    ri  c                   ,    \ rS rSrS rS rS rS rSrg)UsoStyleProjectorPatchi  c                     Xl         X l        g r"   )r   r   )r   r   r   s      r   r   UsoStyleProjectorPatch.__init__  s    &*r    c           
         UR                  S5      nUR                  S5      nU R                  R                  U R                  R	                  UR
                  5      5      R	                  UR
                  5      n[        R                  " XC/SS9nX1S'   [        R                  " [        R                  " UR                  S   UR                  S   SUR
                  UR                  S9U/SS9US'   U$ )Ntxt_idsr3  rA   ry   r   rE   )r   r   )r   r   r   r   r   r   r   r}   zerosrN   r   )r   r  rq  r3  siglip_embeddings        r   r  UsoStyleProjectorPatch.__call__
  s    **Y'jj++11$2D2D2G2G		2RSVVWZW`W`aii)/Q7u!IIu{{3C3I3I!3LN^NdNdefNgijryrr  IP  IW  IW  (X  Za  'b  hi  jyr    c                     [        U[        R                  5      (       a   U R                  R	                  U5      U l        U $ r"   r  r  s     r   r   UsoStyleProjectorPatch.to  r  r    c                     U R                   /$ r"   r  r  s    r   r  UsoStyleProjectorPatch.models  r  r    )r   r   N)	r(   r)   r*   r+   r   r  r   r  r-   r   r    r   rm  rm    s    +
"r    rm  c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
USOStyleReferencei  c                     SSSSS.0$ )Nr   rI  r   )CLIP_VISION_OUTPUT)r   r   clip_vision_outputr   r   s    r   r   USOStyleReference.INPUT_TYPES  s    j,<3K  ! 	!r    rI  apply_patchTzmodel/patch/fluxc                     [         R                  " UR                  S S 2S4   UR                  S S 2S4   UR                  45      nUR	                  5       nUR                  [        X$5      5        U4$ )Nii)r   stackall_hidden_statespenultimate_hidden_statesr`  set_model_post_input_patchrm  )r   r   r   r}  r   re  s         r   r  USOStyleReference.apply_patch)  s{    %7%I%I!S&%QSeSwSwxy{~x~S  BT  Bn  Bn  %o  p001G1cdr    r   N)r(   r)   r*   r+   r   r   r   r   r   r   r  r-   r   r    r   rz  rz    s/    ! !
 LHL!H r    rz  c                   \   ^  \ rS rSr        SS\S\S\S\S\S\S\4U 4S	 jjjrS
rU =r$ )r   i0  r   r   r4   r   r   r   r3   c                    > [         TU ]  5         [        UX-   S-
  UUUUU	U
S9U l        [        R
                  R                  [        U5       Vs/ s H  n[        X4XU
S9PM     sn5      U l	        g s  snf )NrA   )seq_len
seq_len_vfr   r   r   r   r   r   r8   )
r   r   r   
audio_projr   r   r:   r;   r   blocks)r   r   r   r4   r   r   r   r3   r   r   r   r=   r   s               r   r   MultiTalkModelPatch.__init__1  s     	1$'1!3!1-%	
 hh)) z**A +66cmn*
s   A2)r  r  )
rF   i   i   i   r   rD   (   NNN)r(   r)   r*   r+   r,   r   r-   r.   r/   s   @r   r   r   0  sk      # ,0

 
 	

 
 
 
 
 
r    r   c                   <   \ rS rSr\S\R                  4S j5       r\S 5       r\S\R                  R                  S\R                  R                  S\R                  R                  S\R                  R                  S	\S
\S\S\S\R                  4S j5       rSrg)
SUPIRApplyiP  r   c                 h   [         R                  " SSS[         R                  R                  S5      [         R                  R                  S5      [         R
                  R                  S5      [         R                  R                  S5      [         R                  R                  SS	S
SSSS9[         R                  R                  SS	S
SSSS9[         R                  R                  SSS
SSSSS9[         R                  R                  SSS
S	SSSS9/[         R                  R                  5       /S9$ )Nr  zmodel/patch/supirTr   r   r   r   strength_startrP          rR  rS  z7Control strength at the start of sampling (high sigma).)rU  rV  rW  rX  tooltipstrength_endzVControl strength at the end of sampling (low sigma). Linearly interpolated from start.restore_cfgg      @g      4@g?zaPulls denoised output toward the input latent. Higher = stronger fidelity to input. 0 to disable.)rU  rV  rW  rX  advancedr  restore_cfg_s_tming?z4Sigma threshold below which restore_cfg is disabled.)node_idcategoryis_experimentalinputsoutputs)	r   SchemaModelInput
ModelPatchVaeImageFloatOutput)clss    r   define_schemaSUPIRApply.define_schemaQ  s   yy ( w'##M2U#w'/#4VZ'`  b~sTX'  A}csSVae (K  L3TsPSZ^im']  _ XX__&'%
 	
r    c                 |   [        UR                  SS5      nU(       d  UR                  U5      $ UR                  nUR	                  5       Ul        UR                  5        VVs0 s H  u  pgSU 3U4_M     nnnUR                  R                  USSS9   UR                  U5      XQl        $ s  snnf ! XQl        f = f)zHEncode using denoise_encoder weights from SUPIR checkpoint if available.r   Nzencoder.rP  r  )strength_patchstrength_model)getattrr   r   patcherr`  r   add_patches)	r  r   r   r   
denoise_sdorig_patcherr   vpatchess	            r   _encode_with_denoise_encoder'SUPIRApply._encode_with_denoise_encoderh  s     [..0DdK
::e$$ {{"((*4>4D4D4FG4FDAXaS>A4'4FGCP	'::e$&K H
 'Ks   $B-B3 3B;r   r   r   r   r  r  r  r  c                <  ^^^^ UR                  5       n	UR                  S5      R                  U R                  X2US S 2S S 2S S 2S S24   5      5      n
[	        X"R
                  R                  XU5      nUR                  U	5        TS:  a|  UR                  S5      nUR                  UR                  U
5      5      nUR                  UR                  US S 2S S 2S S 2S S24   5      5      mSmUUUU4S jnU	R                  U5        [        R                  " U	5      $ )Nlatent_formatrE   r  gB>٬:-@c                 Z  > U S   nU S   nUR                  5       S:  a  US   R                  5       nOUR                  5       nUT	:  a  TR                  UR                  UR                  S9nUR
                  S   nUR
                  S   U:w  a`  UR
                  S   S:X  a  UR                  USSS5      O8UR                  XTR
                  S   -   S-
  UR
                  S   -  SSS5      S U nUR                  5       S:  a  UR                  SSSS5      OUnX-
  nXUT
-  T-  -  -
  nU$ )Ndenoisedsigmar   r7   rA   rC   )	r   itemr   r   r   rN   expandrepeatrO   )argsr  r  r   refb	sigma_vald_centerr  r  	sigma_maxx_centers           r   restore_cfg_function0SUPIRApply.execute.<locals>.restore_cfg_function  s`   
+W99;?aA

A))"++X__HNN+SC q)Ayy|q(;>99Q<1;LcjjBB7RUR\R\^_bkbklmbn^nqr^rwz  xA  xA  BC  xD  ^D  FG  IJ  LM  SN  OQ  PQ  SR;@99;?

2q!Q 7PUI'~H'y97LQ\6\*]]Hr    )r`  get_model_objectrJ   r  r   r   project_modulesregisterdecodeprocess_outr   #set_model_sampler_post_cfg_functionr   
NodeOutput)r  r   r   r   r   r  r  r  r  re  hint_latentrf  r  decodedr  r  r  s          ``      @@r   executeSUPIRApply.executey  s     ,,_=HH,,SuQ1bqb[?QRT;(9(9(I(I;htu}%!22?CMjj!:!:;!GHG$//

71aBQB;;O0PQHI   " ==>RS}}]++r    r   N)r(   r)   r*   r+   r   r   r  r  r  r  Typer  r  r  floatr  r  r-   r   r    r   r  r  P  s    
bii 
 
, ' '  ",rxx}} ",2==;M;M ",TVTZTZT_T_ ",hjhphphuhu ", %",5:",IN",di",npn{n{", ",r    r  )r   rG  ri  rz  r  zLoad Model Patchz%Apply Qwen Image DiffSynth ControlNetzApply Z-Image Fun ControlNetzApply USO Style ReferencezApply SUPIR Patch)#r   r   r   comfy.utilsrG   	comfy.opscomfy.model_managementcomfy.ldm.common_ditcomfy.latent_formatscomfy.ldm.lumina.controlnetcomfy.ldm.supir.supir_modulescomfy.ldm.wan.model_multitalkr   r   comfy_api.latestr   comfy.ldm.supir.supir_patchr   r   r	   r1   ra   r   r   r   r   rG  ri  rm  rz  r   	ComfyNoder  NODE_CLASS_MAPPINGSNODE_DISPLAY_NAME_MAPPINGSr   r    r   <module>r     s           " $ ]  2EHHOO $N588?? NB@uxx @D:F  F R," ,"\y" y"v#  # J
%6 
%" ".   (
%((// 
@L, L,` )$@.*  +$K94% r    