chore: auto-commit (61 archivos)
- docs/capabilities/INDEX.md - docs/capabilities/comfyui.md - python/functions/browser/comfyui_export_workflow_ui.md - python/functions/browser/comfyui_export_workflow_ui.py - python/functions/browser/comfyui_load_workflow_ui.md - python/functions/browser/comfyui_load_workflow_ui.py - python/functions/browser/comfyui_queue_prompt_ui.md - python/functions/browser/comfyui_queue_prompt_ui.py - python/functions/browser/comfyui_refresh_nodes_ui.md - python/functions/browser/comfyui_refresh_nodes_ui.py - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
---
|
||||
name: comfyui_install_custom_node
|
||||
kind: function
|
||||
lang: py
|
||||
domain: ml
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "def comfyui_install_custom_node(repo_url: str, *, comfyui_dir: str = \"~/ComfyUI\", pip_install: bool = True, restart: bool = False) -> dict"
|
||||
description: "Instala un custom node de ComfyUI: git clone del repo en custom_nodes/<name> + (si trae requirements.txt) pip install de sus deps en el venv de ComfyUI. El venv suele crearse con uv y no trae pip, asi que el instalador se autodetecta (python -m pip -> uv pip -> pip). NO reinicia el servidor por defecto (restart=False): el nodo se carga al siguiente arranque. Impura: subprocess git/pip/uv + escritura en disco. Solo stdlib."
|
||||
tags: [comfyui, ml, custom-nodes, install, git, pip, stable-diffusion]
|
||||
uses_functions: []
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: "error_go_core"
|
||||
imports: ["os", "shutil", "subprocess"]
|
||||
params:
|
||||
- name: repo_url
|
||||
desc: "URL del repositorio git del custom node (ej. 'https://github.com/rgthree/rgthree-comfy')."
|
||||
- name: comfyui_dir
|
||||
desc: "Raiz de la instalacion de ComfyUI (se expande ~). Default '~/ComfyUI'. keyword-only."
|
||||
- name: pip_install
|
||||
desc: "Si True y el repo trae requirements.txt, instala sus dependencias en el venv de ComfyUI. keyword-only."
|
||||
- name: restart
|
||||
desc: "NO soportado de forma segura (default False). El nodo se carga al reiniciar el servidor; hazlo tu cuando no haya generaciones en curso. True solo se anota en error, NO reinicia (evita cortar trabajo del servidor). keyword-only."
|
||||
output: "dict {ok, path, pip_done, error}. ok=True si el nodo quedo clonado en disco (o ya estaba). pip_done=True si se instalaron las dependencias. error describe el fallo de git/pip o las advertencias (ya existia, sin requirements, restart ignorado)."
|
||||
tested: false
|
||||
tests: []
|
||||
test_file_path: ""
|
||||
file_path: "python/functions/ml/comfyui_install_custom_node.py"
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```python
|
||||
import sys, os
|
||||
sys.path.insert(0, os.path.join(os.environ["HOME"], "fn_registry", "python", "functions"))
|
||||
from ml.comfyui_install_custom_node import comfyui_install_custom_node
|
||||
|
||||
out = comfyui_install_custom_node(
|
||||
"https://github.com/rgthree/rgthree-comfy",
|
||||
restart=False, # no reinicia el server; el nodo se carga al proximo arranque
|
||||
)
|
||||
print(out["ok"], out["path"], "pip_done=", out["pip_done"])
|
||||
# {"ok": True, "path": ".../custom_nodes/rgthree-comfy", "pip_done": True, "error": ""}
|
||||
```
|
||||
|
||||
El `./fn run` directo no aplica (firma con `*` keyword-only); usa el import o un
|
||||
heredoc.
|
||||
|
||||
## Cuando usarla
|
||||
|
||||
Cuando un workflow ajeno usa un nodo custom que no tienes
|
||||
(`comfyui_resolve_workflow_deps` te dice cual falta) o quieras anadir un pack de
|
||||
nodos conocido. Tras instalar, reinicia ComfyUI manualmente (cuando no haya
|
||||
generaciones en curso) para que el nodo aparezca.
|
||||
|
||||
## Gotchas
|
||||
|
||||
- Impura: ejecuta `git clone` y, si hay requirements.txt, `pip`/`uv pip` en el
|
||||
venv de ComfyUI; escribe en `~/ComfyUI/custom_nodes/`.
|
||||
- **NO reinicia el servidor**. `restart=True` se ignora (solo se anota en `error`):
|
||||
un restart en caliente corta cualquier generacion en curso. Reinicia tu cuando
|
||||
el server este libre. El nodo NO se carga hasta ese reinicio.
|
||||
- El venv de ComfyUI creado con uv no trae `pip`: la funcion detecta el instalador
|
||||
(`python -m pip` -> `uv pip --python <venv>` -> binario `pip`). Si no hay ninguno,
|
||||
`pip_done=False` y lo anota en `error` (el clone sigue siendo valido).
|
||||
- Idempotente con el clone: si el dir ya existe NO re-clona (lo anota en `error`),
|
||||
pero SI reintenta el pip install si `pip_install=True`.
|
||||
- `ok=True` significa "clonado en disco", no "cargado en el server". Un clone OK
|
||||
con pip fallido devuelve `ok=True, pip_done=False` + el error de pip.
|
||||
- Un repo_url invalido (404) devuelve `ok=False` con el stderr de git.
|
||||
Reference in New Issue
Block a user