
    3jM,                     B    S SK r S SKrS SKrS SKJs  Jr   " S S5      rg)    Nc                   J    \ rS rSrS r\S 5       rSrSrSr	Sr
S rSS	 jrS
rg)RandomAspectRatioMask   c                     SU l         g )N16:9_current_aspect_ratio)selfs    E/home/wildlama/comfy/ComfyUI/custom_nodes/va1/aspect_outpaint_node.py__init__RandomAspectRatioMask.__init__   s
    %+"    c                     / SQn/ SQn/ SQn/ SQn/ SQnSSUSS	04USS
04USS04USS04USS04SSSSS.4SSSSS.4S.0$ )N)randomr   9:163:22:34:55:41:1centerr   leftrightupdownztop-leftztop-midz	top-rightzmid-leftz	mid-rightzbottom-leftz
bottom-midzbottom-right)r   5060708090100)r   030r   r!   120150180210240270300330)whiteblackgreyrequired)IMAGEdefaultr   r   r"   r#   r-   INTr   i)r2   minmax(   i   )imageaspect_ratio	placement	scale_pctrotationbg_colorseed
feathering )cls
ar_presets
placementsscales	rotations	bg_colorss         r   INPUT_TYPES!RandomAspectRatioMask.INPUT_TYPES
   s    R


 Am	.	 *!+	6/B C!+	8/D E!'	5/A B!*	3/? @!*	7/C D!&1Qw/W X!&2aPT/U V	
 	
r   )r1   MASKSTRING)ImageMaskParamsprocessva1c	                 |   / SQn	US:X  a  [         R                  " U	5      nX l        / SQn
US:X  a  [         R                  " U
5      nO[        U5      nUS:X  a  SO	US:X  a  SOSnUS	:w  a  U R	                  XU5      nUR                  5       u  pnn [        [        UR                  S
5      5      u  nnUU-  nX-  n[        UU-
  5      S:  a  XnnO'UU:  a  [        UU-  5      UnnO[        UU-  5      UnnUS-   S-  S-  nUS-   S-  S-  n/ SQnUS:X  a  US S OUnUS:X  a  [         R                  " U5      nOUU;   a  UOUS   n[        U5      S-  nUn[        U5      nUS:w  a}  [        S[        UU-  5      5      n[        S[        UU-  5      5      nUR                  S	SSS5      n[        R                  " UUU4SSS9n U R                  S	SSS5      nUUUU4u  n!n"n#n$O
XUU4u  n!n"n#n$US:  n%US:  n&Un'US;   a	  U%(       d  Sn'US;   a	  U&(       d  Sn'UU#-
  S-  n(UU"-
  S-  n)U(U)4[         R                  " S	UU#-
  5      [         R                  " S	UU"-
  5      4S	U)4UU#-
  U)4U(S	4U(UU"-
  4SU(S	4UU#-
  S	4S	U)4UU#-
  U)4S	UU"-
  4U(UU"-
  4UU#-
  UU"-
  4S.n*U*R!                  U'U*S   5      u  n+n,UU#-
  U+-
  n-UU"-
  U,-
  n.U'n/["        R$                  " U!UUU$4UUR&                  UR(                  S9n0UU0S S 2U,U,U"-   2U+U+U#-   2S S 24'   ["        R*                  " UU4UR&                  UR(                  S9n1["        R,                  " U"U#4UR&                  UR(                  S9n2US	:  a  US-  U":  a  US-  U#:  a  [/        U"5       Hq  n3[/        U#5       H_  n4U,S	:  a  U3OU"n5U.S	:  a  U"S-
  U3-
  OU"n6U+S	:  a  U4OU#n7U-S	:  a  U#S-
  U4-
  OU#n8[1        U5U6U7U85      n9U9U:  d  MM  UU9-
  U-  n:U:U:-  U2U3U44'   Ma     Ms     U2U1U,U,U"-   2U+U+U#-   24'   SU S U/ S!U S"U S#3	n;U0U1R3                  S	5      U;4$ !   Sn GN= f)$N)r   r   r   r   r   r   r   r   )            i  i,  iJ  r      <   Z   x   r-         ?r.   g              ?r   :gư>      )r   r   r   r    r!   r"   r   g      Y@         bilinearF)sizemodealign_corners)r   r   r   )r   r   )r   r   r   dtypedevicezAR: z, Placement: z	, Scale: z%, Rotation:    °)r   choicer	   int_rotate_imagerc   mapfloatsplitabsstrr5   permuteFinterpolaterandintgettorchfullrg   rh   oneszerosranger4   	unsqueeze)<r
   r7   r8   r9   r:   r;   r<   r=   r>   presetsrotation_optionsrotation_degbg_valueb0h0w0c0wfhf	target_arorig_arnew_hnew_w
all_scalesvalid_scaleschosen_scalescaleselected_scaleselected_rotationnh0nw0img_bcresizedbhwc
horizontalvertical	effectivemid_xmid_ypos_mappad_lpad_tpad_rpad_bselected_placement	new_imagemaskinnerijdtdbdldrdv
params_strs<                                                               r   rM   RandomAspectRatioMask.process)   sS   E8#!==1L%1" Sx!==)9:Lx=L #g-38w;NCTW 1&&uHEE B	 2 23 78FBRI 'w"#d*5E5 y2~.5E5rI~.5E !)!Q&!)!Q& =
*6%*?z#2Z !==6L(1\(A9|TVGWLL!E) &- C<aR%Z)CaR%Z)C]]1aA.Fmm3Z#	G OOAq!Q/ES#r)JAq!QRJAq!Q  3&
3&	))* I&x Iq q  "."NN1eai8"NN1eai8:.!AI.!?!	2*!?!AI?.!AI.	2!	2!AI	2
$ {{9gh.?@u	E!	E! ' JJua ++<<	
	 9>	!U57]E%'M145 

E5>!&"',,0 QF"'++#(<<1 >j1nq0Z!^a5G1XqA#aiQB(-	!a%!)qB#aiQB(-	!a%!)qBRR,A:~'!^z9&'!ead "  .3U57]E%'M)* L>7I6J)TbSccp  rC  qD  DF  G
4>>!,j99m	Is   'P4 4P;c           	         US:X  a  U$ UR                   u  pEpg[        R                  " U5      n[        R                  " U5      n	[        R                  " U5      n
[        [        XY-  5      [        Xj-  5      -   5      n[        [        Xi-  5      [        XZ-  5      -   5      nUR                  nUR                  n[        R                  " XKX4UUUS9nUS-
  S-  nUS-
  S-  nUS-
  S-  nUS-
  S-  n[        R                  " XUS9n[        R                  " XUS9n[        R                  " UUSS9u  nnUU-
  nUU-
  nUU	-  UU
-  -   nU* U
-  UU	-  -   nUU-   nUU-   nSU-  US-
  -  S-
  nSU-  US-
  -  S-
  n[        R                  " UU/S	S
9R                  S5      n UR                  SSSS5      n![         R"                  " U!U R%                  USSS5      SSSS9n"U"R                  SSSS5      n"US:  UU:  -  US:  -  UU:  -  R'                  5       n#U#R                  S5      R                  S	5      n#USU#-
  -  U"U#-  -   nU$ )z[Rotate image by given degrees using bilinear interpolation with specified background color.r   rf   r_   ra   ij)indexingg       @rX   r^   )dimr`   rb   
reflectionT)rd   padding_modere   )shapemathradianscossinrk   rp   rh   rg   rw   rx   arangemeshgridstackr|   rr   rs   grid_samplerepeatrn   )$r
   r7   degreesr   r   r   r   r   	angle_radcos_asin_ar   r   rh   rg   rotated_imagecenter_hcenter_wnew_center_hnew_center_wy_coordsx_coordsyyxxyy_centeredxx_centeredyy_rotxx_rotyy_origxx_origyy_normxx_normgridimage_permutedrotated_tempr   s$                                       r   rl   #RandomAspectRatioMask._rotate_image   s   a<L[[
a LL)	## C	NS^34C	NS^34  

u 	
 EQ;EQ;	Q	Q <<6B<<6B(TBB <'<' u${U'::%e(;; 8#8# -1q5)C/-1q5)C/ {{GW-26@@C q!Q2 }}KK1a#%
 $++Aq!Q7 A'A+.'Q,?7Q;OVVX~~a **2. &T2\D5HHr   r   N)rY   )__name__
__module____qualname____firstlineno__r   classmethodrF   RETURN_TYPESRETURN_NAMESFUNCTIONCATEGORYrM   rl   __static_attributes__r?   r   r   r   r      s>    , 
 
2 0L/LHHP:dPr   r   )rw   r   r   torch.nn.functionalnn
functionalrs   r   r?   r   r   <module>r      s         E Er   