
    +j                         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edeeeef         fdZ G d d	ej                  Z G d
 de
          Zd ZdS )    N)Image)ComfyExtensionioUI)override	hex_colorreturnc                    |                      d          } t          |           dk    rdS t          | dd         d          dz  }t          | dd         d          dz  }t          | dd         d          dz  }|||fS )	N#   )        r   r   r              o@   )lstriplenint)r   rgbs       :/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_painter.py
hex_to_rgbr      s      %%I
9~~IacNB%'AIacNB%'AIacNB%'Aq!9    c                   d    e Zd Zed             Zeddej        fd            Zedd            ZdS )PainterNodec                    t          j        ddddt           j                            ddd          t           j                            dddddd	
          t           j                            ddddddddi          t           j                            ddddddddi          t           j                            dd          gt           j                            d          t           j                            d          g          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)clss    r   define_schemazPainterNode.define_schema   s%   y"$(!?   
 	#.7NN	     # ($/    # ($/    z9===B ((v&&K)
 )
 )
 )	
r   r2   Nr	   c                    |%|d d         }|j         d         |j         d         }}nb||}}t          |          \  }	}
}t          j        d||dft          j                  }|	|dd d d d df<   |
|dd d d d df<   ||dd d d d df<   |rx|                                rct          j        |          }t          j	        t          j        |          }|                    d          }|j        ||fk    r"|                    ||ft          j                  }t!          j        |                              t           j                  dz  }|d d d d d df         }|d d d d ddf         }t          j        |d d d d df                                       d          }|d                                                                         }||z  |d	|z
  z  z   }t          j        |                              d          }n%t          j        d||ft          j                  }|}t/          j        ||t3          j        |          
          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)rB   r"   r*   r0   r1   r   
base_imagehwr   r   r   	mask_pathpainter_img
painter_nppainter_rgbpainter_alphamask_tensorbase_np
composited	out_images                        r   executezPainterNode.executeF   s\   rrJ#A&
(8(;qAA5qA **GAq!aAq\GGGJ%&Jq!!!QQQz"%&Jq!!!QQQz"%&Jq!!!QQQz" 	#DJJLL 	#$;DAAI&-ej)DDK%--f55KAq6)))00!QGG+..55bjAAEIJ$QQQ2A2X.K&qqq!!!QqSy1M*:aaaAg+>??II!LLK m''))//11G$}4w#BU7VVJ(44>>qAAII+q!Qiu}EEEK"I}Y	8R8RSSSSr   c                    |r|                                 rt          j        |          }t          j                            |          rt          j                    }t          |d          5 }|	                    |
                                           d d d            n# 1 swxY w Y   |                                                                S dS )Nrbr#   )rN   rO   rP   ospathexistshashlibsha256rS   updatereaddigesthex)	rB   r"   r*   r0   r1   r   rd   mfs	            r   fingerprint_inputszPainterNode.fingerprint_inputsj   s     	(DJJLL 	($;DAAIw~~i(( (N$$)T** 'aHHQVVXX&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' 'xxzz~~'''rs   -(B!!B%(B%)r2   N)	__name__
__module____qualname__classmethodrC   r   r_   rm   r{    r   r   r   r      s        *
 *
 [*
X !T !TR] !T !T !T [!TF    [  r   r   c                   $    e Zd Zed             ZdS )PainterExtensionc                    K   t           gS N)r   )selfs    r   get_node_listzPainterExtension.get_node_listx   s      }r   N)r|   r}   r~   r   r   r   r   r   r   r   w   s-          X  r   r   c                  "   K   t                      S r   )r   r   r   r   comfy_entrypointr   }   s      r   )rs   rp   r^   rX   rK   PILr   rO   rQ   comfy_api.latestr   r   r   typing_extensionsr   strtuplefloatr   	ComfyNoder   r   r   r   r   r   <module>r      s,    				                    3 3 3 3 3 3 3 3 3 3 & & & & & &# %ue(;"<    [ [ [ [ [", [ [ [~    ~       r   