+
    #jW               	         R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ]P                  P                  ^ ]! ]	! ]4      P                  4       P                  4      4       ^ RIHtHtHtHtHt ^ RIHt ^ RIHt R R ltR	R
/R R lltR	R
RR/R R lltRR	R
RRRRRR/R R llltRR R llt]R8X  d   ]P<                  ! ]! 4       4       R# R# )uO  
auto_fix_deps.py — Run check_deps.py, then attempt to install whatever is missing.

For local servers:
  - Missing custom nodes → `comfy node install <package>`
  - Missing models → `comfy model download` (only if a URL is supplied via
    --model-source-file or detected via well-known names)

For cloud: prints what would be needed but cannot install (cloud preinstalls
custom nodes and most models server-side; if something genuinely isn't there,
ask Comfy support).

This is conservative: it never installs without an explicit URL for models
(downloading the wrong model is hard to undo). Custom nodes from the registry
are auto-installed by name.

Usage:
    python3 auto_fix_deps.py workflow_api.json
    python3 auto_fix_deps.py workflow_api.json --models-from-file urls.json
    python3 auto_fix_deps.py workflow_api.json --dry-run
)annotationsN)Path)DEFAULT_LOCAL_HOSTENV_API_KEY	emit_jsonlogresolve_api_key)
check_deps)unwrap_workflowc                   V ^8  d   QhRR/# )   return
str | None )formats   "g/opt/hermes-venv/lib/python3.14/site-packages/../../../skills/creative/comfyui/scripts/auto_fix_deps.py__annotate__r   )   s      Z     c                 ~    \         P                  ! R4      '       d   R# \         P                  ! R4      '       d   R# R# )z-Return command prefix for comfy-cli, or None.comfyuvxzuvx --from comfy-cli comfyN)shutilwhichr   r   r   comfy_cli_availabler   )   s)    ||G||E+r   dry_runFc               $    V ^8  d   QhRRRRRR/# )r   cmdz	list[str]r   boolr   ztuple[int, str]r   )r   s   "r   r   r   2   s!              r   c                  V'       d   R# \        RRP                  V 4       24       \        P                  ! V RRRR7      pVP                  ;'       g    RVP
                  ;'       g    R,           pVP                  V3# )    z$  TF)capture_outputtextcheck )r   z	[dry-run])r   join
subprocessrunstdoutstderr
returncode)r   r   procouts   &$  r   run_cmdr-   2   sg    "SXXc]O>>#dUKD;;"!2!2
3C??Cr   	comfy_cmdr   c               (    V ^8  d   QhRRRRRRRR/# )r   packagestrr   r   r.   r   r   )r   s   "r   r   r   ;   s)      # 4 C VZ r   c               ^    VP                  4       R RRV .,           p\        W1R7      w  rEV^ 8H  # )--skip-promptnodeinstallr   )splitr-   )r0   r   r.   r   code_s   &$$   r   install_noder:   ;   s2    
//
	7K
KCc+GD19r   hf_tokencivitai_tokenc               8    V ^8  d   QhRRRRRRRRRRR	RR
RRR/# )r   urlr1   folderfilenamer   r   r   r.   r;   r<   r   r   )r   s   "r   r   r   A   sI      s C : "7:&>HTXr   c          	        VP                  4       R RRRV RRV 2.,           pV'       d   VP                  RV.4       V'       d   VP                  RV.4       V'       d   VP                  RV.4       \        WsR	7      w  rV^ 8H  # )
r3   modeldownloadz--urlz--relative-pathzmodels/z
--filenamez--set-hf-api-tokenz--set-civitai-api-tokenr6   )r7   extendr-   )
r>   r?   r@   r   r.   r;   r<   r   r8   r9   s
   &&&$$$$   r   install_modelrE   A   s     //
*WVH- C
 

L(+,

((34

-}=>c+GD19r   c                    V ^8  d   QhRRRR/# )r   argvzlist[str] | Noner   intr   )r   s   "r   r   r   S   s     J$ J$ J$3 J$r   c                   \         P                  ! R R7      pVP                  R4       VP                  R\        R7       VP                  RR\         2R7       VP                  RR	R7       VP                  R
RR7       VP                  RRR7       VP                  RRRR7       VP                  RRRR7       VP                  V 4      p\        VP                  4      p\        VP                  4      P                  4       pVP                  4       '       g   \        RRVP                   2/4       ^#  VP                  4       ;_uu_ 4       p\        \        P                   ! V4      4      pRRR4       \)        XTP*                  TR7      pTR,          '       d   \        RRRT/4       ^ # TR,          '       d   \        RRRRRT/4       ^# \-        4       p	T	'       g   \        RR RR!RT/4       ^# . p
. p\/        4       pTR",           F  pTP1                  R#R$4      pTP3                  R%4      '       du   TP5                  R&4      RL,          pY9   d   KL  TP7                  T4       \9        YP:                  T	R'7      pT'       d   T
MTP=                  R(R)R*TR+TR,,          R-T/4       K  TP=                  R(R)R+TR,,          R-R.RR/TP1                  R0R$4      ,           /4       K  	  / pTP>                  '       d9    \        P@                  ! \        TP>                  4      PC                  4       4      pTR2,           F  pTR3,          pTP1                  T4      pT'       g%   TP=                  R(R4R5TR6TR6,          R-R.RR7/4       KI  \I        TTR6,          TTP:                  T	TPJ                  TPL                  R87      pT'       d   T
MTP=                  R(R4R5TR6TR6,          R9TR-T/4       K  	  TR:,           F  pTR;,          pTP1                  T R<24      ;'       g.    TP1                  T R=24      ;'       g    TP1                  T4      pT'       g   TP=                  R(R>R?TR-R.RR@/4       Kx  TPO                  R=4      '       d   T R=2MT R<2p\I        TRATTP:                  T	TPJ                  TPL                  R87      pT'       d   T
MTP=                  R(R>R?TR9TR-T/4       K  	  \P        ;QJ d    RB T
 4       F  '       g   K   RCM	  R.M! RB T
 4       4      p\        RT'       g   RDMRERFT
RGTRHT;'       d    TPR                  '       * RIRJRKTP:                  /4       T'       g   ^ # ^#   + '       g   i     EL; i  \"        \        P$                  3 d"   p\        R\'        T4      /4        Rp?^# Rp?ii ; i  \D        \        P$                  3 d   p\G        R1T 24        Rp?ELRp?ii ; i)Mz.Run check_deps and install whatever is missing)descriptionworkflowz--host)defaultz	--api-keyzor set $)helpz--models-from-filezMJSON file mapping {model_filename: download_url} for models that need installz
--hf-tokenzHuggingFace token for downloadsz--civitai-tokenzCivitAI token for downloadsz	--dry-run
store_truez-Show what would be installed without doing it)actionrM   z--no-restartz6Don't suggest restarting the server after node installerrorzWorkflow not found: N)hostapi_keyis_readystatusreadyreportis_cloudcannot_fix_cloudreasonzRComfy Cloud preinstalls nodes; if something is genuinely missing, contact support.
cannot_fixzWcomfy-cli not on PATH; install with `pip install comfy-cli` or `pipx install comfy-cli`missing_nodesfix_commandr$   zcomfy node install r    )r   r.   kindr4   r0   
node_class
class_typeokFzNo registry mapping known. fix_hintz#Could not read --models-from-file: missing_modelsvaluerB   r@   r?   z9No URL provided in --models-from-file. Refusing to guess.)r   r.   r;   r<   r>   missing_embeddingsembedding_namez.ptz.safetensors	embeddingnamez&No URL provided in --models-from-file.
embeddingsc              3  j   "   T F)  qR ,          R8H  ;'       d    VP                  R4      x  K+  	  R# 5i)r]   r4   r`   N)get).0as   & r   	<genexpr>main.<locals>.<genexpr>   s*     MW&	V+;;d;Ws   33Tfixedpartialactions_takenfailuresneeds_server_restartrestart_hintz'comfy stop && comfy launch --backgroundr   )*argparseArgumentParseradd_argumentr   r   
parse_argsr   rR   r   rK   
expanduserexistsr   openr
   jsonload
ValueErrorJSONDecodeErrorr1   r	   rQ   r   setrj   
startswithr7   addr:   r   appendmodels_from_fileloads	read_textOSErrorr   rE   r;   r<   endswithany
no_restart)rG   pargsrR   wf_pathfrK   erV   r.   actionsrr   seen_packagesentryr   r0   r`   sourcesr@   r>   emb_nametarget_filenameneeds_restarts   &                      r   mainr   S   s   ,\]ANN:NN8%7N8NN;x}%=N>NN'g  iNN<&GNHNN$+HNINN;|G  INN>,P  R<<Ddll+G4==!,,.G>>724==/BCD\\^^q&tyy|4H  tyy'BFj8Wh78j(jf
 	
 #%Ilof
 	
 GH "eM((iir*>>/00iinR(G'g&g||yQBW00	7L%BUb2 
 OOeL.AeX'DuyyQ[]_G`'`  )& !G	;jjd&;&;!<!F!F!HIG ())>kk(#OOXxxeX (< 
 x(LLI]]$2D2D

 H,,GZ8U8_3b.
 	 ** ,--)*{{hZs+, ( (++
,78( (++h' 	 OOVXeX'O  ),n)E)Exj%:S! 	 LLI]]$2D2D

 H,,K5#tR.
 	+ .2 CMWMCCCMWMMM'yH E Edoo2EA4<<  1#!#i ^^,,- 7CF#$n --. 	;5aS9::	;sN   7U>  U*/U> =7V= *U;	5U> ;U> >V:V55V:=W1W,,W1__main__)N)__doc__
__future__r   rv   r}   r   r&   syspathlibr   pathinsertr1   __file__resolveparent_commonr   r   r   r   r   r	   r
   r   r-   r:   rE   r   __name__exitr   r   r   <module>r      s   , #     
  3tH~--/667 8  " # u  % ' %*=D)-KO $J$Z zHHTV r   