64#h)< UddlmZddlZddlZddlZddlZddlmZmZddl m Z ddl m Z hdZ ded<iad ed <e j r&ej"j%e j Zn4ej"j)ej"j+eZej"j/ed Zej"j/ed ge ftd <ej"j/ed gdgftd <ej"j/edge ftd<ej"j/edge ftd<ej"j/edej"j/edge ftd<ej"j/edej"j/edge ftd<ej"j/edge ftd<ej"j/edge ftd<ej"j/edge ftd<ej"j/edgdgftd<ej"j/edge ftd<ej"j/edej"j/edge ftd<ej"j/edge ftd<ej"j/edge ftd<ej"j/edgeftd<ej"j/ed ge ftd <ej"j/ed!ge ftd!<ej"j/ed"gd#hftd"<ej"j/ed$aej"j/ed%aej"j/ed&aej"j/ed'aiad(ed)<Gd*d+ZeZ d,d-d.a!dHd/Z"ej"jGt8s ejHt8dId1Z&dJd2Z'dKd3Z(dLd4Z)dLd5Z*dLd6Z+dLd7Z,dMd8Z-dNd9Z.dOd:Z/dPd;Z0dQdRd<Z1dSd=Z2dTdUd>Z3dVd?Z4dQdWd@Z5dXdAZ6dYdBZ7dZdCZ8d[dDZ9d\dEZ:dVdFZ;d]d^dGZ.pt.bin.pkl.pt2.pth.sft.ckpt .safetensorszset[str]supported_pt_extensionsz%dict[str, tuple[list[str], set[str]]]folder_names_and_pathsmodels checkpointsconfigsz.yamllorasvae text_encodersclipunetdiffusion_models clip_vision style_models embeddings diffusersfolder vae_approx controlnet t2i_adaptergligenupscale_models custom_nodes hypernetworks photomaker classifiersoutputtempinputuserz4dict[str, tuple[list[str], dict[str, float], float]]filename_list_cachec:eZdZdZdZd d dZd dZdZdZdZ y) CacheHelperz9 Helper class for managing file list cache data. c i|_d|_yNF)cacheactiveselfs 3D:\ComfyUI_windows_portable\ComfyUI\folder_paths.py__init__zCacheHelper.__init__<sKM  NcV|js|S|jj||SN)r4r3get)r6keydefaults r7r<zCacheHelper.get@s#{{Nzz~~c7++r9c<|jr||j|<yyr;)r4r3)r6r=values r7setzCacheHelper.setEs ;;#DJJsO r9c8|jjyr;)r3clearr5s r7rCzCacheHelper.clearIs r9cd|_|S)NT)r4r5s r7 __enter__zCacheHelper.__enter__Ls  r9c2d|_|jyr2)r4rC)r6exc_type exc_value tracebacks r7__exit__zCacheHelper.__exit__Ps  r9r;)r=strreturn)tuple[list[str], dict[str, float], float])r=rKr@rMrLNone) __name__ __module__ __qualname____doc__r8r<rArCrErJr9r7r0r08s%, $r9r0imagemodel)webpfbxc0ddd}|j||S)Nrr)rr)r<) folder_namelegacys r7 map_legacyr[[s (%'F ::k; //r9z Failed to create input directoryc|ayr;output_directory) output_dirs r7set_output_directoryr`fs!r9c|ayr;temp_directory)temp_dirs r7set_temp_directoryrejNr9c|ayr;input_directory) input_dirs r7set_input_directoryrknsOr9ctSr;r]rSr9r7get_output_directoryrmrs r9ctSr;rbrSr9r7get_temp_directoryrovs r9ctSr;rhrSr9r7get_input_directoryrqzs r9ctSr;user_directoryrSr9r7get_user_directoryru~s r9c|ayr;rs)user_dirs r7set_user_directoryrxrfr9c^|dk(r tS|dk(r tS|dk(r tSy)Nr*r+r,)rmrorq) type_names r7get_directory_by_typer{s8H#%%F!##G"$$ r9cg}|D]x}|jdd}|tvr;tj|d\}}|s<|jdd}|t|<n t|}||vsh|j |z|S)a Example: files = os.listdir(folder_paths.get_input_directory()) videos = filter_files_content_types(files, ["video"]) Note: - 'model' in MIME context refers to 3D models, not files containing trained weights and parameters .F)strict/r)splitextension_mimetypes_cache mimetypes guess_typeappend)files content_typesresultfile extension mime_type_ content_types r7filter_files_content_typesrsFJJsOB' 5 5$//UCLIq$??3/2L3? %i 04Y?L = ( MM$  Mr9c|jdrt}|dd}||fS|jdrt}|dd}||fS|jdrt}|dd}||fS|dfS)Nz[output]iz[input]iz[temp]i)endswithrmrqro)namebase_dirs r7annotated_filepathrs }}Z ')CRy > y !&(CRy > x %'CRy >Tzr9ct|\}}|||}n t}tjj ||Sr;)rrqospathjoin)r default_dirrs r7get_annotated_filepathrs>'-ND(  ""H*,H 77<<$ ''r9ct|\}}| t}tjj ||}tjj |Sr;)rrqrrrexists)rrfilepaths r7exists_annotated_filepathrsE'-ND(&(ww||Hd+H 77>>( ##r9c t|}|tvrgt|\}}||vr.|rT|d|k7rK|j||jd|y|r|jd|y|j |yyy|gt ft|<yNr)r[rremoveinsertrrA)rYfull_folder_path is_defaultpaths_extss r7add_model_folder_pathrs[)K,,-k: u u $eAh*:: -. Q 01 Q 01 -.;z1A/A35.I{+r9c6t|}t|dddSr)r[r)rYs r7get_folder_pathsrs![)K !+ .q 1! 44r9ctjj|sgifS|g}g}i} tjj|||<t jdj|tj|ddD]\}}}|Dcgc] }||vs| c}|dd|D]R} tjjtjj|||} |j| T|D]E}tjj||} tjj| || <Gt jdjt|||fS#t$rt j d|dYTwxYwcc}w#t j d|dYxYw#t$rt j d| dYwxYw)NzWarning: Unable to access z. Skipping this path.z#recursive file list on directory {}T) followlinkstopdownz. Skipping this file.zfound {} files)rrisdirgetmtimeFileNotFoundErrorloggingwarningdebugformatwalkrelpathrrlen) directoryexcluded_dir_namesrdirsdirpathsubdirs filenamesd file_name relative_pathrs r7recursive_searchrs 77== #2v ! F DW''**95Y MM7>>yIJ (*wwydTX'Y#)!(HAA5G,GaH "I  " Wi0PR[ \  m,#A Wa0D WW--d3T (Z" MM"))#f+67 4<5 W4YK?TUVWI  " F' F'0AF,'"G >"F$#F$,G  "G21G2cFtttfd|S)Nctjj|djvxst dk(S)Nr~r)rrsplitextlowerr)a extensionss r7z)filter_files_extensions..s<(8(8(;B(?(E(E(G:(U(mY\]gYhlmYm(mr9)sortedlistfilter)rrs `r7filter_files_extensionsrs $vmotuv wwr9ct|}|tvryt|}tjj tjj d|d}|dD]}tjj ||}tjj |r|cStjj|sftjdj|y)Nrrz;WARNING path {} exists but doesn't link anywhere, skipping.) r[rrrrrisfileislinkrrr)rYfilenamefoldersx full_paths r7 get_full_pathrs[)K00$[1Gwwrww||C:C@H QZGGLLH- 77>>) $  WW^^I & OOY``ajk l  r9cFt||}|td|d|d|S)NzModel in folder 'z' with filename 'z ' not found.)rr)rYrrs r7get_full_path_or_raiser's9k84I"3K=@QRZQ[[g hii r9ct|}t}t|}i}|dD]7}t|dg\}}|j t ||di||}9t t||tjfS)Nrz.git)r) r[rArrupdaterrrtime perf_counter)rY output_listroutput_foldersrr folders_alls r7get_filename_list_r.s[)K%K$[1GN QZ-aVHM{25'!*EF:N:k: ${# $nd6G6G6I IIr9cZtj|}||St|}|tvryt|}|dD]0}|d|}|}tj j ||k7s0yt|}|dD]+}tj j|s#||dvs+y|S)Nrr) cache_helperr<r[r.rrrrr)rY strong_cacheoutr time_modifiedrrs r7cached_filename_list_r;s##K0L[)K-- k *C VAq  77  F #} 4  %[1G QZ 77== A Jr9ct|}t|}|t|}|t|<tj ||t |dSr)r[rrr.rrAr)rYrs r7get_filename_listrUsN[)K  ,C { -+.K([#& A<r9c  d fd }d d}dvr |||tjjtjj}tjj tjj tjj ||}tjj |tjj|f|k7rdtjj|zdz|zdztjj |tjj|fz}tj|t| tt fdt|tj|dd z} | | |fS#t$rd } Yt $rtj"|d d } Y7wxYw)Ncttjj}|d|dz} t ||dzdj dd}||fS#d}Y||fSxYw)Nrrr)rrrbasenameintr)r prefix_lenprefixdigitsfilename_prefixs r7 map_filenamez)get_save_image_path..map_filename`sx))/:; /:>* *q./288=a@AFv~ Fv~s #AA#c|jdt|}|jdt|}tj}|jdt|j}|jdt|j j d}|jdt|jj d}|jdt|jj d}|jdt|jj d}|jd t|jj d}|S) Nz%width%z%height%z%year%z%month%z%day%z%hour%z%minute%z%second%) replacerKr localtimetm_yeartm_monzfilltm_mdaytm_hourtm_mintm_sec)r, image_width image_heightnows r7 compute_varsz)get_save_image_path..compute_varsis i[)9: j#l*;<nn hCKK(89 iSZZ)>)>q)AB gs3;;'7'='=a'@A hCKK(8(>(>q(AB j#cjj/*?*?*BC j#cjj/*?*?*BC r9%zX**** ERROR: Saving image outside the output folder is not allowed. full_output_folder: z output_dir: z commonpath: ctjj|dddtjjk(xr |dddk(S)Nrr~r)rrnormcase)rrs r7rz%get_save_image_path..sNrww'7'7!Sb 'BbggFVFVW_F`'`'tefgheijlemqtet'tr9rrT)exist_ok)rrKrLztuple[int, str])r,rKrrrrrLrK)rrdirnamenormpathrr commonpathabspathrerror Exceptionmaxrmaplistdir ValueErrorrmakedirs) rr_rrrr subfolderfull_output_foldererrcounterrs ` @r7get_save_image_pathr_s  o& \R 0 0 ABIww 0 0 ABHj)< ww:rww7I'JKLPZZ(*,''//:L*MN'(*45((+-''*<*r s"  &$ll@B=B 3 34I 0 0 :;I WW\\)X . *,'',,z=*Q)RTk(l}%&(ggll:y&I%JWI$Vy!$&GGLLW$E#FH_"`w"$'',,z5"A!BD[ \u,.GGLL_,UWYW^W^WcWcdnpvWw+x{R+S'/1ww||J/OQSQXQXQ]Q]^hj|Q}.~AX.Y)**,'',,z=*Q)RTk(l}%+-77<< N+S*TVm)n~&)+j,)O(PRi'j|$(* Z(M'NQYPZ&[{#)+j,)O(PRi'j|$)+j,)OQSQXQXQ]Q]^hjwQx(y|S(T|$%'WW\\*h%G$HJa#bx -/WW\\*FV-W,XZq+r'(+-77<< >+R*SUXUZ)[~&,.GGLL_,U+VXo*p')+j,)O(PRi'j|$*,'',,z=*Q)RUWTX(Y}%77<< 84i0'',,y'2i0LNIN8}   0  ww~~o&: O$"  8  ($J$5'Rx " J4-My: 89s 4S++T