
    
3j)                         S SK r S SKJr  S SKJrJr  S SKrSSK	J
r
  S SKJr   " S S5      r " S	 S
5      r " S S5      r " S S5      rg)    N)
functional)Image	ImageDraw   )
pil2tensorMAX_RESOLUTIONc                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
NormalizedAmplitudeToMask	   c                     SSSSSSSS.4SSSSSS.4SS	S
SSS.4SSS	SSS.4SSS	SSS.4SSSSSS.4/ SQSS04SS/SS04S.	0$ )NrequiredNORMALIZED_AMPLITUDEINTi      i      )defaultminmaxstepr   i            )nonecirclesquaretriangler   r   white	amplitude)	normalized_ampwidthheightframe_offset
location_x
location_ysizeshapecolor ss    W/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-KJNodes/nodes/audioscheduler_nodes.pyINPUT_TYPES%NormalizedAmplitudeToMask.INPUT_TYPES
   s    &?#BtUV%WX$#RVW&XY%*c[\,]$^#(c4YZ*["\#(c4YZ*["\"1TST$UV "6	 $'
 ";%  	    KJNodes/audioMASKconvertz
Works as a bridge to the AudioScheduler -nodes:  
https://github.com/a1lazydog/ComfyUI-AudioScheduler  
Creates masks based on the normalized amplitude.
c
                    [         R                  " USS5      n[         R                  " X5      n/ n
U GH  nU	S:X  a  [        US-  5      nOU	S:X  a  SnWX4nX-  nUS:X  a  [        R
                  " SX#4U5      nO[        R
                  " SX#4S5      n[        R                  " U5      nUS	:X  d  US
:X  aB  Xn-
  X~-
  4nXn-   X~-   4nUU/nUS	:X  a  UR                  UUS9  OCUS
:X  a  UR                  UUS9  O,US:X  a&  Xn-
  X~-   4nXn-   X~-   4nXg4nUR                  UUU/US9  [        U5      nUS S 2S S 2S S 2S4   nU
R                  U5        GM      [        R                  " U
SS94$ )N              ?r!   r   r    r   RGBblackr   r   )fillr   r   )dim)npcliprollintr   newr   Drawellipse	rectanglepolygonr   appendtorchcat)selfr"   r#   r$   r%   r)   r&   r'   r(   r*   outampgrayscale_value
gray_color	finalsize
shapeimagedrawleft_up_pointright_down_point
two_points	top_pointmasks                         r.   r5   !NormalizedAmplitudeToMask.convert1   s   c: > !C#"%cCi.'!"%)?LJ
I"YYuuozJ
"YYuuowG
>>*-D EX$5!+!79O P$.$::;Q#R +-=>
H$LL*L=h&NN:JN?*$!+!79O P$.$:J<R#S '4	i8HIPZ[#J/JaAqj)DJJtI "L 		#1%''r1   r+   N__name__
__module____qualname____firstlineno__classmethodr/   CATEGORYRETURN_TYPESFUNCTIONDESCRIPTIONr5   __static_attributes__r+   r1   r.   r   r   	   s1     : HLHK0(r1   r   c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
NormalizedAmplitudeToFloatListc   c                     SSS00$ )Nr   r"   r   r+   r,   s    r.   r/   *NormalizedAmplitudeToFloatList.INPUT_TYPESd   s    $&?  	r1   r2   )FLOATr5   z
Works as a bridge to the AudioScheduler -nodes:  
https://github.com/a1lazydog/ComfyUI-AudioScheduler  
Creates a list of floats from the normalized amplitude.
c                 T    [         R                  " USS5      nUR                  5       4$ )Nr7   r8   )r=   r>   tolist)rI   r"   s     r.   r5   &NormalizedAmplitudeToFloatList.converts   s&    c:%%'))r1   r+   NrW   r+   r1   r.   rc   rc   c   s1     
 HLHK*r1   rc   c                   >    \ rS rSr\S 5       rSrSrSrSr	Sr
S rS	rg
)OffsetMaskByNormalizedAmplitudex   c                 `    SSSSSS[         SSS	.4SSS[         SSS	.4S
SS04SSSSSSS	.4S.0$ )Nr   r   r3   r   r   i r   numberr   r   r   r   displayBOOLEANr   Frg   r7         r8   MbP?)r"   rU   xyrotateangle_multiplierr   r,   s    r.   r/   +OffsetMaskByNormalizedAmplitude.INPUT_TYPESy   si     ";!!E.Z[hprs!E.Z[hprs$	5&:;%,3tTWafs{.}$~	
 		
r1   r3   )rU   offsetr2   z
Works as a bridge to the AudioScheduler -nodes:  
https://github.com/a1lazydog/ComfyUI-AudioScheduler  
Offsets masks based on the normalized amplitude.
c                 z   UR                  5       n[        R                  " USS5      nUR                  u  pn
U(       a`  [	        U5       HQ  n[        Xk   SU-  -  5      nUn[        R                  " X{   R                  S5      U5      R                  S5      X{'   MS     US:w  d  US:w  a  [	        U5       H  nXk   S-  n[        X.-  U
S-
  5      n[        X>-  U	S-
  5      nUS:w  a#  [        R                  " X{   [        U5      SS9X{'   US:w  d  M]  [        R                  " X{   [        U5      SS9X{'   M     U4$ )Nr7   r8   ih  r   
   r   shiftsdims)cloner=   r>   r)   ranger@   TFrw   	unsqueezesqueezer   rG   r?   )rI   rU   ru   rv   rx   rw   r"   
offsetmask
batch_sizer$   r#   irotation_amprotation_angle
offset_ampshift_xshift_ys                    r.   rz   &OffsetMaskByNormalizedAmplitude.offset   s&    ZZ\
c:$(JJ!
E:&">#4>N8N#OP!- "		*-*A*A!*Dn U ] ]^_ `
 ' 6Q!V:&+.3
alE!G4alF1H5a<$)JJz}S\XY$ZJMa<$)JJz}S\XY$ZJM ' {r1   r+   N)rX   rY   rZ   r[   r\   r/   r^   RETURN_NAMESr_   r]   r`   rz   ra   r+   r1   r.   rl   rl   x   s6    

 

 LLHHKr1   rl   c                   :    \ rS rSr\S 5       rSrSrSrSr	S r
Srg	)
#ImageTransformByNormalizedAmplitude   c                 |    SSSSSSSSS	.4S
SS[         -
  [         SSS	.4S
SS[         -
  [         SSS	.4SSS04SS.0$ )Nr   r   rg   r7   rs   r8   rt   ro   rp   r   r   r   rr   r   FIMAGE)r"   
zoom_scalex_offsety_offset
cumulativeimager   r,   s    r.   r/   /ImageTransformByNormalizedAmplitude.INPUT_TYPES   s    7"T#W\iq$stQ>8ISakl  zB  !D  EQ>8ISakl  zB  !D  E$	5&:;
  	r1   r   amptransformr2   z
Works as a bridge to the AudioScheduler -nodes:  
https://github.com/a1lazydog/ComfyUI-AudioScheduler  
Transforms image based on the normalized amplitude.
c                    [         R                  " USS5      n/ nSn[        UR                  S   5       GH  n	X   n
X)   nU(       a  X-  nX-  nU
R	                  SSS5      n
[
        R                  " U
5      nUR                  u  p[        [        X5      SX-  -
  -  5      n[        US5      nX-
  S-  nX-
  S-  nX-   S-  nX-   S-  n[
        R                  " UUUX5      n[
        R                  " UX45      n[
        R                  " U5      nUR	                  SSS5      nUS-  n[        UU-  U
R                  S   S-
  5      n[        UU-  U
R                  S   S-
  5      nUS:w  a  [        R                  " U[        U5      SS9nUS:w  a  [        R                  " U[        U5      SS9nUR!                  U5        GM     [        R"                  " U5      nU4$ )Nr7   r8   r   r   r   r|   r}   )r=   r>   r   r)   permuter   to_pil_imager(   r@   r   r   cropresize	to_tensorrG   r?   rF   stack)rI   r   r"   r   r   r   r   transformed_imagesprev_ampr   imgrK   pil_imgr#   r$   	crop_sizelefttoprightbottomcropped_imgresized_img
tensor_imgr   r   r   transformed_batchs                              r.   r   0ImageTransformByNormalizedAmplitude.amptransform   s   c: u{{1~&A(C #C  ++aA&C ooc*G $LLMEC.!c6F2FGHIIq)I %!+D%!+C&1,E(Q.F '''3iKK))K&AK k2J $++Aq!4J rJ(Z/11ABG(Z/11ABG !|"ZZ
3w<aP
!|"ZZ
3w<aP
 %%j1a 'f "KK(:;!##r1   r+   N)rX   rY   rZ   r[   r\   r/   r^   r_   r]   r`   r   ra   r+   r1   r.   r   r      s1      LHHK=$r1   r   )rG   torchvision.transformsr   r   PILr   r   numpyr=   utility.utilityr   nodesr	   r   rc   rl   r   r+   r1   r.   <module>r      sE     3    (  X( X(t* **/ /bR$ R$r1   