
    +jc                   h   U d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZ d dlmZ d dlmZmZmZmZmZmZ d d	lmZmZ d dlZerJd d
lmZ d dlmZ d dlm Z! d dl"m#Z# d dl$m%Z% d dl&m'Z'm(Z( d dl)m*Z* d dl+m,Z,m-Z- d dl.m/Z/m0Z0 d dl.m1Z2 d dl3m4Z4m5Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? d dl@mAZA ddlBmCZCmDZDmEZEmFZGmHZH  G d deIe          ZJ G d deIe          ZK G d d          ZL G d d eIe          ZM G d! d"eIe          ZN G d# d$e          ZO ed%eP&          ZQdjd)ZRdkd,ZS G d- d.          ZT G d/ d0eT          ZU G d1 d2eU          ZV G d3 d4eT          Z  G d5 d6eO          ZW G d7 d8eW          ZX eRd9:           G d; d<eX                      ZY eRd=:           G d> d?eX                      ZZ eRd@:           G dA dBeX                      Z[ eRdC:           G dD dEeX                      Z\ eRdF:           G dG dHeX                      Z] eRdF:           G dI dJeW                      Z^ eRdK:           G dL dMeX                      Z_ eRdN:           G dO dPeX                      Z` eRdQ:           G dR dSeX                      Za eRdT:           G dU dVeX                      Zb eRdW:           G dX dYeX                      Zc eRdZ:           G d[ d\eX                      Zd eRd]:           G d^ d_eX                      Z- eRd`:           G da dbeX                      Ze eRdc:           G dd deeX                      Zf eRdf:           G dg dheX                      Zg eRdi:           G dj dkeX                      Zh eRdl:           G dm dneX                      Z% eRdo:           G dp dqeX                      Zi eRdr:           G ds dteX                      Zj eRdu:           G dv dweX                      Zk eRdx:           G dy dzeX                      Zl eRd{:           G d| d}eX                      Zm eRd~:           G d deX                      Z1 eRd:           G d deX                      Zn eRd:           G d deX                      Zo eRd:           G d deX                      Zp eRd:           G d deX                      Zq eRd:           G d deX                      Zr eRd:           G d deX                      ZF eRd:           G d deX                      Zs eRd:           G d deX                      Zt eRd:           G d deX                      Zu eRd:           G d deX                      Zv eRd:           G d deX                      Zw eRd:           G d deX                      Zx eRd:           G d deX                      Zy eRd:           G d deX                      Zz eRd:           G d deX                      Z{ eRd:           G d deX                      Z| eRd:           G d deX                      Z} eRd:           G d deX                      Z~ eRd:           G d deX                      Z eRd:           G d deX                      Z eRd:           G d deX                      Z eRd:           G d deX                      Z eRd¬:           G dÄ deX                      Z eRdŬ:           G dƄ deX                      Z eRdȬ:           G dɄ deX                      Z eRdˬ:           G d̄ deX                      Z eRdά:           G dτ deX                      Z eRdѬ:           G d҄ deX                      Z eRdԬ:           G dՄ deX                      Z eRd׬:           G d؄ deX                      Z eRdڬ:           G dۄ deX                      Z eRdݬ:           G dބ deX                      Z eRd:           G d deX                      Z eRd:           G d de                      Z eRd:           G d deX                      Z eRd:           G d deX                      Z eRd:           G d deX                      Z eRd:           G d deX                      Z eRd:           G d deX                      Z eRd:           G d deX                      Z eRd:           G d deX                      Z eRd:           G d deX                      Z eRd:           G d deX                      Z eRd:           G d  deX                      Z eRd:           G d d                      Z eRd:           G d deX                      Z G d d	eUe          Z G d
 de e          ZdldmdZdldndZ eRd:           G d deW                      Z eRd:           G d deW                      Z eRd:           G d deW                      Z eRd:           G d deW                      Z eRd:           G d  d!eX                      Z eRd":           G d# d$eX                      Z eRd%:           G d& d'eX                      Z eRd(:           G d) d*eX                      Z eRd+:           G d, d-eX                      Zi Zd.ed/<   dod2Zdpd3Zd4 Z ee          d k    r
 e              G d5 d6e          Z G d7 d8          Z G d9 d:eIe          Ze G d; d<                      Ze G d= d>                      Ze G d? d@                      Ze G dA dB                      ZdqdrdHZdldsdMZdtdQZdudSZ G dT dU          ZdvdXZ G dY dZe8          Z G d[ d\e          Z G d] d^e9          Z G d_ d`e          Z G da dbe          Z G dc dde          Zeez  Z	  G de dfe          Z G dg dh          Zg diZdS (w      )annotationsN)ABCabstractmethod)Counter)Iterable)asdict	dataclassfield)Enum)AnyCallableLiteral	TypedDictTypeVarTYPE_CHECKING)NotRequiredfinal)ImageModelDescriptor)ClipVisionModel)Output)BackgroundRemovalModel)
ControlNet)	HookGroupHookKeyframeGroup)ModelPatcher)	CFGGuiderSampler)CLIPVAE)
StyleModel)
VideoInput
CurveInput)_ComfyNodeInternal_NodeOutputInternalclassproperty
copy_classfirst_real_overrideis_class
prune_dictshallow_clone_class)ExecutionBlocker   )MESHVOXELSPLATSVGFile3Dc                      e Zd ZdZdZdZdS )
FolderTypeinputoutputtempN)__name__
__module____qualname__r4   r5   r6        4/home/wildlama/comfy/ComfyUI/comfy_api/latest/_io.pyr3   r3   "   s        EFDDDr;   r3   c                      e Zd ZdZdZdZdZdS )
UploadTypeimage_uploadaudio_uploadvideo_uploadfile_uploadN)r7   r8   r9   imageaudiovideomodelr:   r;   r<   r>   r>   (   s"        EEEEEEr;   r>   c                  "    e Zd Z	 	 dddZd ZdS )RemoteOptionsfirstNroutestrrefresh_buttonboolcontrol_after_refreshLiteral['first', 'last']timeoutintmax_retriesrefreshc                d    || _         	 || _        	 || _        	 || _        	 || _        	 || _        d S NrJ   rL   rN   rP   rR   rS   )selfrJ   rL   rN   rP   rR   rS   s          r<   __init__zRemoteOptions.__init__0   sM    
-,T%:" 	Og&H 	J  	Jr;   c           	     j    t          | j        | j        | j        | j        | j        | j        d          S )NrV   )r)   rJ   rL   rN   rP   rR   rS   rW   s    r<   as_dictzRemoteOptions.as_dict?   s?    Z"1%)%?|+|
 
   	r;   )rI   NNN)rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rQ   rS   rQ   r7   r8   r9   rX   r[   r:   r;   r<   rH   rH   /   sG        ipHLJ J J J J    r;   rH   c                      e Zd ZdZdZdZdS )NumberDisplaynumberslidergradientsliderN)r7   r8   r9   r_   r`   gradient_sliderr:   r;   r<   r^   r^   J   s        FF&OOOr;   r^   c                      e Zd ZdZdZdZdZdS )ControlAfterGeneratefixed	increment	decrement	randomizeN)r7   r8   r9   re   rf   rg   rh   r:   r;   r<   rd   rd   P   s"        EIIIIIr;   rd   c                  "    e Zd ZU eZdZded<   dS )
_ComfyTypeNrK   io_type)r7   r8   r9   r   Typerk   __annotations__r:   r;   r<   rj   rj   V   s(         DGr;   rj   T)boundrk   rK   c                     d fd}|S )z
    Decorator to mark nested classes as ComfyType; io_type will be bound to the class.

    A ComfyType may have the following attributes:
    - Type = <type hint here>
    - class Input(Input): ...
    - class Output(Output): ...
    clsrn   returnc                P   t          | t                    st          | t                    rU| }t          |d          rt	          |j                  |_        t          |d          rt	          |j                  |_        nXd | j                                        D             }t          | j
        | t          f|          }| j        |_        | j        |_        |_        t          |d          r|j        ||j        _        t          |d          r|j        ||j        _        |S )NInputr   c                "    i | ]\  }}|d v	||S ))__dict____weakref__r8   __doc__r:   ).0kvs      r<   
<dictcomp>z0comfytype.<locals>.decorator.<locals>.<dictcomp>o   s4       APPP 1PPPr;   )
isinstancerj   
issubclasshasattrr&   rt   r   rv   itemstyper7   ComfyTypeIOr8   rx   rk   Parent)rq   new_clscls_dictrk   s      r<   	decoratorzcomfytype.<locals>.decoratore   s&   c:&& 	**S**E*E 	*Gw(( : *7= 9 9w)) <!+GN!;!; !$!3!3!5!5  H
 $(k"$ $G "%G!kGO!7G$$ 	+)B#*GM 7H%% 	,'.*D$+GN!r;   )rq   rn   rr   rn   r:   )rk   kwargsr   s   `  r<   	comfytyper   \   s)         < r;   rr   type[ComfyTypeIO]c                X    t          |            G d dt                                }|S )z(Create a ComfyType for a custom io_type.rk   c                      e Zd ZdS )Custom.<locals>.CustomComfyTypeNr7   r8   r9   r:   r;   r<   CustomComfyTyper      s        r;   r   )r   r   )rk   r   s     r<   Customr      sH    w    +    r;   c                  Z    e Zd ZU dZdZded<   d Zd Zed             Z	ed             Z
dS )	_IO_V3z/
    Base class for V3 Inputs and Outputs.
    Nrj   r   c                    d S rU   r:   rZ   s    r<   rX   z_IO_V3.__init__       r;   c                    d S rU   r:   rZ   s    r<   validatez_IO_V3.validate   r   r;   c                    | j         j        S rU   )r   rk   rZ   s    r<   rk   z_IO_V3.io_type   s    {""r;   c                    | j         j        S rU   )r   rl   rZ   s    r<   rl   z_IO_V3.Type   s    {r;   )r7   r8   r9   rx   r   rm   rX   r   propertyrk   rl   r:   r;   r<   r   r      s           F     # # X#     X     r;   r   c                  :     e Zd ZdZdd fdZd Zd ZddZ xZS )rt   z$
    Base class for a V3 Input.
    NFidrK   display_nametooltiplazyrM   raw_linkadvancedc	                    t                                                       || _        || _        || _        || _        || _        ||ni | _        || _        || _	        d S rU   )
superrX   r   r   optionalr   r   
extra_dictrawLinkr   )
rW   r   r   r   r   r   r   r   r   	__class__s
            r<   rX   zInput.__init__   s_    ( 	(2(>**B r;   c           	         t          | j        | j        | j        | j        | j        | j        d          t          | j                  z  S )N)r   r   r   r   r   r   )r)   r   r   r   r   r   r   r   rZ   s    r<   r[   zInput.as_dict   sQ     -|I|
 
   (() 	)r;   c                    | j         S rU   r   rZ   s    r<   get_io_typezInput.get_io_type   
    |r;   rr   list[Input]c                    | gS rU   r:   rZ   s    r<   get_allzInput.get_all   s	    vr;   NFNNNNN)r   rK   r   rK   r   rK   r   rM   r   rM   r   rM   rr   r   )	r7   r8   r9   rx   rX   r[   r   r   __classcell__r   s   @r<   rt   rt      s~         	! 	! 	! 	! 	! 	! 	!) ) )         r;   rt   c                  @     e Zd ZdZ	 	 	 dd fdZ fdZ fdZ xZS )WidgetInputz0
    Base class for a V3 Input with widget.
    NFr   rK   r   r   r   rM   defaultr   
socketlesswidget_typeforce_inputr   r   c           
         t                                          ||||||
||           || _        || _        || _        |	| _        d S rU   )r   rX   r   r   r   r   )rW   r   r   r   r   r   r   r   r   r   r   r   r   r   s                r<   rX   zWidgetInput.__init__   sQ     	\8WdJPXZbccc$&&r;   c                    t                                                      t          | j        | j        | j        | j        d          z  S )N)r   r   
widgetType
forceInput)r   r[   r)   r   r   r   r   rW   r   s    r<   r[   zWidgetInput.as_dict   sJ    ww  :|/**	/
 /
 $ $  	r;   c                `    | j         | j         nt                                                      S rU   )r   r   r   r   s    r<   r   zWidgetInput.get_io_type   s)    #'#3#?tUWWEXEXEZEZZr;   )NFNNNNNNNNN)r   rK   r   rK   r   rK   r   rM   r   r   r   rM   r   rK   r   rM   r   rM   r   rM   )r7   r8   r9   rx   rX   r[   r   r   r   s   @r<   r   r      s          gk" MQ' ' ' ' ' ' '    [ [ [ [ [ [ [ [ [r;   r   c                  (    e Zd Z	 	 d
ddZd Zd	 ZdS )r   NFr   rK   r   r   c                F    || _         |r|n|| _        || _        || _        d S rU   )r   r   r   is_output_list)rW   r   r   r   r   s        r<   rX   zOutput.__init__   s/    ,8@LLb,r;   c                f    | j         r| j         n| j        }t          || j        | j        d          S )N)r   r   r   )r   r   r)   r   r   )rW   r   s     r<   r[   zOutput.as_dict   sC    ,0,=Jt((47(|"1
 
   	r;   c                    | j         S rU   r   rZ   s    r<   r   zOutput.get_io_type   r   r;   NNNF)r   rK   r   rK   r   rK   )r7   r8   r9   rX   r[   r   r:   r;   r<   r   r      sQ        JN %- - - - -      r;   r   c                  .    e Zd ZdZ G d de          ZdS )
ComfyTypeIzbComfyType subclass that only has a default Input class - intended for types that only have Inputs.c                      e Zd ZdS )ComfyTypeI.InputNr   r:   r;   r<   rt   r              r;   rt   N)r7   r8   r9   rx   rt   r:   r;   r<   r   r      sD        ll         r;   r   c                  .    e Zd ZdZ G d de          ZdS )r   zlComfyType subclass that has default Input and Output classes; useful for types with both Inputs and Outputs.c                      e Zd ZdS )ComfyTypeIO.OutputNr   r:   r;   r<   r   r      r   r;   r   N)r7   r8   r9   rx   r   r:   r;   r<   r   r      sD        vv         r;   r   BOOLEANr   c                  .    e Zd ZeZ G d de          ZdS )Booleanc                  6     e Zd ZdZ	 	 	 dd fdZ fdZ xZS )Boolean.InputzBoolean input.NFr   rK   r   r   r   rM   r   label_on	label_offr   r   r   r   c                    t                                          |||||||	d |
|||           || _        || _        |  d S rU   )r   rX   r   r   )rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                 r<   rX   zBoolean.Input.__init__   sd     GGRx$Q[]acnpz  }E  GO  P  P  P$DM&DNr;   c                ~    t                                                      t          | j        | j        d          z  S )N)r   r   )r   r[   r)   r   r   r   s    r<   r[   zBoolean.Input.as_dict  s>    77??$$z M!^3 3 ( (  r;   NFNNNNNNNNNN)r   rK   r   rK   r   rK   r   rM   r   rM   r   rK   r   rK   r   rM   r   rM   r   rM   r   rM   r7   r8   r9   rx   rX   r[   r   r   s   @r<   rt   r      sj        jnKOx|	 	 	 	 	 	 		 	 	 	 	 	 	 	 	r;   rt   N)r7   r8   r9   rM   rl   r   rt   r:   r;   r<   r   r      sC        D         r;   r   INTc                  .    e Zd ZeZ G d de          ZdS )Intc                  6     e Zd ZdZ	 	 	 dd fdZ fdZ xZS )	Int.InputzInteger input.NFr   rK   r   r   r   rM   r   rQ   minmaxstepcontrol_after_generatebool | ControlAfterGeneratedisplay_moder^   r   r   r   r   c                    t                                          |||||||d ||||           || _        || _        |	| _        |
| _        || _        |  d S rU   )r   rX   r   r   r   r   r   )rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                    r<   rX   zInt.Input.__init__  s{     GGRx$Q[]acnpz  }E  GO  P  P  PDHDHDI*@D' ,Dr;   c           	         t                                                      t          | j        | j        | j        | j        | j        r| j        j        nd d          z  S )N)r   r   r   r   display)	r   r[   r)   r   r   r   r   r   valuer   s    r<   r[   zInt.Input.as_dict  s_    77??$$zxx	*.*E6:6GQ4,22T3 3 ( (  r;   )NFNNNNNNNNNNNNN)r   rK   r   rK   r   rK   r   rM   r   rQ   r   rQ   r   rQ   r   rQ   r   r   r   r^   r   rM   r   rM   r   rM   r   rM   r   r   s   @r<   rt   r     sr        jn JN [_		 		 		 		 		 		 			 	 	 	 	 	 	 	 	r;   rt   N)r7   r8   r9   rQ   rl   r   rt   r:   r;   r<   r   r     sC        D         r;   r   FLOATc                  .    e Zd ZeZ G d de          ZdS )Floatc                  8     e Zd ZdZ	 	 	 	 dd fdZ fdZ xZS )Float.InputzFloat input.NFr   rK   r   r   r   rM   r   floatr   r   r   roundr   r^   gradient_stops
list[dict]r   r   r   r   c                    t                                          |||||||d ||||           || _        || _        |	| _        |
| _        || _        || _        |  d S rU   )r   rX   r   r   r   r   r   r   )rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                     r<   rX   zFloat.Input.__init__+  s     GGRx$Q[]acnpz  }E  GO  P  P  PDHDHDIDJ ,D"0Dr;   c           
         t                                                      t          | j        | j        | j        | j        | j        | j        d          z  S )N)r   r   r   r   r   r   )	r   r[   r)   r   r   r   r   r   r   r   s    r<   r[   zFloat.Input.as_dict8  sT    77??$$zxx	,"&"53 3 ( (  r;   )NFNNNNNNNNNNNNNN)r   rK   r   rK   r   rK   r   rM   r   r   r   r   r   r   r   r   r   r   r   r^   r   r   r   rM   r   rM   r   rM   r   rM   r   r   s   @r<   rt   r   )  sm        jnjnQUx|	  	  	  	  	  	  	 	 	 	 	 	 	 	 	 	r;   rt   N)r7   r8   r9   r   rl   r   rt   r:   r;   r<   r   r   %  sC        D         r;   r   STRINGc                  .    e Zd ZeZ G d de          ZdS )Stringc                  6     e Zd ZdZ	 	 	 dd fdZ fdZ xZS )String.InputzString input.NFr   rK   r   r   r   rM   placeholderr   dynamic_promptsr   r   r   r   c                    t                                          |||||||
d ||||           || _        || _        |	| _        |  d S rU   )r   rX   	multiliner   r   )rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                  r<   rX   zString.Input.__init__H  sm     GGRx$Q[]acnpz  }E  GO  P  P  P&DN*D#2D r;   c                    t                                                      t          | j        | j        | j        d          z  S )N)r   r   dynamicPrompts)r   r[   r)   r   r   r   r   s    r<   r[   zString.Input.as_dictQ  sE    77??$$z!^#/"&"63 3 ( (  r;   )NFNNFNNNNNNNN)r   rK   r   rK   r   rK   r   rM   r   rK   r   rK   r   rM   r   rM   r   rM   r   rM   r   rM   r   r   s   @r<   rt   r   F  sj        jneix|	 	 	 	 	 	 		 	 	 	 	 	 	 	 	r;   rt   Nr7   r8   r9   rK   rl   r   rt   r:   r;   r<   r   r   B  sC        D         r;   r   COMBOc                  J    e Zd ZeZ G d de          Z G d de          ZdS )Comboc                  P     e Zd ZdZeZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd fdZ fdZ xZS )Combo.InputzCombo input (dropdown).NFr   rK   options"list[str] | list[int] | type[Enum]r   r   r   rM   r   str | int | Enumr   r   uploadr>   image_folderr3   remoterH   r   r   r   c                \   t          |t                    r!t          |t                    rd |D             }t          |t                    r|j        }t                                          |||||||d d |||           d| _        || _        || _	        |	| _
        |
| _        || _        |  d S )Nc                    g | ]	}|j         
S r:   )r   )ry   r{   s     r<   
<listcomp>z(Combo.Input.__init__.<locals>.<listcomp>q  s    444q17444r;   F)r}   r   r~   r   r   r   rX   multiselectr  r   r  r  r  )rW   r   r  r   r   r   r   r   r   r  r  r  r   r   r   r   r   s                   r<   rX   zCombo.Input.__init__^  s    $ '4(( 5Z-F-F 544G444'4(( (!-GGRx$Q[]acgisu}  @H  I  I  I$D"DL*@D' DK ,D DKr;   c                (   t                                                      t          | j        | j        | j        d| j        | j        j        dini | j        r| j        j        nd | j	        r| j	                                        nd d          z  S )N)r  r  r   T)r  r  )
r   r[   r)   r  r  r   r  r   r  r  r   s    r<   r[   zCombo.Input.as_dict}  s    77??$$z#/<*.*E3 3 150GDK%t,,R	3
 <@;L V 1 7 7RV37;H$+--///D3 3 3 ( (  r;   )NNFNNNNNNNNNNN)r   rK   r  r  r   rK   r   rK   r   rM   r   r  r   r   r  r>   r  r3   r  rH   r   rM   r   rM   r   rM   )	r7   r8   r9   rx   rK   rl   rX   r[   r   r   s   @r<   rt   r  [  s        %% ;?"(,@D#%)"&!!	 	 	 	 	 	 	>	 	 	 	 	 	 	 	 	r;   rt   c                  "     e Zd Zd
d fd	Z xZS )Combo.OutputNFr   rK   r   r  	list[str]r   c                f    t                                          ||||           ||ng | _        d S rU   r   rX   r  )rW   r   r   r  r   r   r   s         r<   rX   zCombo.Output.__init__  s5    GGRwGGG&-&977rDLLLr;   )NNNNF)r   rK   r   rK   r  r  r   rK   )r7   r8   r9   rX   r   r   s   @r<   r   r    sM        	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Br;   r   N)r7   r8   r9   rK   rl   r   rt   r   r:   r;   r<   r   r   X  sx        D* * * * * * * *XB B B B B B B B B Br;   r   c                  H    e Zd ZdZee         Z G d dej                  ZdS )
MultiCombozQMultiselect Combo input (dropdown for selecting potentially more than one value).c                  2     e Zd Z	 	 	 dd fdZ fdZ xZS )MultiCombo.InputNFr   rK   r  r  r   r   r   rM   r   r   chipr   r   r   r   r   c                    t                                          ||||||||
||||           d| _        || _        |	| _        |  d S )N)r   r   r   r   T)r   rX   r  r   r  )rW   r   r  r   r   r   r   r   r   r  r   r   r   r   r   r   s                  r<   rX   zMultiCombo.Input.__init__  sx     GGR,'4QXZp  ~H  U_  jr  }E  F  F  F#D*DDI###r;   c           	         t                                                      t          dt          | j        | j        d          i          z  S )Nmulti_select)r   r  )r   r[   r)   r   r  r   s    r<   r[   zMultiCombo.Input.as_dict  sU     77??$$z
#'#3 I, , ! !3 ( (  r;   r   )r   rK   r  r  r   rK   r   rK   r   rM   r   r  r   rK   r  rM   r   r   r   rM   r   rM   r   rM   r7   r8   r9   rX   r[   r   r   s   @r<   rt   r    sl         C JN`d	$ 	$ 	$ 	$ 	$ 	$ 	$	 	 	 	 	 	 	 	 	r;   rt   N)	r7   r8   r9   rx   listrK   rl   r   rt   r:   r;   r<   r  r    sO        [[9D         r;   r  IMAGEc                      e Zd Zej        ZdS )ImageNr7   r8   r9   torchTensorrl   r:   r;   r<   r  r            <DDDr;   r  WAN_CAMERA_EMBEDDINGc                      e Zd Zej        ZdS )WanCameraEmbeddingNr  r:   r;   r<   r%  r%    r"  r;   r%  WEBCAMc                  .    e Zd ZeZ G d de          ZdS )Webcamc                  .     e Zd ZdZeZ	 	 dd fdZ xZS )Webcam.InputzWebcam input.NFr   rK   r   r   r   rM   r   r   r   r   c                `    t                                          |||||||d d ||	|
           d S rU   r   rX   )rW   r   r   r   r   r   r   r   r   r   r   r   s              r<   rX   zWebcam.Input.__init__  sR     GGRx$Q[]acgisu}  @H  I  I  I  I  Ir;   )	NFNNNNNNN)r   rK   r   rK   r   rK   r   rM   r   rK   r   rM   r   rM   r   rM   )r7   r8   r9   rx   rK   rl   rX   r   r   s   @r<   rt   r*    sb        @E TX	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Ir;   rt   Nr   r:   r;   r<   r(  r(    sM        DI I I I I I I I I Ir;   r(  MASKc                      e Zd Zej        ZdS )MaskNr  r:   r;   r<   r/  r/    r"  r;   r/  LATENTc                  2    e Zd ZdZ G d de          ZeZdS )Latentz#Latents are stored as a dictionary.c                  :    e Zd ZU ded<   	 ded<   ded<   ded<   d	S )
Latent.LatentDicttorch.TensorsamplesNotRequired[torch.Tensor]
noise_maskNotRequired[list[int]]batch_indexNotRequired[str]r   Nr7   r8   r9   rm   r:   r;   r<   
LatentDictr4    sE         ----++++IIr;   r=  N)r7   r8   r9   rx   r   r=  rl   r:   r;   r<   r2  r2    sM        --J J J J JY J J J DDDr;   r2  CONDITIONINGc                  X    e Zd Z G d de          Zeeej        ef                  Z	e	Z
dS )Conditioningc                     e Zd ZU ded<   	 ded<   	 ded<   	 ded<   	 ded	<   	 d
ed<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded<   	 ded <   	 d!ed"<   	 ded#<   	 ded$<   	 ded%<   	 ded&<   	 d'ed(<   	 d'ed)<   	 ded*<   	 d'ed+<   	 d'ed,<   	 d'ed-<   	 d'ed.<   	 d/ed0<   	 ded1<   	 d'ed2<   	 ded3<   	 d4ed5<   	 ded6<   	 ded7<   	 d8ed9<   	 d8ed:<   	 d'ed;<   	 d'ed<<   	 ded=<   	 d>ed?<   	 ded@<   	 dedA<   	 dedB<   	 dCedD<   	 dedE<   	 dedF<   dGS )HConditioning.PooledDictr5  pooled_outputzNotRequired[ControlNet]controlzNotRequired[bool]control_apply_to_uncondr7  cross_attn_controlnetpooled_output_controlnetzDNotRequired[tuple[str, Gligen, list[tuple[torch.Tensor, int, ...]]]]gligenz5NotRequired[tuple[int, ...] | tuple[str, float, ...]]areazNotRequired[float]strengthmaskmask_strengthset_area_to_boundsconcat_latent_imageconcat_maskconcat_imagenoise_augmentationzNotRequired[HookGroup]hooksr   start_percentend_percentclip_start_percentclip_end_percentattention_maskzNotRequired[tuple[int, ...]]attention_mask_img_shapezNotRequired[list[dict]]unclip_conditioningconditioning_lyricsseconds_startseconds_totallyrics_strengthzNotRequired[int]widthheightaesthetic_scorecrop_wcrop_htarget_widthtarget_heightzNotRequired[list[torch.Tensor]]reference_latentsguidanceguiding_frame_index
ref_latentr9  keyframe_idxs
frame_ratestable_cascade_priorzNotRequired[list[float]]	elevationazimuthmotion_bucket_idfpsaugmentation_levelzNotRequired[ClipVisionOutput_]clip_vision_outputvace_frames	vace_maskvace_strengthzNotRequired[Any]camera_conditionstime_dim_concattime_dim_replaceNr<  r:   r;   r<   
PooledDictrB    sD        ####&((((22222j8888=;;;;ATTTT.CCCC	e 	%$$$@'''',))))E---- 	a66666....6////0....0%%%%,"""" 	S))))p''''n....},,,,{1111G>>>>G44446666!))))"))))"++++#T    T++++1    )    )&&&&)'''')::::&$$$$;----+----+----&&&&7777$++++))))****&&....&::::&....,,,,))))++++!2222*3333%%r;   rx  N)r7   r8   r9   r   rx  r  tupler   r!  CondListrl   r:   r;   r<   r@  r@    s^        q& q& q& q& q&Y q& q& q&f E%,
234HDDDr;   r@  SAMPLERc                      e Zd ZereZdS dS )r   N)r7   r8   r9   r   r   rl   r:   r;   r<   r   r   D  s%          r;   r   SIGMASc                      e Zd Zej        ZdS )SigmasNr  r:   r;   r<   r  r  I  r"  r;   r  NOISEc                      e Zd Zej        ZdS )NoiseNr  r:   r;   r<   r  r  M  r"  r;   r  GUIDERc                      e Zd ZereZdS dS )GuiderN)r7   r8   r9   r   r   rl   r:   r;   r<   r  r  Q  %          r;   r  r   c                      e Zd ZereZdS dS )ClipN)r7   r8   r9   r   r   rl   r:   r;   r<   r  r  V  s%          r;   r  CONTROL_NETc                      e Zd ZereZdS dS )r   N)r7   r8   r9   r   r   rl   r:   r;   r<   r   r   [  %          r;   r   r   c                      e Zd ZereZdS dS )VaeN)r7   r8   r9   r   r   rl   r:   r;   r<   r  r  `  s%          r;   r  MODELc                      e Zd ZereZdS dS )ModelN)r7   r8   r9   r   r   rl   r:   r;   r<   r  r  e  s%          r;   r  BACKGROUND_REMOVALc                      e Zd ZereZdS dS )BackgroundRemovalN)r7   r8   r9   r   r   rl   r:   r;   r<   r  r  j  s%         &%& &r;   r  CLIP_VISIONc                      e Zd ZereZdS dS )
ClipVisionN)r7   r8   r9   r   r   rl   r:   r;   r<   r  r  o  s%          r;   r  CLIP_VISION_OUTPUTc                      e Zd ZereZdS dS )ClipVisionOutputN)r7   r8   r9   r   ClipVisionOutput_rl   r:   r;   r<   r  r  t  %         ! ! !r;   r  STYLE_MODELc                      e Zd ZereZdS dS )r    N)r7   r8   r9   r   StyleModel_rl   r:   r;   r<   r    r    y  s%          r;   r    GLIGENc                      e Zd ZdZereZdS dS )Gligenz0ModelPatcher that wraps around a 'Gligen' model.N)r7   r8   r9   rx   r   r   rl   r:   r;   r<   r  r  ~  s+        ::  r;   r  UPSCALE_MODELc                      e Zd ZereZdS dS )UpscaleModelN)r7   r8   r9   r   r   rl   r:   r;   r<   r  r    s%         $#$ $r;   r  LATENT_UPSCALE_MODELc                      e Zd ZeZdS )LatentUpscaleModelNr7   r8   r9   r   rl   r:   r;   r<   r  r            DDDr;   r  AUDIOc                  .    e Zd Z G d de          ZeZdS )Audioc                  $    e Zd ZU ded<   ded<   dS )Audio.AudioDictr5  waveformrQ   sampler_rateNr<  r:   r;   r<   	AudioDictr    s*         r;   r  N)r7   r8   r9   r   r  rl   r:   r;   r<   r  r    s?            I    DDDr;   r  VIDEOc                      e Zd ZereZdS dS )VideoN)r7   r8   r9   r   r!   rl   r:   r;   r<   r  r    r  r;   r  r0   c                      e Zd ZeZdS )r0   N)r7   r8   r9   _SVGrl   r:   r;   r<   r0   r0             DDDr;   
LORA_MODELc                  ,    e Zd Zeeej        f         ZdS )	LoraModelN)r7   r8   r9   dictrK   r   r!  rl   r:   r;   r<   r  r    s        U\!"DDDr;   r  LOSS_MAPc                  .    e Zd Z G d de          ZeZdS )LossMapc                      e Zd ZU ded<   dS )LossMap.LossMapDictzlist[torch.Tensor]lossNr<  r:   r;   r<   LossMapDictr    s               r;   r  N)r7   r8   r9   r   r  rl   r:   r;   r<   r  r    s=        ! ! ! ! !i ! ! !DDDr;   r  r.   c                      e Zd ZeZdS )VoxelN)r7   r8   r9   r.   rl   r:   r;   r<   r  r            DDDr;   r  r-   c                      e Zd ZeZdS )MeshN)r7   r8   r9   r-   rl   r:   r;   r<   r  r    r  r;   r  r/   c                      e Zd ZeZdS )SplatN)r7   r8   r9   r/   rl   r:   r;   r<   r  r    r  r;   r  FILE_3Dc                      e Zd ZdZeZdS )	File3DAnyz7General 3D file type - accepts any supported 3D format.Nr7   r8   r9   rx   r1   rl   r:   r;   r<   r  r    s        AADDDr;   r  FILE_3D_GLBc                      e Zd ZdZeZdS )	File3DGLBzBGLB format 3D file - binary glTF, best for web and cross-platform.Nr  r:   r;   r<   r  r    s        LLDDDr;   r  FILE_3D_GLTFc                      e Zd ZdZeZdS )
File3DGLTFz>GLTF format 3D file - JSON-based glTF with external resources.Nr  r:   r;   r<   r  r    s        HHDDDr;   r  FILE_3D_FBXc                      e Zd ZdZeZdS )	File3DFBXz9FBX format 3D file - best for game engines and animation.Nr  r:   r;   r<   r  r    s        CCDDDr;   r  FILE_3D_OBJc                      e Zd ZdZeZdS )	File3DOBJz,OBJ format 3D file - simple geometry format.Nr  r:   r;   r<   r  r    s        66DDDr;   r  FILE_3D_STLc                      e Zd ZdZeZdS )	File3DSTLz*STL format 3D file - best for 3D printing.Nr  r:   r;   r<   r  r            44DDDr;   r  FILE_3D_USDZc                      e Zd ZdZeZdS )
File3DUSDZz&USDZ format 3D file - Apple AR format.Nr  r:   r;   r<   r  r    s        00DDDr;   r  FILE_3D_PLYc                      e Zd ZdZeZdS )	File3DPLYz3PLY format 3D file - point cloud or Gaussian splat.Nr  r:   r;   r<   r  r    s        ==DDDr;   r  FILE_3D_SPLATc                      e Zd ZdZeZdS )File3DSPLATz)SPLAT format 3D file - 3D Gaussian splat.Nr  r:   r;   r<   r  r    s        33DDDr;   r  FILE_3D_SPZc                      e Zd ZdZeZdS )	File3DSPZz2SPZ format 3D file - compressed 3D Gaussian splat.Nr  r:   r;   r<   r  r    s        <<DDDr;   r  FILE_3D_KSPLATc                      e Zd ZdZeZdS )File3DKSPLATz*KSPLAT format 3D file - 3D Gaussian splat.Nr  r:   r;   r<   r  r    r  r;   r  FILE_3D_SPLAT_ANYc                      e Zd ZdZeZdS )File3DSplatAnyzmGeneral 3D Gaussian splat file type - accepts any supported splat container (.ply / .spz / .splat / .ksplat).Nr  r:   r;   r<   r  r    s        wwDDDr;   r  FILE_3D_POINT_CLOUD_ANYc                      e Zd ZdZeZdS )File3DPointCloudAnyz]General point cloud file type - accepts any supported point cloud container (currently .ply).Nr  r:   r;   r<   r  r    s        ggDDDr;   r  HOOKSc                      e Zd ZereZdS dS )HooksN)r7   r8   r9   r   r   rl   r:   r;   r<   r  r    r  r;   r  HOOK_KEYFRAMESc                      e Zd ZereZdS dS )HookKeyframesN)r7   r8   r9   r   r   rl   r:   r;   r<   r  r    r  r;   r  TIMESTEPS_RANGEc                  &    e Zd ZdZeeef         ZdS )TimestepsRangez9Range defined by start and endpoint, between 0.0 and 1.0.N)r7   r8   r9   rx   ry  rQ   rl   r:   r;   r<   r  r    s!        CCc?DDDr;   r  LATENT_OPERATIONc                  8    e Zd Zeej        gej        f         ZdS )LatentOperationN)r7   r8   r9   r   r   r!  rl   r:   r;   r<   r  r    s#        U\NEL01DDDr;   r  FLOW_CONTROLc                  "    e Zd Zeeef         ZdS )FlowControlN)r7   r8   r9   ry  rK   r   rl   r:   r;   r<   r  r    s         c?DDDr;   r  ACCUMULATIONc                  .    e Zd Z G d de          ZeZdS )Accumulationc                      e Zd ZU ded<   dS )Accumulation.AccumulationDictz	list[Any]accumNr<  r:   r;   r<   AccumulationDictr    s         r;   r  N)r7   r8   r9   r   r  rl   r:   r;   r<   r  r    s=            9   DDDr;   r  LOAD3D_CAMERAc                  .    e Zd Z G d de          ZeZdS )Load3DCamerac                  t    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   d
ed<   d
ed<   d
ed<   ded<   dS )Load3DCamera.CameraInfodict[str, float | int]positiontargetzfloat | intzoomrK   
cameraTypez#NotRequired[dict[str, float | int]]
quaternionzNotRequired[float | int]fovaspectnearfarfrustumNr<  r:   r;   r<   
CameraInfor  $  s         ((((&&&&7777%%%%((((&&&&%%%%444444r;   r  N)r7   r8   r9   r   r  rl   r:   r;   r<   r  r  "  s?        5 5 5 5 5Y 5 5 5 DDDr;   r  LOAD3D_MODEL_INFOc                  :    e Zd Z G d de          Zee         ZdS )Load3DModelInfoc                  .    e Zd ZU ded<   ded<   ded<   dS ) Load3DModelInfo.Model3DTransformr  r  r  scaleNr<  r:   r;   r<   Model3DTransformr  6  s6         ((((****%%%%%%r;   r   N)r7   r8   r9   r   r   r  rl   r:   r;   r<   r  r  4  sE        & & & & &9 & & &  !DDDr;   r  LOAD_3Dc                  2    e Zd ZdZ G d de          ZeZdS )Load3Dz%3D models are stored as a dictionary.c                  L    e Zd ZU ded<   ded<   ded<   ded<   ded<   d	ed
<   dS )Load3D.Model3DDictrK   rC   rK  normalr  camera_infor;  	recordingz3NotRequired[list[Load3DModelInfo.Model3DTransform]]model_3d_infoNr<  r:   r;   r<   Model3DDictr%  B  sQ         


			,,,,####JJJJJJr;   r*  N)r7   r8   r9   rx   r   r*  rl   r:   r;   r<   r#  r#  ?  sM        //K K K K Ki K K K DDDr;   r#  LOAD_3D_ANIMATIONc                      e Zd ZdS )Load3DAnimationNr   r:   r;   r<   r-  r-  M  s        Cr;   r-  
PHOTOMAKERc                      e Zd ZeZdS )
PhotomakerNr  r:   r;   r<   r0  r0  R  r  r;   r0  POINTc                      e Zd ZeZdS )PointNr  r:   r;   r<   r3  r3  W  r  r;   r3  FACE_ANALYSISc                      e Zd ZeZdS )FaceAnalysisNr  r:   r;   r<   r6  r6  [  r  r;   r6  BBOXc                      e Zd ZeZdS )r7  Nr  r:   r;   r<   r7  r7  _  r  r;   SEGSc                      e Zd ZeZdS )r9  Nr  r:   r;   r<   r9  r9  c  r  r;   *c                      e Zd ZeZdS )AnyTypeNr  r:   r;   r<   r=  r=  g  r  r;   r=  MODEL_PATCHc                      e Zd ZeZdS )
ModelPatchNr  r:   r;   r<   r@  r@  k  r  r;   r@  AUDIO_ENCODERc                      e Zd ZeZdS )AudioEncoderNr  r:   r;   r<   rC  rC  o  r  r;   rC  AUDIO_ENCODER_OUTPUTc                      e Zd ZeZdS )AudioEncoderOutputNr  r:   r;   r<   rF  rF  s  r  r;   rF  TRACKSc                  .    e Zd Z G d de          ZeZdS )Tracksc                  $    e Zd ZU ded<   ded<   dS )Tracks.TrackDictr5  
track_pathtrack_visibilityNr<  r:   r;   r<   	TrackDictrK  y  s*             &&&&&&r;   rN  N)r7   r8   r9   r   rN  rl   r:   r;   r<   rI  rI  w  s?        ' ' ' ' 'I ' ' ' DDDr;   rI  COMFY_MULTITYPED_V3c                  .    e Zd ZeZ G d de          ZdS )	MultiTypec                  N     e Zd ZdZdd fdZedd            Zd Z fdZ xZ	S )MultiType.Inputz
        Input that permits more than one input type; if `id` is an instance of `ComfyType.Input`, then that input will be used to create a widget (if applicable) with overridden values.
        NFr   str | Inputtypes#list[type[_ComfyType] | _ComfyType]r   rK   r   r   rM   r   r   c
           
        d | _         t          |t                    rt          j        |          | _         |j        du r|j        n|}|j        |j        n|}|j        |j        n|}|j        |j        n|}|j        }t          | j         t                    r#| j         
                                | j         _        t                                          ||||||||	           || _        d S NT)input_overrider}   rt   copyr   r   r   r   r   r   r   r   r   rX   	_io_types)rW   r   rU  r   r   r   r   r   r   r   r   s             r<   rX   zMultiType.Input.__init__  s    "&D"e$$ 	X&*imm#*,+*=*=2;;8(*
(>"**G24/2MrS_"$'"5rww4Ud1;?? X6:6I6U6U6W6WD'3GGRx$
T\^fggg"DNNNr;   rr   list[type[Input]]c                    g }| j         D ]I}t          |          s#|                    t          |                     4|                    |           J|S )zF
            Returns list of Input class types permitted.
            )r[  r(   appendr   )rW   io_typesxs      r<   r_  zMultiType.Input.io_types  s]    
 H^ ' '{{ 'OODGG,,,,OOA&&&&Or;   c                    d | j         D             }| j        -|                    d| j                                                   d                    t          t                              |                              S )Nc                    g | ]	}|j         
S r:   r   ry   r`  s     r<   r
  z/MultiType.Input.get_io_type.<locals>.<listcomp>  s    :::q:::r;   r   ,)r_  rY  insertr   joinr  r  fromkeys)rW   	str_typess     r<   r   zMultiType.Input.get_io_type  sk    ::DM:::I".  D$7$C$C$E$EFFF88Dy!9!9::;;;r;   c                    | j         :| j                                         t                                                      z  S t                                                      S rU   )rY  r[   r   r   s    r<   r[   zMultiType.Input.as_dict  sH    ".*2244uww7H7HHHww(((r;   r   )r   rT  rU  rV  r   rK   r   rK   r   rM   r   rM   r   rM   )rr   r\  )
r7   r8   r9   rx   rX   r   r_  r   r[   r   r   s   @r<   rt   rS    s        	 		# 	# 	# 	# 	# 	# 	#  

	 
	 
	 

		< 	< 	<	) 	) 	) 	) 	) 	) 	) 	) 	)r;   rt   N)r7   r8   r9   r   rl   rt   r:   r;   r<   rQ  rQ  ~  sC        D,) ,) ,) ,) ,) ,) ,) ,) ,) ,)r;   rQ  COMFY_MATCHTYPE_V3c                  `    e Zd Z G d d          Z G d de          Z G d de          ZdS )	MatchTypec                       e Zd ZefddZd ZdS )	MatchType.Templatetemplate_idrK   allowed_types_ComfyType | list[_ComfyType]c                B   || _         t          |t                    s|g}|D ]u}t          |t                    s2t          |t                    st          d|j        j                   It          |t                    st          d|j                   v|| _	        d S )Nz?Allowed types must be a ComfyType or a list of ComfyTypes, got )
ro  r}   r   r   rj   
ValueErrorr   r7   r~   rp  )rW   ro  rp  ts       r<   rX   zMatchType.Template.__init__  s    *DmX66 0!." y y!!T** y%a44 C(  *Bklkvk  *B  *B  C  C  CC &a44 y()wklku)w)wxxxy!.Dr;   c                Z    | j         d                    d | j        D                       dS )Nrd  c                    g | ]	}|j         
S r:   r   )ry   rt  s     r<   r
  z.MatchType.Template.as_dict.<locals>.<listcomp>  s    *Q*Q*Q19*Q*Q*Qr;   )ro  rp  )ro  rf  rp  rZ   s    r<   r[   zMatchType.Template.as_dict  s8    #/!$*Q*Qd>P*Q*Q*Q!R!R  r;   N)ro  rK   rp  rq  )r7   r8   r9   r=  rX   r[   r:   r;   r<   Templatern    s?        \c 	/ 	/ 	/ 	/ 	/	 	 	 	 	r;   rw  c                  .     e Zd Z	 dd fdZ fdZ xZS )MatchType.InputNFr   rK   templatern  r   r   r   rM   r   r   c
           
     f    t                                          ||||||||	           || _        d S rU   r   rX   rz  )rW   r   rz  r   r   r   r   r   r   r   r   s             r<   rX   zMatchType.Input.__init__  s6    GGRx$
T\^fggg$DMMMr;   c                    t                                                      t          d| j                                        i          z  S Nrz  r   r[   r)   rz  r   s    r<   r[   zMatchType.Input.as_dict  B    77??$$zDM11333 ( (  r;   r   )r   rK   rz  rn  r   rK   r   rK   r   rM   r   rM   r   rM   r  r   s   @r<   rt   ry    sb         VZ	% 	% 	% 	% 	% 	% 	%
	 	 	 	 	 	 	 	 	r;   rt   c                  0     e Zd Z	 	 dd fd	Z fd
Z xZS )MatchType.OutputNFrz  rn  r   rK   r   r   c                j    |s|sd}t                                          ||||           || _        d S )N	MATCHTYPEr|  )rW   rz  r   r   r   r   r   s         r<   rX   zMatchType.Output.__init__  s@     +l +*GGRwGGG$DMMMr;   c                    t                                                      t          d| j                                        i          z  S r~  r  r   s    r<   r[   zMatchType.Output.as_dict  r  r;   r   )rz  rn  r   rK   r   rK   r   rK   r  r   s   @r<   r   r    sa        lp$)	% 	% 	% 	% 	% 	% 	%	 	 	 	 	 	 	 	 	r;   r   N)r7   r8   r9   rw  rt   r   r:   r;   r<   rl  rl    s               *	 	 	 	 	 	 	 	         r;   rl  c                      e Zd ZdZdS )DynamicInputz8
    Abstract class for dynamic input registration.
    Nr7   r8   r9   rx   r:   r;   r<   r  r              	Dr;   r  c                      e Zd ZdZdS )DynamicOutputz9
    Abstract class for dynamic output registration.
    Nr  r:   r;   r<   r  r    r  r;   r  prefix_listlist[str] | Noner   
str | Noner  c                    | g } || |gz   } | S rU   r:   r  r   s     r<   handle_prefixr    s$    	~!RD(r;   c                P    | |J | |S || |gz   } d                     |           S )N.)rf  r  s     r<   finalize_prefixr    s?    #

3		!RD(88K   r;   COMFY_AUTOGROW_V3c                      e Zd Zeeef         ZdZ G d d          Z G d de          Z	 G d de          Z
 G d d	e          Zedd            ZdS )Autogrowd   c                  8    e Zd ZddZddZd Zdd
Zd Zd ZdS )Autogrow._AutogrowTemplater4   rt   c                    t          |t                    rJ t          j        |          | _        t          | j        t                    rd| j        _        g | _        i | _        d S rX  )r}   r  rZ  r4   r   r   namescached_inputsrW   r4   s     r<   rX   z#Autogrow._AutogrowTemplate.__init__  s\    !%667765))DJ$*k22 .)-
&$&DJ!#Dr;   namerK   c                F    t          j         | j                  }||_        |S rU   )rZ  r4   r   )rW   r4   r  	new_inputs       r<   _create_inputz(Autogrow._AutogrowTemplate._create_input
  s     	$*--IILr;   c                `    | j         D ]%}|                     | j        |          | j        |<   &d S rU   )r  r  r4   r  )rW   r  s     r<   _create_cached_inputsz0Autogrow._AutogrowTemplate._create_cached_inputs  sC    
 P P+/+=+=dj$+O+O"4((P Pr;   rr   r   c                N    t          | j                                                  S rU   )r  r  valuesrZ   s    r<   r   z"Autogrow._AutogrowTemplate.get_all  s    *1133444r;   c                J    t          dt          | j        g          i          S )Nr4   )r)   create_input_dict_v1r4   rZ   s    r<   r[   z"Autogrow._AutogrowTemplate.as_dict  s+    -tzl;;   r;   c                8    | j                                          d S rU   )r4   r   rZ   s    r<   r   z#Autogrow._AutogrowTemplate.validate  s    J!!!!!r;   N)r4   rt   )r4   rt   r  rK   r   )	r7   r8   r9   rX   r  r  r   r[   r   r:   r;   r<   _AutogrowTemplater     s        	$ 	$ 	$ 	$	 	 	 	
	P 	P 	P	5 	5 	5 	5	 	 	
	" 	" 	" 	" 	"r;   r  c                  ,     e Zd Zdd fd
Z fdZ xZS )Autogrow.TemplatePrefixr,   
   r4   rt   prefixrK   r   rQ   r   c                ,    t                                          |           | _        |dk    sJ |dk    sJ |t          j        k    sJ | _        | _         fdt           j                  D              _         	                                 d S )Nr   r,   c                &    g | ]}j          | S r:   )r  )ry   irW   s     r<   r
  z4Autogrow.TemplatePrefix.__init__.<locals>.<listcomp>'  s&    GGG!T[-!--GGGr;   )
r   rX   r  r  	_MaxNamesr   r   ranger  r  )rW   r4   r  r   r   r   s   `    r<   rX   z Autogrow.TemplatePrefix.__init__  s    GGU### DK!8888!8888(,,,,,DHDHGGGGuTXGGGDJ&&(((((r;   c                    t                                                      t          | j        | j        | j        d          z  S )N)r  r   r   )r   r[   r)   r  r   r   r   s    r<   r[   zAutogrow.TemplatePrefix.as_dict*  sC    77??$$z+xx3 3 ( (  r;   )r,   r  )r4   rt   r  rK   r   rQ   r   rQ   r  r   s   @r<   TemplatePrefixr    s[        		) 		) 		) 		) 		) 		) 		)	 	 	 	 	 	 	 	 	r;   r  c                  ,     e Zd Zd
d fdZ fd	Z xZS )Autogrow.TemplateNamesr,   r4   rt   r  r  r   rQ   c                    t                                          |           |d t          j                 | _        |dk    sJ || _        |                                  d S Nr   )r   rX   r  r  r  r   r  )rW   r4   r  r   r   s       r<   rX   zAutogrow.TemplateNames.__init__2  s\    GGU###2 223DJ!8888DH&&(((((r;   c                ~    t                                                      t          | j        | j        d          z  S )N)r  r   )r   r[   r)   r  r   r   s    r<   r[   zAutogrow.TemplateNames.as_dict9  s>    77??$$zx3 3 ( (  r;   r,   )r4   rt   r  r  r   rQ   r  r   s   @r<   TemplateNamesr  1  s[        	) 	) 	) 	) 	) 	) 	)	 	 	 	 	 	 	 	 	r;   r  c                  <     e Zd Z	 dd fdZ fdZddZd Z xZS )Autogrow.InputNFr   rK   rz  0Autogrow.TemplatePrefix | Autogrow.TemplateNamesr   r   r   rM   c                b    t                                          ||||||           || _        d S rU   r|  )	rW   r   rz  r   r   r   r   r   r   s	           r<   rX   zAutogrow.Input.__init__@  s0    GGRx$
SSS$DMMMr;   c                    t                                                      t          d| j                                        i          z  S r~  r  r   s    r<   r[   zAutogrow.Input.as_dictE  r  r;   rr   r   c                <    | g| j                                         z   S rU   )rz  r   rZ   s    r<   r   zAutogrow.Input.get_allJ  s    6DM113333r;   c                8    | j                                          d S rU   )rz  r   rZ   s    r<   r   zAutogrow.Input.validateM  s    M""$$$$$r;   NFNNN)
r   rK   rz  r  r   rK   r   rK   r   rM   r   )r7   r8   r9   rX   r[   r   r   r   r   s   @r<   rt   r  ?  s        lp	% 	% 	% 	% 	% 	% 	%
	 	 	 	 	
	4 	4 	4 	4	% 	% 	% 	% 	% 	% 	%r;   rt   out_dictdict[str, Any]live_inputsr   tuple[str, dict[str, Any]]
input_typerK   curr_prefixr  c                   d|d         d         v }d|d         d         v }|d         d         d         }|r8|d         d         d         }|d         d         d         }	t          |	          }
nY|rW|d         d         d         |d         d         d         }|d         d         d         }
fdt          |
          D             }	d }d	}|                                D ]F\  }}t          |          d
k    rt          |                                          d
         }|dk    } |t          d          i }d}t          |	          D ]k\  }}t          ||          }||k     r$|r"|| d         |<   |                    di           }n!|| d         |<   |                    di           }||v r|||<   d	}l|s/t          |          }|| d         |<   t          j
        | d         |<   t          | |||           d S )Nr  r,   rz  r  r4   r   r   c                    g | ]} | 	S r:   r:   )ry   r  r  s     r<   r
  z7Autogrow._expand_schema_for_dynamic.<locals>.<listcomp>_  s!    888^^^888r;   Tr   requiredz[template_input could not be determined from required or optional; this should never happen.Fr   dynamic_pathsdynamic_paths_default_value)lenr  r   r  r  	Exception	enumerater  
setdefaultDynamicPathsDefaultValue
EMPTY_DICTparse_class_inputs)r  r  r   r  r  is_names	is_prefixr4   r   r  r   template_inputtemplate_required_input_type
dict_inputnew_dictnew_dict_added_tor  r  expected_id	type_dictfinalized_prefixr  s                         @r<   _expand_schema_for_dynamicz#Autogrow._expand_schema_for_dynamicP  sU    uQx
33q*!55	a$W- 	9(:&u-C!HZ(1Ee**CC 	91Xj)(3F(:&u-C(:&u-C8888U3ZZ888E ',{{}} 	 	#K:!##!*"3"3"5"566q9N +z 9!yzzz! '' 	) 	)GAt)+t<<K3ww,w4B$[1$//
B??		 5C$[1$//
B??	k))"0	$$(!  	l.{;;:JH_%&67H`HkH234DE8[(KHHHHHr;   N
r  r  r  r  r   r  r  rK   r  r  )r7   r8   r9   r  rK   r   rl   r  r  r  r  r  rt   staticmethodr  r:   r;   r<   r  r    s        S>DI" " " " " " " "<    *   &    )   % % % % % % % %" 1I 1I 1I \1I 1I 1Ir;   r  COMFY_DYNAMICCOMBO_V3c                  p    e Zd Zeeef         Z G d d          Z G d de          Z	e
dd            ZdS )DynamicComboc                      e Zd ZddZd ZdS )	DynamicCombo.OptionkeyrK   inputsr   c                "    || _         || _        d S rU   r  r  )rW   r  r  s      r<   rX   zDynamicCombo.Option.__init__  s    DH DKKKr;   c                :    | j         t          | j                  dS )Nr  )r  r  r  rZ   s    r<   r[   zDynamicCombo.Option.as_dict  s#    x.t{;;  r;   N)r  rK   r  r   r\   r:   r;   r<   Optionr    s7        	! 	! 	! 	!	 	 	 	 	r;   r  c                  <     e Zd Z	 dd fdZddZ fdZd Z xZS )DynamicCombo.InputNFr   rK   r  list[DynamicCombo.Option]r   r   r   rM   c                b    t                                          ||||||           || _        d S rU   r  )	rW   r   r  r   r   r   r   r   r   s	           r<   rX   zDynamicCombo.Input.__init__  s0    GGRx$
SSS"DLLLr;   rr   r   c                ,    | gd | j         D             z   S )Nc                &    g | ]}|j         D ]}|S r:   )r  )ry   optionr4   s      r<   r
  z.DynamicCombo.Input.get_all.<locals>.<listcomp>  s'    YYYv6=YY%UYYYYr;   )r  rZ   s    r<   r   zDynamicCombo.Input.get_all  s     6YYYYYYYr;   c                    t                                                      t          dd | j        D             i          z  S )Nr  c                6    g | ]}|                                 S r:   )r[   ry   os     r<   r
  z.DynamicCombo.Input.as_dict.<locals>.<listcomp>  s     >>>AAIIKK>>>r;   )r   r[   r)   r  r   s    r<   r[   zDynamicCombo.Input.as_dict  sE    77??$$z>>>>>3 ( (  r;   c                V    | j         D ] }|j        D ]}|                                 !d S rU   )r  r  r   )rW   r  r4   s      r<   r   zDynamicCombo.Input.validate  sF    , % %#] % %ENN$$$$%% %r;   r  )
r   rK   r  r  r   rK   r   rK   r   rM   r   r7   r8   r9   rX   r   r[   r   r   r   s   @r<   rt   r    s        ko	# 	# 	# 	# 	# 	# 	#
	Z 	Z 	Z 	Z	 	 	 	 	
	% 	% 	% 	% 	% 	% 	%r;   rt   r  r  r  r   r  r  rK   r  r  c                   t          |          }||v rs||         }d }|d         d         }|D ]}	|	d         |k    r|	} n|Ft          | ||d         |           || |         |<   t          ||d                   | d         |<   d S d S d S )Nr,   r  r  r  r  r  r  )
r  r  r   r  r  finalized_idr  selected_optionr  r  s
             r<   r  z'DynamicCombo._expand_schema_for_dynamic  s    &{33;&&l+C"O=B1Xi=PG!  %=C''&,OE ( *"8[/(:SU`aaa5:$\2:I+WbceWf:g:g),777 '& +*r;   Nr  )r7   r8   r9   r  rK   r   rl   r  r  rt   r  r  r:   r;   r<   r  r    s        S>D	 	 	 	 	 	 	 	% % % % % % % %( h h h \h h hr;   r  COMFY_DYNAMICSLOT_V3c                  V    e Zd Zeeef         Z G d de          Ze	dd            Z
dS )DynamicSlotc                  <     e Zd Z	 dd fdZddZ fdZd Z xZS )DynamicSlot.InputNslotrt   r  r   r   rK   r   r   rM   c                \   t          |t                    rJ t          j        |          | _        |j        |j        n|| j        _        d}|j        |j        n|| j        _        |j        |j        n|| j        _        |j        |j        n|| j        _        t                      	                    |j
        | j        j        || j        j        | j        j        | j        j                   || _        d | _        t          | j        t                    rd| _        d| j        _        d S d S rX  )r}   r  rZ  r  r   r   r   r   r   rX   r   r  r   r   )	rW   r  r  r   r   r   r   r   r   s	           r<   rX   zDynamicSlot.Input.__init__  s   !$55665	$DI:>:K:WT%6%6]iDI"H040HgDI*.)*?TYYTDIN6:o6Q4??WaDI GGTWdi&<h	HY[_[d[ikoktk  A  A  A DK#D$)[11 -#' (,	%%%- -r;   rr   c                "    | j         g| j        z   S rU   )r  r  rZ   s    r<   r   zDynamicSlot.Input.get_all  s    I;,,r;   c                    t                                                      t          t          | j                                                  t          | j                  | j        d          z  S )N)slotTyper  r   )	r   r[   r)   rK   r  r   r  r  r   r   s    r<   r[   zDynamicSlot.Input.as_dict  s`    77??$$z	 5 5 7 788.t{;;".3 3 ( (  r;   c                t    | j                                          | j        D ]}|                                 d S rU   )r  r   r  r  s     r<   r   zDynamicSlot.Input.validate  sD    I    ! !    ! !r;   )NNNN)
r  rt   r  r   r   rK   r   rK   r   rM   r   r  r   s   @r<   rt   r    s        [_	- 	- 	- 	- 	- 	- 	-"	- 	- 	- 	-	 	 	 	 		! 	! 	! 	! 	! 	! 	!r;   rt   r  r  r  r   r  r  rK   r  r  c                    t          |          }||v rL|d         d         }t          | |||           || |         |<   t          ||d                   | d         |<   d S d S )Nr,   r  r  r  r  )r  r  r   r  r  r   r  s          r<   r  z&DynamicSlot._expand_schema_for_dynamic  sy    &{33;&&1Xh'FxfkJJJ16HZ .6EkS^_aSb6c6cH_%l333 '&r;   Nr  )r7   r8   r9   r  rK   r   rl   r  rt   r  r  r:   r;   r<   r  r    sr        S>D! ! ! ! ! ! ! !B d d d \d d dr;   r  IMAGECOMPAREc                  .    e Zd ZeZ G d de          ZdS )ImageComparec                  0     e Zd Z	 	 dd fdZ fdZ xZS )ImageCompare.InputNFTr   rK   r   r   r   rM   r   c                `    t                                          ||||d d |d d d d |           d S rU   r,  )rW   r   r   r   r   r   r   r   s          r<   rX   zImageCompare.Input.__init__  s<    
''

2|XwdJX\^bdhjnpx
y
y
y
y
yr;   c                D    t                                                      S rU   r   r[   r   s    r<   r[   zImageCompare.Input.as_dict      ""
"r;   )NFNTN)
r   rK   r   rK   r   rK   r   rM   r   rM   r  r   s   @r<   rt   r    sh        W[9=z z z z z z z# # # # # # # # #r;   rt   N)r7   r8   r9   r  rl   r   rt   r:   r;   r<   r  r    sC        	$# # # # #k # # # # #r;   r  COLORc                  .    e Zd ZeZ G d de          ZdS )Colorc                  0     e Zd Z	 	 dd fdZ fdZ xZS )Color.InputNFT#ffffffr   rK   r   r   r   rM   r   r   c                d    t                                          ||||d ||d d d d |           |  d S rU   r,  )	rW   r   r   r   r   r   r   r   r   s	           r<   rX   zColor.Input.__init__  sB    
''

2|Xwgz[_aegkmqs{
|
|
|



r;   c                D    t                                                      S rU   r  r   s    r<   r[   zColor.Input.as_dict  r  r;   )NFNTNr  )r   rK   r   rK   r   rK   r   rM   r   rM   r   rK   r  r   s   @r<   rt   r    sa        W[LU      
# # # # # # # # #r;   rt   Nr   r:   r;   r<   r  r    sC        	$# # # # #k # # # # #r;   r  BOUNDING_BOXc                  J    e Zd Z G d de          ZeZ G d de          ZdS )BoundingBoxc                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )BoundingBox.BoundingBoxDictrQ   r`  yr^  r_  Nr<  r:   r;   r<   BoundingBoxDictr#    s4         


r;   r%  c                  0     e Zd Z	 	 dd fdZ fdZ xZS )BoundingBox.InputNFTr   rK   r   r   r   rM   r   r  	componentr   c	           	         t                                          ||||d ||           || _        || _        |ddddd| _        d S d S )Nr   i   )r`  r$  r^  r_  )r   rX   r(  r   r   )
rW   r   r   r   r   r   r   r(  r   r   s
            r<   rX   zBoundingBox.Input.__init__  sZ    GGRx$Q[\\\&DN*D%&QLL r;   c                    t                                                      }| j        r
| j        |d<   | j        
| j        |d<   |S )Nr(  r   )r   r[   r(  r   rW   dr   s     r<   r[   zBoundingBox.Input.as_dict  sE    !!A~ 0!%++"&"2,Hr;   )NFNTNNN)r   rK   r   rK   r   rK   r   rM   r   r  r(  rK   r   rM   r  r   s   @r<   rt   r'    sh        Y]gk	M 	M 	M 	M 	M 	M 	M	 	 	 	 	 	 	 	 	r;   rt   N)r7   r8   r9   r   r%  rl   r   rt   r:   r;   r<   r!  r!    so            )   
 D         r;   r!  CURVEc                  >    e Zd ZddlmZ ereZ G d de          Z	dS )Curver   )
CurvePointc                  0     e Zd Z	 	 dd fdZ fdZ xZS )Curve.InputNFTr   rK   r   r   r   rM   r   list[tuple[float, float]]r   c                z    t                                          ||||d ||d d d d |           |ddg| _        d S d S )N)        r5  )      ?r6  )r   rX   r   )	rW   r   r   r   r   r   r   r   r   s	           r<   rX   zCurve.Input.__init__$  sS    GGRx$Q[]acgimosu}~~~ *J7 r;   c                    t                                                      }| j        d | j        D             dd|d<   |S )Nc                ,    g | ]}t          |          S r:   )r  )ry   ps     r<   r
  z'Curve.Input.as_dict.<locals>.<listcomp>-  s    *I*I*Iq477*I*I*Ir;   monotone_cubic)pointsinterpolationr   )r   r[   r   r+  s     r<   r[   zCurve.Input.as_dict*  sE    !!A|'*I*IDL*I*I*I\lmm)Hr;   )NFNTNN)r   rK   r   rK   r   rK   r   rM   r   r3  r   rM   r  r   s   @r<   rt   r2  #  sa        Y]dh	8 	8 	8 	8 	8 	8 	8	 	 	 	 	 	 	 	 	r;   rt   N)
r7   r8   r9   comfy_api.inputr0  r   CurveInput_rl   r   rt   r:   r;   r<   r/  r/    s]        ******          r;   r/  	HISTOGRAMc                  "    e Zd ZdZee         ZdS )	Histogramz0A histogram represented as a list of bin counts.N)r7   r8   r9   rx   r  rQ   rl   r:   r;   r<   rA  rA  1  s        ::9DDDr;   rA  RANGEc                  >    e Zd ZddlmZ ereZ G d de          ZdS )Ranger   )
RangeInputc                  >     e Zd Z	 	 	 	 	 	 	 	 	 dd fdZ fdZ xZS )Range.InputNFTr   rK   r   r   r   rM   r   r  r   r   r  show_midpointmidpoint_scale	value_minr   	value_maxr   c                    t                                          ||||d ||d d d d |           |
ddd| _        || _        || _        |	| _        |
| _        || _        || _        d S )Nr5  r6  )r   r   )	r   rX   r   r   r   rH  rI  rJ  rK  )rW   r   r   r   r   r   r   r   r   rH  rI  rJ  rK  r   r   s                 r<   rX   zRange.Input.__init__>  s~     GGRx$Q[]acgimosu}~~~'*377"DL"0D!.D"0D&DN&DNNNr;   c           
         t                                                      t          | j        | j        | j        | j        | j        | j        d          z  S )N)r   r   rH  rI  rJ  rK  )	r   r[   r)   r   r   rH  rI  rJ  rK  r   s    r<   r[   zRange.Input.as_dictQ  sU    77??$$z<"&"5!%!3"&"5!^!^3 3 ( (  r;   )NFNTNNNNNNNN)r   rK   r   rK   r   rK   r   rM   r   r  r   rK   r   r  rH  rM   rI  rK   rJ  r   rK  r   r   rM   r  r   s   @r<   rt   rG  =  sv        Y]:>"&*.)-)-&*&*$(	' 	' 	' 	' 	' 	' 	'&	 	 	 	 	 	 	 	 	r;   rt   N)	r7   r8   r9   r=  rE  r   rl   r   rt   r:   r;   r<   rD  rD  7  s]        ******          r;   rD  zndict[str, Callable[[dict[str, Any], dict[str, Any], tuple[str, dict[str, Any]], str, list[str] | None], None]]DYNAMIC_INPUT_LOOKUPfunccCallable[[dict[str, Any], dict[str, Any], tuple[str, dict[str, Any]], str, list[str] | None], None]c                    |t           | <   d S rU   rN  )rk   rO  s     r<   register_dynamic_input_funcrS  ]  s    $(!!!r;   c                    t           |          S rU   rR  r   s    r<   get_dynamic_input_funcrU  `  s    ((r;   c                     t          t          j        t          j                   t          t          j        t          j                   t          t
          j        t
          j                   d S rU   )rS  r  rk   r  r  r  r:   r;   r<   setup_dynamic_input_funcsrW  c  sJ     0(2UVVV 4l6]^^^ 3[5[\\\\\r;   c                  >    e Zd ZU ded<   	 ded<   	 ded<   	 ded<   dS )V3Datar  hidden_inputsr  r  rM   create_dynamic_tupleNr<  r:   r;   r<   rY  rY  n  sN         !!!!l!!!!y//// MXXr;   rY  c                  N    e Zd Zdd	ZddZedd            Zedd            ZdS )HiddenHolder	unique_idrK   promptr   extra_pnginfo	dynpromptauth_token_comfy_orgapi_key_comfy_orgc                d    || _         	 || _        	 || _        	 || _        	 || _        	 || _        d S rU   r^  r_  r`  ra  rb  rc  )rW   r^  r_  r`  ra  rb  rc  r   s           r<   rX   zHiddenHolder.__init__y  sU     # 	~{* 	l" 	z$8!h!2 	F  	Fr;   r  c                    dS )z*If hidden variable not found, return None.Nr:   )rW   r  s     r<   __getattr__zHiddenHolder.__getattr__  s    tr;   r,  dict | Nonec                   |i } | |                     t          j        d           |                     t          j        d           |                     t          j        d           |                     t          j        d           |                     t          j        d           |                     t          j        d                     S )Nre  )getHiddenr^  r_  r`  ra  rb  rc  )rq   r,  s     r<   	from_dictzHiddenHolder.from_dict  s    9AseeF,d3355--%% 4d;;eeF,d33!"v'BD!I!IeeF$<dCC
 
 
 	
r;   v3_dataV3Data | Nonerr   c                @    |                      |r|d         nd           S )NrZ  )rl  )rq   rm  s     r<   from_v3_datazHiddenHolder.from_v3_data  s#    }}JW_55dKKKr;   N)r^  rK   r_  r   r`  r   ra  r   rb  rK   rc  rK   )r  rK   )r,  rh  )rm  rn  rr   r]  )r7   r8   r9   rX   rg  classmethodrl  rp  r:   r;   r<   r]  r]  x  s        F F F F     

 

 

 [

 L L L [L L Lr;   r]  c                  4    e Zd ZdZdZ	 dZ	 dZ	 dZ	 dZ	 dZ	dS )	rk  z>
    Enumerator for requesting hidden variables in nodes.
    	UNIQUE_IDPROMPTEXTRA_PNGINFO	DYNPROMPTAUTH_TOKEN_COMFY_ORGAPI_KEY_COMFY_ORGN)
r7   r8   r9   rx   r^  r_  r`  ra  rb  rc  r:   r;   r<   rk  rk    sZ          I zFw#M hI v1d+ B  Br;   rk  c                  D   e Zd ZU dZded<   dZded<   dZded<   dZded	<   dZd
ed<   dZ	ded<   dZ
ded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dS ) 
NodeInfoV1Nr  r4   zdict[str, list[str]]input_orderrM   is_input_listr  r5   z
list[bool]output_is_listoutput_nameoutput_tooltipsoutput_matchtypesrK   r  r   descriptionr   python_modulecategoryoutput_node
deprecatedexperimentaldev_onlyapi_noderh  price_badgesearch_aliasesessentials_categoryhas_intermediate_output)r7   r8   r9   r4   rm   r{  r|  r5   r}  r~  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r:   r;   r<   rz  rz    s        E&*K****MF#N####K#O####!%%%%%DNNNNLKMHKJLHH#K####"N""""!!!!!"&&&&&&&r;   rz  c                      e Zd ZU  ee          Zded<    ee          Zded<    ee          Zded<   ddZ	ddZ
dS )PriceBadgeDependsdefault_factoryr  widgetsr  input_groupsrr   Nonec                   t          | j        t                    rt          d | j        D                       rt	          d          t          | j        t                    rt          d | j        D                       rt	          d          t          | j        t                    rt          d | j        D                       rt	          d          d S )Nc              3  B   K   | ]}t          |t                     V  d S rU   r}   rK   rc  s     r<   	<genexpr>z-PriceBadgeDepends.validate.<locals>.<genexpr>  s0      4b4bPQAs9K9K5K4b4b4b4b4b4br;   z.PriceBadgeDepends.widgets must be a list[str].c              3  B   K   | ]}t          |t                     V  d S rU   r  rc  s     r<   r  z-PriceBadgeDepends.validate.<locals>.<genexpr>  s/      3`3`q
1c8J8J4J3`3`3`3`3`3`r;   z-PriceBadgeDepends.inputs must be a list[str].c              3  B   K   | ]}t          |t                     V  d S rU   r  rc  s     r<   r  z-PriceBadgeDepends.validate.<locals>.<genexpr>  s0      9l9lUVjC>P>P:P9l9l9l9l9l9lr;   z3PriceBadgeDepends.input_groups must be a list[str].)r}   r  r  anyrs  r  r  rZ   s    r<   r   zPriceBadgeDepends.validate  s    $,-- 	O4b4bUYUa4b4b4b1b1b 	OMNNN$+t,, 	N3`3`TXT_3`3`3`0`0` 	NLMMM$+T22 	Tc9l9lZ^Zk9l9l9l6l6l 	TRSSS	T 	Tr;   schema_inputslist['Input']r  c           
        i }|D ]g}|                                 }|                                ||j        <   |dd          D ]*}|j         d|j         }|                                ||<   +hg }| j        D ]X}||vr4t	          d| dt          |                                                     |                    |||         d           Y|| j        | j	        dS )Nr,   r  z9PriceBadge depends_on.widgets references unknown widget 'z'. Available widgets: )r  r   )r  r  r  )
r   r   r   r  rs  r  keysr^  r  r  )	rW   r  input_typesinp
all_inputs
nested_inpprefixed_idwidgets_dataws	            r<   r[   zPriceBadgeDepends.as_dict  s?   &(  	D 	DCJ"%//"3"3K(n D D
 "%99*-99+5+A+A+C+CK((	D .0 	E 	EA## EPQ E E*.{/?/?/A/A*B*BE E   KN C CDDDD $k -
 
 	
r;   Nrr   r  r  r  rr   r  )r7   r8   r9   r
   r  r  rm   r  r  r   r[   r:   r;   r<   r  r    s         t444G4444d333F3333#eD999L9999T T T T
 
 
 
 
 
r;   r  c                  n    e Zd ZU ded<    ee          Zded<    ed          Zded<   ddZddZ	dS )
PriceBadgerK   exprr  r  
depends_onjsonata)r   enginerr   r  c                   | j         dk    rt          d| j          d          t          | j        t                    r| j                                        st          d          | j                                         d S )Nr  zUnsupported PriceBadge.engine 'z'. Only 'jsonata' is supported.z+PriceBadge.expr must be a non-empty string.)r  rs  r}   r  rK   stripr  r   rZ   s    r<   r   zPriceBadge.validate  s}    ;)##kt{kkklll$)S)) 	L1B1B 	LJKKK  """""r;   r  r  r  c                R    | j         | j                            |          | j        dS )N)r  r  r  )r  r  r[   r  )rW   r  s     r<   r[   zPriceBadge.as_dict  s.    k/11-@@I
 
 	
r;   Nr  r  )
r7   r8   r9   rm   r
   r  r  r  r   r[   r:   r;   r<   r  r    s         III$)E:K$L$L$LJLLLL%	***F****# # # #
 
 
 
 
 
r;   r  c                     e Zd ZU dZded<   	 dZded<   	 dZded<   	  ee          Z	d	ed
<    ee          Z
ded<    ee          Zded<   dZded<   	  ee          Zded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZd ed!<   	 dZded"<   	 d# Zd$ Zd(d'ZdS ))Schemaz!Definition of V3 node properties.rK   node_idNr   sdr  r  r   r  zlist[Output]outputszlist[Hidden]hidden r  r  r  FrM   r|  is_output_nodeis_deprecatedis_experimentalis_dev_onlyis_api_nodezPriceBadge | Noner  not_idempotentenable_expandaccept_all_inputsr  r  r  c                   g }| j         D ]>}t          |t                    s'|                    |                                           ?d |D             }d | j        D             }t          |          }t          |          }g }t          |          t          |          k    rB|                    dd t          |          
                                D              d           t          |          t          |          k    rB|                    dd t          |          
                                D              d           t          |          dk    r"t          d	                    |                    | j         D ]}|                                 | j        D ]}|                                 | j        | j                                         d
S d
S )zValidate the schema:
        - verify ids on inputs and outputs are unique - both internally and in relation to each other
        c                    g | ]	}|j         
S r:   r   )ry   r  s     r<   r
  z#Schema.validate.<locals>.<listcomp>V  s    111aQT111r;   c                    g | ]	}|j         
S r:   r  r  s     r<   r
  z#Schema.validate.<locals>.<listcomp>W  s    111qad111r;   zInput ids must be unique, but c                $    g | ]\  }}|d k    |S r  r:   ry   itemcounts      r<   r
  z#Schema.validate.<locals>.<listcomp>]  s(    ;|;|;|[T5rwz{r{r{Dr{r{r{r;   z	 are not.zOutput ids must be unique, but c                $    g | ]\  }}|d k    |S r  r:   r  s      r<   r
  z#Schema.validate.<locals>.<listcomp>_  s(    <~<~<~kdEty|}t}t}Tt}t}t}r;   r   
N)r  r}   r  extendr   r  setr  r^  r   r   rs  rf  r   r  )	rW   nested_inputsr4   	input_ids
output_ids	input_set
output_setissuesr5   s	            r<   r   zSchema.validateN  s    &([ 	6 	6Ee\22 6$$U]]__55511=111	11DL111
	NN	__
y>>S^^++MM  H;|;|T[\eTfTfTlTlTnTn;|;|;|  H  H  H  I  I  Iz??c*oo--MM  J<~<~U\]gUhUhUnUnUpUp<~<~<~  J  J  J  K  K  Kv;;??TYYv..///[ 	 	ENNl 	 	FOO'%%''''' ('r;   c                   | j         g | _         | j        g | _        | j        g | _        | j        rnt          j        | j        vr$| j                            t          j                   t          j        | j        vr$| j                            t          j                   | j        rnt          j	        | j        vr$| j                            t          j	                   t          j
        | j        vr$| j                            t          j
                   t          | j                  D ]\  }}|j        d| d|j         d|_         dS )zVAdd hidden based on selected schema options, and give outputs without ids default ids.N_)r  r  r  r  rk  rb  r^  rc  r  r_  r`  r  r   rk   )rW   r  r5   s      r<   finalizezSchema.finalizej  s5    ;DK<DL;DK 	=*$+==""6#>???'t{::""6#;<<< 	9}DK//""6=111#4;66""6#7888"4<00 	6 	6IAvy 555FN555		6 	6r;   rr   rz  c           
     H   t          | j                  }| j        r.| j        D ]&}|j        f|                    di           |j        <   'g }g }g }g }g }d}	| j        r| j        D ]}
|                    |
j                   |                    |
j	                   |                    |
j
        r|
j
        n|
j                   |                    |
j        r|
j        nd            t          |
t          j                  r"|                    |
j        j                   d}	|                    d            |	sd }t#          di d|dd |                                D             d| j        d|d	|d
|d|d|d| j        d| j
        d| j        d| j        d| j        d| j        d| j        d| j        d| j        d| j        dt;          |dd          d| j        | j                            | j                  nd d| j         r| j         nd d| j!        }|S )Nr  FTr4   r{  c                X    i | ]'\  }}|t          |                                          (S r:   )r  r  )ry   r  r   s      r<   r|   z&Schema.get_v1_info.<locals>.<dictcomp>  s.    SSS\c5d5::<<00SSSr;   r|  r5   r}  r~  r  r  r  r   r  r  r  r  r  r  r  r  r  RELATIVE_PYTHON_MODULEnodesr  r  r  r:   )"r  r  r  r   r  r  r  r^  rk   r   r   r   r}   rl  r   rz  ro  rz  r   r|  r  r  r  r  r  r  r  r  r  getattrr  r[   r  r  )rW   rq   r4   r  r5   r}  r~  r  r  any_matchtypesr  infos               r<   get_v1_infozSchema.get_v1_info  s   $T[11; 	N+ N N?E|o  2..v{;;< 	3\ 
3 
3ai(((%%a&6777""Q^#R1>>SSS&&AI'Gqyy4HHHa!122 3%,,QZ-CDDD%)NN%,,T2222  	% $ 
 
 
%
SSU[[]]SSSS
 ,,
 6	

 *>
 $
 ,O
 0/
 
 **
 ]]
 ((
 ++
 %)$@$@
 ))
  --!
" %%#
$ %%%
& "#'?III'
( BFAQA](00===cg)
* 372EO4..4+
, !% 8 8-
0 r;   )rr   rz  )r7   r8   r9   rx   rm   r   r  r
   r  r  r  r  r  r  r|  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r:   r;   r<   r  r  
  s        ++LLLzLH?%555F5555!E$777G7777 5666F6666KK %d ; ; ;N;;;;hM	 N	 MjOcK[K`%)K))))LN mMW!!!!!x&*****z"'''''( ( (86 6 646 6 6 6 6 6r;   r  Fr,  r  r  tuple[dict[str, Any], V3Data]c                f   i i i i d}|                                  } |                     dd           }t          |||            ||r||d<   i }|                    dd           }|t          |          dk    r||d<   |                    dd           }|t          |          dk    r||d<   |||fS )N)r  r   r  r  r  r  r   r  )rZ  popr  r  )r,  r  include_hiddenr  r  rm  r  r  s           r<   get_finalized_class_inputsr    s    ')	 H 	
AUU8T""Fxa000n#GLL$77M S%7%7!%;%;#0 "*,,/Ld"S"S".37R3S3SVW3W3W1L-.VW$$r;   r  	curr_dictr  r  c           	     >   |                                 D ]\  }}|                                 D ]m\  }}|d         }|t          v r/t          |          }	t          ||          }
 |	| ||||
           Et	          ||          }|| |         |<   |r|| d         |<   nd S )Nr   r  )r   rN  rU  r  r  )r  r  r  r  r  inner_dr   r   rk   dynamic_input_func
new_prefixr   s               r<   r  r    s    (00 K K
G  	K 	KIBAhG...%;G%D%D"*;;;
""8[%ZXXXX  /{B??5:$\2 K>JH_-l;	KK Kr;   r  r   r  c                8    di i}| D ]}t          ||           |S )Nr  )add_to_dict_v1)r  r4   r  s      r<   r  r    s7    BE  ! !q%    Lr;   r  c                    | j         rdnd}|                                 }|                    dd            |                                 |f|                    |i           | j        <   d S )Nr   r  )r   r[   r  r   r  r   )r  r,  r  r[   s       r<   r  r    s`    

2**
CiikkGKK
D!!!#$==??G"<ALLb!$r;   c                      e Zd ZdZdS )r  
empty_dictN)r7   r8   r9   r  r:   r;   r<   r  r    s        JJJr;   r  r  rm  c                h   |                     dd           }|                     di           }|| S |                                 } i }|                     dd          }|                                D ]\  }}|                    d          }|}	t	          |          D ]\  }
}|
t          |          dz
  k    }|rL|                     |d           }|(|                     |d           }|t          j        k    ri }|r||f}||	|<   i|		                    |i           }	| 
                    |           | S )Nr  r  r[  Fr  r,   )rj  rZ  r   splitr  r  r  r  r  r  update)r  rm  pathsdefault_value_dictresultcreate_tupler  pathpartscurrentr  r9  is_lastr   default_options                  r<   build_nested_inputsr    sR   KK..E %BBGG}[[]]FF;;5u==L[[]] 4 4	T

3e$$ 	4 	4DAqCJJN*G 4

3--=%7%;%;C%F%FN%)A)LLL " )"CLE"

!,,Q33	4  MM&Mr;   c                     e Zd ZU dZdZdZdZded<   ee	d/d                        Z
ee	d0d	                        Zed1d            Zed2d            Zed3d            Zd Zed             Zeed                         Zed             Zeed0d                        Zeed0d                        Zeed4d                        Zeed5d                        ZdZeed                         ZdZeed                         ZdZeed                         ZdZeed                         Z dZ!eed                          Z"dZ#eed!                         Z$dZ%eed"                         Z&dZ'eed#                         Z(dZ)eed$                         Z*dZ+eed%                         Z,dZ-eed&                         Z.dZ/eed'                         Z0dZ1eed(                         Z2dZ3eed)                         Z4dZ5eed*                         Z6eed6d,                        Z7eed-                         Z8eed/d.                        Z9dS )7_ComfyNodeBaseInternalz]Common base class for storing internal methods and properties; DO NOT USE for defining nodes.Nr]  r  rr   r  c                    t           z?Override this function with one that returns a Schema instance.NotImplementedErrorrq   s    r<   define_schemaz$_ComfyNodeBaseInternal.define_schema!  
     "!r;   
NodeOutputc                    t           z=Override this function with one that performs node's actions.r  rq   r   s     r<   executez_ComfyNodeBaseInternal.execute'  r  r;   
bool | strc                    t           )zOptionally, define this function to validate inputs; equivalent to V1's VALIDATE_INPUTS.

        If the function returns a string, it will be used as the validation error message for the node.
        r  r  s     r<   validate_inputsz&_ComfyNodeBaseInternal.validate_inputs-  s
     "!r;   r   c                    t           )zOptionally, define this function to fingerprint inputs; equivalent to V1's IS_CHANGED.

        If this function returns the same value as last run, the node will not be executed.r  r  s     r<   fingerprint_inputsz)_ComfyNodeBaseInternal.fingerprint_inputs5  s
    
 "!r;   r  c                     fdD             S )  Optionally, define this function to return a list of input names that should be evaluated.

        This basic mixin impl. requires all inputs.

        :kwargs: All node inputs will be included here.  If the input is ``None``, it should be assumed that it has not yet been evaluated.              When using ``INPUT_IS_LIST = True``, unevaluated will instead be ``(None,)``.

        Params should match the nodes execution ``FUNCTION`` (self, and all inputs by name).
        Will be executed repeatedly until it returns an empty list, or all requested items were already evaluated (and sent as params).

        Comfy Docs: https://docs.comfy.org/custom-nodes/backend/lazy_evaluation#defining-check-lazy-status
        c                $    g | ]}|         
|S rU   r:   ry   r  r   s     r<   r
  z<_ComfyNodeBaseInternal.check_lazy_status.<locals>.<listcomp>J  "    @@@6$<+?+?+?+?r;   r:   r  s    `r<   check_lazy_statusz(_ComfyNodeBaseInternal.check_lazy_status<        A@@@@@@@r;   c                8    | j                                          d S rU   )r   VALIDATE_CLASSrZ   s    r<   rX   z_ComfyNodeBaseInternal.__init__L  s    %%'''''r;   c                    t           S rU   )r  r  s    r<   GET_BASE_CLASSz%_ComfyNodeBaseInternal.GET_BASE_CLASSO  s    %%r;   c                    t          | d          t          d| j         d          t          | d          t          d| j         d          d S )Nr   z5No define_schema function was defined for node class r  r  z/No execute function was defined for node class )r'   r  r7   r  s    r<   r  z%_ComfyNodeBaseInternal.VALIDATE_CLASSS  sf     sO44<cTWT`cccdddsI..6]cl]]]^^^ 76r;   c                <    t          j        | j                  rdS dS )NEXECUTE_NORMALIZED_ASYNCEXECUTE_NORMALIZED)inspectiscoroutinefunctionr  r  s    r<   FUNCTIONz_ComfyNodeBaseInternal.FUNCTION[  s#    &s{33 	.--##r;   c                    | j         |i |}|t                      }nt          |t                    rnt          |t                    r
t          | }nzt          |t                    rt                              |          }nJt          |t                    rt          |j                  }nt          dt          |                     |j
        $| j        j        st          d| j         d          |S Nblock_executionzInvalid return type from node: zNode z~ is not expandable, but expand included in NodeOutput; developer should set enable_expand=True on node's Schema to allow this.r  r  r}   ry  r  rl  r+   messager  r   expandSCHEMAr  r7   rq   argsr   	to_returns       r<   r  z)_ComfyNodeBaseInternal.EXECUTE_NORMALIZEDa  s     CK000	"II	:.. 		Q	5)) 	Q"I.II	4(( 	Q",,Y77II	#344 	Q"93DEEEIIOd9ooOOPPP'
0H'  qCL  q  q  q  r  r  rr;   c                  K    | j         |i | d {V }|t                      }nt          |t                    rnt          |t                    r
t          | }nzt          |t                    rt                              |          }nJt          |t                    rt          |j                  }nt          dt          |                     |j
        $| j        j        st          d| j         d          |S r  r"  r&  s       r<   r  z/_ComfyNodeBaseInternal.EXECUTE_NORMALIZED_ASYNCu  s.      &#+t6v66666666	"II	:.. 		Q	5)) 	Q"I.II	4(( 	Q",,Y77II	#344 	Q"93DEEEIIOd9ooOOPPP'
0H'  qCL  q  q  q  r  r  rr;   rm  rn  type[ComfyNode]c                    t          |           r| nt          |           }t          |          }t                              |          |_        |S )z<Creates clone of real node class to prevent monkey-patching.)r(   r   r*   r]  rp  r  )rq   rm  c_type
type_clones       r<   PREPARE_CLASS_CLONEz*_ComfyNodeBaseInternal.PREPARE_CLASS_CLONE  sG     *2#"E##DII&9&&A&A
(55g>>
r;   r  c                r    |                                  }|                    |           }t          |          S rU   )
GET_SCHEMAr  r   rq   schemar  s      r<   GET_NODE_INFO_V1z'_ComfyNodeBaseInternal.GET_NODE_INFO_V1  s2     !!!!#&&d||r;   c                F    | j         |                                  | j         S rU   )_DESCRIPTIONr0  r  s    r<   DESCRIPTIONz"_ComfyNodeBaseInternal.DESCRIPTION  &     #NNr;   c                F    | j         |                                  | j         S rU   )	_CATEGORYr0  r  s    r<   CATEGORYz_ComfyNodeBaseInternal.CATEGORY  $     = NN}r;   c                F    | j         |                                  | j         S rU   )_EXPERIMENTALr0  r  s    r<   EXPERIMENTALz#_ComfyNodeBaseInternal.EXPERIMENTAL  &     $NN  r;   c                F    | j         |                                  | j         S rU   )_DEPRECATEDr0  r  s    r<   
DEPRECATEDz!_ComfyNodeBaseInternal.DEPRECATED  s$     ?"NNr;   c                F    | j         |                                  | j         S rU   )	_DEV_ONLYr0  r  s    r<   DEV_ONLYz_ComfyNodeBaseInternal.DEV_ONLY  r;  r;   c                F    | j         |                                  | j         S rU   )	_API_NODEr0  r  s    r<   API_NODEz_ComfyNodeBaseInternal.API_NODE  r;  r;   c                F    | j         |                                  | j         S rU   )_OUTPUT_NODEr0  r  s    r<   OUTPUT_NODEz"_ComfyNodeBaseInternal.OUTPUT_NODE  r7  r;   c                F    | j         |                                  | j         S rU   )_HAS_INTERMEDIATE_OUTPUTr0  r  s    r<   HAS_INTERMEDIATE_OUTPUTz._ComfyNodeBaseInternal.HAS_INTERMEDIATE_OUTPUT  s&     '/NN++r;   c                F    | j         |                                  | j         S rU   )_INPUT_IS_LISTr0  r  s    r<   INPUT_IS_LISTz$_ComfyNodeBaseInternal.INPUT_IS_LIST  s&     %NN!!r;   c                F    | j         |                                  | j         S rU   )_OUTPUT_IS_LISTr0  r  s    r<   OUTPUT_IS_LISTz%_ComfyNodeBaseInternal.OUTPUT_IS_LIST  &     &NN""r;   c                F    | j         |                                  | j         S rU   )_RETURN_TYPESr0  r  s    r<   RETURN_TYPESz#_ComfyNodeBaseInternal.RETURN_TYPES  r?  r;   c                F    | j         |                                  | j         S rU   )_RETURN_NAMESr0  r  s    r<   RETURN_NAMESz#_ComfyNodeBaseInternal.RETURN_NAMES  r?  r;   c                F    | j         |                                  | j         S rU   )_OUTPUT_TOOLTIPSr0  r  s    r<   OUTPUT_TOOLTIPSz&_ComfyNodeBaseInternal.OUTPUT_TOOLTIPS  s&     'NN##r;   c                F    | j         |                                  | j         S rU   )_NOT_IDEMPOTENTr0  r  s    r<   NOT_IDEMPOTENTz%_ComfyNodeBaseInternal.NOT_IDEMPOTENT  rU  r;   c                F    | j         |                                  | j         S rU   )_ACCEPT_ALL_INPUTSr0  r  s    r<   ACCEPT_ALL_INPUTSz(_ComfyNodeBaseInternal.ACCEPT_ALL_INPUTS  s&     !)NN%%r;   dict[str, dict]c                b    |                                  }|                    |           }|j        S rU   )FINALIZE_SCHEMAr  r4   r1  s      r<   INPUT_TYPESz"_ComfyNodeBaseInternal.INPUT_TYPES  s0     $$&&!!#&&zr;   c                V    |                                  }|                                 |S )z#Call define_schema and finalize it.)r   r  )rq   r2  s     r<   rg  z&_ComfyNodeBaseInternal.FINALIZE_SCHEMA  s*     ""$$r;   c                   |                                   |                                 }|                                 | j        |j        | _        | j        |j        | _        | j        |j        | _        | j	        |j
        | _	        | j        |j        | _        | j        |j        | _        | j        |j        | _        | j        |j        | _        | j        |j        | _        | j        |j        | _        | j        |j        | _        | j        g }g }g }g }|j        r|j        D ]}|                    |j                   |                    |j        r|j        n|j                   |                    |j                   |                    |j        r|j        nd           || _        || _         || _!        || _"        || _#        |S )zYValidate node class, finalize schema, validate schema, and set expected class properties.N)$r  rg  r   r5  r  r9  r  r=  r  rA  r  rD  r  rG  r  rJ  r  rM  r  rP  r|  r`  r  rc  r  rW  r  r^  rk   r   r   r   rZ  rS  r]  r%  )rq   r2  r5   r~  r}  r  r  s          r<   r0  z!_ComfyNodeBaseInternal.GET_SCHEMA#  s    	$$&&#%1C= "OCM$ & 6C?"$2CO= ".CM= ".CM#%4C'/+1+IC(%!'!5C&"("7C!)%+%=C"$FKN O~ M M MAMM!),,,&&'Vq~~QYWWW"))!*:;;;#**	+K199tLLLL &C +C"0C#2C 
r;   rr   r  rr   r  rr   r  rr   r   rr   r  )rm  rn  rr   r*  )rr   r  )rr   re  ):r7   r8   r9   rx   r  r%  r  rm   rq  r   r   r  r	  r  r  rX   r  r   r  r%   r  r  r  r.  r3  r5  r6  r9  r:  r=  r>  rA  rB  rD  rE  rG  rH  rJ  rK  rM  rN  rP  rQ  rS  rT  rW  rX  rZ  r[  r]  r^  r`  ra  rc  rd  rh  rg  r0  r:   r;   r<   r  r    s        gg!F  F" " " ^ [" " " " ^ [" " " " [" " " " [" A A A [A( ( ( & & [& _ _ [ U_ $ $ ]$
    [ U$    [ U$    [ U    [ U
 L
    ] U 
 I
  ] U
 M
! ! ] U!
 K
  ] U
 I
  ] U
 I
  ] U
 L
    ] U 
  $
, , ] U,
 N
" " ] U" O
# # ] U#
 M
! ! ] U!
 M
! ! ] U!
 
$ $ ] U$
 O
# # ] U#
 
& & ] U&
    [ U
   [ U - - - [ U- - -r;   r  c                      e Zd ZdZeedd                        Zeedd                        Zedd            Zedd
            Z	edd            Z
eed                         ZdS )	ComfyNodez#Common base class for all V3 nodes.rr   r  c                    t           r  r  r  s    r<   r   zComfyNode.define_schemaZ  r  r;   r  c                    t           r  r  r  s     r<   r  zComfyNode.execute`  r  r;   r  c                    t           )zXOptionally, define this function to validate inputs; equivalent to V1's VALIDATE_INPUTS.r  r  s     r<   r	  zComfyNode.validate_inputsf  
     "!r;   r   c                    t           )zVOptionally, define this function to fingerprint inputs; equivalent to V1's IS_CHANGED.r  r  s     r<   r  zComfyNode.fingerprint_inputsk  ru  r;   r  c                     fdD             S )r  c                $    g | ]}|         
|S rU   r:   r  s     r<   r
  z/ComfyNode.check_lazy_status.<locals>.<listcomp>~  r  r;   r:   r  s    `r<   r  zComfyNode.check_lazy_statusp  r  r;   c                    t           S )z>DO NOT override this class. Will break things in execution.py.)rq  r  s    r<   r  zComfyNode.GET_BASE_CLASS  s
     r;   Nrk  rl  rm  rn  ro  )r7   r8   r9   rx   rq  r   r   r  r	  r  r  r   r  r:   r;   r<   rq  rq  W  s        --" " " ^ [" " " " ^ [" " " " [" " " " [" A A A [A   [ U  r;   rq  c                  Z    e Zd ZdZddddddZed             Zedd            ZddZ	dS )r  zj
    Standardized output of a node; can pass in any number of args and/or a UIOutput into 'ui' kwarg.
    N)uir$  r!  r'  r   r{  _UIOutput | dictr$  r  r!  rK   c               >    || _         || _        || _        || _        d S rU   )r'  r{  r$  r!  )rW   r{  r$  r!  r'  s        r<   rX   zNodeOutput.__init__  s%    	.r;   c                D    t          | j                  dk    r| j        nd S r  )r  r'  rZ   s    r<   r  zNodeOutput.result  s     	NNQ..tyyD8r;   datar  rr   c                    d}d }d }d|v r0|d         }t          |t                    r | |j                  S |}d|v r|d         }d|v r|d         } | |||dS )Nr:   r  r   r{  r$  )r{  r$  )r}   r+   r#  )rq   r  r'  r{  r$  r  s         r<   rl  zNodeOutput.from_dict  s    t(^F&"233 ;s6>::::D4<<dBt(^FsDR////r;   c                    | j         |         S rU   )r'  )rW   indexs     r<   __getitem__zNodeOutput.__getitem__  s    yr;   )r'  r   r{  r|  r$  r  r!  rK   )r  r  rr   r  rn  )
r7   r8   r9   rx   rX   r   r  rq  rl  r  r:   r;   r<   r  r    s          9=4fj / / / / / / 9 9 X9 0 0 0 [0           r;   r  c                  ,    e Zd Zd Zedd            ZdS )	_UIOutputc                    d S rU   r:   rZ   s    r<   rX   z_UIOutput.__init__  r   r;   rr   r  c                    d S rU   r:   rZ   s    r<   r[   z_UIOutput.as_dict  s    r;   N)rr   r  )r7   r8   r9   rX   r   r[   r:   r;   r<   r  r    sC              ^  r;   r  c                  (    e Zd ZU dZded<   ded<   dS )InputMapOldIdz0Map an old node input to a new node input by ID.rK   new_idold_idNr7   r8   r9   rx   rm   r:   r;   r<   r  r    s(         ::KKKKKKKKr;   r  c                  (    e Zd ZU dZded<   ded<   dS )InputMapSetValuez*Set a specific value for a new node input.rK   r  r   	set_valueNr  r:   r;   r<   r  r    s(         44KKKNNNNNr;   r  c                  (    e Zd ZU dZded<   ded<   dS )	OutputMapz,Map outputs of node replacement via indexes.rQ   new_idxold_idxNr  r:   r;   r<   r  r    s(         66LLLLLLLLr;   r  c                  (    e Zd ZdZ	 	 	 dddZd ZdS )NodeReplaceaK  
    Defines a possible node replacement, mapping inputs and outputs of the old node to the new node.

    Also supports assigning specific values to the input widgets of the new node.

    Args:
        new_node_id: The class name of the new replacement node.
        old_node_id: The class name of the deprecated node.
        old_widget_ids: Ordered list of input IDs for widgets that may not have an input slot
            connected. The workflow JSON stores widget values by their relative position index,
            not by ID. This list maps those positional indexes to input IDs, enabling the
            replacement system to correctly identify widget values during node migration.
        input_mapping: List of input mappings from old node to new node.
        output_mapping: List of output mappings from old node to new node.
    Nnew_node_idrK   old_node_idold_widget_idsr  input_mappinglist[InputMap] | Noneoutput_mappinglist[OutputMap] | Nonec                L    || _         || _        || _        || _        || _        d S rU   r  r  r  r  r  )rW   r  r  r  r  r  s         r<   rX   zNodeReplace.__init__  s2     '&,*,r;   c                    | j         | j        | j        | j        rt	          | j                  nd| j        rt	          | j                  nddS )z;Create serializable representation of the node replacement.Nr  )r  r  r  r  r  r  rZ   s    r<   r[   zNodeReplace.as_dict  s]      ++"19=9KUT$"4555QU;?;NXd4#6777TX
 
 	
r;   )NNN)
r  rK   r  rK   r  r  r  r  r  r  )r7   r8   r9   rx   rX   r[   r:   r;   r<   r  r    sQ         $ *.-1/3- - - - -
 
 
 
 
r;   r  )er3   r>   rH   r^   rd   r   r   rt   r   r   r   r   r   r   r   r   r   r  r  r%  r(  r/  r2  r@  r   r  r  r  r  r   r  r  r@  r  r  r  rC  rF  r    r  r  r  r  r  r0   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r-  r0  r3  r6  r7  r9  r=  rQ  rI  r  rl  r  r  r]  rk  rz  r  rq  r  r  rY  r  r  r  r!  r/  rA  rD  r  )rk   rK   )rk   rK   rr   r   rU   )r  r  r   r  rr   r  )r  r  r   r  rr   rK   )rk   rK   rO  rP  )rk   rK   rr   rP  )F)r,  r  r  r  rr   r  )
r  r  r  r  r  r  r  r  rr   r  )r  r   rr   r  )r  rt   r,  r  )r  r  rm  rY  )
__future__r   rZ  r  abcr   r   collectionsr   collections.abcr   dataclassesr   r	   r
   enumr   typingr   r   r   r   r   r   typing_extensionsr   r   r   spandrelr   comfy.clip_visionr   r   r  comfy.bg_removal_modelr   comfy.controlnetr   comfy.hooksr   r   comfy.model_patcherr   comfy.samplersr   r   comfy.sdr   r   r    r  r=  r!   r"   r>  comfy_api.internalr#   r$   r%   r&   r'   r(   r)   r*   comfy_execution.graph_utilsr+   _utilr-   r.   r/   r0   r  r1   rK   r3   r>   rH   r^   rd   rj   r   rn   r   r   r   rt   r   r   r   r   r   r   r   r   r  r  r%  r(  r/  r2  r@  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r-  r0  r3  r6  r7  r9  r=  r@  rC  rF  rI  rQ  rl  r  r  r  r  r  r  r  r  r  r!  r/  rA  rD  rN  rm   rS  rU  rW  r  rY  r]  rk  rz  r  r  r  r  r  r  r  r  r  r  rq  r  r  r  r  InputMapr  r  __all__r:   r;   r<   <module>r     s   " " " " " " "   # # # # # # # #       $ $ $ $ $ $ 0 0 0 0 0 0 0 0 0 0       L L L L L L L L L L L L L L L L 0 0 0 0 0 0 0 0  F------111111============++++++8888888800000011111111""""""""222222EEEEEEEE% % % % % % % % % % % % % % % % % % % % 8 8 8 8 8 8 : : : : : : : : : : : : : :    d       d          6' ' ' ' 'C ' ' '    3          
 GCt' ' ' 'R                  (    F   >[ [ [ [ [% [ [ [2    V   (       
    *    9    k   & 5    +   2 7    K   8 8    [   * 71B 1B 1B 1B 1BK 1B 1B 1Bf 7       . 7    K    )***       +* 8
I 
I 
I 
I 
I[ 
I 
I 
I 6    ;    8	 	 	 	 	[ 	 	 	 >"""u u u u u; u u #"un 9    k    8    [    7    K    8    [    6    ;    =!!!       "! 5    +    7    K    '(((& & & & & & & )(& =!!!       "! '(((! ! ! ! !{ ! ! )(! =!!!       "! 8    [   
 ?###$ $ $ $ $; $ $ $#$ )***       +* 7    K    7    K    5    +    <   # # # # # # # ! # :    k   
 7    K    6    ;    7    K    9       
 =!!!       "!
 >"""       #"
 =!!!       "!
 =!!!       "!
 =!!!       "!
 >"""       #"
 =!!!       "!
 ?###    +   $#
 =!!!       "!
 #$$$    ;   %$
 &'''    [   ('
 ,---    +   .-
 7    K    #$$$! ! ! ! !K ! ! %$! $%%%    [   &% %&&&2 2 2 2 2k 2 2 '&2 >"""    +   #" >"""    ;   #" ?###    ;   $#" &'''" " " " "k " " ('" 9
 
 
 
 
[ 
 
 
 &'''    f   (' <          !  7    K    ?###    ;   $# 6    ;    6    ;    3    k    =!!!       "! ?###    ;   $# )***       +* 8    [    ())).) .) .) .) .) .) .) *).)` '(((, , , , , , , )(,\	 	 	 	 	5# 	 	 		 	 	 	 	FC 	 	 	    ! ! ! ! ! &'''FI FI FI FI FIz FI FI ('FIP *+++2h 2h 2h 2h 2h: 2h 2h ,+2hh )***,d ,d ,d ,d ,d* ,d ,d +*,d\ >"""	# 	# 	# 	# 	#: 	# 	# #"	# 7
# 
# 
# 
# 
#K 
# 
# 
# >"""    +   #"4 7    K   & ;        
 7! ! ! ! !K ! ! !H HJ   J  J  J  J) ) ) )) ) ) )] ] ] 3!!Y Y Y Y YY Y Y Y$L $L $L $L $L $L $L $LLB B B B BS$ B B B$ ' ' ' ' ' ' ' '2 '
 '
 '
 '
 '
 '
 '
 '
T 
 
 
 
 
 
 
 
( o o o o o o o ob% % % % %.K K K K K    = = = =              Fz z z z z/ z z z~	- - - - -& - - -`         $      B           I   
    y   
 ++    	   
%
 %
 %
 %
 %
 %
 %
 %
Pj j jr;   