
    +j#              
       >   d dl Z d dlZd dlmZ d dlmZ d dlmZm	Z	 d Z
 G d de          Zde j        d	e j        d
e j        de j        def
dZ G d de	j                  Z G d de	j                  Z G d de	j                  Z G d de          ZdefdZdS )    N)Enum)override)ComfyExtensionioc           	          t           j        j                            |                     dd| j        d         | j        d         f          |d         |d         fd                              d          S )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    8**4<<Q
2PTPZ[]P^8_+`+`hmnohprwxyrzg{  CM*  N  N  V  V  WX  Y  Y  Y    c                   V    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdS )PorterDuffModer   r	                        	   
                        N)__name__
__module____qualname__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 r   r   r   r      sh        
CEF
CHFGHGHGF
CHFGH
CCCr   r   	src_image	src_alpha	dst_image	dst_alphar   c                    d|z
  }d|z
  }| |z  } ||z  }|t           j        k    r4t          j        ||z   dd          }t          j        | |z   dd          }n|t           j        k    r*t          j        |          }t          j        |          }n|t           j        k    r4||z   ||z  z
  }d|z
  | z  d|z
  |z  z   t          j        | |          z   }nD|t           j        k    r|}|}n.|t           j	        k    r|}||z  d|z
  | z  z   }n|t           j
        k    r||z  }||z  }n|t           j        k    rd|z
  |z  }d|z
  |z  }n|t           j        k    r|d|z
  |z  z   }|d|z
  | z  z   }n|t           j        k    r4||z   ||z  z
  }d|z
  | z  d|z
  |z  z   t          j        | |          z   }nb|t           j        k    r||z  }| |z  }nF|t           j        k    rA||z   ||z  z
  }t          j        d|z  |k     d| z  |z  ||z  d|| z
  z  ||z
  z  z
            }n|t           j        k    r||z   ||z  z
  }| |z   | |z  z
  }n|t           j        k    r|}| }n|t           j        k    r|}|| z  d|z
  |z  z   }n|t           j        k    r||z  }| |z  }n}|t           j        k    rd|z
  |z  }d|z
  | z  }n\|t           j        k    r|d|z
  |z  z   }| d|z
  |z  z   }n5|t           j        k    r#d|z
  |z  d|z
  |z  z   }d|z
  | z  d|z
  |z  z   }ndS t          j        |dk    ||z  t          j        |                    }t          j        |dd          }d|z
  }||fS )Nr	   r   r   )NNgh㈵>)r   r.   r   clampr/   
zeros_liker0   minr1   r2   r3   r4   r5   r6   maxr7   r8   wherer9   r:   r;   r<   r=   r>   r?   )rA   rB   rC   rD   r   	out_alpha	out_images          r   porter_duff_compositerM       sG   IIIII%II%I ~!!!K	I 5q!<<	K	I 5q!<<			%	%	%$Y//	$Y//			&	&	&	)I	,AA	]i/1y=I2MMPUPYZcenPoPoo			#	#	#				(	(	(		)Q]i,GG			&	&	&	)		)			'	'	']i/	]i/			(	(	(Y) ;;	Y) ;;			'	'	'	)I	,AA	]i/1y=I2MMPUPYZcenPoPoo			(	(	(	)		)			'	'	'	)I	,AA	KI	 91y=9;T	!AY)>$?9yCX$YY[ [			&	&	&	)I	,AA		)I	,AA			#	#	#				(	(	(		)Q]i,GG			&	&	&	)		)			'	'	']i/	]i/			(	(	(Y) ;;	Y) ;;			#	#	#]i/1y=I2MM	]i/1y=I2MM		z I,i).CUEUV_E`E`aaIIq!,,IIIir   c                       e Zd Zed             Zedej        dej        dej        dej        dej        f
d            Z	dS )	PorterDuffImageCompositec                    t          j        dg dddt           j                            d          t           j                            d          t           j                            d          t           j                            d          t           j                            d	d
 t          D             t          j        j                  gt           j        	                                t           j        	                                g          S )NrO   )zalpha compositezblend modeszlayer blendztransparency blendzPorter-Duff Image Compositeimage/compositingsourcesource_alphadestinationdestination_alphar   c                     g | ]	}|j         
S r@   )name).0r   s     r   
<listcomp>z:PorterDuffImageComposite.define_schema.<locals>.<listcomp>x   s    /U/U/Ud	/U/U/Ur   )optionsdefaultnode_idsearch_aliasesdisplay_namecategoryinputsoutputs)
r   SchemaImageInputMaskCombor   r1   rW   Outputclss    r   define_schemaz&PorterDuffImageComposite.define_schemal   s    y.bbb6(x((n--}--122v/U/Un/U/U/U_m_q_vww !!  
 
 
 	
r   rR   rS   rT   rU   returnc           	         t          t          |          t          |          t          |          t          |                    }g }g }t          |          D ]}	||	         }
||	         }|
j        d         |j        d         k    sJ ||	                             d          }||	                             d          }|j        d d         |j        d d         k    r|                    d                              dddd          }t          j                            ||j        d         |j        d         dd          }|                    dddd          	                    d          }|
j        |j        k    r|
                    d                              dddd          }t          j                            ||j        d         |j        d         dd          }|                    dddd          	                    d          }
|j        |j        k    r|                    d                              dddd          }t          j                            ||j        d         |j        d         dd          }|                    dddd          	                    d          }t          |
|||t          |                   \  }}|                    |           |                    |	                    d                     t          j        t          j        |          t          j        |                    S )Nr   r   r   r	   bicubiccenter)upscale_methodcrop)rH   lenranger   	unsqueezepermutecomfyutilscommon_upscaler   rM   r   appendr   
NodeOutputr   stack)rj   rR   rS   rT   rU   r   
batch_size
out_images
out_alphasirA   rC   rB   rD   upscale_inputupscale_outputrL   rK   s                     r   executez PorterDuffImageComposite.execute   s%   Vc,&7&7[9I9I3O`KaKabb


z"" 	4 	4Aq	I#AI?1%);;;;;$Q11!44I)!,66q99Irr"iobqb&999 ) 3 3A 6 6 > >q!Q J J!&!;!;M9?[\K]_h_nop_q  CL  S[!;  "\  "\*221aA>>FFqII	)/11 ) 3 3A 6 6 > >q!Q J J!&!;!;M9?[\K]_h_nop_q  CL  S[!;  "\  "\*221aA>>FFqII	)/11 ) 3 3A 6 6 > >q!Q J J!&!;!;M9?[\K]_h_nop_q  CL  S[!;  "\  "\*221aA>>FFqII	#8IyZcestxey#z#z Iyi(((i//223333}U[44ek*6M6MNNNr   N
r+   r,   r-   classmethodrk   r   Tensorr   rz   r   r@   r   r   rO   rO   k   s        
 
 [
&  OU\  O  OTYT`  Ouz  vB  O  MO  MZ  O  O  O [ O  O  Or   rO   c                   X    e Zd Zed             Zedej        dej        fd            Z	dS )SplitImageWithAlphac           
          t          j        dg dddt           j                            d          gt           j                                        t           j                                        g          S )Nr   )zextract alphazseparate transparencyzremove alphazSplit Image with AlpharQ   imager\   )r   rc   rd   re   rh   rf   ri   s    r   rk   z!SplitImageWithAlpha.define_schema   sh    y)UUU1(w'' !!  
 
 
 	
r   r   rl   c                     d |D             }d |D             }t          j        t          j        |          dt          j        |          z
            S )Nc                 0    g | ]}|d d d d d df         S )Nr   r@   rX   r   s     r   rY   z/SplitImageWithAlpha.execute.<locals>.<listcomp>   s.    ///Aa!!!BQBi///r   c                     g | ]C}|j         d          dk    r|dddddf         n t          j        |dddddf                   DS )r   r   Nr   )r   r   	ones_liker   s     r   rY   z/SplitImageWithAlpha.execute.<locals>.<listcomp>   sY    ___TU!'!*q..a!!!Ahheoa!!!Ah6O6O___r         ?)r   rz   r   r{   )rj   r   r}   r~   s       r   r   zSplitImageWithAlpha.execute   sT    /////
__Y^___
}U[44cEK
<S<S6STTTr   Nr   r@   r   r   r   r      sg        
 
 [
 UEL UR] U U U [U U Ur   r   c                   f    e Zd Zed             Zedej        dej        dej        fd            Z	dS )JoinImageWithAlphac           
          t          j        dg dddt           j                            d          t           j                            d          gt           j                                        g          S )Nr   )zadd transparencyzapply alphazcomposite alphaRGBAzJoin Image with AlpharQ   r   alphar\   )r   rc   rd   re   rf   rh   ri   s    r   rk   z JoinImageWithAlpha.define_schema   sh    y(YYY0(w''g&& X__&&'

 

 

 
	
r   r   r   rl   c                    t          t          |          t          |                    }dt          |                    |          |j        dd                    z
  }t
          j                            ||          }t
          j                            ||          }t          j	        t          j        |dd df         |                    d          fd                    S )Nr   r	   .r   r   )dim)rI   rr   r   tor   rv   rw   repeat_to_batch_sizer   rz   r   catrt   )rj   r   r   r|   s       r   r   zJoinImageWithAlpha.execute   s    USZZ00
k%((5//5;qrr?CCC00
CC00
CC}UYc2A2g8K8K'LRTUUUVVVr   Nr   r@   r   r   r   r      sq        
 
 [
 WEL W W"- W W W [W W Wr   r   c                   L    e Zd Zedeeej                          fd            ZdS )CompositingExtensionrl   c                 .   K   t           t          t          gS N)rO   r   r   )selfs    r   get_node_listz"CompositingExtension.get_node_list   s       %
 	
r   N)	r+   r,   r-   r   listtyper   	ComfyNoder   r@   r   r   r   r      sE        
T$r|*<%= 
 
 
 X
 
 
r   r   rl   c                  "   K   t                      S r   )r   r@   r   r   comfy_entrypointr      s      !!!r   )r   comfy.utilsrv   enumr   typing_extensionsr   comfy_api.latestr   r   r   r   r   rM   r   rO   r   r   r   r   r@   r   r   <module>r      s              & & & & & & / / / / / / / /Y Y Y    T   *H U\ H el H W\Wc H pup| H   ES H  H  H  H V6O 6O 6O 6O 6Or| 6O 6O 6OrU U U U U", U U U0W W W W W W W W0
 
 
 
 
> 
 
 
" 4 " " " " " "r   