
    3jf                   :   % S SK Jr  S SKrS SKrS SKJrJr  S SKJr  S SK	J
r
  S SKJrJrJr  S SKJr  S SKJrJrJrJrJrJr  S S	KJrJr  S SKr\(       aJ  S S
KJr  S SKJr  S SKJ r!  S SK"J#r#  S SK$J%r%  S SK&J'r'J(r(  S SK)J*r*  S SK+J,r,J-r-  S SK.J/r/J0r0  S SK.J1r2  S SK3J4r4J5r6  S SK7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?  S SK@JArA  SSKBJCrCJDrDJErEJFrGJHrH   " S S\I\5      rJ " S S\I\5      rK " S S5      rL " S S \I\5      rM " S! S"\I\5      rN " S# S$\5      rO\" S%\PS&9rQGSPS' jrRGSQS( jrS " S) S*5      rT " S+ S,\T5      rU " S- S.\U5      rV " S/ S0\T5      r  " S1 S2\O5      rW " S3 S4\W5      rX\R" S5S69 " S7 S8\X5      5       rY\R" S9S69 " S: S;\X5      5       rZ\R" S<S69 " S= S>\X5      5       r[\R" S?S69 " S@ SA\X5      5       r\\R" SBS69 " SC SD\X5      5       r]\R" SBS69 " SE SF\W5      5       r^\R" SGS69 " SH SI\X5      5       r_\R" SJS69 " SK SL\X5      5       r`\R" SMS69 " SN SO\X5      5       ra\R" SPS69 " SQ SR\X5      5       rb\R" SSS69 " ST SU\X5      5       rc\R" SVS69 " SW SX\X5      5       rd\R" SYS69 " SZ S[\X5      5       r-\R" S\S69 " S] S^\X5      5       re\R" S_S69 " S` Sa\X5      5       rf\R" SbS69 " Sc Sd\X5      5       rg\R" SeS69 " Sf Sg\X5      5       rh\R" ShS69 " Si Sj\X5      5       r%\R" SkS69 " Sl Sm\X5      5       ri\R" SnS69 " So Sp\X5      5       rj\R" SqS69 " Sr Ss\X5      5       rk\R" StS69 " Su Sv\X5      5       rl\R" SwS69 " Sx Sy\X5      5       rm\R" SzS69 " S{ S|\X5      5       r1\R" S}S69 " S~ S\X5      5       rn\R" SS69 " S S\X5      5       ro\R" SS69 " S S\X5      5       rp\R" SS69 " S S\X5      5       rq\R" SS69 " S S\X5      5       rr\R" SS69 " S S\X5      5       rF\R" SS69 " S S\X5      5       rs\R" SS69 " S S\X5      5       rt\R" SS69 " S S\X5      5       ru\R" SS69 " S S\X5      5       rv\R" SS69 " S S\X5      5       rw\R" SS69 " S S\X5      5       rx\R" SS69 " S S\X5      5       ry\R" SS69 " S S\X5      5       rz\R" SS69 " S S\X5      5       r{\R" SS69 " S S\X5      5       r|\R" SS69 " S S\X5      5       r}\R" SS69 " S S\X5      5       r~\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S S\X5      5       r\R" SS69 " S GS 5      5       r\R" GSS69 " GS GS\X5      5       r " GS GS\U\5      r " GS GS\ \5      rGSRGSSGS jjrGSRGSTGS	 jjr\R" GS
S69 " GS GS\W5      5       r\R" GSS69 " GS GS\W5      5       r\R" GSS69 " GS GS\W5      5       r\R" GSS69 " GS GS\W5      5       r\R" GSS69 " GS GS\X5      5       r\R" GSS69 " GS GS\X5      5       r\R" GSS69 " GS GS\X5      5       r\R" GSS69 " GS  GS!\X5      5       r\R" GS"S69 " GS# GS$\X5      5       r0 rGS%\GS&'   GSUGS' jrGSVGS( jrGS) r\" \5      S :X  a  \" 5          " GS* GS+\5      r " GS, GS-5      r " GS. GS/\I\5      r\ " GS0 GS15      5       r\ " GS2 GS35      5       r\ " GS4 GS55      5       r\ " GS6 GS75      5       rGSWGSXGS8 jjrGSRGSYGS9 jjrGSZGS: jrGS[GS; jr " GS< GS=5      rGS\GS> jr " GS? GS@\85      r " GSA GSB\5      r " GSC GSD\95      r " GSE GSF\5      r " GSG GSH\5      r " GSI GSJ\5      r\\-  r  " GSK GSL\5      r " GSM GSN5      r/ GSOQrg(]      )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                       \ rS rSrSrSrSrSrg)
FolderType"   inputoutputtemp N)__name__
__module____qualname____firstlineno__r5   r6   r7   __static_attributes__r8       4/home/wildlama/comfy/ComfyUI/comfy_api/latest/_io.pyr3   r3   "   s    EFDr>   r3   c                  $    \ rS rSrSrSrSrSrSrg)
UploadType(   image_uploadaudio_uploadvideo_uploadfile_uploadr8   N)	r9   r:   r;   r<   imageaudiovideomodelr=   r8   r>   r?   rA   rA   (   s    EEEEr>   rA   c                  6    \ rS rSr  S     SS jjrS rSrg)RemoteOptions/   Nc                V    Xl          X l         X0l         X@l         XPl         X`l        g Nrouterefresh_buttoncontrol_after_refreshtimeoutmax_retriesrefresh)selfrQ   rR   rS   rT   rU   rV   s          r?   __init__RemoteOptions.__init__0   s;    
-,T%:" 	Og&H 	Jr>   c           	         [        U R                  U R                  U R                  U R                  U R
                  U R                  S.5      $ )NrP   )r)   rQ   rR   rS   rT   rU   rV   rW   s    r?   as_dictRemoteOptions.as_dict?   sD    ZZ"11%)%?%?||++||
  	r>   )rS   rU   rV   rR   rQ   rT   )firstNNN)rQ   strrR   boolrS   zLiteral['first', 'last']rT   intrU   ra   rV   ra   r9   r:   r;   r<   rX   r\   r=   r8   r>   r?   rL   rL   /   s.    ipHLJJ14JDGJr>   rL   c                       \ rS rSrSrSrSrSrg)NumberDisplayJ   numberslidergradientsliderr8   N)r9   r:   r;   r<   rf   rg   gradient_sliderr=   r8   r>   r?   rd   rd   J   s    FF&Or>   rd   c                  $    \ rS rSrSrSrSrSrSrg)ControlAfterGenerateP   fixed	increment	decrement	randomizer8   N)	r9   r:   r;   r<   rm   rn   ro   rp   r=   r8   r>   r?   rk   rk   P   s    EIIIr>   rk   c                  (    \ rS rSr% \rSrS\S'   Srg)
_ComfyTypeV   Nr_   io_typer8   )	r9   r:   r;   r<   r   Typert   __annotations__r=   r8   r>   r?   rr   rr   V   s    DGSr>   rr   T)boundc                   ^  SU 4S jjnU$ )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): ...
c                  > [        U [        5      (       d  [        U [        5      (       aY  U n[        US5      (       a  [	        UR
                  5      Ul        [        US5      (       a  [	        UR                  5      Ul        OuU R                  R                  5        VVs0 s H  u  p#US;  d  M  X#_M     nnn[        U R                  U [        4U5      nU R                  Ul        U R                  Ul        TUl        [        US5      (       a  UR
                  b  XR
                  l        [        US5      (       a  UR                  b  XR                  l        U$ s  snnf )NInputr   )__dict____weakref__r:   __doc__)
isinstancerr   
issubclasshasattrr&   r{   r   r|   itemstyper9   ComfyTypeIOr:   r~   rt   Parent)clsnew_clskvcls_dictrt   s        r?   	decoratorcomfytype.<locals>.decoratore   s"   c:&&*S**E*EGw(( *7== 9w))!+GNN!; "%!3!3!5!5PP !5  
 $(k"$G "%G!kkGO!7G$$)B#*MM 7H%%'..*D$+NN!'s   "E2E)r   rw   returnrw   r8   )rt   kwargsr   s   `  r?   	comfytyper   \   s    < r>   c                <    [        U S9 " S S[        5      5       nU$ )z(Create a ComfyType for a custom io_type.rt   c                      \ rS rSrSrg)Custom.<locals>.CustomComfyType   r8   Nr9   r:   r;   r<   r=   r8   r>   r?   CustomComfyTyper      s    r>   r   )r   r   )rt   r   s     r?   Customr      s&    w+   r>   c                  T    \ rS rSr% SrSrS\S'   S rS r\	S 5       r
\	S	 5       rS
rg)_IO_V3   z'
Base class for V3 Inputs and Outputs.
Nrr   r   c                    g rO   r8   r[   s    r?   rX   _IO_V3.__init__       r>   c                    g rO   r8   r[   s    r?   validate_IO_V3.validate   r   r>   c                .    U R                   R                  $ rO   )r   rt   r[   s    r?   rt   _IO_V3.io_type   s    {{"""r>   c                .    U R                   R                  $ rO   )r   ru   r[   s    r?   ru   _IO_V3.Type   s    {{r>   r8   )r9   r:   r;   r<   r~   r   rv   rX   r   propertyrt   ru   r=   r8   r>   r?   r   r      sE     FJ # #    r>   r   c                  J   ^  \ rS rSrSrSS	U 4S jjjrS rS rS
S jrSr	U =r
$ )r{      z
Base class for a V3 Input.
c	                   > [         T	U ]  5         Xl        X l        X0l        X@l        XPl        Ub  UO0 U l        Xpl        Xl	        g rO   )
superrX   iddisplay_nameoptionaltooltiplazy
extra_dictrawLinkadvanced)
rW   r   r   r   r   r   r   raw_linkr   	__class__s
            r?   rX   Input.__init__   s@    ( 	(2(>*B r>   c           	         [        U R                  U R                  U R                  U R                  U R
                  U R                  S.5      [        U R                  5      -  $ )N)r   r   r   r   r   r   )r)   r   r   r   r   r   r   r   r[   s    r?   r\   Input.as_dict   sS     --||II||
  () 	)r>   c                    U R                   $ rO   r   r[   s    r?   get_io_typeInput.get_io_type       ||r>   c                    U /$ rO   r8   r[   s    r?   get_allInput.get_all   s	    vr>   )r   r   r   r   r   r   r   r   NFNNNNN)r   r_   r   r_   r   r_   r   r`   r   r`   r   r`   r   list[Input])r9   r:   r;   r<   r~   rX   r\   r   r   r=   __classcell__r   s   @r?   r{   r{      s&    	! 	!) r>   r{   c                  h   ^  \ rS rSrSr   S           SU 4S jjjrU 4S jrU 4S jrSrU =r	$ )	WidgetInput   z(
Base class for a V3 Input with widget.
c           
     Z   > [         TU ]  XX4XZX5        X`l        Xpl        Xl        Xl        g rO   )r   rX   default
socketlesswidget_typeforce_input)rW   r   r   r   r   r   r   r   r   r   r   r   r   r   s                r?   rX   WidgetInput.__init__   s/     	8dPXc$&&r>   c                   > [         TU ]  5       [        U R                  U R                  U R
                  U R                  S.5      -  $ )N)r   r   
widgetType
forceInput)r   r\   r)   r   r   r   r   rW   r   s    r?   r\   WidgetInput.as_dict   sC    w :||//****	/
 $  	r>   c                R   > U R                   b  U R                   $ [        TU ]	  5       $ rO   )r   r   r   r   s    r?   r   WidgetInput.get_io_type   s'    #'#3#3#?tZUWEXEZZr>   )r   r   r   r   )NFNNNNNNNNN)r   r_   r   r_   r   r_   r   r`   r   r   r   r`   r   r_   r   r`   r   r`   r   r`   )
r9   r:   r;   r<   r~   rX   r\   r   r=   r   r   s   @r?   r   r      sh     gk" MQ''!'58'LP'rv' HL' '[ [r>   r   c                  2    \ rS rSr  SSS jjrS rS rSrg)	r      Nc                H    Xl         U(       a  UOUU l        X0l        X@l        g rO   )r   r   r   is_output_list)rW   r   r   r   r   s        r?   rX   Output.__init__   s    ,8Lb,r>   c                    U R                   (       a  U R                   OU R                  n[        UU R                  U R                  S.5      $ )N)r   r   r   )r   r   r)   r   r   )rW   r   s     r?   r\   Output.as_dict   s@    ,0,=,=t((477(||"11
  	r>   c                    U R                   $ rO   r   r[   s    r?   r   Output.get_io_type   r   r>   )r   r   r   r   NNNF)r   r_   r   r_   r   r_   )r9   r:   r;   r<   rX   r\   r   r=   r8   r>   r?   r   r      s    JN %-r>   r   c                  .    \ rS rSrSr " S S\5      rSrg)
ComfyTypeI   zbComfyType subclass that only has a default Input class - intended for types that only have Inputs.c                      \ rS rSrSrg)ComfyTypeI.Input   r8   Nr   r8   r>   r?   r{   r          r>   r{   r8   N)r9   r:   r;   r<   r~   r{   r=   r8   r>   r?   r   r      s    l r>   r   c                  .    \ rS rSrSr " S S\5      rSrg)r      zlComfyType subclass that has default Input and Output classes; useful for types with both Inputs and Outputs.c                      \ rS rSrSrg)ComfyTypeIO.Output   r8   Nr   r8   r>   r?   r   r      r   r>   r   r8   N)r9   r:   r;   r<   r~   r   r=   r8   r>   r?   r   r      s    v r>   r   BOOLEANr   c                  .    \ rS rSr\r " S S\5      rSrg)Boolean   c                  `   ^  \ rS rSrSr   S             SU 4S jjjrU 4S jrSrU =r$ )Boolean.Input   zBoolean input.c                L   > [         TU ]  XX4XVU	S XX5        Xpl        Xl        U   g rO   )r   rX   label_on	label_off)rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                 r?   rX   Boolean.Input.__init__   s6     GRx$Q[]acn  }E  P$M&Nr>   c                f   > [         TU ]  5       [        U R                  U R                  S.5      -  $ )N)r   r   )r   r\   r)   r   r   r   s    r?   r\   Boolean.Input.as_dict  s1    7?$z MM!^^3 (  r>   )r   r   NFNNNNNNNNNN)r   r_   r   r_   r   r_   r   r`   r   r`   r   r_   r   r_   r   r`   r   r`   r   r`   r   r`   	r9   r:   r;   r<   r~   rX   r\   r=   r   r   s   @r?   r{   r      s[    jnKOx|	!	25	GJ	 $	8<	^b	sw	 		 	r>   r{   r8   N)	r9   r:   r;   r<   r`   ru   r   r{   r=   r8   r>   r?   r   r      s    D r>   r   INTc                  .    \ rS rSr\r " S S\5      rSrg)Inti  c                  l   ^  \ rS rSrSr   S                   SU 4S jjjrU 4S jrSrU =r$ )	Int.Inputi  zInteger input.c                r   > [         TU ]  XX4XVUS XUU5        Xpl        Xl        Xl        Xl        Xl        U   g rO   )r   rX   minmaxstepcontrol_after_generatedisplay_mode)rW   r   r   r   r   r   r   r   r   r   r  r  r   r   r   r   r   r   s                    r?   rX   Int.Input.__init__  sN     GRx$Q[]acn  }E  GO  PHHI*@' ,r>   c           	        > [         TU ]  5       [        U R                  U R                  U R
                  U R                  U R                  (       a  U R                  R                  OS S.5      -  $ )N)r   r   r   r  display)	r   r\   r)   r   r   r   r  r  valuer   s    r?   r\   Int.Input.as_dict  sZ    7?$zxxxx		*.*E*E6:6G6G4,,22T3 (  r>   )r  r  r   r   r   )NFNNNNNNNNNNNNN)r   r_   r   r_   r   r_   r   r`   r   ra   r   ra   r   ra   r   ra   r  bool | ControlAfterGenerater  rd   r   r`   r   r`   r   r`   r   r`   r   r   s   @r?   r{   r     s    jn JN [_		 		,/		;>		KN		 nI		"/		BF		Z^		 AE		 VZ		 			 	r>   r{   r8   N)	r9   r:   r;   r<   ra   ru   r   r{   r=   r8   r>   r?   r   r     s    D r>   r   FLOATc                  .    \ rS rSr\r " S S\5      rSrg)Floati%  c                  r   ^  \ rS rSrSr    S                     SU 4S jjjrU 4S jrSrU =r$ )Float.Inputi)  zFloat input.c                ~   > [         TU ]  XX4XVUS XUU5        Xpl        Xl        Xl        Xl        Xl        Xl        U   g rO   )r   rX   r   r   r   roundr  gradient_stops)rW   r   r   r   r   r   r   r   r   r   r  r  r  r   r   r   r   r   r   s                     r?   rX   Float.Input.__init__+  sS     GRx$Q[]acn  }E  GO  PHHIJ ,"0r>   c           
        > [         TU ]  5       [        U R                  U R                  U R
                  U R                  U R                  U R                  S.5      -  $ )N)r   r   r   r  r  r  )	r   r\   r)   r   r   r   r  r  r  r   s    r?   r\   Float.Input.as_dict8  sQ    7?$zxxxx		,,"&"5"53 (  r>   )r  r  r   r   r  r   )NFNNNNNNNNNNNNNN)r   r_   r   r_   r   r_   r   r`   r   floatr   r  r   r  r   r  r  r  r  rd   r  z
list[dict]r   r`   r   r`   r   r`   r   r`   r   r   s   @r?   r{   r  )  s    jnjnQUx|	 "	 .3	 ?D	 QV	 di	 "/	 FP	  !%	  9=	  _c	  tx	  	 	 	r>   r{   r8   N)	r9   r:   r;   r<   r  ru   r   r{   r=   r8   r>   r?   r  r  %  s    D r>   r  STRINGc                  .    \ rS rSr\r " S S\5      rSrg)StringiB  c                  `   ^  \ rS rSrSr   S             SU 4S jjjrU 4S jrSrU =r$ )String.InputiF  zString input.c                X   > [         TU ]  XX4XXU
S XX5        X`l        Xpl        Xl        U   g rO   )r   rX   	multilineplaceholderdynamic_prompts)rW   r   r   r   r   r   r  r  r   r  r   r   r   r   r   r   s                  r?   rX   String.Input.__init__H  s=     GRx$Q[]acn  }E  P&N*#2 r>   c                |   > [         TU ]  5       [        U R                  U R                  U R
                  S.5      -  $ )N)r  r  dynamicPrompts)r   r\   r)   r  r  r  r   s    r?   r\   String.Input.as_dictQ  s<    7?$z!^^#//"&"6"63 (  r>   )r  r  r  )NFNNFNNNNNNNN)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   @r?   r{   r  F  s[    jneix|	25	EH	`d	 $	8<	^b	sw	 		 	r>   r{   r8   N	r9   r:   r;   r<   r_   ru   r   r{   r=   r8   r>   r?   r  r  B  s    D r>   r  COMBOc                  D    \ rS rSr\r " S S\5      r " S S\5      rSr	g)ComboiX  c                     ^  \ rS rSrSr\r              S                         SU 4S jjjrU 4S jrSr	U =r
$ )Combo.Inputi[  zCombo input (dropdown).c                X  > [        U[        5      (       a1  [        U[        5      (       a  U Vs/ s H  nUR                  PM     nn[        U[        5      (       a  UR                  n[
        TU ]  XXEXgUS S XU5        SU l        X l        Xl	        Xl
        Xl        Xl        U   g s  snf )NF)r   r   r   r   r  r   rX   multiselectoptionsr  uploadimage_folderremote)rW   r   r*  r   r   r   r   r   r  r+  r,  r-  r   r   r   r   r   r   s                    r?   rX   Combo.Input.__init__^  s    $ '4((Z-F-F,34Gq177G4'4((!--GRx$Q[]acgis  @H  I$D"L*@' K , K 5s   B'c                x  > [         TU ]  5       [        U R                  U R                  U R
                  S.U R                  b  U R                  R                  S0O0 EU R                  (       a  U R                  R                  OS U R                  (       a  U R                  R                  5       OS S.E5      -  $ )N)r)  r*  r  T)r,  r-  )
r   r\   r)   r)  r*  r  r+  r  r,  r-  r   s    r?   r\   Combo.Input.as_dict}  s    7?$z#//<<*.*E*E3 150GDKK%%t,R	3
 <@;L;L 1 1 7 7RV37;;$++--/D3 (  r>   )r  r,  r)  r*  r-  r+  )NNFNNNNNNNNNNN)r   r_   r*  z"list[str] | list[int] | type[Enum]r   r_   r   r_   r   r`   r   zstr | int | Enumr  r  r+  rA   r,  r3   r-  rL   r   r`   r   r`   r   r`   )r9   r:   r;   r<   r~   r_   ru   rX   r\   r=   r   r   s   @r?   r{   r'  [  s    % ;?"(,@D#%)"&!!		 8	 		 	 	 &	 %@	 	 %	 "	 	 	  !	 	>	 	r>   r{   c                  0   ^  \ rS rSrSSU 4S jjjrSrU =r$ )Combo.Outputi  c                H   > [         TU ]  XXE5        Ub  X0l        g / U l        g rO   r   rX   r*  )rW   r   r   r*  r   r   r   s         r?   rX   Combo.Output.__init__  s"    GRwG&-&97LrDLr>   r*  )NNNNF)r   r_   r   r_   r*  	list[str]r   r_   )r9   r:   r;   r<   rX   r=   r   r   s   @r?   r   r2    s    	B 	Br>   r   r8   N)
r9   r:   r;   r<   r_   ru   r   r{   r   r=   r8   r>   r?   r%  r%  X  s"    D* *XB Br>   r%  c                  L    \ rS rSrSr\\   r " S S\R                  5      r	Sr
g)
MultiComboi  zQMultiselect Combo input (dropdown for selecting potentially more than one value).c                  \   ^  \ rS rSr   S             SU 4S jjjrU 4S jrSrU =r$ )MultiCombo.Inputi  c                T   > [         TU ]  XX4XVXzXXS9  SU l        Xl        Xl        U   g )N)r   r   r   r   T)r   rX   r)  r  chip)rW   r   r*  r   r   r   r   r   r  r=  r  r   r   r   r   r   s                  r?   rX   MultiCombo.Input.__init__  sC     GR,'QX  ~H  jr  F#D*Ir>   c           	     |   > [         TU ]  5       [        S[        U R                  U R                  S.5      05      -  $ )Nmulti_select)r  r=  )r   r\   r)   r  r=  r   s    r?   r\   MultiCombo.Input.as_dict  sD     7?$z
#'#3#3 II, !3 (  r>   )r=  r)  r  r   )r   r_   r*  r7  r   r_   r   r_   r   r`   r   r7  r  r_   r=  r`   r  r  r   r`   r   r`   r   r`   r9   r:   r;   r<   rX   r\   r=   r   r   s   @r?   r{   r;    sd     C JN`d	$&	$:=	$JN	$ nI	$ $	$FJ	$[_	$ 	$	 	r>   r{   r8   N)r9   r:   r;   r<   r~   listr_   ru   r%  r{   r=   r8   r>   r?   r9  r9    s    [9D r>   r9  IMAGEc                  ,    \ rS rSr\R
                  rSrg)Imagei  r8   Nr9   r:   r;   r<   torchTensorru   r=   r8   r>   r?   rF  rF        <<Dr>   rF  WAN_CAMERA_EMBEDDINGc                  ,    \ rS rSr\R
                  rSrg)WanCameraEmbeddingi  r8   NrG  r8   r>   r?   rM  rM    rJ  r>   rM  WEBCAMc                  .    \ rS rSr\r " S S\5      rSrg)Webcami  c                  Z   ^  \ rS rSrSr\r  S               SU 4S jjjrSrU =r	$ )Webcam.Inputi  zWebcam input.c                2   > [         TU ]  XX4XVUS S XU
5        g rO   r   rX   )rW   r   r   r   r   r   r   r   r   r   r   r   s              r?   rX   Webcam.Input.__init__  s,     GRx$Q[]acgis  @H  Ir>   r8   )	NFNNNNNNN)r   r_   r   r_   r   r_   r   r`   r   r_   r   r`   r   r`   r   r`   )
r9   r:   r;   r<   r~   r_   ru   rX   r=   r   r   s   @r?   r{   rR    sm    @E TX	I	I-0	I	I)-	I=@	ISW	Iy}	I OS	I 	Ir>   r{   r8   Nr"  r8   r>   r?   rP  rP    s    DI Ir>   rP  MASKc                  ,    \ rS rSr\R
                  rSrg)Maski  r8   NrG  r8   r>   r?   rX  rX    rJ  r>   rX  LATENTc                  2    \ rS rSrSr " S S\5      r\rSrg)Latenti  z#Latents are stored as a dictionary.c                  @    \ rS rSr% S\S'    S\S'   S\S'   S\S	'   S
rg)Latent.LatentDicti  torch.TensorsamplesNotRequired[torch.Tensor]
noise_maskNotRequired[list[int]]batch_indexNotRequired[str]r   r8   Nr9   r:   r;   r<   rv   r=   r8   r>   r?   
LatentDictr]    s     --++Ir>   rf  r8   N)	r9   r:   r;   r<   r~   r   rf  ru   r=   r8   r>   r?   r[  r[    s    -JY J Dr>   r[  CONDITIONINGc                  V    \ rS rSr " S S\5      r\\\R                  \4      r
\
rSrg)Conditioningi  c                     \ rS rSr% S\S'    S\S'    S\S'    S\S	'    S\S
'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S\S'    S \S!'    S"\S#'    S\S$'    S\S%'    S\S&'    S\S''    S(\S)'    S(\S*'    S\S+'    S(\S,'    S(\S-'    S(\S.'    S(\S/'    S0\S1'    S\S2'    S(\S3'    S\S4'    S5\S6'    S\S7'    S\S8'    S9\S:'    S9\S;'    S(\S<'    S(\S='    S\S>'    S?\S@'    S\SA'    S\SB'    S\SC'    SD\SE'    S\SF'    S\SG'   SHrgI)JConditioning.PooledDicti  r^  pooled_outputzNotRequired[ControlNet]controlzNotRequired[bool]control_apply_to_uncondr`  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_latentrb  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_replacer8   Nre  r8   r>   r?   
PooledDictrk    s   ##&((2!22j88=";;ATT.CC	e %$@'',))E-- 	a666..6//0..0%%,"" 	S))p''n..},,{11G">>G4466!))"))"++#T  T++1  )  )&&)'')::&$$;--+--+--&&77$++))**&&..&::&..,,))++!22*33%r>   r  r8   N)r9   r:   r;   r<   r   r  rC  tuplerH  rI  CondListru   r=   r8   r>   r?   ri  ri    s0    q&Y q&f E%,,
234HDr>   ri  SAMPLERc                  ,    \ rS rSr\(       a  \rSrgSrg)r   iD  r8   N)r9   r:   r;   r<   r   r   ru   r=   r8   r>   r?   r   r   D  s     r>   r   SIGMASc                  ,    \ rS rSr\R
                  rSrg)SigmasiI  r8   NrG  r8   r>   r?   r  r  I  rJ  r>   r  NOISEc                  ,    \ rS rSr\R
                  rSrg)NoiseiM  r8   NrG  r8   r>   r?   r  r  M  rJ  r>   r  GUIDERc                  ,    \ rS rSr\(       a  \rSrgSrg)GuideriQ  r8   N)r9   r:   r;   r<   r   r   ru   r=   r8   r>   r?   r  r  Q       r>   r  r   c                  ,    \ rS rSr\(       a  \rSrgSrg)ClipiV  r8   N)r9   r:   r;   r<   r   r   ru   r=   r8   r>   r?   r  r  V  s     r>   r  CONTROL_NETc                  ,    \ rS rSr\(       a  \rSrgSrg)r   i[  r8   N)r9   r:   r;   r<   r   r   ru   r=   r8   r>   r?   r   r   [       r>   r   r   c                  ,    \ rS rSr\(       a  \rSrgSrg)Vaei`  r8   N)r9   r:   r;   r<   r   r   ru   r=   r8   r>   r?   r  r  `  s     r>   r  MODELc                  ,    \ rS rSr\(       a  \rSrgSrg)Modelie  r8   N)r9   r:   r;   r<   r   r   ru   r=   r8   r>   r?   r  r  e  s     r>   r  BACKGROUND_REMOVALc                  ,    \ rS rSr\(       a  \rSrgSrg)BackgroundRemovalij  r8   N)r9   r:   r;   r<   r   r   ru   r=   r8   r>   r?   r  r  j  s    % r>   r  CLIP_VISIONc                  ,    \ rS rSr\(       a  \rSrgSrg)
ClipVisionio  r8   N)r9   r:   r;   r<   r   r   ru   r=   r8   r>   r?   r  r  o  s     r>   r  CLIP_VISION_OUTPUTc                  ,    \ rS rSr\(       a  \rSrgSrg)ClipVisionOutputit  r8   N)r9   r:   r;   r<   r   ClipVisionOutput_ru   r=   r8   r>   r?   r  r  t        r>   r  STYLE_MODELc                  ,    \ rS rSr\(       a  \rSrgSrg)r    iy  r8   N)r9   r:   r;   r<   r   StyleModel_ru   r=   r8   r>   r?   r    r    y  s     r>   r    GLIGENc                  0    \ rS rSrSr\(       a  \rSrgSrg)Gligeni~  z0ModelPatcher that wraps around a 'Gligen' model.r8   N)	r9   r:   r;   r<   r~   r   r   ru   r=   r8   r>   r?   r  r  ~  s    : r>   r  UPSCALE_MODELc                  ,    \ rS rSr\(       a  \rSrgSrg)UpscaleModeli  r8   N)r9   r:   r;   r<   r   r   ru   r=   r8   r>   r?   r  r    s    # r>   r  LATENT_UPSCALE_MODELc                      \ rS rSr\rSrg)LatentUpscaleModeli  r8   Nr9   r:   r;   r<   r   ru   r=   r8   r>   r?   r  r        Dr>   r  AUDIOc                  .    \ rS rSr " S S\5      r\rSrg)Audioi  c                  *    \ rS rSr% S\S'   S\S'   Srg)Audio.AudioDicti  r^  waveformra   sampler_rater8   Nre  r8   r>   r?   	AudioDictr    s    r>   r  r8   N)r9   r:   r;   r<   r   r  ru   r=   r8   r>   r?   r  r    s    I  Dr>   r  VIDEOc                  ,    \ rS rSr\(       a  \rSrgSrg)Videoi  r8   N)r9   r:   r;   r<   r   r!   ru   r=   r8   r>   r?   r  r    r  r>   r  r0   c                      \ rS rSr\rSrg)r0   i  r8   N)r9   r:   r;   r<   _SVGru   r=   r8   r>   r?   r0   r0         Dr>   
LORA_MODELc                  6    \ rS rSr\\\R                  4   rSr	g)	LoraModeli  r8   N)
r9   r:   r;   r<   dictr_   rH  rI  ru   r=   r8   r>   r?   r  r    s    U\\!"Dr>   r  LOSS_MAPc                  .    \ rS rSr " S S\5      r\rSrg)LossMapi  c                       \ rS rSr% S\S'   Srg)LossMap.LossMapDicti  zlist[torch.Tensor]lossr8   Nre  r8   r>   r?   LossMapDictr    s      r>   r  r8   N)r9   r:   r;   r<   r   r  ru   r=   r8   r>   r?   r  r    s    !i !Dr>   r  r.   c                      \ rS rSr\rSrg)Voxeli  r8   N)r9   r:   r;   r<   r.   ru   r=   r8   r>   r?   r  r        Dr>   r  r-   c                      \ rS rSr\rSrg)Meshi  r8   N)r9   r:   r;   r<   r-   ru   r=   r8   r>   r?   r  r    r  r>   r  r/   c                      \ rS rSr\rSrg)Splati  r8   N)r9   r:   r;   r<   r/   ru   r=   r8   r>   r?   r  r    r  r>   r  FILE_3Dc                      \ rS rSrSr\rSrg)	File3DAnyi  z7General 3D file type - accepts any supported 3D format.r8   Nr9   r:   r;   r<   r~   r1   ru   r=   r8   r>   r?   r  r    s
    ADr>   r  FILE_3D_GLBc                      \ rS rSrSr\rSrg)	File3DGLBi  zBGLB format 3D file - binary glTF, best for web and cross-platform.r8   Nr  r8   r>   r?   r  r    s
    LDr>   r  FILE_3D_GLTFc                      \ rS rSrSr\rSrg)
File3DGLTFi  z>GLTF format 3D file - JSON-based glTF with external resources.r8   Nr  r8   r>   r?   r  r    s
    HDr>   r  FILE_3D_FBXc                      \ rS rSrSr\rSrg)	File3DFBXi  z9FBX format 3D file - best for game engines and animation.r8   Nr  r8   r>   r?   r  r    s
    CDr>   r  FILE_3D_OBJc                      \ rS rSrSr\rSrg)	File3DOBJi  z,OBJ format 3D file - simple geometry format.r8   Nr  r8   r>   r?   r  r    s
    6Dr>   r  FILE_3D_STLc                      \ rS rSrSr\rSrg)	File3DSTLi  z*STL format 3D file - best for 3D printing.r8   Nr  r8   r>   r?   r  r    
    4Dr>   r  FILE_3D_USDZc                      \ rS rSrSr\rSrg)
File3DUSDZi  z&USDZ format 3D file - Apple AR format.r8   Nr  r8   r>   r?   r	  r	    s
    0Dr>   r	  FILE_3D_PLYc                      \ rS rSrSr\rSrg)	File3DPLYi  z3PLY format 3D file - point cloud or Gaussian splat.r8   Nr  r8   r>   r?   r  r    s
    =Dr>   r  FILE_3D_SPLATc                      \ rS rSrSr\rSrg)File3DSPLATi  z)SPLAT format 3D file - 3D Gaussian splat.r8   Nr  r8   r>   r?   r  r    s
    3Dr>   r  FILE_3D_SPZc                      \ rS rSrSr\rSrg)	File3DSPZi  z2SPZ format 3D file - compressed 3D Gaussian splat.r8   Nr  r8   r>   r?   r  r    s
    <Dr>   r  FILE_3D_KSPLATc                      \ rS rSrSr\rSrg)File3DKSPLATi  z*KSPLAT format 3D file - 3D Gaussian splat.r8   Nr  r8   r>   r?   r  r    r  r>   r  FILE_3D_SPLAT_ANYc                      \ rS rSrSr\rSrg)File3DSplatAnyi  zmGeneral 3D Gaussian splat file type - accepts any supported splat container (.ply / .spz / .splat / .ksplat).r8   Nr  r8   r>   r?   r  r    s
    wDr>   r  FILE_3D_POINT_CLOUD_ANYc                      \ rS rSrSr\rSrg)File3DPointCloudAnyi  z]General point cloud file type - accepts any supported point cloud container (currently .ply).r8   Nr  r8   r>   r?   r  r    s
    gDr>   r  HOOKSc                  ,    \ rS rSr\(       a  \rSrgSrg)Hooksi  r8   N)r9   r:   r;   r<   r   r   ru   r=   r8   r>   r?   r  r    r  r>   r  HOOK_KEYFRAMESc                  ,    \ rS rSr\(       a  \rSrgSrg)HookKeyframesi  r8   N)r9   r:   r;   r<   r   r   ru   r=   r8   r>   r?   r!  r!    r  r>   r!  TIMESTEPS_RANGEc                  &    \ rS rSrSr\\\4   rSrg)TimestepsRangei  z9Range defined by start and endpoint, between 0.0 and 1.0.r8   N)	r9   r:   r;   r<   r~   r  ra   ru   r=   r8   r>   r?   r$  r$    s    Cc?Dr>   r$  LATENT_OPERATIONc                  L    \ rS rSr\\R                  /\R                  4   rSrg)LatentOperationi  r8   N)	r9   r:   r;   r<   r   rH  rI  ru   r=   r8   r>   r?   r'  r'    s    U\\NELL01Dr>   r'  FLOW_CONTROLc                  "    \ rS rSr\\\4   rSrg)FlowControli  r8   N)	r9   r:   r;   r<   r  r_   r   ru   r=   r8   r>   r?   r*  r*    s     c?Dr>   r*  ACCUMULATIONc                  .    \ rS rSr " S S\5      r\rSrg)Accumulationi  c                       \ rS rSr% S\S'   Srg)Accumulation.AccumulationDicti  z	list[Any]accumr8   Nre  r8   r>   r?   AccumulationDictr/    s    r>   r1  r8   N)r9   r:   r;   r<   r   r1  ru   r=   r8   r>   r?   r-  r-    s    9 Dr>   r-  LOAD3D_CAMERAc                  .    \ rS rSr " S S\5      r\rSrg)Load3DCamerai"  c                  z    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S\S'   S\S'   S	\S'   Srg)Load3DCamera.CameraInfoi$  dict[str, float | int]positiontargetzfloat | intzoomr_   
cameraTypez#NotRequired[dict[str, float | int]]
quaternionzNotRequired[float | int]fovaspectnearfarfrustumr8   Nre  r8   r>   r?   
CameraInfor6  $  s=    ((&&77%%((&&%%44r>   rB  r8   N)r9   r:   r;   r<   r   rB  ru   r=   r8   r>   r?   r4  r4  "  s    5Y 5 Dr>   r4  LOAD3D_MODEL_INFOc                  4    \ rS rSr " S S\5      r\\   rSrg)Load3DModelInfoi4  c                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg) Load3DModelInfo.Model3DTransformi6  r7  r8  r<  scaler8   Nre  r8   r>   r?   Model3DTransformrG  6  s    ((**%%r>   rI  r8   N)	r9   r:   r;   r<   r   rI  rC  ru   r=   r8   r>   r?   rE  rE  4  s    &9 &  !Dr>   rE  LOAD_3Dc                  2    \ rS rSrSr " S S\5      r\rSrg)Load3Di?  z%3D models are stored as a dictionary.c                  R    \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S	'   S
\S'   Srg)Load3D.Model3DDictiB  r_   rG   rt  normalr6  camera_inford  	recordingz3NotRequired[list[Load3DModelInfo.Model3DTransform]]model_3d_infor8   Nre  r8   r>   r?   Model3DDictrN  B  s#    
	,,##JJr>   rS  r8   N)	r9   r:   r;   r<   r~   r   rS  ru   r=   r8   r>   r?   rL  rL  ?  s    /Ki K Dr>   rL  LOAD_3D_ANIMATIONc                      \ rS rSrSrg)Load3DAnimationiM  r8   Nr   r8   r>   r?   rV  rV  M  s    r>   rV  
PHOTOMAKERc                      \ rS rSr\rSrg)
PhotomakeriR  r8   Nr  r8   r>   r?   rY  rY  R  r  r>   rY  POINTc                      \ rS rSr\rSrg)PointiW  r8   Nr  r8   r>   r?   r\  r\  W  r  r>   r\  FACE_ANALYSISc                      \ rS rSr\rSrg)FaceAnalysisi[  r8   Nr  r8   r>   r?   r_  r_  [  r  r>   r_  BBOXc                      \ rS rSr\rSrg)r`  i_  r8   Nr  r8   r>   r?   r`  r`  _  r  r>   SEGSc                      \ rS rSr\rSrg)rb  ic  r8   Nr  r8   r>   r?   rb  rb  c  r  r>   *c                      \ rS rSr\rSrg)AnyTypeig  r8   Nr  r8   r>   r?   rf  rf  g  r  r>   rf  MODEL_PATCHc                      \ rS rSr\rSrg)
ModelPatchik  r8   Nr  r8   r>   r?   ri  ri  k  r  r>   ri  AUDIO_ENCODERc                      \ rS rSr\rSrg)AudioEncoderio  r8   Nr  r8   r>   r?   rl  rl  o  r  r>   rl  AUDIO_ENCODER_OUTPUTc                      \ rS rSr\rSrg)AudioEncoderOutputis  r8   Nr  r8   r>   r?   ro  ro  s  r  r>   ro  TRACKSc                  .    \ rS rSr " S S\5      r\rSrg)Tracksiw  c                  *    \ rS rSr% S\S'   S\S'   Srg)Tracks.TrackDictiy  r^  
track_pathtrack_visibilityr8   Nre  r8   r>   r?   	TrackDictrt  y  s      &&r>   rw  r8   N)r9   r:   r;   r<   r   rw  ru   r=   r8   r>   r?   rr  rr  w  s    'I ' Dr>   rr  COMFY_MULTITYPED_V3c                  .    \ rS rSr\r " S S\5      rSrg)	MultiTypei~  c                  Z   ^  \ rS rSrSrSS	U 4S jjjr\S
S j5       rS rU 4S jr	Sr
U =r$ )MultiType.Inputi  z
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.
c
           
     (  > S U l         [        U[        5      (       a  [        R                  " U5      U l         UR                  SL a  UR                  OUnUR
                  b  UR
                  OUnUR                  b  UR                  OUnUR                  b  UR                  OUnUR                  n[        U R                   [        5      (       a)  U R                   R                  5       U R                   l        [        T
U ]5  XXEXgX5        X l        g NT)input_overrider   r{   copyr   r   r   r   r   r   r   r   r   rX   	_io_types)rW   r   typesr   r   r   r   r   r   r   r   s             r?   rX   MultiType.Input.__init__  s    "&D"e$$&*iim#*,++*=2;;8(*

(>"**G24//2MrS_"$''"5rww4UUd11;??6:6I6I6U6U6WD''3GRx$T\g"Nr>   c                    / nU R                    H@  n[        U5      (       d  UR                  [        U5      5        M/  UR                  U5        MB     U$ )z.
Returns list of Input class types permitted.
)r  r(   appendr   )rW   io_typesxs      r?   r  MultiType.Input.io_types  sC    
 H^^{{OODG,OOA&	 $
 Or>   c                   U R                    Vs/ s H  oR                  PM     nnU R                  b*  UR                  SU R                  R	                  5       5        SR                  [        [        R                  U5      5      5      $ s  snf )Nr   ,)	r  rt   r  insertr   joinrC  r  fromkeys)rW   r  	str_typess      r?   r   MultiType.Input.get_io_type  si    ,0MM:MqMI:"".  D$7$7$C$C$EF88Dy!9:;; ;s   B
c                   > U R                   b)  U R                   R                  5       [        TU ]  5       -  $ [        TU ]  5       $ rO   )r  r\   r   r   s    r?   r\   MultiType.Input.as_dict  s=    "".**224uw7HHHw((r>   )r  r  r   )r   zstr | Inputr  z#list[type[_ComfyType] | _ComfyType]r   r_   r   r_   r   r`   r   r`   r   r`   )r   zlist[type[Input]])r9   r:   r;   r<   r~   rX   r   r  r   r\   r=   r   r   s   @r?   r{   r|    s5    		# 	#  

	 

		<	) 	)r>   r{   r8   N)r9   r:   r;   r<   r   ru   r{   r=   r8   r>   r?   rz  rz  ~  s    D,) ,)r>   rz  COMFY_MATCHTYPE_V3c                  T    \ rS rSr " S S5      r " S S\5      r " S S\5      rSrg	)
	MatchTypei  c                  *    \ rS rSr\4SS jjrS rSrg)MatchType.Templatei  c                T   Xl         [        U[        5      (       d  U/nU H~  n[        U[        5      (       d9  [        U[        5      (       d"  [        SUR                  R                   35      eMQ  [        U[        5      (       a  Mh  [        SUR                   35      e   X l	        g )Nz?Allowed types must be a ComfyType or a list of ComfyTypes, got )
template_idr   r   r   rr   
ValueErrorr   r9   r   allowed_types)rW   r  r  ts       r?   rX   MatchType.Template.__init__  s    *mX66!."!!T**%a44(+jklkvkvkk  kA  *B  C  C 5 &a44(+jklkukujv)wxx # "/r>   c                    U R                   SR                  U R                   Vs/ s H  oR                  PM     sn5      S.$ s  snf )Nr  )r  r  )r  r  r  rt   )rW   r  s     r?   r\   MatchType.Template.as_dict  s=    #//!$d>P>P*Q>P99>P*Q!R *Qs   A
)r  r  N)r  r_   r  z_ComfyType | list[_ComfyType])r9   r:   r;   r<   rf  rX   r\   r=   r8   r>   r?   Templater    s    \c 	/	r>   r  c                  P   ^  \ rS rSr S         SU 4S jjjrU 4S jrSrU =r$ )MatchType.Inputi  c
           
     6   > [         T
U ]  XXEXgX5        X l        g rO   r   rX   template)rW   r   r  r   r   r   r   r   r   r   r   s             r?   rX   MatchType.Input.__init__  s    GRx$T\g$Mr>   c                l   > [         TU ]  5       [        SU R                  R                  5       05      -  $ Nr  r   r\   r)   r  r   s    r?   r\   MatchType.Input.as_dict  5    7?$zDMM1133 (  r>   r  r   )r   r_   r  r  r   r_   r   r_   r   r`   r   r`   r   r`   rB  r   s   @r?   r{   r    sJ     VZ	%"%	%EH	%UY	%{	% QU	% 	%
	 	r>   r{   c                  @   ^  \ rS rSr  SSU 4S jjjrU 4S jrSrU =r$ )MatchType.Outputi  c                R   > U(       d	  U(       d  Sn[         TU ]  X#XE5        Xl        g )N	MATCHTYPEr  )rW   r  r   r   r   r   r   s         r?   rX   MatchType.Output.__init__  s!    l*GRwG$Mr>   c                l   > [         TU ]  5       [        SU R                  R                  5       05      -  $ r  r  r   s    r?   r\   MatchType.Output.as_dict  r  r>   r  r   )r  r  r   r_   r   r_   r   r_   rB  r   s   @r?   r   r    s    lp$)	% 	%	 	r>   r   r8   N)r9   r:   r;   r<   r  r{   r   r=   r8   r>   r?   r  r    s$     *	 	 r>   r  c                      \ rS rSrSrSrg)DynamicInputi  z0
Abstract class for dynamic input registration.
r8   Nr9   r:   r;   r<   r~   r=   r8   r>   r?   r  r         	r>   r  c                      \ rS rSrSrSrg)DynamicOutputi  z1
Abstract class for dynamic output registration.
r8   Nr  r8   r>   r?   r  r    r  r>   r  c                     U c  / n Ub  X/-   n U $ rO   r8   prefix_listr   s     r?   handle_prefixr    s"    	~!D(r>   c                N    U c  Uc   eU c  U$ Ub  X/-   n SR                  U 5      $ )N.)r  r  s     r?   finalize_prefixr    s;    #
33		!D(88K  r>   COMFY_AUTOGROW_V3c                      \ rS rSr\\\4   rSr " S S5      r	 " S S\	5      r
 " S S\	5      r " S	 S
\5      r\SS j5       rSrg)Autogrowi  d   c                  D    \ rS rSrS
S jrSS jrS rSS jrS rS r	Sr
g	)Autogrow._AutogrowTemplatei   c                    [        U[        5      (       a   e[        R                  " U5      U l        [        U R                  [        5      (       a  SU R                  l        / U l        0 U l        g r~  )r   r  r  r5   r   r   namescached_inputsrW   r5   s     r?   rX   #Autogrow._AutogrowTemplate.__init__  sQ    !%66765)DJ$**k22)-

&$&DJ!#Dr>   c                R    [         R                   " U R                  5      nX#l        U$ rO   )r  r5   r   )rW   r5   name	new_inputs       r?   _create_input(Autogrow._AutogrowTemplate._create_input
  s    		$**-ILr>   c                |    U R                    H,  nU R                  U R                  U5      U R                  U'   M.     g rO   )r  r  r5   r  )rW   r  s     r?   _create_cached_inputs0Autogrow._AutogrowTemplate._create_cached_inputs  s1    

+/+=+=djj$+O""4( #r>   c                H    [        U R                  R                  5       5      $ rO   )rC  r  valuesr[   s    r?   r   "Autogrow._AutogrowTemplate.get_all  s    **11344r>   c                D    [        S[        U R                  /5      05      $ )Nr5   )r)   create_input_dict_v1r5   r[   s    r?   r\   "Autogrow._AutogrowTemplate.as_dict  s%    -tzzl;  r>   c                8    U R                   R                  5         g rO   )r5   r   r[   s    r?   r   #Autogrow._AutogrowTemplate.validate  s    JJ!r>   )r  r5   r  N)r5   r{   )r5   r{   r  r_   r   )r9   r:   r;   r<   rX   r  r  r   r\   r   r=   r8   r>   r?   _AutogrowTemplater     s!    	$	
	P	5	
	"r>   r  c                  <   ^  \ rS rSrSSU 4S jjjrU 4S jrSrU =r$ )Autogrow.TemplatePrefixi  c                .  > [         TU ]  U5        X l        US:  d   eUS:  d   eU[        R                  ::  d   eX0l        X@l        [        U R                  5       Vs/ s H  oPR                   U 3PM     snU l        U R                  5         g s  snf )Nr   r,   )
r   rX   prefixr  	_MaxNamesr   r   ranger  r  )rW   r5   r  r   r   ir   s         r?   rX    Autogrow.TemplatePrefix.__init__  s    GU# K!88!88(,,,-,HH7<TXXG![[M!-GDJ&&( Hs    Bc                |   > [         TU ]  5       [        U R                  U R                  U R
                  S.5      -  $ )N)r  r   r   )r   r\   r)   r  r   r   r   s    r?   r\   Autogrow.TemplatePrefix.as_dict*  s8    7?$z++xxxx3 (  r>   )r   r   r  r  )r,   
   )r5   r{   r  r_   r   ra   r   ra   rB  r   s   @r?   TemplatePrefixr    s    		) 		)	 	r>   r  c                  <   ^  \ rS rSrSSU 4S jjjrU 4S jrSrU =r$ )Autogrow.TemplateNamesi1  c                   > [         TU ]  U5        US [        R                   U l        US:  d   eX0l        U R                  5         g Nr   )r   rX   r  r  r  r   r  )rW   r5   r  r   r   s       r?   rX   Autogrow.TemplateNames.__init__2  sB    GU#2 2 23DJ!88H&&(r>   c                f   > [         TU ]  5       [        U R                  U R                  S.5      -  $ )N)r  r   )r   r\   r)   r  r   r   s    r?   r\   Autogrow.TemplateNames.as_dict9  s1    7?$zxx3 (  r>   )r   r  )r,   )r5   r{   r  r7  r   ra   rB  r   s   @r?   TemplateNamesr  1  s    	) 	)	 	r>   r  c                  X   ^  \ rS rSr S     SU 4S jjjrU 4S jrS	S jrS rSrU =r	$ )
Autogrow.Inputi?  c                4   > [         TU ]  XXEXg5        X l        g rO   r  )	rW   r   r  r   r   r   r   r   r   s	           r?   rX   Autogrow.Input.__init__@  s    GRx$S$Mr>   c                l   > [         TU ]  5       [        SU R                  R                  5       05      -  $ r  r  r   s    r?   r\   Autogrow.Input.as_dictE  r  r>   c                >    U /U R                   R                  5       -   $ rO   )r  r   r[   s    r?   r   Autogrow.Input.get_allJ  s    6DMM11333r>   c                8    U R                   R                  5         g rO   )r  r   r[   s    r?   r   Autogrow.Input.validateM  s    MM""$r>   r  NFNNN)
r   r_   r  z0Autogrow.TemplatePrefix | Autogrow.TemplateNamesr   r_   r   r_   r   r`   r   )
r9   r:   r;   r<   rX   r\   r   r   r=   r   r   s   @r?   r{   r  ?  s<    lp	%#&	%FI	%VZ	% 	%
	
	4	% 	%r>   r{   c                L   SUS   S   ;   nSUS   S   ;   nUS   S   S   nU(       a"  US   S   S   nUS   S   S   n	[        U	5      n
OFU(       a?  US   S   S   nUS   S   S   nUS   S   S   n
[        U
5       Vs/ s H  o U 3PM
     n	nS nSnUR                  5        H8  u  nn[        U5      S	:X  a  M  [        UR	                  5       5      S	   nUS
:H  n  O   Uc  [        S5      e0 nSn[        W	5       Ha  u  nn[        UU5      nUW:  a!  U(       a  XS
   U'   UR                  S
0 5      nOXS   U'   UR                  S0 5      nUU;   d  MZ  UUU'   SnMc     U(       d)  [        U5      nUU S   U'   [        R                  U S   U'   [        XUU5        g s  snf )Nr  r,   r  r  r5   r   r   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   rC  r  	Exception	enumerater  
setdefaultDynamicPathsDefaultValue
EMPTY_DICTparse_class_inputs)out_dictlive_inputsr  
input_typecurr_prefixis_names	is_prefixr5   r   r  r   r  r  template_inputtemplate_required_input_type
dict_inputnew_dictnew_dict_added_tor  expected_id	type_dictfinalized_prefixs                          r?   _expand_schema_for_dynamic#Autogrow._expand_schema_for_dynamicP  s    uQx
33q*!55	a$W-(:&u-C!HZ(1Ee*C1Xj)(3F(:&u-C(:&u-C-23Z8Zxs^ZE8 ',{{}#K:!#!*"3"3"56q9N +z 9 (5 !yzz! 'GAt)+t<K3w,4B$[1$//
B?	 5C$[1$//
B?	k)"0	$$(! ( !.{;:JH_%&67H`HkHkH234DE8(KHG 9s    F!r8   N
r  dict[str, Any]r  r  r  ztuple[str, dict[str, Any]]r  r_   r	  list[str] | None)r9   r:   r;   r<   r  r_   r   ru   r  r  r  r  r  r{   staticmethodr  r=   r8   r>   r?   r  r    sZ    S>DI" "<* &) % %" 1I 1Ir>   r  COMFY_DYNAMICCOMBO_V3c                  `    \ rS rSr\\\4   r " S S5      r " S S\	5      r
\S	S j5       rSrg)
DynamicComboi  c                  $    \ rS rSrSS jrS rSrg)DynamicCombo.Optioni  c                    Xl         X l        g rO   keyinputs)rW   r"  r#  s      r?   rX   DynamicCombo.Option.__init__  s    H Kr>   c                F    U R                   [        U R                  5      S.$ )Nr!  )r"  r  r#  r[   s    r?   r\   DynamicCombo.Option.as_dict  s    xx.t{{; r>   )r#  r"  N)r"  r_   r#  r   rb   r8   r>   r?   Optionr    s    	!	r>   r'  c                  X   ^  \ rS rSr S     SU 4S jjjrS	S jrU 4S jrS rSrU =r	$ )
DynamicCombo.Inputi  c                4   > [         TU ]  XXEXg5        X l        g rO   r4  )	rW   r   r*  r   r   r   r   r   r   s	           r?   rX   DynamicCombo.Input.__init__  s    GRx$S"Lr>   c                x    U /U R                    VVs/ s H  oR                    H  o"PM     M     snn-   $ s  snnf rO   )r*  r#  rW   optionr5   s      r?   r   DynamicCombo.Input.get_all  s/    6Yv==%U=UYYYYs   6c           	        > [         TU ]  5       [        SU R                   Vs/ s H  oR                  5       PM     sn05      -  $ s  snf )Nr*  )r   r\   r)   r*  )rW   or   s     r?   r\   DynamicCombo.Input.as_dict  sB    7?$z>AIIK>3 (  >s   Ac                p    U R                    H&  nUR                   H  nUR                  5         M     M(     g rO   )r*  r#  r   r-  s      r?   r   DynamicCombo.Input.validate  s(    ,,#]]ENN$ + 'r>   r6  r  )
r   r_   r*  zlist[DynamicCombo.Option]r   r_   r   r_   r   r`   r   
r9   r:   r;   r<   rX   r   r\   r   r=   r   r   s   @r?   r{   r)    s=    ko	#"%	#EH	#UY	# 	#
	Z	
	% 	%r>   r{   c                    [        U5      nXQ;   aT  X   nS nUS   S   nU H  n	U	S   U:X  d  M  U	n  O   Ub,  [        XUS   U5        X U   U'   [        XDS   5      U S   U'   g g g )Nr,   r*  r"  r#  r  r  r  )
r  r  r  r  r	  finalized_idr"  selected_optionr*  r.  s
             r?   r  'DynamicCombo._expand_schema_for_dynamic  s    &{3&+C"O=B1Xi=PG!%=C'&,O " *"8/(:SU`a5:$\2:I+ceWf:g),7	 + 'r>   r8   Nr  )r9   r:   r;   r<   r  r_   r   ru   r'  r  r{   r  r  r=   r8   r>   r?   r  r    s;    S>D	 	% %( h hr>   r  COMFY_DYNAMICSLOT_V3c                  L    \ rS rSr\\\4   r " S S\5      r	\
SS j5       rSrg)DynamicSloti  c                  X   ^  \ rS rSr S     SU 4S jjjrS	S jrU 4S jrS rSrU =r	$ )
DynamicSlot.Inputi  c                "  > [        U[        5      (       a   e[        R                  " U5      U l        UR                  b  UR                  OUU R                  l        SnUR
                  b  UR
                  OUU R                  l        UR                  b  UR                  OUU R                  l        UR                  b  UR                  OUU R                  l        [        TU ]%  UR                  U R                  R                  XpR                  R
                  U R                  R                  U R                  R                  5        X l        S U l        [        U R                  [        5      (       a  SU l        SU R                  l        g g r~  )r   r  r  slotr   r   r   r   r   rX   r   r#  r   r   )	rW   rB  r#  r   r   r   r   r   r   s	           r?   rX   DynamicSlot.Input.__init__  s   !$5565		$DI:>:K:K:WT%6%6]iDII"H040HgDII*.))*?TYYTDIIN6:oo6Q4??WaDII GTWWdii&<&<h		HYHY[_[d[d[i[ikoktktkk  A K#D$))[11#' (,		% 2r>   c                6    U R                   /U R                  -   $ rO   )rB  r#  r[   s    r?   r   DynamicSlot.Input.get_all  s    II;,,r>   c                   > [         TU ]  5       [        [        U R                  R                  5       5      [        U R                  5      U R                  S.5      -  $ )N)slotTyper#  r   )	r   r\   r)   r_   rB  r   r  r#  r   r   s    r?   r\   DynamicSlot.Input.as_dict  sM    7?$z		 5 5 78.t{{;"..3 (  r>   c                ~    U R                   R                  5         U R                   H  nUR                  5         M     g rO   )rB  r   r#  r  s     r?   r   DynamicSlot.Input.validate  s*    II   %r>   )r   r#  rB  )NNNN)
rB  r{   r#  r   r   r_   r   r_   r   r`   r   r5  r   s   @r?   r{   r@    s<    [_	-"%	-58	-EI	- 	-"	-		! 	!r>   r{   c                    [        U5      nXQ;   a0  US   S   n[        XXd5        X U   U'   [        XDS   5      U S   U'   g g )Nr,   r#  r7  r  r8  )r  r  r  r  r	  r9  r#  s          r?   r  &DynamicSlot._expand_schema_for_dynamic  sV    &{3&1Xh'FxfJ16Z .6Ek_aSb6cH_%l3 'r>   r8   Nr  )r9   r:   r;   r<   r  r_   r   ru   r  r{   r  r  r=   r8   r>   r?   r>  r>    s2    S>D! !B d dr>   r>  IMAGECOMPAREc                  .    \ rS rSr\r " S S\5      rSrg)ImageComparei  c                  F   ^  \ rS rSr  S   SU 4S jjjrU 4S jrSrU =r$ )ImageCompare.Inputi  c                6   > [         TU ]  XX4S S US S S S U5        g rO   rT  )rW   r   r   r   r   r   r   r   s          r?   rX   ImageCompare.Input.__init__  s'    
'
2XdJX\^bdhjnpx
yr>   c                    > [         TU ]  5       $ rO   r   r\   r   s    r?   r\   ImageCompare.Input.as_dict      "
"r>   r8   )NFNTN)
r   r_   r   r_   r   r_   r   r`   r   r`   rB  r   s   @r?   r{   rQ    s1    W[9=z#z48z z# #r>   r{   r8   N)	r9   r:   r;   r<   r  ru   r   r{   r=   r8   r>   r?   rO  rO    s    	$#k #r>   rO  COLORc                  .    \ rS rSr\r " S S\5      rSrg)Colori  c                  J   ^  \ rS rSr  S     SU 4S jjjrU 4S jrSrU =r$ )Color.Inputi  c                8   > [         TU ]  XX4S XuS S S S U5        U   g rO   rT  )	rW   r   r   r   r   r   r   r   r   s	           r?   rX   Color.Input.__init__  s(    
'
2Xg[_aegkmqs{
|
r>   c                    > [         TU ]  5       $ rO   rU  r   s    r?   r\   Color.Input.as_dict  rW  r>   r8   )NFNTNz#ffffff)r   r_   r   r_   r   r_   r   r`   r   r`   r   r_   rB  r   s   @r?   r{   r\    s5    W[LU#48HK 
# #r>   r{   r8   Nr"  r8   r>   r?   rZ  rZ    s    	$#k #r>   rZ  BOUNDING_BOXc                  D    \ rS rSr " S S\5      r\r " S S\5      rSr	g)BoundingBoxi  c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg)	BoundingBox.BoundingBoxDicti  ra   r  yr  r  r8   Nre  r8   r>   r?   BoundingBoxDictre    s    
r>   rg  c                  N   ^  \ rS rSr  S       SU 4S jjjrU 4S jrSrU =r$ )BoundingBox.Inputi  c	           	     b   > [         T	U ]  XX4S Xe5        Xpl        Xl        Uc  SSSSS.U l        g g )Nr   i   )r  rf  r  r  )r   rX   	componentr   r   )
rW   r   r   r   r   r   r   rk  r   r   s
            r?   rX   BoundingBox.Input.__init__  s;    GRx$\&N*%&QL r>   c                   > [         TU ]  5       nU R                  (       a  U R                  US'   U R                  b  U R                  US'   U$ )Nrk  r   )r   r\   rk  r   )rW   dr   s     r?   r\   BoundingBox.Input.as_dict  sC    !A~~!%++"&"2"2,Hr>   )rk  r   r   )NFNTNNN)r   r_   r   r_   r   r_   r   r`   r   r  rk  r_   r   r`   rB  r   s   @r?   r{   ri    sC    Y]gk	M!%	M59	MKN	Mbf	M 	M	 	r>   r{   r8   N)
r9   r:   r;   r<   r   rg  ru   r   r{   r=   r8   r>   r?   rc  rc    s!    ) 
 D r>   rc  CURVEc                  H    \ rS rSrSSKJr  \(       a  \r " S S\	5      r
Srg)Curvei  r   )
CurvePointc                  J   ^  \ rS rSr  S     SU 4S jjjrU 4S jrSrU =r$ )Curve.Inputi#  c                N   > [         TU ]  XX4S XeS S S S U5        Uc
  SS/U l        g g )N)        rw  )      ?rx  )r   rX   r   )	rW   r   r   r   r   r   r   r   r   s	           r?   rX   Curve.Input.__init__$  s;    GRx$]acgimosu}~ *J7 r>   c                   > [         TU ]  5       nU R                  b,  U R                   Vs/ s H  n[        U5      PM     snSS.US'   U$ s  snf )Nmonotone_cubic)pointsinterpolationr   )r   r\   r   rC  )rW   rn  pr   s      r?   r\   Curve.Input.as_dict*  sJ    !A||'<@LL*ILq47L*I\lm)H +Js   Ar   )NFNTNN)r   r_   r   r_   r   r_   r   r`   r   zlist[tuple[float, float]]r   r`   rB  r   s   @r?   r{   ru  #  s5    Y]dh	8!%	85N	8_c	8 	8	 	r>   r{   r8   N)r9   r:   r;   r<   comfy_api.inputrs  r   CurveInput_ru   r   r{   r=   r8   r>   r?   rr  rr    s    * r>   rr  	HISTOGRAMc                  "    \ rS rSrSr\\   rSrg)	Histogrami1  z0A histogram represented as a list of bin counts.r8   N)	r9   r:   r;   r<   r~   rC  ra   ru   r=   r8   r>   r?   r  r  1  s    :9Dr>   r  RANGEc                  H    \ rS rSrSSKJr  \(       a  \r " S S\5      r	Sr
g)Rangei7  r   )
RangeInputc                  p   ^  \ rS rSr         S                 SU 4S jjjrU 4S jrSrU =r$ )Range.Inputi=  c                   > [         TU ]  XX4S XeS S S S U5        Uc
  SSS.U l        Xpl        Xl        Xl        Xl        Xl        Xl        g )Nrw  rx  )r   r   )	r   rX   r   r  r  show_midpointmidpoint_scale	value_min	value_max)rW   r   r   r   r   r   r   r  r  r  r  r  r  r   r   s                 r?   rX   Range.Input.__init__>  sY     GRx$]acgimosu}~'*37"L"0!."0&N&Nr>   c           
        > [         TU ]  5       [        U R                  U R                  U R
                  U R                  U R                  U R                  S.5      -  $ )N)r  r  r  r  r  r  )	r   r\   r)   r  r  r  r  r  r  r   s    r?   r\   Range.Input.as_dictQ  sS    7?$z<<"&"5"5!%!3!3"&"5"5!^^!^^3 (  r>   )r   r  r  r  r  r  r  )NFNTNNNNNNNN)r   r_   r   r_   r   r_   r   r`   r   r  r  r_   r  rC  r  r`   r  r_   r  r  r  r  r   r`   rB  r   s   @r?   r{   r  =  s    Y]:>"&*.)-)-&*&*$(	'!%	'59	'!	' &*	' %)		'
 &)	' !&	' !&	'  $	' 	'&	 	r>   r{   r8   N)r9   r:   r;   r<   r  r  r   ru   r   r{   r=   r8   r>   r?   r  r  7  s    * r>   r  zndict[str, Callable[[dict[str, Any], dict[str, Any], tuple[str, dict[str, Any]], str, list[str] | None], None]]DYNAMIC_INPUT_LOOKUPc                    U[         U '   g rO   r  )rt   funcs     r?   register_dynamic_input_funcr  ]  s    $(!r>   c                    [         U    $ rO   r  r   s    r?   get_dynamic_input_funcr  `  s    ((r>   c                     [        [        R                  [        R                  5        [        [        R                  [        R                  5        [        [
        R                  [
        R                  5        g rO   )r  r  rt   r  r  r>  r8   r>   r?   setup_dynamic_input_funcsr  c  sD     0 0(2U2UV 4 4l6]6]^ 3 3[5[5[\r>   c                  D    \ rS rSr% S\S'    S\S'    S\S'    S\S'   Srg	)
V3Datain  r  hidden_inputsr  r  r`   create_dynamic_tupler8   Nre  r8   r>   r?   r  r  n  s)    !!l!!y!// MXr>   r  c                  h    \ rS rSr S         S	S jjrS
S jr\SS j5       r\SS j5       rSr	g)HiddenHolderix  Nc                d    Xl          X l         X0l         X@l         XPl         X`l         Xpl        g rO   	unique_idpromptextra_pnginfo	dynpromptauth_token_comfy_orgapi_key_comfy_orgcomfy_usage_source)	rW   r  r  r  r  r  r  r  r   s	            r?   rX   HiddenHolder.__init__y  sO     # 	~{* 	l" 	z$8!h!2 	F"4 	Or>   c                    g)z*If hidden variable not found, return None.Nr8   )rW   r"  s     r?   __getattr__HiddenHolder.__getattr__  s    r>   c                   Uc  0 nU " UR                  [        R                  S 5      UR                  [        R                  S 5      UR                  [        R                  S 5      UR                  [        R
                  S 5      UR                  [        R                  S 5      UR                  [        R                  S 5      UR                  [        R                  S 5      S9$ )Nr  )	getHiddenr  r  r  r  r  r  r  )r   rn  s     r?   	from_dictHiddenHolder.from_dict  s    9AeeF,,d355-%% 4 4d;eeF,,d3!"v'B'BD!IeeF$<$<dC uuV%>%>E
 	
r>   c                D    U R                  U(       a	  US   5      $ S 5      $ )Nr  )r  )r   v3_datas     r?   from_v3_dataHiddenHolder.from_v3_data  s     }}W_5KKdKKr>   )r  r  r  r  r  r  r  rO   )r  r_   r  r   r  r   r  r   r  r_   r  r_   r  r_   )r"  r_   )rn  dict | None)r  V3Data | Noner   r  )
r9   r:   r;   r<   rX   r  classmethodr  r  r=   r8   r>   r?   r  r  x  sk     ,0O #O03O'*O?BO &)O& 
 
 L Lr>   r  c                  @    \ rS rSrSrSr Sr Sr Sr Sr	 Sr
 S	rS
rg)r  i  z6
Enumerator for requesting hidden variables in nodes.
	UNIQUE_IDPROMPTEXTRA_PNGINFO	DYNPROMPTAUTH_TOKEN_COMFY_ORGAPI_KEY_COMFY_ORGCOMFY_USAGE_SOURCEr8   N)r9   r:   r;   r<   r~   r  r  r  r  r  r  r  r=   r8   r>   r?   r  r    sS     I zFw#M hI v1d+ B- Kr>   r  c                  J   \ rS rSr% SrS\S'   SrS\S'   SrS\S'   SrS	\S
'   Sr	S\S'   Sr
S	\S'   SrS	\S'   SrS	\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS\S'   SrS	\S'   SrS\S'   SrS\S '   S!rg)"
NodeInfoV1i  Nr  r5   zdict[str, list[str]]input_orderr`   is_input_listr7  r6   z
list[bool]output_is_listoutput_nameoutput_tooltipsoutput_matchtypesr_   r  r   descriptionr   python_modulecategoryoutput_node
deprecatedexperimentaldev_onlyapi_noder  price_badgesearch_aliasesessentials_categoryhas_intermediate_outputr8   )r9   r:   r;   r<   r5   rv   r  r  r6   r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r=   r8   r>   r?   r  r    s    E4&*K%*M4FI#NJ#K#OY#!%y%D#NL#KM3HcKJL$HdHd#K#"NI"!!"&T&r>   r  c                  l    \ rS rSr% \" \S9rS\S'   \" \S9rS\S'   \" \S9r	S\S'   SS jr
SS jrS	rg
)PriceBadgeDependsi  default_factoryr7  widgetsr#  input_groupsc                   [        U R                  [        5      (       a!  [        S U R                   5       5      (       a  [	        S5      e[        U R
                  [        5      (       a!  [        S U R
                   5       5      (       a  [	        S5      e[        U R                  [        5      (       a!  [        S U R                   5       5      (       a  [	        S5      eg )Nc              3  L   #    U  H  n[        U[        5      (       + v   M     g 7frO   r   r_   .0r  s     r?   	<genexpr>-PriceBadgeDepends.validate.<locals>.<genexpr>  s      4bUaPQAs9K5K5KUa   "$z.PriceBadgeDepends.widgets must be a list[str].c              3  L   #    U  H  n[        U[        5      (       + v   M     g 7frO   r  r  s     r?   r  r    s     3`T_q
1c8J4J4JT_r  z-PriceBadgeDepends.inputs must be a list[str].c              3  L   #    U  H  n[        U[        5      (       + v   M     g 7frO   r  r  s     r?   r  r    s      9lZkUVjC>P:P:PZkr  z3PriceBadgeDepends.input_groups must be a list[str].)r   r  rC  anyr  r#  r  r[   s    r?   r   PriceBadgeDepends.validate  s    $,,--4bUYUaUa4b1b1bMNN$++t,,3`TXT_T_3`0`0`LMM$++T22c9lZ^ZkZk9l6l6lRSS 7mr>   c           
        0 nU Hh  nUR                  5       nUR                  5       X#R                  '   USS   H0  nUR                   SUR                   3nUR                  5       X&'   M2     Mj     / nU R                   HF  nX;  a(  [	        SU S[        UR                  5       5       35      eUR                  XU   S.5        MH     UU R                  U R                  S.$ )Nr,   r  z9PriceBadge depends_on.widgets references unknown widget 'z'. Available widgets: )r  r   )r  r#  r  )
r   r   r   r  r  rC  keysr  r#  r  )	rW   schema_inputsinput_typesinp
all_inputs
nested_inpprefixed_idwidgets_dataws	            r?   r\   PriceBadgeDepends.as_dict  s    &( CJ"%//"3K(n
 "%*--9+5+A+A+C(	 - ! .0A# OPQs S**.{/?/?/A*B)CE  N CD  $kk --
 	
r>   r8   Nr   Noner  zlist['Input']r   r  )r9   r:   r;   r<   r
   rC  r  rv   r#  r  r   r\   r=   r8   r>   r?   r  r    s:    t4GY4d3FI3#D9L)9T
r>   r  c                  `    \ rS rSr% S\S'   \" \S9rS\S'   \" SS9rS\S	'   SS
 jr	SS jr
Srg)
PriceBadgei  r_   exprr  r  
depends_onjsonatar  enginec                   U R                   S:w  a  [        SU R                    S35      e[        U R                  [        5      (       a  U R                  R                  5       (       d  [        S5      eU R                  R                  5         g )Nr  zUnsupported PriceBadge.engine 'z'. Only 'jsonata' is supported.z+PriceBadge.expr must be a non-empty string.)r  r  r   r  r_   stripr  r   r[   s    r?   r   PriceBadge.validate  se    ;;)#>t{{mKjkll$))S))1B1BJKK  "r>   c                h    U R                   U R                  R                  U5      U R                  S.$ )N)r  r  r  )r  r  r\   r  )rW   r  s     r?   r\   PriceBadge.as_dict  s,    kk//11-@II
 	
r>   r8   Nr  r  )r9   r:   r;   r<   rv   r
   r  r  r  r   r\   r=   r8   r>   r?   r  r    s1    
I$):K$LJ!L	*FC*#
r>   r  c                     \ rS rSr% SrS\S'    SrS\S'    SrS\S'    \" \	S	9r
S
\S'   \" \	S	9rS\S'   \" \	S	9rS\S'   SrS\S'    \" \	S	9rS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S'    SrS\S '    SrS!\S"'    SrS\S#'    S$ rS% rS(S& jrS'rg))Schemai  z!Definition of V3 node properties.r_   node_idNr   sdr  r  r   r#  zlist[Output]outputszlist[Hidden]hidden r  r7  r  Fr`   r  is_output_nodeis_deprecatedis_experimentalis_dev_onlyis_api_nodezPriceBadge | Noner  not_idempotentenable_expandaccept_all_inputs
str | Noner  r  c           	     (   / nU R                    H9  n[        U[        5      (       a  M  UR                  UR	                  5       5        M;     U Vs/ s H  o3R
                  PM     nnU R                   Vs/ s H  oUR
                  PM     nn[        U5      n[        U5      n/ n	[        U5      [        U5      :w  aI  U	R                  S[        U5      R                  5        V
Vs/ s H  u  pUS:  d  M  U
PM     snn
 S35        [        U5      [        U5      :w  aI  U	R                  S[        U5      R                  5        V
Vs/ s H  u  pUS:  d  M  U
PM     snn
 S35        [        U	5      S:  a  [        SR                  U	5      5      eU R                    H  nUR                  5         M     U R                   H  nUR                  5         M     U R                  b  U R                  R                  5         ggs  snf s  snf s  snn
f s  snn
f )zsValidate the schema:
- verify ids on inputs and outputs are unique - both internally and in relation to each other
zInput ids must be unique, but r,   z	 are not.zOutput ids must be unique, but r   
N)r#  r   r  extendr   r   r  setr  r  r   r   r  r  r   r  )rW   nested_inputsr5   r  	input_idsr1  
output_ids	input_set
output_setissuesitemcountr6   s                r?   r   Schema.validateT  s    &([[Ee\22$$U]]_5 ! $11=aTT=	1$(LL1LqddL
1	N	_
y>S^+MM:T[\eTfTlTlTn;|Tn[Trwz{r{DTn;|:}  ~G  H  Iz?c*o-MM;U\]gUhUnUnUp<~Upkdty|}t}TUp<~;  @I  J  Kv;?TYYv.//[[ENN !llFOO #'%%' (# 21 <}<~s$   G>5H$H4HHHc                   U R                   c  / U l         U R                  c  / U l        U R                  c  / U l        U R                  (       a  [        R
                  U R                  ;  a)  U R                  R                  [        R
                  5        [        R                  U R                  ;  a)  U R                  R                  [        R                  5        [        R                  U R                  ;  a)  U R                  R                  [        R                  5        U R                  (       a  [        R                  U R                  ;  a)  U R                  R                  [        R                  5        [        R                  U R                  ;  a)  U R                  R                  [        R                  5        [        U R                  5       H,  u  pUR                  b  M  SU SUR                   S3Ul        M.     g)zVAdd hidden based on selected schema options, and give outputs without ids default ids.N_)r#  r  r  r  r  r  r  r  r  r
  r  r  r  r   rt   )rW   r  r6   s      r?   finalizeSchema.finalizep  sQ    ;;DK<<DL;;DK**$++=""6#>#>?''t{{:""6#;#;<((;""6#<#<=}}DKK/""6==1##4;;6""6#7#78"4<<0IAyy s!FNN#315	 1r>   c                   [        U R                  5      nU R                  (       a=  U R                   H-  nUR                  4UR	                  S0 5      UR
                  '   M/     / n/ n/ n/ n/ nSn	U R                  (       Ga  U R                   H  n
UR                  U
R                  5        UR                  U
R                  5        UR                  U
R                  (       a  U
R                  OU
R                  5        UR                  U
R                  (       a  U
R                  OS 5        [        U
[        R                  5      (       a)  UR                  U
R                  R                   5        Sn	M  UR                  S 5        M     U	(       d  S n[#        S0 SU_SUR%                  5        VVs0 s H  u  pU['        UR)                  5       5      _M!     snn_SU R*                  _SU_SU_S	U_S
U_SU_SU R,                  _SU R                  _SU R.                  _SU R0                  _SU R2                  _SU R4                  _SU R6                  _SU R8                  _SU R:                  _SU R<                  _S[?        USS5      _SU R@                  b%  U R@                  RC                  U R                  5      OS _SU RD                  (       a  U RD                  OS _SU RF                  _6nU$ s  snnf )Nr  FTr5   r  r  r6   r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  RELATIVE_PYTHON_MODULEnodesr  r  r  r8   )$r  r#  r  r  r  r  r  r  rt   r   r   r   r   r  r   r  r  r  r   rC  r  r  r  r  r  r
  r  r  r  r  r  getattrr  r\   r  r  )rW   r   r5   r  r6   r  r  r  r  any_matchtypesr1  r"  r  infos                 r?   get_v1_infoSchema.get_v1_info  s   $T[[1;;++?E||o  2.v{{; & <<<\\aii(%%a&6&67""Q^^1>>S&&AIIqyy4Ha!1!122%,,QZZ-C-CD%)N%,,T2 "  $ 

EJ[[]S]\cd5::<00]S
 ,,
 	

 *
 $
 ,
 0
 
 **
 ]]
 ((
 ++
 %)$@$@
 ))
  --!
" %%#
$ %%%
& "#'?I'
( BFAQAQA]((00=cg)
* 372E2E4..4+
, !% 8 8-
0 - Ts   1&K-)r  r#  r  )r   r  )r9   r:   r;   r<   r~   rv   r   r  r
   rC  r#  r  r  r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r   r"  r*  r=   r8   r>   r?   r  r    s/   +LzL#Hc?5FK5!$7G\7 6FL6KK %d ;NI;hM4	 ND	 M4jOTcK[K`%)K")LND mM4W!t!x&**z"'T'(8686r>   r  c                4   0 0 0 0 S.nU R                  5       n U R                  SS 5      n[        X1U 5        Ub  U(       a  XCS'   0 nUR                  SS 5      nUb  [        U5      S:  a  XeS'   UR                  SS 5      nUb  [        U5      S:  a  XuS'   X4U4$ )N)r  r   r  r  r  r  r   r  )r  popr  r  )rn  r  include_hiddenr  r  r  r  r  s           r?   get_finalized_class_inputsr/    s    ')	H 	
AUU8T"Fxa0n#GLL$7M S%7!%;#0 "*,,/Ld"S".37R3SVW3W1L-.W$$r>   c           	        UR                  5        Hq  u  pEUR                  5        HX  u  pgUS   nU[        ;   a"  [        U5      n	[        X65      n
U	" XXtU
5        M6  [	        X65      nXpU   U'   U(       d  MQ  XS   U'   MZ     Ms     g )Nr   r  )r   r  r  r  r  )r  r  	curr_dictr	  r  inner_dr   r  rt   dynamic_input_func
new_prefixr9  s               r?   r  r    s    (0
 IBAhG..%;G%D"*;;
"8%ZX  /{?5:$\2;>J_-l; )  1r>   c                6    S0 0nU  H  n[        X!5        M     U$ )Nr  )add_to_dict_v1)r#  r5   r  s      r?   r  r    s'    BE q  Lr>   c                    U R                   (       a  SOSnU R                  5       nUR                  SS 5        U R                  5       U4UR	                  U0 5      U R
                  '   g )Nr   r  )r   r\   r-  r   r  r   )r  rn  r"  r\   s       r?   r6  r6    sL    

*
CiikGKK
D!#$==?G"<ALLb!$$r>   c                      \ rS rSrSrSrg)r  i  
empty_dictr8   N)r9   r:   r;   r<   r  r=   r8   r>   r?   r  r    s    Jr>   r  c                0   UR                  SS 5      nUR                  S0 5      nUc  U $ U R                  5       n 0 nUR                  SS5      nUR                  5        H  u  pgUR                  S5      nUn	[	        U5       H|  u  pU
[        U5      S-
  :H  nU(       aM  U R                  US 5      nUc(  UR                  US 5      nU[        R                  :X  a  0 nU(       a  X4nXU'   Mj  U	R                  U0 5      n	M~     M     U R                  U5        U $ )Nr  r  r  Fr  r,   )r  r  r   splitr  r  r-  r  r  r  update)r  r  pathsdefault_value_dictresultcreate_tupler"  pathpartscurrentr  r~  is_lastr  default_options                  r?   build_nested_inputsrF    s
   KK.E %BBG}[[]FF;;5u=L[[]	

3e$DACJN*G

3-=%7%;%;C%FN%)A)L)LL ""LE"
!,,Q3 %	 #( MM&Mr>   c                  x   \ rS rSr% SrSrSrSrS\S'   \	\
S&S j5       5       r\	\
S'S j5       5       r\	S(S j5       r\	S)S	 j5       r\	S*S
 j5       rS r\	S 5       r\\	S 5       5       r\S 5       r\\	S'S j5       5       r\\	S'S j5       5       r\\	S+S j5       5       r\\	S,S j5       5       rSr\\S 5       5       rSr\\S 5       5       rSr\\S 5       5       rSr \\S 5       5       r!Sr"\\S 5       5       r#Sr$\\S 5       5       r%Sr&\\S 5       5       r'Sr(\\S 5       5       r)Sr*\\S 5       5       r+Sr,\\S 5       5       r-Sr.\\S 5       5       r/Sr0\\S 5       5       r1Sr2\\S 5       5       r3Sr4\\S  5       5       r5Sr6\\S! 5       5       r7\\	S-S" j5       5       r8\\	S# 5       5       r9\\	S&S$ j5       5       r:S%r;g)._ComfyNodeBaseInternali   z]Common base class for storing internal methods and properties; DO NOT USE for defining nodes.Nr  r  c                    [         ez?Override this function with one that returns a Schema instance.NotImplementedErrorr   s    r?   define_schema$_ComfyNodeBaseInternal.define_schema)  
     "!r>   c                    [         ez=Override this function with one that performs node's actions.rK  r   r   s     r?   execute_ComfyNodeBaseInternal.execute/  rP  r>   c                    [         e)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.
rK  rS  s     r?   validate_inputs&_ComfyNodeBaseInternal.validate_inputs5  s
     "!r>   c                    [         e)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.rK  rS  s     r?   fingerprint_inputs)_ComfyNodeBaseInternal.fingerprint_inputs=  s
    
 "!r>   c                @    U Vs/ s H  o!U   b  M
  UPM     sn$ s  snf a  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
r8   r   r   r  s      r?   check_lazy_status(_ComfyNodeBaseInternal.check_lazy_statusD        "(@$<@@@   	c                8    U R                   R                  5         g rO   )r   VALIDATE_CLASSr[   s    r?   rX   _ComfyNodeBaseInternal.__init__T  s    %%'r>   c                    [         $ rO   )rH  rM  s    r?   GET_BASE_CLASS%_ComfyNodeBaseInternal.GET_BASE_CLASSW  s    %%r>   c                    [        U S5      c  [        SU R                   S35      e[        U S5      c  [        SU R                   S35      eg )NrN  z5No define_schema function was defined for node class r  rT  z/No execute function was defined for node class )r'   r   r9   rM  s    r?   rd  %_ComfyNodeBaseInternal.VALIDATE_CLASS[  s[     sO4<STWT`T`SaabcddsI.6Mcll^[\]^^ 7r>   c                P    [         R                  " U R                  5      (       a  gg)NEXECUTE_NORMALIZED_ASYNCEXECUTE_NORMALIZED)inspectiscoroutinefunctionrT  rM  s    r?   FUNCTION_ComfyNodeBaseInternal.FUNCTIONc  s    &&s{{33-#r>   c                   U R                   " U0 UD6nUc  [        5       nO[        U[        5      (       a  O[        U[        5      (       a	  [        U6 nOk[        U[        5      (       a  [        R                  U5      nO@[        U[        5      (       a  [        UR                  S9nO[        S[        U5       35      eUR                  b4  U R                  R                  (       d  [        SU R                   S35      eU$ 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.rT  
NodeOutputr   r  r  r  r+   messager   r   expandSCHEMAr  r9   r   argsr   	to_returns       r?   rm  )_ComfyNodeBaseInternal.EXECUTE_NORMALIZEDi  s     KK00	"I	:..	5))"I.I	4((",,Y7I	#344"93D3DEI=d9o=NOPP'

0H0HeCLL>  2p  q  r  rr>   c                "  #    U R                   " U0 UD6I S h  vN nUc  [        5       nO[        U[        5      (       a  O[        U[        5      (       a	  [        U6 nOk[        U[        5      (       a  [        R                  U5      nO@[        U[        5      (       a  [        UR                  S9nO[        S[        U5       35      eUR                  b4  U R                  R                  (       d  [        SU R                   S35      eU$  N7frs  rv  r{  s       r?   rl  /_ComfyNodeBaseInternal.EXECUTE_NORMALIZED_ASYNC}  s      ++t6v66	"I	:..	5))"I.I	4((",,Y7I	#344"93D3DEI=d9o=NOPP'

0H0HeCLL>  2p  q  r  r 7s   DDC5Dc                    [        U 5      (       a  U O
[        U 5      n[        U5      n[        R	                  U5      Ul        U$ )z<Creates clone of real node class to prevent monkey-patching.)r(   r   r*   r  r  r  )r   r  c_type
type_clones       r?   PREPARE_CLASS_CLONE*_ComfyNodeBaseInternal.PREPARE_CLASS_CLONE  s:     *2##DI&9&&A
(55g>
r>   c                Z    U R                  5       nUR                  U 5      n[        U5      $ rO   )
GET_SCHEMAr*  r   r   schemar)  s      r?   GET_NODE_INFO_V1'_ComfyNodeBaseInternal.GET_NODE_INFO_V1  s*     !!!#&d|r>   c                T    U R                   c  U R                  5         U R                   $ rO   )_DESCRIPTIONr  rM  s    r?   DESCRIPTION"_ComfyNodeBaseInternal.DESCRIPTION  &     #NNr>   c                T    U R                   c  U R                  5         U R                   $ rO   )	_CATEGORYr  rM  s    r?   CATEGORY_ComfyNodeBaseInternal.CATEGORY  "     == NN}}r>   c                T    U R                   c  U R                  5         U R                   $ rO   )_EXPERIMENTALr  rM  s    r?   EXPERIMENTAL#_ComfyNodeBaseInternal.EXPERIMENTAL  &     $NN   r>   c                T    U R                   c  U R                  5         U R                   $ rO   )_DEPRECATEDr  rM  s    r?   
DEPRECATED!_ComfyNodeBaseInternal.DEPRECATED  s"     ??"NNr>   c                T    U R                   c  U R                  5         U R                   $ rO   )	_DEV_ONLYr  rM  s    r?   DEV_ONLY_ComfyNodeBaseInternal.DEV_ONLY  r  r>   c                T    U R                   c  U R                  5         U R                   $ rO   )	_API_NODEr  rM  s    r?   API_NODE_ComfyNodeBaseInternal.API_NODE  r  r>   c                T    U R                   c  U R                  5         U R                   $ rO   )_OUTPUT_NODEr  rM  s    r?   OUTPUT_NODE"_ComfyNodeBaseInternal.OUTPUT_NODE  r  r>   c                T    U R                   c  U R                  5         U R                   $ rO   )_HAS_INTERMEDIATE_OUTPUTr  rM  s    r?   HAS_INTERMEDIATE_OUTPUT._ComfyNodeBaseInternal.HAS_INTERMEDIATE_OUTPUT  s&     ''/NN+++r>   c                T    U R                   c  U R                  5         U R                   $ rO   )_INPUT_IS_LISTr  rM  s    r?   INPUT_IS_LIST$_ComfyNodeBaseInternal.INPUT_IS_LIST  s&     %NN!!!r>   c                T    U R                   c  U R                  5         U R                   $ rO   )_OUTPUT_IS_LISTr  rM  s    r?   OUTPUT_IS_LIST%_ComfyNodeBaseInternal.OUTPUT_IS_LIST  &     &NN"""r>   c                T    U R                   c  U R                  5         U R                   $ rO   )_RETURN_TYPESr  rM  s    r?   RETURN_TYPES#_ComfyNodeBaseInternal.RETURN_TYPES  r  r>   c                T    U R                   c  U R                  5         U R                   $ rO   )_RETURN_NAMESr  rM  s    r?   RETURN_NAMES#_ComfyNodeBaseInternal.RETURN_NAMES  r  r>   c                T    U R                   c  U R                  5         U R                   $ rO   )_OUTPUT_TOOLTIPSr  rM  s    r?   OUTPUT_TOOLTIPS&_ComfyNodeBaseInternal.OUTPUT_TOOLTIPS  s&     'NN###r>   c                T    U R                   c  U R                  5         U R                   $ rO   )_NOT_IDEMPOTENTr  rM  s    r?   NOT_IDEMPOTENT%_ComfyNodeBaseInternal.NOT_IDEMPOTENT  r  r>   c                T    U R                   c  U R                  5         U R                   $ rO   )_ACCEPT_ALL_INPUTSr  rM  s    r?   ACCEPT_ALL_INPUTS(_ComfyNodeBaseInternal.ACCEPT_ALL_INPUTS  s&     !!)NN%%%r>   c                \    U R                  5       nUR                  U 5      nUR                  $ rO   )FINALIZE_SCHEMAr*  r5   r  s      r?   INPUT_TYPES"_ComfyNodeBaseInternal.INPUT_TYPES  s,     $$&!!#&zzr>   c                F    U R                  5       nUR                  5         U$ )z#Call define_schema and finalize it.)rN  r"  )r   r  s     r?   r  &_ComfyNodeBaseInternal.FINALIZE_SCHEMA#  s!     ""$r>   c                   U R                  5         U R                  5       nUR                  5         U R                  c  UR                  U l        U R
                  c  UR                  U l        U R                  c  UR                  U l        U R                  c  UR                  U l	        U R                  c  UR                  U l        U R                  c  UR                  U l        U R                  c  UR                   U l        U R"                  c  UR$                  U l        U R&                  c  UR(                  U l        U R*                  c  UR,                  U l        U R.                  c  UR0                  U l        U R2                  c  / n/ n/ n/ nUR4                  (       a  UR4                   H  nUR7                  UR8                  5        UR7                  UR:                  (       a  UR:                  OUR8                  5        UR7                  UR<                  5        UR7                  UR>                  (       a  UR>                  OS5        M     X l        X0l         X@l!        XPl"        Xl#        U$ )zYValidate node class, finalize schema, validate schema, and set expected class properties.N)$rd  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  rt   r   r   r   r  r  r  rz  )r   r  r6   r  r  r  r1  s          r?   r  !_ComfyNodeBaseInternal.GET_SCHEMA+  s    	$$&#%11C== "OOCM$ & 6 6C??"$22CO== "..CM== "..CM#%44C''/+1+I+IC(%!'!5!5C&"("7"7C!!)%+%=%=C"$FKN O~~AMM!)),&&q~~QYYW"))!*:*:;#**		199tL	 ( !' +"0#2 
r>   r8   r   r  r   rw  r   z
bool | strr   r   r   r7  )r  r  r   ztype[ComfyNode])r   r  )r   zdict[str, dict])<r9   r:   r;   r<   r~   r%  rz  r  rv   r  r   rN  rT  rW  rZ  r_  rX   rg  r   rd  r%   rp  rm  rl  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=   r8   r>   r?   rH  rH     s   g!F  FL"  " "  " " " " " A A( & & _  _ $ $
   $   $      
 L
    
 I
  
 M
!  !
 K
  
 I
  
 I
  
 L
    
  $
,  ,
 N
"  " O
#  #
 M
!  !
 M
!  !
 
$  $
 O
#  #
 
&  &
   
    -  -r>   rH  c                      \ rS rSrSr\\SS j5       5       r\\SS j5       5       r\SS j5       r	\SS j5       r
\SS j5       r\\S 5       5       rS	rg
)	ComfyNodei_  z#Common base class for all V3 nodes.c                    [         erJ  rK  rM  s    r?   rN  ComfyNode.define_schemab  rP  r>   c                    [         erR  rK  rS  s     r?   rT  ComfyNode.executeh  rP  r>   c                    [         e)zXOptionally, define this function to validate inputs; equivalent to V1's VALIDATE_INPUTS.rK  rS  s     r?   rW  ComfyNode.validate_inputsn  
     "!r>   c                    [         e)zVOptionally, define this function to fingerprint inputs; equivalent to V1's IS_CHANGED.rK  rS  s     r?   rZ  ComfyNode.fingerprint_inputss  r  r>   c                @    U Vs/ s H  o!U   b  M
  UPM     sn$ s  snf r]  r8   r^  s      r?   r_  ComfyNode.check_lazy_statusx  ra  rb  c                    [         $ )z>DO NOT override this class. Will break things in execution.py.)r  rM  s    r?   rg  ComfyNode.GET_BASE_CLASS  s
     r>   r8   Nr  r  r  r  r  )r9   r:   r;   r<   r~   r  r   rN  rT  rW  rZ  r_  r   rg  r=   r8   r>   r?   r  r  _  s    -"  " "  " " " " " A A   r>   r  c                  \    \ rS rSrSrSSSS.S
S jjr\S 5       r\SS j5       r	SS jr
S	rg)rw  i  zb
Standardized output of a node; can pass in any number of args and/or a UIOutput into 'ui' kwarg.
N)uiry  ru  c               4    X@l         Xl        X l        X0l        g rO   )r|  r  ry  ru  )rW   r  ry  ru  r|  s        r?   rX   NodeOutput.__init__  s    	.r>   c                P    [        U R                  5      S:  a  U R                  $ S $ r  )r  r|  r[   s    r?   r?  NodeOutput.result  s     		NQ.tyy8D8r>   c                    SnS nS nSU;   a,  US   n[        U[        5      (       a  U " UR                  S9$ UnSU;   a  US   nSU;   a  US   nU " X#US.6$ )Nr8   r?  rt  r  ry  )r  ry  )r   r+   rx  )r   datar|  r  ry  r?  s         r?   r  NodeOutput.from_dict  sr    t(^F&"2336>>::D4<dBt(^FD//r>   c                     U R                   U   $ rO   )r|  )rW   indexs     r?   __getitem__NodeOutput.__getitem__  s    yyr>   )r|  ru  ry  r  )r|  r   r  z_UIOutput | dictry  r  ru  r_   )r  r  r   rw  r  )r9   r:   r;   r<   r~   rX   r   r?  r  r  r  r=   r8   r>   r?   rw  rw    sC     9=4fj / 9 9 0 0 r>   rw  c                  .    \ rS rSrS r\SS j5       rSrg)	_UIOutputi  c                    g rO   r8   r[   s    r?   rX   _UIOutput.__init__  r   r>   c                    g rO   r8   r[   s    r?   r\   _UIOutput.as_dict  s    r>   r8   N)r   r  )r9   r:   r;   r<   rX   r   r\   r=   r8   r>   r?   r  r    s      r>   r  c                  .    \ rS rSr% SrS\S'   S\S'   Srg)InputMapOldIdi  z0Map an old node input to a new node input by ID.r_   new_idold_idr8   Nr9   r:   r;   r<   r~   rv   r=   r8   r>   r?   r  r    s    :KKr>   r  c                  .    \ rS rSr% SrS\S'   S\S'   Srg)	InputMapSetValuei  z*Set a specific value for a new node input.r_   r  r   	set_valuer8   Nr  r8   r>   r?   r  r    s    4KNr>   r  c                  .    \ rS rSr% SrS\S'   S\S'   Srg)	OutputMapi  z,Map outputs of node replacement via indexes.ra   new_idxold_idxr8   Nr  r8   r>   r?   r  r    s    6LLr>   r  c                  D    \ rS rSrSr   S         SS jjrS rSrg)	NodeReplacei  a  
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.
Nc                @    Xl         X l        X0l        X@l        XPl        g rO   new_node_idold_node_idold_widget_idsinput_mappingoutput_mapping)rW   r  r  r  r  r  s         r?   rX   NodeReplace.__init__  s"     '&,*,r>   c                    U R                   U R                  U R                  U R                  (       a  [	        U R                  5      OSU R
                  (       a  [	        U R
                  5      S.$ SS.$ )z;Create serializable representation of the node replacement.Nr
  )r  r  r  r  rC  r  r[   s    r?   r\   NodeReplace.as_dict  si      ++++"119=9K9KT$"4"45QU;?;N;Nd4#6#67
 	

 UY
 	
r>   )r  r  r  r  r  )NNN)
r  r_   r  r_   r  r  r  zlist[InputMap] | Noner  zlist[OutputMap] | None)r9   r:   r;   r<   r~   rX   r\   r=   r8   r>   r?   r  r    sJ    $ *.-1/3--- )- -	-
 /-
r>   r  )er3   rA   rL   rd   rk   r   r   r{   r   r   r   r   r   r   r  r  r%  r9  rF  rM  rP  rX  r[  ri  r   r  r  r  r  r   r  r  ri  r  r  r  rl  ro  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-  r4  rE  rL  rV  rY  r\  r_  r`  rb  rf  rz  rr  rZ  r  r  r  r  r  r  r  r  rw  r6  r  rO  r  r  rc  rr  r  r  r  )rt   r_   )rt   r_   r   ztype[ComfyTypeIO]rO   )r  r  r   r  r   r7  )r  r  r   r  r   r_   )rt   r_   r  cCallable[[dict[str, Any], dict[str, Any], tuple[str, dict[str, Any]], str, list[str] | None], None])rt   r_   r   r  )F)rn  r  r  r  r   ztuple[dict[str, Any], V3Data])
r  r  r  r  r1  r  r	  r  r   r  )r#  r   r   r  )r  r{   rn  r  )r  r  r  r  )
__future__r   r  rn  abcr   r   collectionsr   collections.abcr   dataclassesr   r	   r
   enumr   typingr   r   r   r   r   r   typing_extensionsr   r   rH  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   r_   r3   rA   rL   rd   rk   rr   r   rw   r   r   r   r{   r   r   r   r   r   r  r  r%  r9  rF  rM  rP  rX  r[  ri  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-  r4  rE  rL  rV  rY  r\  r_  r`  rb  rf  ri  rl  ro  rr  rz  r  r  r  r  r  r  r  r>  rO  rZ  rc  rr  r  r  r  rv   r  r  r  r  r  r  r  r  r  r  r  r/  r  r  r6  r  rF  rH  r  rw  r  r  r  InputMapr  r  __all__r8   r>   r?   <module>r)     s   "   #  $ 0 0  L L 0 -1==+801"2E% % % 8 : :d d  6'C '3  
 Ct'R   (F >[% [2V ( 
*  9k  & 5+  2 7K  8 8[  * 71BK 1B 1Bf 7  . 7K   )*  + 8
I[ 
I 
I 6;   8	[ 	 	 >"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 ! %! $%[  & %&2k 2 '2 >"+  # >";  # ?#;  $" &'"k " (" 9
[ 
 
 &'f  ( <   ! 7K   ?#;  $ 6;   6;   3k   =!  " ?#;  $ )*  + 8[   ().) .) *.)` '(, , ),\	5# 		FC 	 ! ! &'FIz FI (FIP *+2h: 2h ,2hh )*,d* ,d +,d\ >"	#: 	# #	# 7
#K 
# 
# >"+  #4 7K  & ;   
 7!K ! !H HJ   E  J))] !YY Y(L (LTKS$ K( ' ' '2 '
 '
 '
T 
 
 
( q q qf% %.K K =  Fz/ z~	-& -` $  B I 
y 
 ++	 
%
 %
Pjr>   