
    +jt                         S SK r S SKrS SKJr  S SKJrJr  S r " S S\R                  5      r	 " S S\R                  5      r
 " S	 S
\5      rS\4S jrg)    N)override)ComfyExtensionIOc                    [         R                  R                  U R                  5       SS9n[         R                  R	                  USS9nUR
                  u  pEpg[         R                  " XEXg4U R                  S9nUS-  US-  pX(SX-
  X-   2X-
  X-   24'   X8-  n[         R                  R                  USS9n[         R                  R                  USS9R                  nUR                  U R                  5      $ )N))dim)device   .)torchfftfftnfloatfftshiftshapeonesr
   	ifftshiftifftnrealtodtype)x	thresholdscalex_freqBCHWmaskcrowccol
x_filtereds               </home/wildlama/comfy/ComfyUI/comfy_extras/nodes_freelunch.pyFourier_filterr%      s    YY^^AGGI8^4FYYH5FJA!::qQl1884DaQ$V[dt//1A$BR1R	RS]F YY  X 6FX6;;J==!!    c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)FreeU   c                    [         R                  " SS[         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
9[         R                  R                  SSSSSS	S
9/[         R                  R                  5       /S9$ )Nr(   model/patch/unetmodelb1g?              $@{Gz?Tdefaultminmaxstepadvancedb2g333333?s1?s2皙?node_idcategoryinputsoutputsr   SchemaModelInputFloatOutputclss    r$   define_schemaFreeU.define_schema   s    yy'w'tSct$Y]^tSct$Y]^tSct$Y]^tSct$Y]^ !
 	
r&   returnc                    ^	^
 UR                   R                  R                  S   nUS-  X$4US-  X540m
0 m	U	U
4S jnUR                  5       nUR	                  U5        [
        R                  " U5      $ )Nmodel_channels   r   c                 z  > TR                  [        U R                  S   5      S 5      nUb  U S S 2S U R                  S   S-  24   US   -  U S S 2S U R                  S   S-  24'   UR                  T;  a   [	        USUS   S9nX4$ [	        UR                  5       SUS   S9R                  UR                  5      nX4$ !   [
        R                  " SR                  UR                  5      5        STUR                  '   [	        UR                  5       SUS   S9R                  UR                  5      n X4$ = f)N   r   r   r   r   \Device {} does not support the torch.fft functions used in the FreeU node, switching to CPU.T)
getintr   r
   r%   loggingwarningformatcpur   )hhsptransformer_optionsr   on_cpu_devices
scale_dicts       r$   output_block_patch)FreeU.execute.<locals>.output_block_patch3   sO   NN3qwwqz?D9E ()!,<QWWQZ1_,<*<(=a(H!$QWWQZ1_$$%::^3d,SAU1XN 6M )auQxPSSTWT^T^_C6Md  )G  )N  )N  OR  OY  OY  )Z  [59szz2,SWWY!5QR8TWWX[XbXbc 6Ms   8C A5D:r,   model_configunet_configcloneset_model_output_block_patchr   
NodeOutputrH   r,   r-   r7   r8   r:   rM   r^   mr\   r]   s            @@r$   executeFreeU.execute-   so    11==>NO$q(2(NQ4FQ
	  KKM	&&'9:}}Qr&    N__name__
__module____qualname____firstlineno__classmethodrI   r   re   rh   patch__static_attributes__rj   r&   r$   r(   r(      s:    
 
   r}}    2 Er&   r(   c                   T    \ rS rSr\S 5       r\S\R                  4S j5       r\r	Sr
g)FreeU_V2J   c                    [         R                  " SS[         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
9[         R                  R                  SSSSSS	S
9/[         R                  R                  5       /S9$ )Nrt   r+   r,   r-   g?r.   r/   r0   Tr1   r7   gffffff?r8   r9   r:   r;   r<   rA   rG   s    r$   rI   FreeU_V2.define_schemaK   s    yy'w'tSct$Y]^tSct$Y]^tSct$Y]^tSct$Y]^ !
 	
r&   rK   c                    ^	^
 UR                   R                  R                  S   nUS-  X$4US-  X540m
0 m	U	U
4S jnUR                  5       nUR	                  U5        [
        R                  " U5      $ )NrM   rN   r   c                   > T
R                  [        U R                  S   5      S 5      nUGb^  U R                  S5      R	                  S5      nUR                  S   n[
        R                  " UR                  US5      SSS9u  pg[
        R                  " UR                  US5      SSS9u  pXHR	                  S5      R	                  S5      -
  Xh-
  R	                  S5      R	                  S5      -  nU S S 2S U R                  S   S-  24   US   S-
  U-  S-   -  U S S 2S U R                  S   S-  24'   UR                  T	;  a   [        USUS   S9nX4$ [        UR                  5       SUS   S9R                  UR                  5      nX4$ !   [        R                  " S	R                  UR                  5      5        ST	UR                  '   [        UR                  5       SUS   S9R                  UR                  5      n X4$ = f)
NrP   r   r   T)r	   keepdimr      rQ   rR   )rS   rT   r   mean	unsqueezer   r4   viewr3   r
   r%   rU   rV   rW   rX   r   )rY   rZ   r[   r   hidden_meanr   
hidden_max_
hidden_minr\   r]   s            r$   r^   ,FreeU_V2.execute.<locals>.output_block_patchb   s   NN3qwwqz?D9E ffQi11!4%%a( %		+*:*:1b*ArSW X
 %		+*:*:1b*ArSW X
*-A-A!-D-N-Nq-QQV`VmUxUxyzU{  VF  VF  GH  VI  I()!,<QWWQZ1_,<*<(=%(Q,S^A^abAb(c!$QWWQZ1_$$%::^3d,SAU1XN 6M )auQxPSSTWT^T^_C6Md  )G  )N  )N  OR  OY  OY  )Z  [59szz2,SWWY!5QR8TWWX[XbXbc 6Ms   F A5Hr`   rf   s            @@r$   rh   FreeU_V2.execute\   so    11==>NO$q(2(NQ4FQ
	. KKM	&&'9:}}Qr&   rj   Nrk   rj   r&   r$   rt   rt   J   s;    
 
   r}}    @ Er&   rt   c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)FreelunchExtension   rK   c                 "   #    [         [        /$ 7fN)r(   rt   )selfs    r$   get_node_list FreelunchExtension.get_node_list   s      
 	
s   rj   N)rl   rm   rn   ro   r   listtyper   	ComfyNoder   rr   rj   r&   r$   r   r      s)    
T$r||*<%= 
 
r&   r   rK   c                     #    [        5       $ 7fr   )r   rj   r&   r$   comfy_entrypointr      s     s   )r   rU   typing_extensionsr   comfy_api.latestr   r   r%   r   r(   rt   r   r   rj   r&   r$   <module>r      sS      & /"&,BLL ,^3r|| 3l
 
  2  r&   