
    
3jp+                         S SK r S SKJr  S SKrS SKJr  SSKJr  \" SS9 " S S5      5       r\" S	S9 " S
 S	5      5       r	 " S S5      r
\" SS9 " S S\
5      5       r\" SS9 " S S\
5      5       rg)    N)Callable)ModelPatcher   )
comfy_nodeLTXVAdainLatent)namec                   @    \ rS rSrS r\S 5       rSrSrSr	S
S jr
Srg	)r   
   c                     g N )selfs    I/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-LTXVideo/latent_norm.py__init__LTXVAdainLatent.__init__   s        c           	      0    SSSSSSSSS.4S.S	S
SS040S.$ )NLATENTFLOAT      ?      $      $@{Gz?defaultminmaxstepround)latents	referencefactor	per_frameBOOLEANr   Frequiredoptionalr   ss    r   INPUT_TYPESLTXVAdainLatent.INPUT_TYPES   sK     '(#&$# $!%	 i)U);<
 	
r   r   batch_normalizeLightricks/latentsc           	         [         R                  " U5      nUS   nU(       a  US   R                  S5      S:X  a6  [        S5        US   R	                  SSUR                  S5      SS5      US'   O2UR                  S5      US   R                  S5      :  a  [        S5      e[        UR                  S5      5       H  n[        UR                  S5      5       H  nU(       dQ  [        R                  " US   Xx4   S S9u  p[        R                  " XgU4   S S9u  pXgU4   U-
  U-  U	-  U
-   XgU4'   M[  [        UR                  S5      5       HS  n[        R                  " US   XxU4   S S9u  p[        R                  " XgX4   S S9u  pXgX4   U-
  U-  U	-  U
-   XgX4'   MU     M     M     [        R                  " US   Xc5      US'   U4$ )Nsamples   r   z5Reference has only one frame, using it for all framesz'Latents have more frames than referencer   )dim)
copydeepcopysizeprintrepeat
ValueErrorrangetorchstd_meanlerp)r   r!   r"   r#   r$   latents_copyticr_sdr_meani_sdi_meanfs                 r   r-   LTXVAdainLatent.batch_normalize*   s   }}W-##((+q0MN'0';'B'Bq!&&)Q(	)$ Yy166q99 !JKKqvvay!A166!9% #(>>!),QT2$LD $)>>!qD't#DLD !Q$& 0D8D@6IAdG"166!9-',~~%i0q9t( (-~~a1jd'K'(AzF':d&Bd%JV%SQ'
 . & "" #(**WY-?"KYr   r   NF)__name__
__module____qualname____firstlineno__r   classmethodr+   RETURN_TYPESFUNCTIONCATEGORYr-   __static_attributes__r   r   r   r   r   
   s1     
 
* L H#H r   LTXVStatNormLatentc                   6    \ rS rSr\S 5       rSrSrSrS r	Sr
g)	rQ   M   c                 b    SSSSSSSSS.4SS	SSSSS.4SS
SSSSSS.4SS	SSSSS.4SSS04S.0$ )Nr'   r   r           r   r   r   r   r        W@      I@      Y@皙?<Percentile of distribution to use for statistics calculationr   r   r   r   r    tooltipr%   r   F)r!   target_mean
target_std
percentiler#   clip_outliersr   r)   s    r   r+   LTXVStatNormLatent.INPUT_TYPESO   s     &#&$# $!%	  #&## $!%	 #'#$ #!$#a
 #&$# $!%	 #,i-?!@W,.
 .	
r   r   statistical_normalizer.   c                 t   [         R                  " U5      nUS   nSU-
  S-  n	SU	-
  n
[        UR                  S5      5       GHR  n[        UR                  S5      5       GH/  nXU4   nUR                  nUR                  5       n[        R                  " XS-  5      n[        R                  " XS-  5      nUU:  UU:*  -  nUR                  5       S:  d  My  UU   nUR                  5       nUR                  5       nUS:  a  UU-
  U-  U-  U-   nU(       aR  UU-
  U-  U-  U-   nUU-
  U-  U-  U-   n[        R                  " UU:  UU5      n[        R                  " UU:  UU5      nUR                  U5      XU4'   GM#  UU-
  U-   XU4'   GM2     GMU     [        R                  " US   X5      US'   U4$ )Nr0   d   r1   r   r   g:0yE>)r3   r4   r9   r5   shapeflattenr:   quantilesummeanstdwherereshaper<   )r   r!   r]   r^   r_   r#   r`   r=   r>   lower_percentileupper_percentiler?   r@   channel_dataoriginal_shapechannel_flatlower_boundupper_boundmaskfiltered_datacurrent_meancurrent_stdnormalized_flatnormalized_lowernormalized_uppers                            r   rb   (LTXVStatNormLatent.statistical_normalize   s    }}W-#  *,1!11qvvay!A166!9% Aw!-!3!3+335 $nn\c;QR#nn\c;QR %38ST 88:>$0$6M#0#5#5#7L"/"3"3"5K #T) *L8KG&+')4+5 ) "-|!;{ J *0+-809, "-|!;{ J *0+-809,
 /4kk ,{ : 0 //O
 /4kk ,{ : 0 //O #2"9"9."IQ$ #/"="KQ$e & "j #(**WY-?"KYr   r   N)rH   rI   rJ   rK   rL   r+   rM   rN   rO   rb   rP   r   r   r   rQ   rQ   M   s,    /
 /
b L&H#H@r   c            	       l    \ rS rSrSr\S 5       r\S 5       r\S\	S\
S\S\	4S	 j5       r\S
 5       rSrg)PerStepNormPatcher   z.
Base class for per-step normalization nodes.
c                     SSSSS.4S.$ )NMODELSTRINGz0.9, 0.75, 0.0zGComma-separated list of factors, each factor will be used for one step.)r   r\   )modelfactorsr   r)   s    r   r'   PerStepNormPatcher.required   s$      /h	
 		
r   c                     0 $ r   r   r)   s    r   r(   PerStepNormPatcher.optional   s    	r   r   r   normalize_fnreturnc                    ^^^ U R                  5       n TR                  S5       Vs/ s H  n[        U5      PM     snmSmUUU4S jnU R                  U5        U 4$ s  snf )N,r   c                 p   > U S   nT[        T[        T5      S-
  5         nTS-  mT" SU0US9nUS   S   $ )Ndenoisedr   r0   )latentr#   r   )r   len)argsr   r#   
out_latentr   r   r   s       r   norm_fn5PerStepNormPatcher.patch_smooth_norm.<locals>.norm_fn   sP    *%FSs7|a'789FAID%i-@PJa=++r   )clonesplitfloat#set_model_sampler_post_cfg_function)r   r   r   xr   r   s    ``  @r   patch_smooth_norm$PerStepNormPatcher.patch_smooth_norm   sY     %,]]3%78%758%78	, 	11':x 9s   Ac                     [        S5      $ )NNaN)r   )r*   r   kwargss      r   
IS_CHANGEDPerStepNormPatcher.IS_CHANGED   s    U|r   r   N)rH   rI   rJ   rK   __doc__rL   r'   r(   staticmethodr   strr   r   r   rP   r   r   r   r}   r}      sw     

 

   &)9A	 $  r   r}   LTXVPerStepAdainPatcherc                   H   ^  \ rS rSr\U 4S j5       rSrSrSrSS jr	Sr
U =r$ )	r      c                 Z   > [         TU ]  5       SS0-  [         TU ]	  5       SSSS040-  S.$ )Nr"   r   r$   r%   r   Fr&   )superr'   r(   r*   	__class__s    r   r+   #LTXVPerStepAdainPatcher.INPUT_TYPES   sO     (*[ (*i)U);<	
 		
r   r   patch_modelr.   c                 8   ^^ UU4S jnU R                  XU5      $ )Nc                 <   > [        5       R                  U TUT5      $ r   )r   r-   )r   r#   r$   r"   s     r   	cfg_adain6LTXVPerStepAdainPatcher.patch_model.<locals>.cfg_adain  s"    "$44	69 r   r   )r   r   r   r"   r$   r   s      `` r   r   #LTXVPerStepAdainPatcher.patch_model  s    	
 %%ei@@r   r   rG   rH   rI   rJ   rK   rL   r+   rM   rN   rO   r   rP   __classcell__r   s   @r   r   r      s2    

 

 LH#HA Ar   LTXVPerStepStatNormPatcherc                   D   ^  \ rS rSr\U 4S j5       rSrSrSrS r	Sr
U =r$ )r   i  c                 n   > S[         TU ]  5       SSSSSSS.4SSSSSSS.4SS	S
SSSSS.4SSS04S.-  0$ )Nr'   r   rU   r   r   r   r   r   rV   rW   rX   rY   rZ   r[   r%   r   F)r]   r^   r_   r`   )r   r'   r   s    r   r+   &LTXVPerStepStatNormPatcher.INPUT_TYPES  s     (* #&$# $!%	  #&## $!%	 #'#$ #!$#a
 #,i-?!@A!"$
 $	
r   r   r   r.   c                 @   ^^^^ UUUU4S jnU R                  XU5      $ )Nc                 @   > [        5       R                  U TTTUT5      $ r   )rQ   rb   )r   r#   r`   r_   r]   r^   s     r   cfg_stat_norm=LTXVPerStepStatNormPatcher.patch_model.<locals>.cfg_stat_normF  s&    %'==ZV] r   r   )r   r   r   r]   r^   r_   r`   r   s      ```` r   r   &LTXVPerStepStatNormPatcher.patch_modelC  s"    	 	
 %%emDDr   r   r   r   s   @r   r   r     s3    %
 %
N LH#HE Er   )r3   typingr   r:   comfy.model_patcherr   nodes_registryr   r   rQ   r}   r   r   r   r   r   <module>r      s       , & "#? ? $?D %&x x 'xv+ +\ *+A0 A ,A8 -.6E!3 6E /6Er   