
    +j#              
       h   S SK r S SKrS SKJr  S SKJr  S SKJrJ	r	  S r
 " S S\5      rS\ R                  S	\ R                  S
\ R                  S\ R                  S\4
S jr " S S\	R                  5      r " S S\	R                  5      r " S S\	R                  5      r " S S\5      rS\4S jrg)    N)Enum)override)ComfyExtensionioc           	          [         R                  R                  R                  U R	                  SSU R
                  S   U R
                  S   45      US   US   4SS9R                  S5      $ )N   r   bilinear)sizemode)torchnn
functionalinterpolatereshapeshapesqueeze)maskr   s     >/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_compositing.pyresize_maskr      s    88**4<<Q

2PTPZPZ[]P^8_+`hmnohprwxyrzg{  CM*  N  V  V  WX  Y  Y    c                   \    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrg)PorterDuffMode   r   r	                        	   
                      N)__name__
__module____qualname____firstlineno__ADDCLEARDARKENDSTDST_ATOPDST_INDST_OUTDST_OVERLIGHTENMULTIPLYOVERLAYSCREENSRCSRC_ATOPSRC_INSRC_OUTSRC_OVERXOR__static_attributes__r+   r   r   r   r      s\    
CEF
CHFGHGHGF
CHFGH
Cr   r   	src_image	src_alpha	dst_image	dst_alphar   c                 L   SU-
  nSU-
  nX-  n X#-  nU[         R                  :X  a6  [        R                  " X-   SS5      n[        R                  " X-   SS5      nGOU[         R                  :X  a.  [        R
                  " U5      n[        R
                  " U5      nGOU[         R                  :X  a3  X-   X-  -
  nSU-
  U -  SU-
  U-  -   [        R                  " X5      -   nGOoU[         R                  :X  a  UnUnGOUU[         R                  :X  a  UnX-  SU-
  U -  -   nGO0U[         R                  :X  a
  X-  nX!-  nGOU[         R                  :X  a  SU-
  U-  nSU-
  U-  nGOU[         R                  :X  a  USU-
  U-  -   nUSU-
  U -  -   nGOU[         R                  :X  a3  X-   X-  -
  nSU-
  U -  SU-
  U-  -   [        R                  " X5      -   nGOyU[         R                  :X  a
  X-  nX-  nGO[U[         R                   :X  a>  X-   X-  -
  n[        R"                  " SU-  U:  SU -  U-  X-  SX0-
  -  X-
  -  -
  5      nGO	U[         R$                  :X  a  X-   X-  -
  nX-   X-  -
  nOU[         R&                  :X  a  UnU nOU[         R(                  :X  a  UnX0-  SU-
  U-  -   nOU[         R*                  :X  a	  X-  nX-  nOU[         R,                  :X  a  SU-
  U-  nSU-
  U -  nOcU[         R.                  :X  a  USU-
  U-  -   nU SU-
  U-  -   nO8U[         R0                  :X  a#  SU-
  U-  SU-
  U-  -   nSU-
  U -  SU-
  U-  -   nOg[        R"                  " US:  Xe-  [        R
                  " U5      5      n[        R                  " USS5      nSU-
  nXe4$ )Nr	   r   r   )NNgh㈵>)r   r0   r   clampr1   
zeros_liker2   minr3   r4   r5   r6   r7   r8   maxr9   r:   wherer;   r<   r=   r>   r?   r@   rA   )rC   rD   rE   rF   r   	out_alpha	out_images          r   porter_duff_compositerO       s   IIII%I%I ~!!!KK	 5q!<	KK	 5q!<		%%	%$$Y/	$$Y/		&&	&)I,AA	]i/1y=I2MMPUPYPYZcPoo		##	#			((	(	)Q]i,GG		&&	&)	)		''	']i/	]i/		((	(Y) ;;	Y) ;;		''	')I,AA	]i/1y=I2MMPUPYPYZcPoo		((	()	)		''	')I,AA	KKI	 91y=9;T!A)>$?9CX$YY[		&&	&)I,AA	)I,AA		##	#			((	(	)Q]i,GG		&&	&)	)		''	']i/	]i/		((	(Y) ;;	Y) ;;		##	#]i/1y=I2MM	]i/1y=I2MM	 I,i.CUEUEUV_E`aIIq!,IIIr   c                       \ rS rSr\S 5       r\S\R                  S\R                  S\R                  S\R                  S\R                  4
S j5       r
S	rg
)PorterDuffImageCompositek   c                 N   [         R                  " S/ SQSS[         R                  R                  S5      [         R                  R                  S5      [         R                  R                  S5      [         R                  R                  S5      [         R
                  R                  S	[         Vs/ s H  oR                  PM     sn[        R                  R                  S
9/[         R                  R                  5       [         R                  R                  5       /S9$ s  snf )NrQ   )zalpha compositezblend modeszlayer blendztransparency blendzPorter-Duff Image Compositeimage/compositingsourcesource_alphadestinationdestination_alphar   )optionsdefaultnode_idsearch_aliasesdisplay_namecategoryinputsoutputs)
r   SchemaImageInputMaskCombor   namer3   Output)clsr   s     r   define_schema&PorterDuffImageComposite.define_schemal   s    yy.b6(x(n-}-12vn/Und		n/U_m_q_q_v_vw ! 
 	
 0Vs   1D"rU   rV   rW   rX   returnc           	         [        [        U5      [        U5      [        U5      [        U5      5      n/ n/ n[        U5       GHp  n	X   n
X9   nU
R                  S   UR                  S   :X  d   eX)   R	                  S5      nXI   R	                  S5      nUR                  S S UR                  S S :w  a  UR	                  S5      R                  SSSS5      n[        R                  R                  XR                  S   UR                  S   SSS9nUR                  SSSS5      R                  S5      nU
R                  UR                  :w  a  U
R	                  S5      R                  SSSS5      n[        R                  R                  XR                  S   UR                  S   SSS9nUR                  SSSS5      R                  S5      n
UR                  UR                  :w  a  UR	                  S5      R                  SSSS5      n[        R                  R                  XR                  S   UR                  S   SSS9nUR                  SSSS5      R                  S5      n[        XX[        U   5      u  nnUR                  U5        UR                  UR                  S5      5        GMs     [        R                  " [        R                   " U5      [        R                   " U5      5      $ )Nr   r   r   r	   bicubiccenter)upscale_methodcrop)rJ   lenranger   	unsqueezepermutecomfyutilscommon_upscaler   rO   r   appendr   
NodeOutputr   stack)ri   rU   rV   rW   rX   r   
batch_size
out_images
out_alphasirC   rE   rD   rF   upscale_inputupscale_outputrN   rM   s                     r   execute PorterDuffImageComposite.execute   s   Vc,&7[9I3O`Kab


z"A	I#I??1%);;;;$11!4I),66q9Ir"ioobq&99 ) 3 3A 6 > >q!Q J!&!;!;M??[\K]_h_n_nop_q  CL  S[!;  "\*221aA>FFqI	)//1 ) 3 3A 6 > >q!Q J!&!;!;M??[\K]_h_n_nop_q  CL  S[!;  "\*221aA>FFqI	)//1 ) 3 3A 6 > >q!Q J!&!;!;M??[\K]_h_n_nop_q  CL  S[!;  "\*221aA>FFqI	#8yestxey#z Iyi(i//233 #6 }}U[[4ekk*6MNNr   r+   Nr,   r-   r.   r/   classmethodrj   r   Tensorr   rz   r   rB   r+   r   r   rQ   rQ   k   s    
 
&  OU\\  O  OTYT`T`  Ouz  vB  vB  O  MO  MZ  MZ  O  Or   rQ   c                   h    \ rS rSr\S 5       r\S\R                  S\R                  4S j5       r
Srg)SplitImageWithAlpha   c           
          [         R                  " S/ SQSS[         R                  R                  S5      /[         R                  R	                  5       [         R
                  R	                  5       /S9$ )Nr   )zextract alphazseparate transparencyzremove alphazSplit Image with AlpharT   imager[   )r   rb   rc   rd   rh   re   ri   s    r   rj   !SplitImageWithAlpha.define_schema   sW    yy)U1(w' ! 
 	
r   r   rl   c           	      p   U Vs/ s H  o"S S 2S S 2S S24   PM     nnU Vs/ s HA  o"R                   S   S:  a  US S 2S S 2S4   O[        R                  " US S 2S S 2S4   5      PMC     nn[        R                  " [        R
                  " U5      S[        R
                  " U5      -
  5      $ s  snf s  snf )Nr   r   r         ?)r   r   	ones_liker   rz   r{   )ri   r   r   r}   r~   s        r   r   SplitImageWithAlpha.execute   s    )./A!BQBi
/Y^_Y^TU''!*q.a!Aheooa!Ah6OOY^
_}}U[[4cEKK
<S6STT 0_s   B.AB3r+   Nr   r+   r   r   r   r      sB    
 
 UELL UR]] U Ur   r   c                       \ rS rSr\S 5       r\S\R                  S\R                  S\R                  4S j5       r
Srg)	JoinImageWithAlpha   c           
          [         R                  " S/ SQSS[         R                  R                  S5      [         R                  R                  S5      /[         R                  R                  5       /S9$ )Nr   )zadd transparencyzapply alphazcomposite alphaRGBAzJoin Image with AlpharT   r   alphar[   )r   rb   rc   rd   re   rh   r   s    r   rj    JoinImageWithAlpha.define_schema   sW    yy(Y0(w'g& XX__&'

 
	
r   r   r   rl   c                    [        [        U5      [        U5      5      nS[        UR                  U5      UR                  SS  5      -
  n[
        R                  R                  X#5      n[
        R                  R                  X5      n[        R                  " [        R                  " USS S24   UR                  S5      4SS95      $ )Nr   r	   .r   r   )dim)rK   rr   r   tor   rv   rw   repeat_to_batch_sizer   rz   r   catrt   )ri   r   r   r|   s       r   r   JoinImageWithAlpha.execute   s    USZ0
k%((5/5;;qr?CC00C00C}}UYYc2A2g8K'LRTUVVr   r+   Nr   r+   r   r   r   r      sN    
 
 WELL W W"-- W Wr   r   c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)CompositingExtension   rl   c                 ,   #    [         [        [        /$ 7fN)rQ   r   r   )selfs    r   get_node_list"CompositingExtension.get_node_list   s      %
 	
s   r+   N)r,   r-   r.   r/   r   listtyper   	ComfyNoder   rB   r+   r   r   r   r      s)    
T$r||*<%= 
 
r   r   rl   c                     #    [        5       $ 7fr   )r   r+   r   r   comfy_entrypointr      s     !!s   )r   comfy.utilsrv   enumr   typing_extensionsr   comfy_api.latestr   r   r   r   r   rO   r   rQ   r   r   r   r   r+   r   r   <module>r      s       & /YT *H U\\ H ell H W\WcWc H pup|p| H   ES H V6Or|| 6OrU",, U0W W0
> 
" 4 "r   