
    
3jcA                        S SK r S SKrS SKrS SKrS SKJr  S SKJrJ	r	  S SK
r
S SKJr  SSKJr  SSKJr  SSKJrJrJrJrJrJrJr  \" S	5      rS-S
\\   S-  4S jjrS r S.S\S-  4S jjr       S/S\	S   S\\-  S-  S\S-  S\ S\S-  4
S jjr!S-S jr"S r#S\RH                  S\RJ                  4S jr&S\S\\   S\4S jr'S r(S r)S\S \4S! jr*S"S#.S$\S%\S&\ 4S' jjr+S\S(\\   4S) jr,S0S*\-\\4   4S+ jjr.S\S \4S, jr/g)1    N)Path)AnyLiteral)web   )get_node_dependencies)mklog)SortModebackup_filebuild_glob_patternsglob_multiplereqs_maprun_command
styles_dirzmtb endpointdependency_namesc                    U c  SS0$ [         R                  SU  35        U  Vs/ s H  n[        R                  " X5      PM     nn[	        [        5       R                  5        VVs1 s H  o3  H  oDiM     M     snn5      nU  H  nX5;  d  M
  SSU SU 30s  $     [        [        [        R                  5      SSS/U-   5        S	S
0$ s  snf s  snnf ! [         a  nSSU 30s S nA$ S nAff = f)NerrorzNo dependency name providedz(Received Install Dependency request for zUnknown dependency: z,, you can only use this endpoint to install z-mpipinstallsuccessTz Failed to install dependencies: )endlogdebugr   getlistr   valuesr   r   sys
executable	Exception)r   nameresolved_namesdepdallowed_depses          ?/home/wildlama/comfy/ComfyUI/custom_nodes/comfy_mtb/endpoint.pyACTIONS_installDependencyr&      s   677
LL;<L;MNO;KL;K4hll4.;KNL+-446D6s16DL  "/u4`am`no   
A#..!4	:^K	
 4   MD  A;A3?@@As)    C
&C
,C 
C0C+%C0+C0c                     [        [        R                  " 5       5      n [        [        R                  " 5       5      nU R	                  5        Vs/ s H%  o"R                  5       (       d  M  UR                  PM'     nnUR	                  5        Vs/ s H%  o"R                  5       (       d  M  UR                  PM'     nnX4S.$ s  snf s  snf )Ninputoutput)r   folder_pathsget_input_directoryget_output_directoryiterdiris_dirr   )	input_dir
output_dirxinput_subdirsoutput_subdirss        r%   ACTIONS_getUserImageFoldersr5   D   s    \5578Il779:J%.%6%6%8G%8HHJVQVV%8MG&0&8&8&:I&:hhjfaff&:NI"== HIs   C+CC+Csortc           
         U=(       d    Sn/ SQn0 n[        U5      n[        [        R                  " 5       5      n[	        Xv5      n[
        R                  " U5      nU(       a  [
        R                  S [
        R                  S [
        R                  S [
        R                  S 0R                  U5      n	U	(       a-  U[
        R                  [
        R                  4;   n
[        XYU
S9n[        U5       VVs0 s HT  u  pX+s=::  a
  X!-   :  d  M  O  M  UR                  S[        R                   R#                  UR                  5       S	U  S
3_MV     nnnU$ s  snnf )N  )webmmp4mkvmovc                 6    U R                  5       R                  $ Nstatst_mtimer2   s    r%   <lambda>'ACTIONS_getUserVideos.<locals>.<lambda>\       ):):    c                 6    U R                  5       R                  $ r>   r?   rB   s    r%   rC   rD   ]       1B1BrF   c                     U R                   $ r>   r   rB   s    r%   rC   rD   ^       QVVrF   c                     U R                   $ r>   rJ   rB   s    r%   rC   rD   _       QVVrF   keyreversezT/view?force_rate=0&frame_load_cap=0&skip_first_frames=0&select_every_nth=1&filename=z$&type=input&format=video&force_size=zx?)r   r   r+   r,   r   r
   from_strMODIFIEDMODIFIED_REVERSENAMENAME_REVERSEr   sorted	enumerater   urllibparse
quote_plus)sizecountoffsetr6   video_extensionsentriespatternsr0   	sort_modesort_keyrP   ivideovideoss                 r%   ACTIONS_getUserVideosrf   N   sw    MTE4G"#34H\5578II0G!!$'I:%%'BMM+!!#3	

 #i. 	 H$5$5x7L7L#MMGWGDG "'*	 +HA''		u (		u

bcicococzcz  |A  |F  |F  dG  cH  Hl  mq  lr  rt  u	u +	   Ms   :EE?Emoder(   target_widthinclude_subfolders	subfolderc                 h   0 nU=(       d    SnU(       a  [        U5      OS n[        [        R                  " 5       5      n	[        [        R                  " 5       5      n
U S:X  a  U	OU
nU(       aE  X-  nUR                  5       (       d,  SSUR                   SUR                  R                  5        30$ / SQn0 n[        XS9n[        X5      n[        R                  " U5      nU(       a  [        R                  S [        R                  S	 [        R                  S
 [        R                   S 0R#                  U5      nU(       a.  U[        R                  [        R                   4;   n[%        UUUS9n['        U5       VVs0 s H  u  nnUUs=::  a
  X2-   :  d  M  O  M  UR                  SUR                   U(       a  US:  a  SU 3OS SU  SU=(       d    S U(       a  UR                  R)                  U5      OS SU(       a  S[*        R,                  " S5       3OS 3
_M     nnnU$ s  snnf )Nr8   r)   r   z
Subfolder z doesn't exists in )pngjpgjpegwebpgif)	recursivec                 6    U R                  5       R                  $ r>   r?   rB   s    r%   rC   'ACTIONS_getUserImages.<locals>.<lambda>   rE   rF   c                 6    U R                  5       R                  $ r>   r?   rB   s    r%   rC   rs      rH   rF   c                     U R                   $ r>   rJ   rB   s    r%   rC   rs      rK   rF   c                     U R                   $ r>   rJ   rB   s    r%   rC   rs      rM   rF   rN   z/mtb/view?filename=r   z&width= z&type=z&subfolder=z	&preview=z&rand=i2y )intr   r+   r,   r-   existsr   parentas_posixr   r   r
   rQ   rR   rS   rT   rU   r   rV   rW   relative_tosecrets	randbelow)rg   rh   r\   r]   r6   ri   rj   	salt_urlsimgsr0   r1   	entry_dir	supportedr_   r`   ra   rb   rP   rc   imgs                       r%   ACTIONS_getUserImagesr   o   s4     DMTE(43|$$L\5578Il779:J#'7?i
I)	!!:inn%55HIYIYIbIbIdHef  6IG"9KHI0G!!$'I:%%'BMM+!!#3	

 #i. 	 H$5$5x7L7L#MMGW(GDG  ( )FAsQ''	T (	T!#((YehiYigl^,Doq+rrxy}x~  J  KT  KZ  XZ  J[4Fszz%%i0BO	&!2!26!: ;<rRT	T
 ) 	  Ks   H.H.!BH.c                    SSK Jn  UR                  nS/nU(       a`  UR                  5        VVs0 s H&  u  pEUR	                  S5      (       a  M  XC;  d  M$  XE_M(     nnnU (       a  UR                  U SS05      $ U$ SS0$ s  snnf )Nr   )MTB_StylesLoaderr   __r   zStyle not foundzNo styles found)nodes.conditionsr   optionsitems
startswithr   )
style_namer   styles
match_listrO   valuefiltered_styless          r%   ACTIONS_getStylesr      s    2%%FJ %lln
,
>>$' ,/,A CJ, 	 

 "&&W&78  &''
s   BBBc                 d   [         R                  " 5        Vs/ s H   oR                  S:X  d  M  UR                  PM"     nnS n/ nU R	                  5        H/  u  pVXR;   d  M  [
        R                  SU 35        [         U-  nUn  O   U(       d*  [
        R                  SU R                  5        35        SS0$ [        U5        UR                  SSSS	9 n[        R                  " U[        R                  S
9nU H  n	UR                  U	5        M     S S S 5        g s  snf ! , (       d  f       g = f)N.csvzOverwriting z(Could not determine the target file for r   z1Could not determine the target file for the stylewrw   zutf-8)newlineencoding)quoting)r   r.   suffixr   r   r   r   warningkeysr   opencsvwriter	QUOTE_ALLwriterow)
datafr   targetrowsfpcontentfile
csv_writerrows
             r%   ACTIONS_saveStyler      s    )002I2hh&6Hfaff2FIFDzz|<LL<t,-"_FD $ 6tyy{mD	
 LMM	S"w	74ZZcmm<
C$  
8	7% J$ 
8	7s   DD>D!!
D/requestreturnc                   #    [         R                  S5        U R                  5       I S h  vN nUR                  S5      nUR                  S5      n[         R                  SU SU 35        SU 3n[	        5       R                  U5      n[        U5      (       ac  S nU(       a#  [        U[        5      (       a  U" U6 OU" U5      nOU" 5       n[         R                  SU 35        [        R                  " SU05      $ [	        5        Vs/ s H)  nUR                  S5      (       d  M  U[        S5      S  PM+     nn[        R                  " S	US
.5      $  GN*s  snf 7f)NzInit action requestr   argszReceived action request:  ACTIONS_zAction result: resultzInvalid method name.)r   available_methods)r   r   jsonr   globalscallable
isinstancer   r   json_responser   len)	r   request_datar   r   method_namemethodr   attrr   s	            r%   	do_actionr      s<    
LL&' 'LF#DF#D
LL,TF!D6:;TF#KY]];'F&0t&<&<VT]&,FXFvh/0  (F!344 ID??:& 	 S_   +!2	
 3 (&s(   )EECE
E(E:EEr   dependenciesc                 j    SR                  U Vs/ s H	  nSU S3PM     sn5      nSU SU  S3$ s  snf )N,'zs
        <button
            class="dependency-button"
            onclick="window.mtb_action('installDependency',[z])"
        >Install z deps</button>
        join)r   r   r2   depss       r%   dependencies_buttonr     sS    88|4|!q1X|45D= >BF C 		  5s   0c                     [         R                  " 5        V s/ s H  o R                  S:X  d  M  U PM     nn 0 nU H  n[        USS9 n [        R
                  " U 5      n/ X#R                  '   U HG  n[        R                  SUS    35        X#R                     R                  US   US   US   45        MI     S S S 5        M     SnUR                  5        H  u  pxS	U S
3n	/ n
[        U5       He  u  pU
US:X  a  S/U Vs/ s H	  nSU S3PM     sn-   S/-   O7S/[        U5       VVs/ s H  u  pUS:X  a  SU S3OSU S3PM     snn-   S/-   -  n
Mg     U	SU SU S3SR                  U
5      -   S-   -  n	U	SU SU S3-  n	U[        Xy5      -  nM     US-  nUS-  nU$ s  sn f ! , (       d  f       GM~  = fs  snf s  snnf )Nr   utf8)r   zAdding style r   r      zU
            <div id="style-editor">
             <h1>Style Editor</h1>

            z<h3>z</h3>z<tr>z<th>z</th>z</tr>z<td><input type='text' value='z'></td>z.<td><textarea name='Text1' cols='40' rows='5'>z</textarea></td>z<table data-id='z' data-filename=''>rw   z</table>z<button data-id='z=' onclick='saveTableData(this.getAttribute("data-id"))'>Save 	</button></div>z7<script src='/mtb-assets/js/saveTableData.js'></script>)r   r.   r   r   r   readerr   r   r   appendr   rW   r   add_foldable_region)r   inputsstyle_filesr   parsedr   html_outcurrentr   current_out
table_rowsindexstylecellrc   s                  r%   
csv_editorr     s<   #++-D-AV1Ca-FD K$(AZZ]F%'K		"}SVH56II&--s1vs1vs1v.FG  )( H
 ',,.WIU+
%f-LEA: EBEDtD6/EBBgYN H
 (1'7	 (8GA 6 9gFMdVScde (8	 i 	J . 	wi'8	Dggj!"	

 	*7)3rszr{  |E  F  	F'==3 /6 HMMHO_ E
 )(" Cs#   F$F$A2F)F<+G)
F9	c            
      *   / n/ n[        U R                  5       5       HH  u  nu  pEUS:X  a  SOSnUR                  SU SU SU S35        UR                  SU S	U S
U S35        MJ     SR                  U5      nSR                  U5      nSU SU S3$ )Nr   activerw   z<button class='tablinks z' onclick="openTab(event, 'z')">r   z	<div id='z' class='tabcontent r   r   
z;
<div class='tab-container'>
    <div class='tab'>
        z
    </div>
    zH
    </div>
    <script src='/mtb-assets/js/tabSwitch.js'></script>
    )rW   r   r   r   )	kwargstab_headerstab_contentsidxtab_namer   active_classheaders_strcontents_strs	            r%   render_tab_viewr   ?  s    KL$-flln$=  h#&!8x&|n4PQYPZZ_`h_iirs	
 	z!5l^2gYfU	
 %> ))K(K99\*L	 
 N  rF   titler   c                 6    U  S3nSU  SU SU SU  SU  SU S3$ )	Nz-symbolzq
    <div class='foldable'>
        <div
            class='foldable-title'
            onclick="toggleFoldable('z', 'z$')"
        >
            <span id='z5' class='foldable-symbol'>&#9655;</span>
            z!
        </div>
        <div id='z(' class='foldable-content'>
            zV
        </div>
    </div>
    <script src='/mtb-assets/js/foldable.js'></script>
     )r   r   	symbol_ids      r%   r   r   Z  sW    '!I& ',WD < k "G  I  rF   T)verticalleft_contentright_contentr   c          
      d    U(       a  SOSnSU SU  SU S[        U5      R                  5        S3	$ )Nr   
horizontalz
    <div class="split-pane z+">
        <div id="leftPane">
            zZ
        </div>
        <div id="resizer"></div>
        <div id="rightPane">
            z>
        </div>
    </div>
    <script>
        initSplitPane(zM);
    </script>
    <script src='/mtb-assets/js/splitPane.js'></script>
    )strlower)r   r   r   orientations       r%   add_split_paner   m  sV     !)*lK'= )N  O  8}**,- . rF   r   c           
      p    SR                  U Vs/ s H  nSU SU S3PM     sn5      nSU  SU S3$ s  snf )Nr   z<option value='r   z	</option>z0
    <select>
        <option disabled selected>z</option>
        z
    </select>
    r   )r   r   opt
option_strs       r%   add_dropdownr     sZ    <CDGS?3%r#i	0GDJ##(' *		   	Es   3
table_dictc                 2   [        U R                  5       S S9nSnU He  u  pV[        U[        5      (       a?  SU;   a"  USU S3-  nU[	        XVS   5       -  nUS-  nMB  USU S[        U5       S3-  nMY  USU SU S3-  nMg     SUc  SOS	U S
3 SU S3$ )Nc                     U S   $ )Nr   r   )items    r%   rC   render_table.<locals>.<lambda>  s    T!WrF   )rO   rw   r   z<tr><td>z	</td><td>z
</td></tr>z/
        <div class="table-container">
        z<h1>z</h1>z
        <table>
            <thead>
                <tr>
                    <th>Name</th>
                    <th>Description</th>
                </tr>
            </thead>
            <tbody>
                z>
            </tbody>
        </table>
        </div>
        )rV   r   r   dictr   render_table)r   r6   r   
table_listr   r   r   s          r%   r   r     s     4J J 
dD!!%i88
*4n1EFG
 l*
tfIl4.@-AL
 HTF)D6DDJ! !$	}Du"56 	7  	 rF   c                     SnSU  SU SU S3$ )Na  <svg xmlns="http://www.w3.org/2000/svg" fill="whitesmoke" height="3em" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>z:
    <!DOCTYPE html>
    <html>
    <head>
        <title>ay  </title>
        <link rel="stylesheet" href="/mtb-assets/style.css"/>
    </head>
    <script type="module">
        import { api } from '/scripts/api.js'
        const mtb_action = async (action, args) =>{
            console.log(`Sending ${action} with args: ${args}`)
            }
        window.mtb_action = async (action, args) =>{
            console.log(`Sending ${action} with args: ${args} to the API`)
            const res = await api.fetchApi('/actions', {
                method: 'POST',
                body: JSON.stringify({
                  name: action,
                  args,
                }),
            })

              const output = await res.json()
              console.debug(`Received ${action} response:`, output)
              if (output?.result?.error){
                  alert(`An error occured: {output?.result?.error}`)
              }
              return output?.result
        }
    </script>
    <body>
        <header>
        <a href="/">Back to Comfy</a>
        <div class="mtb_logo">
            <img
                src="https://repository-images.githubusercontent.com/649047066/a3eef9a7-20dd-4ef9-b839-884502d4e873"
                alt="Comfy MTB Logo" height="70" width="128">
            <span class="title">Comfy MTB</span></div>
            <a style="width:128px;text-align:center" href="https://www.github.com/melmass/comfy_mtb">
                z@
            </a>
        </header>

        <main>
            z
        </main>

        <footer>
            <!-- Shared footer content here -->
        </footer>
    </body>

    </html>
    r   )r   r   github_icon_svgs      r%   render_base_templater     s@     dO w #F !! "
 I 	Y5 5rF   r>   )      r   N)Nr8   r   NFNF)TN)0r   r}   r   urllib.parserX   pathlibr   typingr   r   r+   aiohttpr   r   r   logr	   utilsr
   r   r   r   r   r   r   r   r   r   r&   r5   rf   rx   boolr   r   r   RequestResponser   r   r   r   r   r   r   r   r   r   r   rF   r%   <module>r     s   
  
      *    
~	
AS	D0@ AP> 7;),tF &*
$  ;
#
$;)d";
 *; ; Tz;|(&%8 S[[  S\\  Lc c s 0f6s S ( @D&)8<*	 	d3i 	'T#s(^ 'T7 7c 7rF   