)2h=ddlZddlZddlZddlZddlZddlZddlZddlmZddl Z ddl m Z m Z m Z mZddlZddlZddlZddlmZmZmZmZddlmZmZddlmZmZmZmZm Z ddl!m"Z"Gdd eZ#Gd d e$Z%Gd d Z&GddeZ'GddZ(ddifdZ)dZ*d dZ+dZ,d!dZ-dZ.dZ/GddZ0dZ1dZ2dZ3dZ4GddZ5y)"N)Enum)ListLiteral NamedTupleOptional)get_input_info ExecutionList DynamicPromptExecutionBlocker)is_link GraphBuilder)HierarchicalCacheLRUCacheDependencyAwareCacheCacheKeySetInputSignature CacheKeySetID)validate_node_inputceZdZdZdZdZy)ExecutionResultrN)__name__ __module__ __qualname__SUCCESSFAILUREPENDING0D:\ComfyUI_windows_portable\ComfyUI\execution.pyrrsGGGrrc eZdZy)DuplicateNodeErrorN)rrrrrr r"r"srr"ceZdZdZdZy)IsChangedCachec.||_||_i|_yN) dynprompt outputs_cache is_changed)selfr'r(s r __init__zIsChangedCache.__init__s"*rc||jvr|j|S|jj|}|d}tj|}t |dsd|j|<|j|Sd|vr!|d|j|<|j|St |d||d\}} t||d}|Dcgc]}t|trdn|c}|d<|d|j|<|j|Scc}w#t$r<} tjdj| td|d<Yd} ~ fd} ~ wwxYw#|d|j|<wxYw)N class_type IS_CHANGEDFr)inputsz WARNING: {}NaN)r)r'get_nodenodesNODE_CLASS_MAPPINGShasattrget_input_data_map_node_over_list isinstancer Exceptionloggingwarningformatfloat) r*node_idnoder- class_definput_data_all_r)xes r getzIsChangedCache.get#sj doo %??7+ +~~&&w/,' --j9 y,/',DOOG $??7+ + 4 '+L'9DOOG $??7+ ++4>9gtT :,Y UJZd!eZdUV*Q8H*I$q"PZd!eD  (,L'9DOOG $w'' "f . OOM003 4!&uD  .(,L'9DOOG $s<5D D!D D E2E E EEE)N)rrrr+rDrrr r$r$s  (rr$ceZdZdZdZdZy) CacheTyperrrN)rrrCLASSICLRUDEPENDENCY_AWARErrr rFrF?sG CrrFc,eZdZddZdZdZdZdZy)CacheSetNcb|tjk(r&|jtjdnN|tj k(r+|d}|j |tjdn|j|j|j|jg|_ y)Nz"Disabling intermediate node cache.rzUsing LRU cache) rFrIinit_dependency_aware_cacher9inforHinit_lru_cacheinit_classic_cacheoutputsuiobjectsall)r* cache_type cache_sizes r r+zCacheSet.__init__Fs 33 3  , , . LL= > 9== (!    + LL* +  # # %LL$''4<<8rc|tt|_tt|_tt|_yr&)rrrQrRrrSr*s r rPzCacheSet.init_classic_cacheUs(()BC #$=>(7 rctt||_tt||_t t |_y)N)max_size)rrrQrRrrrS)r*rVs r rOzCacheSet.init_lru_cacheZs, 9JO 4zJ(7 rc|tt|_tt|_tt|_yr&)rrrQrRrrSrXs r rMz$CacheSet.init_dependency_aware_cache`s(+,EF &'@A+M: rcp|jj|jjd}|S)N)rQrR)rQrecursive_debug_dumprR)r*results r r]zCacheSet.recursive_debug_dumpes0||88:''..0  rNN)rrrr+rPrOrMr]rrr rKrKEs 98 8 ; rrKc|j}ii|D]|}t||\}} } fd} t|rd| r| jddsP|d} |d} || S|j| }|| n| t |k\r| || }|<| |g<d|vr|d}|D]|dk(r||j nig<|dk(r|g<|d k(r|jd dg<|d k(r|g<|d k(r|jd dg<|dk(s|jddg<fS)Ncd<d<y)NTr&r)r@ missing_keysrBsr mark_missingz$get_input_data..mark_missingss"LO 'N1 rrawLinkFrrhiddenPROMPT DYNPROMPT EXTRA_PNGINFO extra_pnginfo UNIQUE_IDAUTH_TOKEN_COMFY_ORGauth_token_comfy_orgAPI_KEY_COMFY_ORGapi_key_comfy_org) INPUT_TYPESrr rDlenget_original_prompt)r/r? unique_idrQr' extra_data valid_inputs input_datarAinput_category input_inforcinput_unique_id output_index cached_outputobjhr@rbrBs @@@r r5r5ls((*LNL AY (6y!\(R%>: ( :  *..TY:Z(mO%a=L#KK8M$s=11 -C #N1   '!+ N1 -0<  "AtxHQH]Y%B%B%Dce$fq!t{"%.Kq!t&%/^^OT%J$Kq!t{"%.Kq!t--%/^^4JD%Q$Rq!t**%/^^4G%N$Oq! < ''rc. tdd}t|dk(rd}n td|jD}d}g d fd } |r | |d| S|dk(r | i St |D]} ||| } | | |  S) N INPUT_IS_LISTFrc32K|]}t|ywr&)rp).0rBs r z&_map_node_over_list..sD,CqCF,Csc ||jDcic]\}}||t||kDr|ndc}}Scc}}w)N)itemsrp)dikvs r slice_dictz'_map_node_over_list..slice_dicts::;'')D)$!Q1#a&1*Q"--)DDDs 8c^rtjd}|jD]@\}}|r|D]}t|ts|}nt|ts4r|n|}n|. | | j t di|y j |y)Nr)r2before_node_executionrr7r appendgetattr) r/index input_is_listexecution_blockrrrCallow_interruptexecution_block_cbfuncr{pre_execute_cbresultss r process_inputsz+_map_node_over_list..process_inputss   ' ' )LLNDAqA!!%56!-.;M"4Q"7ST#  ")e.?u% NN-73-77 8 NN? +r)r)NF)rrpmaxvaluesrange) r{r@rrrrr max_len_inputrrr input_dictrs ` ```` @r r6r6sC%8M >a DN,A,A,CDD EG,,(~q F N ! r N}%A#NA6J :q )& Nrcg}dgt|dz}t|dr |j}tt t|d|D]\}}|rWg}|D]>}t ||t r|j||+|j||@|j|_|j|Dcgc]}|| c}|Scc}w)NFrOUTPUT_IS_LIST) rpr4rziprr7r rextend)rr{outputoutput_is_listris_listvalueos r merge_result_datars FWs71:.Ns$%++%GAJ0.A 7 Ead$45LL1&LL1&  MM% MM1A1Q41 2B M2s< C c >g}g}g}t|||jd||}d}tt|D]X} || } t | t rd| vr|j | dd| vr_d}| d} | jdd} t | tr"t| gt|jz} |j | | fd| vs| jdd} t | tr"t| gt|jz} |j | |j d| ft | tr"t| gt|jz} |j | |j d| f[|r|} nt|dkDr t||} ng} t }t|dkDr?|djDcic]}||Dcgc]}||D]}|c}}!}}}}| ||fScc}}wcc}}}w)NT)rrrFrRexpandr^r) r6FUNCTIONrrpr7dictrrDr tuple RETURN_TYPESrkeys)r{r@rrruissubgraph_results return_values has_subgraphrr new_graphr^rrRrrBys r get_output_datarsG C'^S\\[_uGXfgML 3}% & !  a qy 1T7#1}# hK x.f&67"F8c#2B2B.C#CDF ''F(;<Qx.f&67"F8c#2B2B.C#CDFv& ''v7!-.1#C$4$4 556 NN1   # #T1I ./'2! W "7C0 B 3x!|9 display_noder prompt_idrrF executing)r>rrcheck_lazy_statusT)rc |jJtd|jdgggd }jd|jt dS|S)NzExecution Blocked: ExecutionBlocked rr= node_typerexception_messageexception_type tracebackcurrent_inputscurrent_outputsexecution_error)messagelist send_sync client_idr )blockmesr-rrserverrrs r rz#execute..execution_block_cbIsi==,%.#,%/$(N/B5==/-R*<%'*,+- C$$%6V=M=MN+D11 Lrc4tj|dyNr)r set_default_prefix) call_indexrrs r rzexecute..pre_execute_cb[s// :qIr)rr)r=r parent_node real_node_id)metarzAttempt to add duplicate node zO. Ensure node ids are unique and deterministic or use graph_utils.GraphBuilder.override_display_id OUTPUT_NODEzProcessing interruptedr=z$!!! Exception during processing !!! )r=rrrrz(Got an OOM, unloading all loaded models.)=get_real_node_idget_display_node_idget_parent_node_idr1r2r3rQrDrrRrrrrr rrr5 last_node_idrSsetr4r6sumr7rrrpmake_input_strong_linkrrrrhas_noder"radd_ephemeral_noderrTensure_subcache_for clean_unusedadd_nodeadd_strong_linkcomfymodel_managementInterruptProcessingExceptionr9rNrr8sysexc_infofull_type_namererrorr format_exc format_tb OOM_EXCEPTIONunload_all_modelsadd)O11)K^pt"u"%co*\oTUVZI[1o*\^`&a"b.=#oAcAR^+qL/@$%o#'!+,&==iK-+33T4@@ ! !$ J3B3k}O]4^ 0KL y>A  IIMM)($3#1$0  $& +  yRamvFO.QSYScScd NLN! 3{+,*5a.' <$"))5,*?@$->>#3$--g6"47UV]U^_n6o#pp$4/8oo.?*$++G4%.]]3H)%T !44WiT^_%.|%< $)$=$=j$I "9m<AVAVZ^A^*11':/@#3|#45"<?38DQ8JLYZO\]L^+L,33\;4OP6#))4*>?--.|,L)))\BOOQ$)''0*(..tAwQK)2@ $Y /#++T48 89k2F LL  # #T4 00i+]#^  ! ! > >= -. |  ''<< <\\^ Q',!  %#% . 4 4 6 fGM-Nv!l1ov-N$T*!7  > ? MMD E  " " 4 4 6'';;/%?"'(8"9";/"'(8"9#'#8 C   .u  Erc ntjdd|vr|d|j_nd|j_g|_|j dd|idt j5t|}t||jj}|jjD]3}|j||j||j5g}|D]9} |jjj!| )|j#| ;t$j&j)|j d||ddi} t+} t-||jj} |jjj/} t1|D]} | j3| | j5s| j7\} }}|!|j9||j:| | ||nt=|j||j| || || | \}}}|t>j@k7|_!|t>j@k(r!|j9||j:| | ||n[|t>jDk(r| jGn| jI| j5s|j dd|idi}i}|jjJj/}|D]:} |jjJj!| }|+|d || <|d || <<||d |_&d|j_'t$j&jPrt$j&jSdddy#1swYyxYw) NFrexecution_startrr&execution_cached)r2rexecution_successrr)rQr)*r2interrupt_processingrrrr#torchinference_moder r$rrQrT set_promptrrrDrrrcleanup_models_gcrr all_node_idsrris_emptystage_node_executionr(original_promptrrrrrunstage_node_executioncomplete_node_executionrRhistory_resultrDISABLE_SMART_MEMORYr)r*r'rrsexecute_outputsdynamic_promptis_changed_cacher  cached_nodesr=rrrrrrr^ ui_outputs meta_outputsr2ui_infos r rzPromptExecutor.executes^ ""5) * $$.{$;DKK !$(DKK !! *k9,EQVW  ! ! #*62N-ndkk>Q>QR   @PQ""$)L!;;&&**73? ''0"  " " 4 4 6   /%1 J$)  +(* $uH*>4;;;N;NON"kk11>>@O0''01%--/%3%H%H%J"$// >;Y;Y[jltv{}A$+DKKV]_iksu~AOQi%j!r%)@)@@ _444// >;Y;Y[jltv{}A666"99;"::<%--/"  !4 Y6P\a bJL;;>>668L'++..,,W5&*1(*;Jw',3FOL) ( &$#D (,DKK $%%::&&88:q$ # #s"1B$N+F;N+A*N+=A%N++N4)FN) rrrr+rrrr#r(rrrr rrs5  FtFFF857C;rrc  |}||vr||S||d}||d}tj|}|j}t|j dij t|j di}g} d} g} d} t |dr9tj|j} | j} | jdu} i}|D]s}t|||\}}}|J||vr!|dk(rdd |d |id }| j|>||}||f}t|trt!|d k7rd d||||dd }| j||d}||d}tj|j"}||d}|||<d| vr5t%||s)|d|d|d}dd|||||dd }| j| t'|||}|ddurd}   t|t6rd|vr |d}|||<|dk(rt9|}|||<|dk(rt;|}|||<|dk(rt1|}|||<|d k(rt=|}|||<|| vs| rd&|vr:||d&kr2d'd(j?||d&||||dd }| j|d)|vr:||d)kDr2d*d+j?||d)||||dd }| j|t|ts|}!||!vs!|}"d,}#t!|!d-kDrd.t!|!d}#d}"n t1|!}#d/d0|d1|d2|#||"|dd }| j|vt!| dkDs| rtA|||\}$}i}%|$D]}|| vs| s |$||%|<d| vr|g|%d<tC||%d}&|%D]]}tE|&D]M\}'}|dus t|tFr|}|dur|d3t1|z }d4d5|d |id }| j|O_t!| dkDs| durd| |f}&ndg|f}&|&||<|&S#t($rl}t+j,\}}}d} t/|}ddt1|||t1||t3j4||dd g} d| |f||<Yd}~d}~wwxYw#t($r=}d!d"|d#|d$|d$||||t1|d%d }| j|Yd}~d}~wwxYw)6Nr/r-requiredoptionalTFVALIDATE_INPUTSrequired_input_missingzRequired input is missing input_nametyperdetails extra_inforbad_linked_inputzBBad linked input, must be a length-2 list of [node_id, slot_index])rF input_configreceived_valuerr input_typesz, received_type(z) mismatch input_type()return_type_mismatchz)Return type mismatch between linked nodes)rFrL received_type linked_node!exception_during_inner_validationz$Exception when validating inner node)rFrLrrrrR __value__INTFLOATSTRINGBOOLEANinvalid_input_typez&Failed to convert an input value to a z valuez, )rFrLrMrminvalue_smaller_than_minzValue {} smaller than min of {}rvalue_bigger_than_maxzValue {} bigger than max of {}z(list of length value_not_in_listzValue not in listz: 'z ' not in z - custom_validation_failedz!Custom validation failed for node)$r2r3rorrDunionr4inspectgetfullargspecrDargsvarkwrrr7rrprrvalidate_inputsr8rrrrrrrrr<rr;r5r6 enumerater )(r'item validatedrrr/r- obj_class class_inputsrterrorsvalidvalidate_function_inputsvalidate_has_kwargsargspecreceived_typesrB input_typervrJrvalrNo_id o_class_typerrQrIrrrArrreasons combo_optionsrL list_infor@input_filteredretrs( r rfrf-sxII## I x (F "<0J))*5I((*L|'' 267==c,BRBRS]^`Ba>bcL F E!y+,(()B)BC#*<< %mm47N 1? 1l1[. NJ%%% F?+4:"#$a#  e$ QiJ' c4 3x1}.c"#&'(,*-#  e$q6D!$< 5L)),7DDAc!fIM -N1 $<TU_T``ab2J&&'(,)6'* #  e$ #FD)<Q45=!E!0! c4([C-?k*C #F1I&c(C #F1I(*C #F1I)c(C #F1I*s)C #F1I 009LJ&3E1B+B 8#D#K#KCQ[\aQb#c&'S*+,0.1' EMM%(J&3E1B+B 7#C#J#J3PZ[`Pa#b&'S*+,0.1' EMM%(j$/$.M-/'+ $& }-2*:3};M:Na(PI+/L(+M(:I%8':*+CuIi['I./0<25+ ! e, OR #$q(,?*69iHA,,0C$21$5q!  4 4-;,1!;#F#*(!' EMM%(' $ 6{Q%t+fi(R#Ii Jc  \\^ Q!/!4?E"2w&'(,-0W*8%.%8%8%<'* #  $)'4"8 $% P 0!G |SYZ"#Bse2bT2&'(,*--0W #  e$ s2P"A2R R(A!RR S 2SSc`|j}|dk(r |jS|dz|jzS)Nbuiltins.)rr)klassmodules r rrs6   F !!! C<%,, ,,rc  t}|D]}d||vrddd|did}d|gifcS||d}tjj|d}|dd|d d|did}d|gifcSt |d sk|j d usz|j |t|d k(r d ddid}d|gifSt}g}i}i} |D]\} d} g} t|| | } | d } | d} | d ur|j | 6t!j"d| dt| d kDr=t!j"d| D]#}t!j"d|dd|d%|| | fgz }| j%D]\}}|d } |d} | d ust| d kDs$||vrU||d}| g|d||<t!j"d|d|d| D]#}t!j"d|dd|d%||dj'| t!j"d_t|d k(rVg}|D](\} }|D]}|j'|dd|d *d j)|}d!d"|id}d|t+||fSd dt+||fS#t$r_}tj\}}}d} t|}ddt||tj|ddg} d| | f| | <Yd}~d}~wwxYw)#Nr-invalid_promptzACannot execute because a node is missing the class_type property.z Node ID '#'rGFzCannot execute because node z does not exist.rTrprompt_no_outputszPrompt has no outputsr]rexception_during_validationzException when validating node)rrz%Failed to validate prompt for output :z * (prompt):z - rz: rI)rldependent_outputsr-z*  rzOutput will be ignored prompt_outputs_failed_validationz Prompt outputs failed validation)rr2r3rDr4rrrprfr8rrrrrrr9rrrjoinr)r'rQrBrr-class_ good_outputsrl node_errorsrirrmrvmrrrArrreasonr=r^ errors_lists r validate_promptrseG  vay ((^'s!, E 5"b) )AY|, **..z4@ >(9*EUV's!, E 5"b) ) 6= )f.@.@D.H KKN-0 7|q'.   ub"%%5L FKI  /95AaDEdG D=   Q  MMA!AF G7|a m,%FMMD ):(;2fY>O=P"QR& 7|n $F#,??#4q  )$W)9k1%+G_\%B &-13*40 G,  :,ay&BC&-F#MMD 1B0C2fYFWEX*YZ'.()<=DDQG#$5$ MM2 3cf <A IAv""eI&6%7r% :J9K#LM  ii , 79"  ud<0+>> $\*K 88y /JCBE+C0N5;r7&4!*!4!4R!8 G"7A.IaL /sJ L#AK==Li'ceZdZdZdZddZGddeZdedfd Z d Z d Z d Z d Z dZddZdZdZdZddZy) PromptQueuec||_tj|_tj|j|_d|_g|_i|_i|_ i|_ yr) r threadingRLockmutex Condition not_empty task_counterqueuecurrently_runninghistoryflags)r*rs r r+zPromptQueue.__init__sR __& ",,TZZ8 !#  rc|j5tj|j||jj |j jdddy#1swYyxYwr&)rheapqheappushrr queue_updatedrnotify)r*rhs r putzPromptQueue.putsE ZZ NN4::t , KK % % ' NN ! ! #ZZs AA++A4Nc(|j5t|jdk(rY|jj||"t|jdk(r dddyt|jdk(rYt j |j}|j }tj||j|<|xj dz c_|jj||fcdddS#1swYyxYw)Nr)timeoutr) rrprwaitrheappoprcopydeepcopyrrr)r*rrhrs r rDzPromptQueue.gets ^^djj/Q&##G#4&3tzz?a+? ^djj/Q&==,D!!A(, d(;D " "1 %    "  KK % % '!9^^sAD&D?A?DDc8eZdZUeded<eed<eeed<y)PromptQueue.ExecutionStatus)rr status_str completedmessagesN)rrrr__annotations__rrrrrr ExecutionStatusrs.//s)rrstatusrc|j5|jj|}t|jt kDr7|jjt t|jd}|#tj|j}|i|d|j|d<|j|dj||jjdddy#1swYyxYw)N)r'rQrr)rrpoprprMAXIMUM_HISTORY_SIZEnextiterrr_asdictupdaterr)r*item_idr8rr' status_dicts r task_donezPromptQueue.task_dones ZZ++//8F4<< #77   d4<<&8!9:*.K!"mmFNN,<= !%'DLL # LL # * *> : KK % % 'ZZs C'C==Dc|j5g}|jjD]}||gz } |tj|j fcdddS#1swYyxYwr&)rrrrrr)r*outrBs r get_current_queuezPromptQueue.get_current_queuesQ ZZC++224s 5tzz23 ZZs AAA(c|j5|jjDcgc]}|}}tj|j}||fcdddScc}w#1swYyxYwr&)rrrrr)r*rBrunningqueueds r get_current_queue_volatilez&PromptQueue.get_current_queue_volatilesZ ZZ"&"8"8"?"?"AB"AQq"AGBYYtzz*FV$ZBZsA& A!$A&!A&&A/c|j5t|jt|jzcdddS#1swYyxYwr&)rrprrrXs r get_tasks_remainingzPromptQueue.get_tasks_remainings. ZZtzz?S)?)?%@@ZZs +AA c|j5g|_|jjdddy#1swYyxYwr&)rrrrrXs r wipe_queuezPromptQueue.wipe_queues* ZZDJ KK % % 'ZZs "8Ac|j5tt|jD]}||j|st|jdk(r|j n:|jj |t j|j|jjdddy dddy#1swYyxYw)NrTF) rrrprrrrheapifyrr)r*functionrBs r delete_queue_itemzPromptQueue.delete_queue_items ZZ3tzz?+DJJqM*4::!+) q) djj1KK--/Z+s7CA>C CC c|j5|mi}d}|dkr|t|j|z }|jD]0}||k\r$|j|||<|t||k\rn|dz }2|cdddS||jvr-|tj|j|icdddSicdddS#1swYyxYw)Nrr)rrprrr)r*r max_itemsoffsetrrrs r get_historyzPromptQueue.get_historys ZZ A:)"7 .:FAF{!%aA$0SX5J!FA & Zdll*!4==i1H#IJZ !ZZsA&C=1C8CC cT|j5i|_dddy#1swYyxYwr&)rrrXs r wipe_historyzPromptQueue.wipe_historys ZZDLZZs'c~|j5|jj|ddddy#1swYyxYwr&)rrr)r* id_to_deletes r delete_history_itemzPromptQueue.delete_history_items' ZZ LL  \4 0ZZs3<c|j5||j|<|jjdddy#1swYyxYwr&)rrrr)r*rrs r set_flagzPromptQueue.set_flags1 ZZ#DJJt  NN ! ! #ZZs *AA c|j5|r|j}i|_|cdddS|jjcdddS#1swYyxYwr&)rrr)r*rrzs r get_flagszPromptQueue.get_flagss@ ZZjj  Z zz( ZZsAAAr&)NNr)T)rrrr+rrDrrrrrrrrrrrrrrrrr rrsc$ * ("#@A((4% A( &1$ )rr)FNNr_)6rrr9rrr!renumrrbtypingrrrrr.r2comfy.model_managementrcomfy_execution.graphrr r r comfy_execution.graph_utilsr r comfy_execution.cachingrrrrrcomfy_execution.validationrrr8r"r$rFrKr5map_node_over_listr6rrrrrrfrrrrrrr rs  66 ``=:d   ((D %%N:>Z\+(Z*X*($Tf1Pt;t;ncJ- j9XB)B)r