o
    i                     @  s   d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dl	Z	d dl
Z
d dlmZmZmZ d dlmZ dd
dZG dd dejZG dd deZdd ZdS )    )annotationsN)Image)ComfyExtensionioUI)override	hex_colorstrreturntuple[float, float, float]c                 C  sf   |  d} t| dkrdS t| dd dd }t| dd dd }t| dd dd }|||fS )	N#   )        r   r   r              o@   )lstriplenint)r   rgb r   8/mnt/c/Users/fbmor/ComfyUI/comfy_extras/nodes_painter.py
hex_to_rgb   s   

r   c                   @  s6   e Zd Zedd ZeddddZedd	d
ZdS )PainterNodec                 C  s   t jddddt jjddddt jjdddddd	d
t jjddddddddidt jjddddddddidt jjdddgt jdt jdgdS )NPainterimageTz!Optional base image to paint over)optionaltooltipmask PAINTER)
widgetTypeimage_upload)default
socketless
extra_dictwidthi   @   i   hidden)r&   minmaxstepr'   r(   heightbg_color#000000)r&   IMAGEMASK)node_iddisplay_namecategoryhas_intermediate_outputinputsoutputs)	r   Schemar   InputStringIntColorOutputMask)clsr   r   r   define_schema   sP   		
!
zPainterNode.define_schemar1   Nr
   io.NodeOutputc                 C  s  |d ur|d d }|j d |j d }}n<||}}t|\}	}
}tjd||dftjd}|	|dd d d d df< |
|dd d d d df< ||dd d d d df< |r| rt|}t	t
j|}|d}|j||fkry|||ft
j}t|tjd }|d d d d d df }|d d d d ddf }t|d d d d df d}|d   }|| |d	|   }t|d}ntjd||ftjd}|}tj||t|d
S )N   r      )dtyper   RGBAr   r   g      ?)ui)shaper   torchzerosfloat32stripfolder_pathsget_annotated_filepathnode_helperspillowr   openconvertsizeresizeLANCZOSnparrayastype
from_numpy	unsqueezecpunumpyr   
NodeOutputr   PreviewImage)rA   r!   r)   r/   r0   r   
base_imagehwr   r   r   	mask_pathpainter_img
painter_nppainter_rgbpainter_alphamask_tensorbase_np
composited	out_imager   r   r   executeH   s2   


"zPainterNode.executec           	      C  sr   |r7|  r7t|}tj|r7t }t|d}|	|
  W d    n1 s,w   Y  |  S dS )Nrbr"   )rM   rN   rO   ospathexistshashlibsha256rR   updatereaddigesthex)	rA   r!   r)   r/   r0   r   rc   mfr   r   r   fingerprint_inputsl   s   
zPainterNode.fingerprint_inputs)r1   N)r
   rC   )__name__
__module____qualname__classmethodrB   rl   ry   r   r   r   r   r      s    
,#r   c                   @  s   e Zd Zedd ZdS )PainterExtensionc                   s   t gS N)r   )selfr   r   r   get_node_listz   s   zPainterExtension.get_node_listN)rz   r{   r|   r   r   r   r   r   r   r~   y   s    r~   c                     s   t  S r   )r~   r   r   r   r   comfy_entrypoint   s   r   )r   r	   r
   r   )
__future__r   rq   rn   r]   rW   rJ   PILr   rN   rP   comfy_api.latestr   r   r   typing_extensionsr   r   	ComfyNoder   r~   r   r   r   r   r   <module>   s    

_