
    3j                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
JrJrJr  S SKrS SKrS SKrS SKrS SKrS SK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rS SKJr  S SKrS SK r S SK!J"r"  S SK#J$r$  S SK%r&S SK'r&S S	K(J)r)  S SK*r*S S
K+J,r,  S SK-J.r.J/r/  S SK0J1r1  S SK2J3r3  S SK4J5r5  S SK6J7r7  S SK8J9r9  S SK:J;r;  S SK<J=r=  S SK>J?r?  S SK@JArA  S SKBJCrC  S SKDJErEJFrF  S SKGJHrH  S SKIJJrJ  S SKKJLrL  \"R                  (       a  S SKNrNS\OS\O4S jrPS rQ\R" 5       rS\R                  S\R                  4S j5       rV\R                  S\R                  4S  j5       rWS!\X4S" jrYS# rZS$ r[S% r\ " S& S'5      r]g)(    N)	JobStatusget_jobget_all_jobsvalidate_job_id)ImageImageOps)PngInfo)BytesIO)web)args)get_deploy_environment)feature_flags)__version__)FrontendManagerparse_version)_ComfyNodeInternal)asset_seeder)register_assets_routes)register_file_in_place)resolve_hash_to_path)UserManager)ModelFileManager)CustomNodeManager)SubgraphManager)NodeReplaceManager)OptionalUnion)InternalRoutes)BinaryEventTypes)cache_controlqueuereturnc                 6    U  Vs/ s H  oSS PM	     sn$ s  snf )z7Remove sensitive data (index 5) from queue item tuples.N    )r!   items     &/home/wildlama/comfy/ComfyUI/server.py_remove_sensitive_from_queuer(   ;   s    !&'!H'''s   c                    #     U " U5      I S h  vN   g  N! [         R                  [         R                  [        [        [
        4 a/  n[        R                  " SR                  U5      5         S nAg S nAff = f7f)Nzsend error: {})	aiohttpClientErrorClientPayloadErrorConnectionResetErrorBrokenPipeErrorConnectionErrorloggingwarningformat)functionmessageerrs      r'   send_socket_catch_exceptionr6   @   s\     6w!;!;=QSbdst 6(//4556s7   A<  A< 3A9
%A4/A<4A99A<requestc                   #    U R                   nUR                  S5      (       d  UR                  S5      (       a9  U[        ;  a/  [        R                  U5        [        R
                  " SU S35        U" U 5      I Sh  vN nU$  N7f)z6Middleware to warn about deprecated frontend API pathsz/scripts/uiz/extensions/core/z@[DEPRECATION WARNING] Detected import of deprecated legacy API: z. This is likely caused by a custom node extension using outdated APIs. Please update your extensions or contact the extension author for an updated version.N)path
startswith_deprecated_paths_warnedaddr0   r1   )r7   handlerr9   responses       r'   deprecation_warningr?   I   s      <<D}%%9L)M)M//$((.OORSWRX Yh i $+7#33HO 4s   A=B?B Bc                   #    U R                   R                  SS5      nU" U 5      I S h  vN n[        U[        R                  5      (       d  U$ UR
                  S;  a  U$ UR                  (       a  SU;   a  UR                  5         U$  N`7f)NzAccept-Encoding )zapplication/jsonz
text/plaingzip)headersget
isinstancer   Responsecontent_typebodyenable_compression)r7   r=   accept_encodingr>   s       r'   compress_bodyrK   \   sw     oo))*;R@O#*7#33Hh--$FF}}?2##%O 4s   (BBA!Ballowed_originc                 ^   ^  [         R                  S[         R                  4U 4S jj5       nU$ )Nr7   c                    >#    U R                   S:X  a  [        R                  " 5       nOU" U 5      I S h  vN nTUR                  S'   SUR                  S'   SUR                  S'   SUR                  S'   U$  NB7f)	NOPTIONSzAccess-Control-Allow-Originz&POST, GET, DELETE, PUT, OPTIONS, PATCHzAccess-Control-Allow-MethodszContent-Type, AuthorizationzAccess-Control-Allow-Headerstruez Access-Control-Allow-Credentialsmethodr   rF   rC   )r7   r=   r>   rL   s      r'   cors_middleware/create_cors_middleware.<locals>.cors_middlewarej   sx     >>Y&||~H$W--H:H67;c78;X78?E;< .s   2A:A8AA:r   
middlewareRequest)rL   rS   s   ` r'   create_cors_middlewarerX   i   s,    ^^s{{       c                    U c  g [         R                  " U 5      R                  (       a  gg!    O= fSn[        R                  [        R
                  4 H  n [        R                  " U S U[        R                  5      nU H8  u  n    pE[         R                  " US   5      R                  (       d  Us  s  $ SnM:     Mk  ! [        R                   a     M  f = f   U$ )NFTr   )		ipaddress
ip_addressis_loopbacksocketAF_INETAF_INET6getaddrinfoSOCK_STREAMgaierror)hostloopbackfamilyr_sockaddrs         r'   r]   r]   z   s    |%11H>>6??3	""4vv7I7IJA-.)1a ++HQK8DD#O#H	 ./
  		 4 Os!   %- 1AC9CCCc                  V    [         R                  S[         R                  4S j5       n U $ )Nr7   c                   #    SU R                   ;   a)  U R                   S   nUS:X  a  [        R                  " SS9$ SU R                   ;   GaJ  SU R                   ;   Ga9  U R                   S   nU R                   S   nUR                  5       n[        R
                  R                  U5      nUR                  R                  5       n[        R
                  R                  SU-   5      n[        UR                  5      n	UR                  c  UR                  nUR                  c  UR                  nU	(       ab  Ub_  Ub\  [        U5      S:  aM  [        U5      S:  a>  XW:w  a9  [        R                  " S	R                  XW5      5        [        R                  " SS9$ U R                   S
:X  a  [        R                  " 5       n
U
$ U" U 5      I S h  vN n
U
$  N7f)NzSec-Fetch-Sitez
cross-site  statusHostOriginz//r   zJWARNING: request with non matching host and origin {} != {}, returning 403rO   )rC   r   rF   lowerurllibparseurlparsenetlocurlsplitr]   hostnameportlenr0   r1   r2   rR   )r7   r=   sec_fetch_siterd   originhost_domainparsedorigin_domainhost_domain_parsedre   r>   s              r'   origin_only_middleware=create_origin_only_middleware.<locals>.origin_only_middleware   s    w.$__-=>N-||3// W__$W__)D??6*D__X.F**,K\\**62F"MM//1M!'!6!6tk7I!J ##5#>#>?H{{"099!&&. &K38QVYZeVfijVjor  tA  pB  EF  pF/OO$p$w$w  yD  %T  U<<s33>>Y&||~H  %W--H .s   GG	G
GrU   )r   s    r'   create_origin_only_middlewarer      s,    ^^"ckk " "H "!rY   c                  V    [         R                  S[         R                  4S j5       n U $ )Nr7   c                    #    U R                   S:X  a  [        R                  " 5       nOU" U 5      I S h  vN nSUR                  S'   U$  N7f)NrO   zdefault-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob:; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; font-src 'self'; connect-src 'self' data:; frame-src 'self'; object-src 'self';zContent-Security-PolicyrQ   )r7   r=   r>   s      r'   block_external_middlewareCcreate_block_external_middleware.<locals>.block_external_middleware   sG     >>Y&||~H$W--H 7Q23 .s   2AA
ArU   )r   s    r'    create_block_external_middlewarer      s+    ^^   %$rY   c                       \ rS rSrS rS rS rS rSS jrS r	SS	 jr
SS
 jrSS jrSS jrSS jrS rS rSS jrSS jrS rS r SS\\\\4   S\4S jjrSrg)PromptServer   c                 "  ^ ^^^ ^! T [         l        [        5       T l        [	        5       T l        [        5       T l        [        5       T l	        [        5       T l        [        T 5      T l        S/T l        [        R                   " T 5      T l        UT l        [&        R(                  " 5       T l        S T l        ST l        [0        [2        /n[4        R6                  (       a  UR9                  [:        5        [4        R<                  (       a)  UR9                  [?        [4        R<                  5      5        OUR9                  [A        5       5        [4        RB                  (       a  UR9                  [E        5       5        [4        RF                  (       a$  UR9                  [H        RJ                  " 5       5        [M        [4        RN                  S-  S-  5      n[P        RR                  " X2S9T l*        [W        5       T l,        [W        5       T l-        [4        R\                  c$  [^        R`                  " [4        Rb                  5      O[4        R\                  T l2        [f        Rh                  " ST Rd                   35        [4        Rj                  (       a!  [m        T RT                  T R                  5        O*[m        T RT                  5        [n        Rp                  " 5         [P        Rr                  " 5       nUT l:        S T l;        S T l<        / T l=        UR}                  S5      U 4S j5       nUR}                  S5      U 4S	 j5       nUR}                  S
5      S 5       nUR}                  S5      S 5       nUR}                  S5      S 5       n	UR}                  S5      U 4S j5       n
S mS mS9UU4S jjm UR                  S5      U 4S j5       nUR                  S5      U 4S j5       nUR}                  S5      U 4S j5       nUR}                  S5      S 5       nUR}                  S5      S 5       nUR}                  S5      S  5       nUR}                  S!5      U 4S" j5       nS# m!UR}                  S$5      U!4S% j5       nUR}                  S&5      U!4S' j5       nUR}                  S(5      U 4S) j5       nUR}                  S*5      U 4S+ j5       nUR}                  S,5      U 4S- j5       nUR}                  S.5      U 4S/ j5       nUR}                  S05      U 4S1 j5       nUR                  S!5      U 4S2 j5       nUR                  S05      U 4S3 j5       nUR                  S45      U 4S5 j5       nUR                  S65      U 4S7 j5       nUR                  S,5      U 4S8 j5       ng ):Ncustom_nodes_from_webr   i   )client_max_sizemiddlewaresz[Prompt Server] web root: z/wsc                   >#    [         R                  " 5       nUR                  U 5      I S h  vN   U R                  R                  R                  SS5      nU(       a  TR                  R                  US 5        O[        R                  " 5       R                  nUTR                  U'   S0 0TR                  U'    TR                  STR                  5       US.U5      I S h  vN   TR                  U:X  a4  TR                  b'  TR                  SSTR                  0U5      I S h  vN   SnU  S h  vN nUR                   ["        R$                  R&                  :X  a)  [(        R*                  " S	UR-                  5       -  5        MZ  UR                   ["        R$                  R.                  :X  d  M   [0        R2                  " UR4                  5      nU(       a  UR                  S
5      S:X  an  UR                  S0 5      nUTR                  U   S'   TR                  S[6        R8                  " 5       U5      I S h  vN   [(        R:                  " SU SU 35        SnGM4   GN7 GN GNC GN9 N1! [0        R<                   a+    [(        R*                  " SU SUR4                   35         GM  [>         a%  n[(        R@                  " SU 35         S nAGM  S nAff = f
 TR                  R                  US 5        TR                  R                  US 5        U$ ! TR                  R                  US 5        TR                  R                  US 5        f = f7f)NclientIdrA   r   rn   )rn   sid	executingnodeTz&ws connection closed with exception %stypedataz$Feature flags negotiated for client z: Fz"Invalid JSON received from client z$Error processing WebSocket message: )!r   WebSocketResponsepreparerel_urlqueryrD   socketspopuuiduuid4hexsockets_metadatasendget_queue_info	client_idlast_node_idr   r*   	WSMsgTypeERRORr0   r1   	exceptionTEXTjsonloadsr   r   get_server_featuresdebugJSONDecodeError	Exceptionerror)	r7   wsr   first_messagemsgr   client_flagseselfs	           r'   websocket_handler0PromptServer.__init__.<locals>.websocket_handler  s    &&(B**W%%%//''++J;C  d+jjl&& !#DLL*92)>D!!#&)5iiT5H5H5JSV*WY\]]]>>S(T->->-J))K64;L;L1NPSTTT !%!# V#xx7#4#4#:#::(PSUS_S_Sa(abW%6%6%;%;;V#'::chh#7D,&1A_1T/3xx/CNZ 5 5c :? K '+ii$3$1$E$E$G$''" !" !" !(&J3%rR^Q_$`!" -2M[ & ^ U
V!"  $33 #OO"DSECHH: V   ) V#MM,PQRPS*TUUV7 "$<   d+%%))#t4I   d+%%))#t4s   *MI$BM<'L #I'$AL 'I*(L 0K!4I-5K!8A8L 5B	I2>I0?"I2!L $M'L *L -K!0I22:K,L 0	K9KL KL ":M:MM/c                    >#    [         R                  " [        R                  R	                  TR
                  S5      5      nSUR                  S'   SUR                  S'   SUR                  S'   U$ 7f)Nz
index.htmlzno-store, must-revalidatezCache-Controlzno-cachePragma0Expires)r   FileResponseosr9   joinweb_rootrC   )r7   r>   r   s     r'   get_root'PromptServer.__init__.<locals>.get_root>  s^     ''T]]L(QRH0KH_-)3HX&*-HY'Os   A.A1z/embeddingsc                     [         R                  " S5      n[        R                  " [	        [        S U5      5      5      $ )N
embeddingsc                 F    [         R                  R                  U 5      S   $ )Nr   )r   r9   splitext)as    r'   <lambda>?PromptServer.__init__.<locals>.get_embeddings.<locals>.<lambda>I  s    8H8H8KA8NrY   )folder_pathsget_filename_listr   json_responselistmap)r7   r   s     r'   get_embeddings-PromptServer.__init__.<locals>.get_embeddingsF  s1    %77EJ$$T#.NPZ*[%\]]rY   z/modelsc                 |    [        [        R                  R                  5       5      n[        R
                  " U5      $ N)r   r   folder_names_and_pathskeysr   r   )r7   model_typess     r'   list_model_types/PromptServer.__init__.<locals>.list_model_typesK  s,    |BBGGIJK$$[11rY   z/models/{folder}c                    #    U R                   R                  SS 5      nU[        R                  ;  a  [        R
                  " SS9$ [        R                  " U5      n[        R                  " U5      $ 7f)Nfolder  rm   )
match_inforD   r   r   r   rF   r   r   )r7   r   filess      r'   
get_models)PromptServer.__init__.<locals>.get_modelsQ  s[     ''++Hd;F\@@@||3// 226:E$$U++s   A1A3z/extensionsc           	      @  >^^#    [         R                   " [        R                  R                  [         R                  " TR
                  5      S5      SS9n[        [        U4S jU5      5      n[        R                  R                  5        Hv  u  mm[         R                   " [        R                  R                  [         R                  " T5      S5      SS9nUR                  [        [        UU4S jU5      5      5        Mx     [        R                  " U5      $ 7f)Nzextensions/**/*.jsT)	recursivec                 ~   > S[         R                  R                  U TR                  5      R	                  SS5      -   $ )Nr   \)r   r9   relpathr   replace)fr   s    r'   r   ?PromptServer.__init__.<locals>.get_extensions.<locals>.<lambda>^  s,    C"''//!T]]2S2[2[\`be2f,frY   z**/*.jsc                    > S[         R                  R                  T5      -   S-   [        R                  R                  U T5      R                  SS5      -   $ )N/extensions/r   r   )rr   rs   quoter   r9   r   r   )r   dirnames    r'   r   r   b  sL    ^fllFXFXG 66 "$''//!S"9"A"A$"L6MrY   )globr   r9   r   escaper   r   r   nodesEXTENSION_WEB_DIRSitemsextendr   r   )r7   r   
extensionsr   r   r   s      @@r'   get_extensions-PromptServer.__init__.<locals>.get_extensionsY  s     IIbggllDMM*,@BMQSE c"fhmnoJ"55;;=	c		"'',,t{{3/?"KW[\!!$s ,MNS(U #V W >
 $$Z00s   DDc                     U c  Sn U S:X  a  [         R                  " 5       nX4$ U S:X  a  [         R                  " 5       nX4$ U S:X  a  [         R                  " 5       nWU 4$ )Ninputtempoutput)r   get_input_directoryget_temp_directoryget_output_directory)dir_typetype_dirs     r'   get_dir_by_type.PromptServer.__init__.<locals>.get_dir_by_typeg  st    "7"';;= %% V#'::< %% X%'<<>X%%rY   c                    [         R                  " 5       n[        R                  R	                  U 5      (       a  U" 5       nU" 5       n[        U S5       nUR                  UR                  5       5        UR                  UR                  R                  5       5        UR                  R                  S5        S S S 5        UR                  5       UR                  5       :H  $ g! , (       d  f       N0= f)Nrbr   F)node_helpershasherr   r9   existsopenupdatereadfileseek	hexdigest)filepathimager  r   br   s         r'   compare_image_hash1PromptServer.__init__.<locals>.compare_image_hasht  s    !((*F ww~~h''HH(D)QHHQVVX&HHUZZ__./JJOOA& * {{}55 *)s   A$C""
C0c                 4  > U R                  S5      nU R                  S5      nSnU R                  S5      nT" U5      u  peU(       Ga  UR                  (       Ga  UR                  nU(       d  [        R                  " SS9$ U R                  SS5      n[
        R                  R                  U[
        R                  R                  U5      5      n	[
        R                  R                  [
        R                  R                  X5      5      n
[
        R                  R                  Xj45      U:w  a  [        R                  " SS9$ [
        R                  R                  U	5      (       d  [
        R                  " U	5        [
        R                  R                  U5      nUb  US	:X  d  US
:X  a  OSn[
        R                  R                  U
5      (       aj  T" X5      (       a  SnOZUS    SU SUS    3n[
        R                  R                  X5      n
US-  n[
        R                  R                  U
5      (       a  Mj  U(       dK  Ub
  U" X U
5        O>[        U
S5       nUR                  UR                  R!                  5       5        S S S 5        XxUS.n["        R$                  (       a   US;   a  UOSn['        XU/S9nUR(                  R*                  UR(                  R,                  UR.                  R0                  UR.                  R2                  UR.                  R4                  UR6                  S.US'   [        R>                  " U5      $ [        R                  " SS9$ ! , (       d  f       N= f! [8         a    [:        R<                  " SSS9   N\f = f)Nr  	overwriteFr     rm   	subfolderrA   rP   1   Tr   z ()wb)r   r  r   )r   r   r   )abs_pathr   tags)idr   
asset_hashsize	mime_typer  assetz*Failed to register uploaded image as asset)exc_info) rD   r  filenamer   rF   r   r9   r   normpathabspath
commonpathr  makedirsr   r  writer  r   enable_assetsr   refr  r   r  hash
size_bytesr  r  r   r0   r1   r   )postimage_save_functionr  r  image_is_duplicateimage_upload_type
upload_dirr  r  full_output_folderr
  splitir   resptagresultr  r   s                    r'   image_upload+PromptServer.__init__.<locals>.image_upload  s   HHW%E-I!& $ 0,;<M,N)J >><<s33 HH["5	%'WW\\*bgg>N>Ny>Y%Z"77??277<<8J+UV77%%z&<=K<<s33ww~~&899KK 23((2(i6.AYRUEUA''..22-h>>15.!&+AhZr!AeAhZ#@#%77<<0B#MQ ''..22 **6+EB!(D1QGGEJJOO$56 2 "*K\]%%e3DH[3[/ah!7`c_d!e"(**--$*JJOO*0,,*;*;$*LL$;$;)/)?)?$*KK)W ((..||3//- 21" % e(T_cdes   *M$+BM5 $
M25NNz/upload/imagec                 P   >#    U R                  5       I S h  vN nT" U5      $  N7fr   r)  )r7   r)  r4  s     r'   upload_image+PromptServer.__init__.<locals>.upload_image  s$      'D%% (s   &$&z/upload/maskc                 V   >#    U R                  5       I S h  vN nS nT" X5      $  N7f)Nc                 
   [         R                  " UR                  S5      5      n[        R                  " US   5      u  pEU(       d  [
        R                  " SS9$ US   S:X  d  SU;   a  [
        R                  " SS9$ Uc(  UR                  SS	5      n[        R                  " U5      nUc  [
        R                  " SS9$ UR                  S
S5      S:w  az  [        R                  R                  XSS
   5      n[        R                  R                  [        R                  R                  U5      U45      U:w  a  [
        R                  " SS9$ Un[        R                  R                  XT5      n[        R                  R                  U5      (       a  [        R                  " U5       n	[!        5       n
[#        U	S5      (       a1  U	R$                   H!  nU
R'                  XR$                  U   5        M#     U	R)                  S5      n	[        R                  " U R*                  5      R)                  S5      nUR-                  S5      nU	R/                  U5        U	R1                  USU
S9  S S S 5        g g ! , (       d  f       g = f)Noriginal_refr  r  rm   r   r   ..r   r   r  rA   rl   textRGBAA   )compress_levelpnginfo)r   r   rD   r   annotated_filepathr   rF   get_directory_by_typer   r9   r   r"  r!  isfiler   r  r	   hasattrr>  add_textconvertr  
getchannelputalphasave)r  r)  r
  r<  r  
output_dirr   full_output_dirr  original_pilmetadatakeymask_pil	new_alphas                 r'   r*  GPromptServer.__init__.<locals>.upload_mask.<locals>.image_save_function  s   #zz$((>*BC'3'F'F|T^G_'`$<<s33 A;#%)9<<s33%'++FH=D!-!C!CD!IJ%<<s33##K4:&(ggll:K?X&YOww))277???+KZ*XY]gg"||377!0Jww||J977>>$''D)\#*9"<77'3'8'8 ( 1 1#7H7H7M N (9'3';';F'C#(::ejj#9#A#A&#I %-$7$7$<	$--i8$))(1h)W *) ())s   *C I44
Jr7  )r7   r)  r*  r4  s      r'   upload_mask*PromptServer.__init__.<locals>.upload_mask  s.      'D&XP  ::U (s   )')z/viewc           	        >#    SU R                   R                  ;   Ga  U R                   R                  S   nUR                  S5      (       a`  TR                  R	                  U 5      n[        XS9nUc  [        R                  " SS9$ UR                  UR                  UR                  pQnGOS n[        R                  " U5      u  pU(       d  [        R                  " SS9$ US   S:X  d  S	U;   a  [        R                  " SS9$ Uc<  U R                   R                  R                  S
S5      n[        R                  " U5      nUc  [        R                  " SS9$ SU R                   R                  ;   a  [        R                   R#                  X`R                   R                  S   5      n[        R                   R%                  [        R                   R'                  U5      U45      U:w  a  [        R                  " SS9$ Un[        R                   R)                  U5      n[        R                   R#                  Xa5      n[        R                   R+                  U5      (       Ga  SU R                   R                  ;   Ga@  [,        R.                  " U5       n	U R                   R                  S   R1                  S5      n
U
S   nUS;  d*  SU R                   R                  R                  SS5      ;   a  SnSnU
S   R3                  5       (       a  [5        U
S   5      n[7        5       nUS;   d*  U R                   R                  R                  SS5      S:X  a  U	R9                  S5      n	U	R;                  XUS9  UR=                  S5        [        R                  " UR?                  5       SU 3SSU S30S9sS S S 5        $ SU R                   R                  ;  a  S nOU R                   R                  S   nUS:X  a  [,        R.                  " U5       n	U	R@                  S!:X  a0  U	R1                  5       u  nnnn[,        RB                  " SUUU45      nOU	R9                  S5      n[7        5       nUR;                  US"S#9  UR=                  S5        [        R                  " UR?                  5       S$SSU S30S9sS S S 5        $ US:X  a  [,        R.                  " U5       n	U	R@                  S!:X  a  U	R1                  5       u      nnO"[,        RD                  " S%U	RF                  S&5      n[,        RD                  " S!U	RF                  5      nURI                  U5        [7        5       nUR;                  US"S#9  UR=                  S5        [        R                  " UR?                  5       S$SSU S30S9sS S S 5        $ U=(       d"    [J        RL                  " U5      S   =(       d    S'nUS(;   a  S'n[        RN                  " USU S3US).S*9$ [        R                  " SS9$ ! , (       d  f       GNi= f! , (       d  f       N4= f! , (       d  f       NE= f7f)+Nr  zblake3:)owner_idr   rm   r  r   r   r=  r   r   r  rl   preview;)webpjpegr   channelrA   r[  Z   )r\  rgbRGB)r2   qualityzimage/Content-Dispositionz
filename="")rH   rG   rC   rgbar?  PNG)r2   	image/pngL   zapplication/octet-stream>   text/css	text/htmltext/javascripttext/html-sandboxedapplication/xhtml+xml)rc  zContent-Type)rC   )(r   r   r:   user_managerget_request_user_idr   r   rF   r  download_namerG   r   rD  rD   rE  r   r9   r   r"  r!  basenamerF  r   r  r/  isdigitintr
   rI  rL  r  r  modemergenewr  rK  	mimetypes
guess_typer   )r7   r  rX  r3  r  resolved_content_typerM  r   rN  imgpreview_infoimage_formatrb  bufferr]  rg   gr  r   new_imgrh   	alpha_imgalpha_bufferrG   r   s                           r'   
view_image)PromptServer.__init__.<locals>.view_image  sK    W__222"??00< &&y11#00DDWMH1(NF~"||377<BOOVMaMacicvcv$9D$9,0)+7+J+J8+T(H#"||377  {c)TX-="||377!)&4488J%1%G%G%M
!)"||377"goo&;&;;*,'',,z??CXCXYdCe*f77--rww/OQ[.\]akk#&<<s#;;%4
!ww//9H77<<
=D77>>$'' GOO$9$99"ZZ-+2??+@+@+K+Q+QRU+VL+7?L+3CCsgooNcNcNgNghqsuNvGv/5&(G+B/7799*-l2.>*?%,YF+x77??;P;P;T;TU^`b;cgl;l&)kk%&8HHV'HR"KKN#&<<V[[]SYZfYgQh9NR]^f]ggiPj8k$m! .-& !(=(=="(")//"7"7	"B%'"ZZ-"xx61-0YY[
1a*/++eaAY*G*-++e*<%,YF#LLL>"KKN#&<<V[[]Q\9NR]^f]ggiPj8k$m .- !C"ZZ-"xx61-0YY[
1a$)IIc388S$A ).		&#(((CI%..q1+29L%NN<NF(--a0#&<<\5F5F5HWb9NR]^f]ggiPj8k$m .-& 2 :(33H=a@:9 % (  ,H  H+EL"// 9DXJb7Q0<%   <<s++Y .-2 .- .-sS   JYD X8AYB&X.:&Y CX?/A-Y
X+&Y.
X<8Y?
Y	Yz/view_metadata/{folder_name}c                   #    U R                   R                  SS 5      nUc  [        R                  " SS9$ SU R                  R
                  ;  a  [        R                  " SS9$ U R                  R
                  S   nUR                  S5      (       d  [        R                  " SS9$ [        R                  " X5      nUc  [        R                  " SS9$ [        R                  R                  USS9nUc  [        R                  " SS9$ [        R                  " U5      nSU;  a  [        R                  " SS9$ [        R                  " US   5      $ 7f)	Nfolder_namer   rm   r  z.safetensorsi   )max_size__metadata__)r   rD   r   rF   r   r   endswithr   get_full_pathcomfyutilssafetensors_headerr   r   r   )r7   r  r  safetensors_pathoutdts         r'   view_metadata,PromptServer.__init__.<locals>.view_metadataq  s    !,,00EK"||3//!6!66||3//,,Z8H$$^44||3//+99+P'||3//++001AI0VC{||3//CBR'||3//$$R%788s   EEz/system_statsc                 "  #    [         R                  R                  5       n[         R                  R                  R	                  S5      n[         R                  R                  U5      n[         R                  R                  U5      n[        R                  " 5       n[        R                  " 5       n[        R                  " 5       n[        R                  " 5       n[         R                  R                  5       n	X;   a  U/U	 V
s/ s H  oU:w  d  M
  U
PM     sn
-   n	OU/[        U	5      -   n	/ nU	 H  n
[         R                  R                  U
SS9u  p[         R                  R                  U
SS9u  pUR                  [         R                  R                  U
5      U
R                   U
R"                  UUUUS.5        M     [$        R&                  UU[(        UUUU[$        R*                  [         R                  R,                  [.        R0                  R3                  [.        R0                  R3                  [$        R4                  5      S   5      S   S:H  [7        5       [$        R8                  S	.US
.n[:        R<                  " U5      $ s  sn
f 7f)NcpuT)torch_total_too)torch_free_too)r   r   index
vram_total	vram_freetorch_vram_totaltorch_vram_freer   r  python_embeded)r   	ram_totalram_freecomfyui_versionrequired_frontend_versioninstalled_templates_versionrequired_templates_versioncomfy_package_versionspython_versionpytorch_versionembedded_pythondeploy_environmentargv)systemdevices)r  model_managementget_torch_devicetorchdeviceget_total_memoryget_free_memoryr   get_required_frontend_versionget_installed_templates_versionget_required_templates_versionget_comfy_package_versionsget_all_torch_devicesr   appendget_torch_device_namer   r  sysplatformr   versiontorch_versionr   r9   r/  
executabler   r  r   r   )r7   primary_device
cpu_devicer  r  r  r  r  r  torch_devicesddevice_entriesr  r  r  r  system_statss                    r'   r  +PromptServer.__init__.<locals>.system_stats  s    "33DDFN//55<<UCJ..??
KI--==jIH(7(U(U(W%*9*Y*Y*[')8)W)W)Y&%4%O%O%Q" "22HHJM.!/ 0}3d}!UcPcA}3d d!/ 043F FN"/4/E/E/V/VWXjn/V/o,
-2-C-C-S-STUfj-S-k*	%%!22HHKFFWW",!*(8'6'  # ,,!* ('21J3N2L.D&)kk','='='K'K')ww}}RWW]]3>>5RST5U'VWX'Y]m'm*@*BHH *!L$ $$\22I 4es   DJ	J
J
E7Jz	/featuresc                 \   #    [         R                  " [        R                  " 5       5      $ 7fr   )r   r   r   r   )r7   s    r'   get_features+PromptServer.__init__.<locals>.get_features  s     $$]%F%F%HIIs   *,z/promptc                 T   >#    [         R                  " TR                  5       5      $ 7fr   )r   r   r   )r7   r   s    r'   
get_prompt)PromptServer.__init__.<locals>.get_prompt  s      $$T%8%8%:;;s   %(c           	         [         R                  U    n[        U[        5      (       a  UR	                  5       $ 0 nUR                  5       US'   UR                  5       R                  5        VVs0 s H  u  p4U[        UR                  5       5      _M!     snnUS'   [        USS5      US'   UR                  US'   [        US5      (       a  UR                  OS/[        UR                  5      -  US'   [        US	5      (       a  UR                  OUS   US
'   XS'   U [         R                  R                  5       ;   a  [         R                  U    OU US'   [        US5      (       a  UR                   OSUS'   [        USS5      US'   SUS'   [        US5      (       a  UR"                  S:X  a  SUS'   OSUS'   [        US5      (       a  UR$                  S:X  a  SUS'   OSUS'   [        US5      (       a  UR&                  US'   [        US5      (       a  UR(                  US'   [        USS5      (       a  SUS'   [        USS5      (       a  SUS '   [        US!S5      (       a  SUS"'   [        US#5      (       a  UR*                  US$'   [        US%/ 5      US&'   [        US'5      (       a  UR,                  US('   U$ s  snnf ))Nr   input_orderINPUT_IS_LISTFis_input_listr   OUTPUT_IS_LISToutput_is_listRETURN_NAMESoutput_namer   display_nameDESCRIPTIONrA   descriptionRELATIVE_PYTHON_MODULEr   python_modulesdcategoryOUTPUT_NODEToutput_nodeHAS_INTERMEDIATE_OUTPUThas_intermediate_outputCATEGORYOUTPUT_TOOLTIPSoutput_tooltips
DEPRECATED
deprecatedEXPERIMENTALexperimentalDEV_ONLYdev_onlyAPI_NODEapi_nodeSEARCH_ALIASESsearch_aliasesESSENTIALS_CATEGORYessentials_category)r   NODE_CLASS_MAPPINGS
issubclassr   GET_NODE_INFO_V1INPUT_TYPESr   r   r   getattrRETURN_TYPESrG  r  ry   r  NODE_DISPLAY_NAME_MAPPINGSr  r  r  r  r  r  r  )
node_class	obj_classinforQ  values        r'   	node_info(PromptServer.__init__.<locals>.node_info  s   11*=I)%788 1133D%113DMOXOdOdOfOlOlOn"oOn|3UZZ\(:#:On"oD$+I$ND!&33DNAHTdAeAeY%=%=lqkrux  zC  zP  zP  vQ  lQD!"<CI~<^<^)"8"8dhiqdrD%LS]af  bB  bB  bG  bG  bI  TI5#C#CJ#O  OYD ;B9];[;[)"7"7acD$+I7OQX$YD!#Dy-00Y5J5Jd5R&*]#&+]#y";<<AbAbfjAj26./27./y*--#,#5#5Z y"344*3*C*C&'y,66%)\"y.%88'+^$y*e44#'Z y*--#,#5#5Z %,Y8H"%MD!"y"788.7.K.K*+KS #ps   /&J=z/object_infoc                   >#    [         R                  " SS9  [        R                     0 n[        R
                   H  n T" U5      X'   M     [        R                  " U5      sS S S 5        $ ! [         aG    [        R                  " SU S35        [        R                  " [        R                  " 5       5         M  f = f! , (       d  f       g = f7f)N)modelsr   r   )rootsz@[ERROR] An error occurred while retrieving information for the 'z' node.)r   startr   cache_helperr   r  r   r0   r   	traceback
format_excr   r   )r7   r  xr  s      r'   get_object_info.PromptServer.__init__.<locals>.get_object_info  s     %BC**22A>!*1 3 ((- +*
 % >(hijhkkr&sti&:&:&<=> +*s@   %CC 
A,	C "
C,AB=9C <B==C  
C
Cz/object_info/{node_class}c                    >#    U R                   R                  SS 5      n0 nUb  U[        R                  ;   a
  T" U5      X!'   [        R
                  " U5      $ 7f)Nr  )r   rD   r   r  r   r   )r7   r  r  r  s      r'   get_object_info_node3PromptServer.__init__.<locals>.get_object_info_node  sS      ++//dCJC&Z5;T;T-T"+J"7$$S))s   AAz	/api/jobsc                   >#    U R                   R                  nUR                  S5      nUR                  S5      nUR                  SS5      R                  5       nUR                  SS5      R                  5       nSnU(       a  UR	                  S5       Vs/ s H7  owR                  5       (       d  M  UR                  5       R                  5       PM9     nnU Vs/ s H  ow[        R                  ;  d  M  UPM     nnU(       aI  [        R                  " S	S
SR                  U5       SSR                  [        R                  5       30SS9$ US;  a  [        R                  " S	S0SS9$ US;  a  [        R                  " S	S0SS9$ Sn	SU;   a9   [        UR                  S5      5      n	U	S::  a  [        R                  " S	S0SS9$  Sn
SU;   a#   [        UR                  S5      5      n
U
S:  a  Sn
TR                  R                  5       u  pTR                  R!                  5       n[#        U5      n[#        U5      n[%        XUUUUUU	U
S9	u  pU
['        U5      -   U:  n[        R                  " UU
U	UUS.S.5      $ s  snf s  snf ! [        [        4 a    [        R                  " S	S0SS9s $ f = f! [        [        4 a    [        R                  " S	S0SS9s $ f = f7f)a  List all jobs with filtering, sorting, and pagination.

Query parameters:
    status: Filter by status (comma-separated): pending, in_progress, completed, failed
    workflow_id: Filter by workflow ID
    sort_by: Sort field: created_at (default), execution_duration
    sort_order: Sort direction: asc, desc (default)
    limit: Max items to return (positive integer)
    offset: Items to skip (non-negative integer, default 0)
rn   workflow_idsort_by
created_at
sort_orderdescN,r   zInvalid status value(s): z, z. Valid values: r  rm   >   r	  execution_durationz4sort_by must be 'created_at' or 'execution_duration'>   ascr  z"sort_order must be 'asc' or 'desc'limitr   z limit must be a positive integerzlimit must be an integeroffsetzoffset must be an integer)status_filterr  r  r
  r  r  )r  r  totalhas_more)jobs
pagination)r   r   rD   rq   r/  stripr   ALLr   r   r   rt  
ValueError	TypeErrorprompt_queueget_current_queue_volatileget_historyr(   r   ry   )r7   r   status_paramr  r  r
  r  sinvalid_statusesr  r  runningqueuedhistoryr  r  r  r   s                    r'   get_jobs'PromptServer.__init__.<locals>.get_jobs  s     OO))E 99X.L))M2Kii	<8>>@G<8>>@J M<H<N<Ns<S a<SqW^W^W`!2!2<S a/<#W}!@VA} #W#,, $=diiHX>Y=ZZjkoktktu~  vC  vC  lD  kE  #F  G" 
 BB((TU 
 0((BC 
 E %		' 23Ez"00$&HI#&   " F5  8!45Fz!" #//JJLOG''335G27;G1&9F&+'%KD T*e3H$$$"" (	&  G !b#W< #I. ,, "<="  #I. ,, "=>" st   BK&J4"JK&J7J=BK&6J 
K&"J9 5BK&'J63K&5J66K&9'K# K&"K##K&z/api/jobs/{job_id}c                   >#    U R                   R                  SS5      nU(       d  [        R                  " SS0SS9$ TR                  R                  5       u  p#TR                  R                  US9n[        U5      n[        U5      n[        XX45      nUc  [        R                  " SS0S	S9$ [        R                  " U5      $ 7f)
zGet a single job by ID.job_idNr   zjob_id is requiredr  rm   	prompt_idzJob not foundr   )	r   rD   r   r   r  r  r  r(   r   )r7   r&  r   r!  r"  jobr   s         r'   get_job_by_id,PromptServer.__init__.<locals>.get_job_by_idm  s      ''++Hd;F((23 
 #//JJLOG''33f3EG27;G1&9F&6;C{((o. 
 $$S))s   CCz/historyc                 <  >#    U R                   R                  R                  SS 5      nUb  [        U5      nU R                   R                  R                  SS 5      nUb  [        U5      nOSn[        R
                  " TR                  R                  XS95      $ 7f)N	max_itemsr  r_  )r-  r  )r   r   rD   rt  r   r   r  r  )r7   r-  r  r   s      r'   r  *PromptServer.__init__.<locals>.get_history  s     --11+tDI$	N	__**..x>F!V$$T%6%6%B%BY%B%fggs   BBz/history/{prompt_id}c                    >#    U R                   R                  SS 5      n[        R                  " TR                  R                  US95      $ 7f)Nr(  r'  )r   rD   r   r   r  r  )r7   r(  r   s     r'   get_history_prompt_id4PromptServer.__init__.<locals>.get_history_prompt_id  sC     **..{DAI$$T%6%6%B%BY%B%WXXs   A
Az/queuec                    >#    0 nTR                   R                  5       n[        US   5      US'   [        US   5      US'   [        R                  " U5      $ 7f)Nr   queue_runningr  queue_pending)r  r  r(   r   r   )r7   
queue_infocurrent_queuer   s      r'   	get_queue(PromptServer.__init__.<locals>.get_queue  sZ     J --HHJM*F}UVGW*XJ'*F}UVGW*XJ'$$Z00s   AAc                 F  >#    [         R                  " S5        U R                  5       I S h  vN nTR                  U5      nSU;   a  [	        US   5      nO4TR
                  nSU;   a  US   (       a  U* nT=R
                  S-  sl        SU;   Ga  US   nUR                  S5      nUc  [        [        R                  " 5       5      nO [        U5      nS nSU;   a  US   nTR                  R                  U5        [         R"                  " XSU5      I S h  vN n0 n	SU;   a  US   n	SU;   a  US   U	S'   SU	;  a&  U R$                  R                  S5      n
U
(       a  XS'   US   (       a  US   n0 n[         R&                   H  nX;   d  M
  U	R)                  U5      X'   M     [+        [,        R,                  " 5       S-  5      U	S'   TR.                  R1                  X%X9X45        XRUS   S.n[        R                  " U5      $ [         R2                  " SR5                  US   5      5        [        R                  " US   US   S.SS9$ SSS0 S
.n[        R                  " U0 S.SS9$  GN?! [         a"    SSS	0 S
.n[        R                  " U0 S.SS9s $ f = f GN7f)Nz
got promptnumberfrontr  promptr(  invalid_prompt_idzprompt_id must be a valid UUIDznprompt_id must be a UUID string in canonical lowercase hyphenated form; omit it to let the server generate one)r   r4   details
extra_info)r   node_errorsr  rm   partial_execution_targets
extra_datar   comfy_usage_sourcezComfy-Usage-Sourcer      i  create_time   )r(  r:  r@  zinvalid prompt: {}	no_promptzNo prompt provided)r0   r  r   trigger_on_promptfloatr:  rD   strr   r   r   r  r   r   node_replace_managerapply_replacements	executionvalidate_promptrC   SENSITIVE_EXTRA_DATA_KEYSr   rt  timer  putr1   r2   )r7   	json_datar:  r<  client_prompt_idr(  r   rA  validrB  usage_sourceoutputs_to_execute	sensitivesensitive_valr>   r   s                  r'   post_prompt*PromptServer.__init__.<locals>.post_prompt  s    LL&&||~-I..y9I9$y23i' )"(q 9$"8,#,==#= #+ #DJJL 1I	b$34D$E	 -1).);09:U0V-))<<VD'77	Kdee
9,!*<!8J)+.7.DJ{+'z9#*??#6#67K#LL#;G#788).q& "I)2)L)L(67A~~m7TI4 *M 14DIIK$4F0GJ}-%%))6fRd*pq-6Y^_`YabH,,X66OO$8$?$?a$IJ,,uQxPUVWPX-Ybeff (33"$	 ((5)LUXYYK ., & b$7'G (X*,	!  #005QS1T]`aab fsI   *J!I,BJ!I/ AJ!JA2J!CJ!/)JJ!JJ!c                 (  >^#    U R                  5       I S h  vN nSU;   a$  US   (       a  TR                  R                  5         SU;   a/  US   nU H$  mU4S jnTR                  R                  U5        M&     [        R
                  " SS9$  Nw7f)Ncleardeletec                    > U S   T:H  $ )Nr  r%   )r   id_to_deletes    r'   r   ;PromptServer.__init__.<locals>.post_queue.<locals>.<lambda>  s    AaDL,@rY      rm   )r   r  
wipe_queuedelete_queue_itemr   rF   )r7   rR  	to_deletedelete_funcr_  r   s       @r'   
post_queue)PromptServer.__init__.<locals>.post_queue  s     &||~-I)#W%%%0029$%h/	$-L"@K%%77D %. <<s++ .s   BBA8Bz
/interruptc                 2  >#     U R                  5       I S h  vN nUR                  S5      nU(       a  TR                  R	                  5       u  p4SnU H)  nUS   U:X  d  M  [
        R                  " SU 35        Sn  O   U(       a  [        R                  " 5         OF[
        R                  " SU S35        O+[
        R                  " S5        [        R                  " 5         [        R                  " S	S
9$  N! [         R                   a    0 n Nf = f7f)Nr(  Fr  zInterrupting prompt TzPrompt z- is not currently running, skipping interruptz)Global interrupt (no prompt_id specified)ra  rm   )r   r   rD   r  get_current_queuer0   r  r   interrupt_processingr   rF   )r7   rR  r(  currently_runningrh   should_interruptr&   r   s          r'   post_interrupt-PromptServer.__init__.<locals>.post_interrupt  s     "),,.0	
 "k2I'+'8'8'J'J'L$! $) -DAw)+';I;%GH+/( . $..0LL79+5b!cd HI**,<<s++7 1'' 	s?   DC; C9C; AD#BD9C; ;DDDDz/freec                 <  >#    U R                  5       I S h  vN nUR                  SS5      nUR                  SS5      nU(       a  TR                  R                  SU5        U(       a  TR                  R                  SU5        [        R
                  " SS9$  N7f)Nunload_modelsFfree_memoryra  rm   )r   rD   r  set_flagr   rF   )r7   rR  rp  rq  r   s       r'   	post_free(PromptServer.__init__.<locals>.post_free  sz     %lln,I%MM/5AM#--u=K!!**?MJ!!**=+F<<s++ -s   BBBBc                   >#    U R                  5       I S h  vN nSU;   a$  US   (       a  TR                  R                  5         SU;   a)  US   nU H  nTR                  R                  U5        M      [        R
                  " SS9$  Nq7f)Nr\  r]  ra  rm   )r   r  wipe_historydelete_history_itemr   rF   )r7   rR  rd  r_  r   s       r'   post_history+PromptServer.__init__.<locals>.post_history$  s|     &||~-I)#W%%%2249$%h/	$-L%%99,G %. <<s++ .s   BB	A2Br   )@r   instancer   ro  r   model_file_managerr   custom_node_managerr   subgraph_managerr   rK  r   internal_routessupportsrM  PromptQueuer  loopasyncioQueuemessagesclient_sessionr:  r    r?   r   enable_compress_response_bodyr  rK   enable_cors_headerrX   r   disable_api_nodesr   enable_managercomfyui_managercreate_middlewareroundmax_upload_sizer   Applicationappdictr   r   front_end_rootr   init_frontendfront_end_versionr   r0   r  r%  r   r   disableRouteTableDefroutesr   r   on_prompt_handlersrD   r)  )"r   r  r   r  r  r   r   r   r   r   r   r8  rU  r  r  r  r  r  r  r  r#  r*  r  r0  r7  rY  rf  rm  rs  rx  r  r   r4  r  s"   `                             @@@@r'   __init__PromptServer.__init__   s    $'M"2"4#4#6  / 1$6$8!-d301%11$7	>B$&9:--}-""5d6M6MNO<>?!!?AB@@BC 4 4t ;d BC???\v $ ""* ))$*@*@A$$ 	
 	1$--AB"488T->->?"488,  """$ "$	E	9	 
9	v 
C	 
	 
M	"	^ 
#	^ 
I		2 
	2
 
&	'	, 
(	, 
M	"	1 
#	1	&	?	0 ?	0B 
_	%	& 
&	&
 
^	$+	; 
%+	;Z 
G	w	, 
w	,r 
2	3	9 
4	9, 
O	$2	3 
%2	3h 
K	 	J 
!	J 
I		< 
	</	b 
N	#
	. 
$
	. 
/	0	* 
1	* 
K	 _	 
!_	B 
(	)	* 
*	*0 
J		h 
 	h 
*	+	Y 
,	Y 
H		1 
	1 
Y	G	Z 
 G	ZR 
X		, 
	, 
\	"	, 
#	,> 
W		, 
	, 
Z	 
	, 
!
	,rY   c                 f   #    [         R                  " S S9n[         R                  " US9U l        g 7f)N)r  )timeout)r*   ClientTimeoutClientSessionr  )r   r  s     r'   setupPromptServer.setup1  s(     ''d3%33GDs   /1c                    U R                   R                  U R                  5        U R                  R                  U R                  5        U R                  R                  U R                  U R
                  [        R                  R                  5       5        U R                  R                  U R                  [        R                  R                  5       5        U R                  R                  U R                  5        U R
                  R                  SU R                  R                  5       5        [        R                  " 5       nU R                   Hh  n[!        U[        R"                  5      (       d  M$  UR%                  UR&                  SUR(                  -   5      " UR*                  40 UR,                  D6  Mj     U R
                  R                  U5        U R
                  R                  U R                  5        [        R.                  R                  5        H9  u  p4U R
                  R                  [        R0                  " SU-   U5      /5        M;     [2        R4                  " 5       nSnU(       a   [7        U5      [7        S5      :  nU(       aN  [2        R>                  " 5       nU(       a1  U R
                  R                  [        R0                  " SU5      /5        OB[2        R@                  " 5       n	U	(       a&  U R
                  RB                  RE                  SU	5        [2        RF                  " 5       n
U
(       a1  U R
                  R                  [        R0                  " S	U
5      /5        U R
                  R                  [        R0                  " S
U RH                  5      /5        g ! [8         a#  n[:        R<                  " SUU5         S nAGNHS nAff = f)Nz	/internalz/apir   Tz0.3.0z*Unable to parse templates version '%s': %sz
/templatesz/templates/{path:.*}z/docsr   )%ro  
add_routesr  r{  r|  r  r   LOADED_MODULE_DIRSr   r}  rK  
add_subappr~  get_appr   r  rE   RouteDefrouterR   r9   r=   kwargsr   staticr   r  r   r   r0   r1   legacy_templates_pathtemplate_asset_handlerrouteradd_getembedded_docs_pathr   )r   
api_routesr  r   r   r  use_legacy_templatesexcworkflow_templates_pathr=   r  s              r'   r  PromptServer.add_routes5  s   $$T[[1**4;;7  ++DKK5C[C[CaCaCcd((e6N6N6T6T6VW!!,,T[[9K)=)=)E)E)GH &&(
[[E %..  v

/BCEMMbUZUaUab	 !
 	J'DKK( 11779IDHHNT,A3!G HI : '6&U&U&W##&
!"=>#G,- %  &5&K&K&M#&##JJ|-DE%  &<<>G''(>H -??AHH

7$67!  	JJsDMM*
 	3  @/ s   :N1 1
O;OOc                 P    0 n0 nU R                   R                  5       US'   X!S'   U$ )Nqueue_remaining	exec_info)r  get_tasks_remaining)r   prompt_infor  s      r'   r   PromptServer.get_queue_infot  s4    	'+'8'8'L'L'N	#$#,K rY   Nc                 v  #    U[         R                  :X  a  U R                  X#S9I S h  vN   g U[         R                  :X  a  Uu  pEU R	                  XEUS9I S h  vN   g [        U[        [        45      (       a  U R                  XU5      I S h  vN   g U R                  XU5      I S h  vN   g  N NX N$ N7f)Nr   )
r   UNENCODED_PREVIEW_IMAGE
send_imagePREVIEW_IMAGE_WITH_METADATAsend_image_with_metadatarE   bytes	bytearray
send_bytes	send_json)r   eventr   r   preview_imagerP  s         r'   r   PromptServer.send{  s     $<<<//$/000&BBB&*#M//S/QQQui011//%s333..c222 1 R32sE   'B9B10B9B35B9B5B9+B7,B93B95B97B9c                     [        U[        5      (       d  [        SU 35      e[        R                  " SU5      n[        U5      nUR                  U5        U$ )Nz)Binary event types must be integers, got >I)rE   rt  RuntimeErrorstructpackr  r   )r   r  r   packedr4   s        r'   encode_bytesPromptServer.encode_bytes  sM    %%%!J5'RSST5)F#trY   c                   #    US   nUS   nUS   nUbc  [        [        S5      (       a  [        R                  R                  nO[        R                  R                  n[
        R                  " XEU4U5      nSnUS:X  a  SnOUS:X  a  Sn[        5       n[        R                  " SU5      n	UR                  U	5        UR                  XSSS	9  UR                  5       n
U R                  [        R                  XS
9I S h  vN   g  N7f)Nr   r  rD  
ResamplingJPEGrf  r  _   r2   rb  rB  r  )rG  r   r  BILINEARLANCZOSr   containr
   r  r  r$  rL  getvaluer  r   PREVIEW_IMAGE)r   
image_datar   
image_typer  r  
resamplingtype_numbytesIOheaderpreview_bytess              r'   r  PromptServer.send_image  s     ]
1a=ul++"--66
"--55
$$Ux,@*MEH5 H)T8,f

7r!
L((*oo.<<moUUUs   C=D?D Dc                   #    US   nUS   nUS   nUbc  [        [        S5      (       a  [        R                  R                  nO[        R                  R                  n[
        R                  " XVU4U5      nUS:X  a  SOSnUc  0 nXS'   SS Kn	U	R                  " U5      R                  S	5      n
[        U
5      n[        5       nUR                  XS
SS9  UR                  5       n[        5       nUR                  [         R"                  " SU5      5        UR                  U
5        UR                  U5        U R%                  [&        R(                  XS9I S h  vN   g  N7f)Nr   r  rD  r  rf  rg  z
image/jpegr  utf-8r  r  r  r  )rG  r   r  r  r  r   r  r   dumpsencodery   r
   rL  r  r  r   r  r  r  r   r  )r   r  rP  r   r  r  r  r  mimetyper   metadata_jsonmetadata_lengthr  image_bytescombined_datas                  r'   r  %PromptServer.send_image_with_metadata  s;    ]
1a=ul++"--66
"--55
$$Ux,@*ME","5;< H!) 	

8,33G<m, )

7r!
L&&( "V[[?@]+[)oo.JJMocccs   EE!EE!c                 H  #    U R                  X5      nUcK  [        U R                  R                  5       5      nU H!  n[	        UR
                  U5      I S h  vN   M#     g X0R                  ;   a,  [	        U R                  U   R
                  U5      I S h  vN   g g  NE N7fr   )r  r   r   valuesr6   r  r   r  r   r   r4   r   r   s          r'   r  PromptServer.send_bytes  s     ##E0;4<<..01G1"--III LL -dll3.?.J.JGTTT ! JTs$   AB"B>B"B B" B"c                 .  #    XS.nUcK  [        U R                  R                  5       5      nU H!  n[        UR                  U5      I S h  vN   M#     g X0R                  ;   a,  [        U R                  U   R                  U5      I S h  vN   g g  NE N7f)N)r   r   )r   r   r  r6   r  r  s          r'   r  PromptServer.send_json  s~      /;4<<..01G1",,HHH LL -dll3.?.I.I7SSS ! ISs$   A	BB>B
BBBc                 h    U R                   R                  U R                  R                  XU45        g r   )r  call_soon_threadsafer  
put_nowait)r   r  r   r   s       r'   	send_syncPromptServer.send_sync  s(    		&&MM$$uC&8	:rY   c                 H    U R                  SSU R                  5       05        g )Nrn   )r  r   )r   s    r'   queue_updatedPromptServer.queue_updated  s    x8T-@-@-B!DErY   c                    #     U R                   R                  5       I S h  vN nU R                  " U6 I S h  vN   M;   N N7fr   )r  rD   r   )r   r   s     r'   publish_loopPromptServer.publish_loop  s9     ))++C))S/!! +!s   A?AAAAc                 D   #    U R                  X4/US9I S h  vN   g  N7f)N)call_on_start)start_multi_address)r   addressrx   verboser  s        r'   r  PromptServer.start  s#     &&'8&VVVs     c           	      z  #    [         R                  " U R                  S S9nUR                  5       I S h  vN   S nSn[        R
                  (       at  [        R                  (       a_  [        R                  " [        R                  [        R                  S9nUR                  [        R                  [        R
                  S9  SnU(       aF  [        R                  " S5        [        R                  (       a  [        R                  " S SS 35        U H  nUS	   nUS
   n	[         R                  " XHXS9n
 U
R!                  5       I S h  vN   [-        U S5      (       d  Xl        Xl        SU;   a  SR3                  U5      nOUnU(       d  M{  [        R                  " SR3                  XlU	5      5        M     Ub  U" X`R.                  U R0                  5        g g  GN N! ["         aL  nUR$                  [$        R&                  :X  a(  [        R(                  " SU	 SU S35        [+        S
5      ee S nAff = f7f)N)
access_loghttp)protocolverify_mode)certfilekeyfilehttpszStarting server
zP--------------------------------------------------------------------------------a  
ComfyUI has been started in debug-hang mode. Run your workflow as normal up to
the point of the hang or freeze, then use ctrl-C in the cmd or controlling
terminal to dump the python backtraces for debugging. Please attach the extra
debug info to your bug report.
r   r  )ssl_contextzPort z is already in use on address zI. Please close the other application or use a different port with --port.r  :z[{}]z To see the GUI go to: {}://{}:{})r   	AppRunnerr  r  r   tls_keyfiletls_certfilessl
SSLContextPROTOCOL_TLS_SERVER	CERT_NONEload_cert_chainr0   r  
debug_hangTCPSiter  OSErrorerrno
EADDRINUSEr   
SystemExitrG  r  rx   r2   )r   	addressesr  r  runnerssl_ctxschemeaddrr  rx   siter   address_prints                r'   r   PromptServer.start_multi_address  s    txxD9lln 1 1nnc.E.ESVS`S`aG##T->->(,(8(8 $ :FLL,-j !7
  j" D1gG7D;;vJDjjl"" 4++& 	g~ &g 6 'w?FFv^bcd- 0 $&,,		: %Y 	2 # 77e...MME$/MgY  W`  #a  b$Q-'	sN   3H;GDH;9G"G G"<H;AH; G""
H8,AH33H88H;c                 :    U R                   R                  U5        g r   )r  r  )r   r=   s     r'   add_on_prompt_handler"PromptServer.add_on_prompt_handler!  s    &&w/rY   c                     U R                    H  n U" U5      nM     U$ ! [         aC    [        R                  " S5        [        R                  " [        R
                  " 5       5         M^  f = f)NzA[ERROR] An error occurred during the on_prompt_handler processing)r  r   r0   r1   r  r  )r   rR  r=   s      r'   rH  PromptServer.trigger_on_prompt$  s\    ..G8#I.	 / 	  8 cd	 4 4 678s   A	A,+A,r>  node_idc                    [        U[        5      (       a  UR                  S5      n[        U5      R                  S5      n[        R                  " S[        U5      5      U-   U-   nU R                  [        R                  XS5        g )Nr  r  )	rE   rJ  r  r  r  ry   r  r   r   )r   r>  r&  r   node_id_bytesr4   s         r'   send_progress_textPromptServer.send_progress_text.  si     dC  ;;w'DG++G4 ++dC$67-G$N',,g;rY   )r  r  r   r  r|  r~  r   r  r  r{  rK  r:  r  rx   r  r  r   r   r}  r  ro  r   r   )NN)TN)NT)__name__
__module____qualname____firstlineno__r  r  r  r   r   r  r  r  r  r  r  r  r  r  r  r"  rH  r   r  r  rJ  r)  __static_attributes__r%   rY   r'   r   r      s    b,HE=~
3V0#dJUT:F"
W/;b0 EI
<%C/0
<;>
< 
<rY   r   )^r  r   r  r  r  rP  r   r   rM  comfy_execution.jobsr   r   r   r   r   rr   r   r   r  r  r^   r[   PILr   r   PIL.PngImagePluginr	   ior
   r*   r   r0   rx  comfy.cli_argsr   comfy.deploy_environmentr   comfy.utilsr  comfy.model_management	comfy_apir   r  r  r   app.frontend_managementr   r   comfy_api.internalr   app.assets.seederr   app.assets.api.routesr   app.assets.services.ingestr   $app.assets.services.asset_managementr   app.user_managerr   app.model_managerr   app.custom_node_managerr   app.subgraph_managerr   app.node_replace_managerr   typingr   r   *api_server.routes.internal.internal_routesr   r  r   middleware.cache_middlewarer    r  r  r   r(   r6   setr;   rV   rW   r?   rK   rJ  rX   r]   r   r   r   r%   rY   r'   <module>rH     s1    	 
       R R      
    &       ;   #  ' B 1 * 8 = E ( . 5 0 7 " E % 6( ( (
6 5 s{{  $ 	 	 	3 "4&"R%l< l<rY   