7d33b39859
Higiene del grupo comfyui sobre las 5 funciones de la sesión: comfyui_build_audio_workflow, comfyui_fetch_output_audio, comfyui_build_flux_workflow, comfyui_list_templates, comfyui_extract_template. - Tests nuevos para list_templates y extract_template (lógica pura: localización del intérprete, error-path sin el paquete instalado, contrato del dict; golden condicional con skip si no hay ComfyUI con comfyui-workflow-templates). 10 tests, todos verdes. - comfyui_list_templates.md / comfyui_extract_template.md: tested true + tests + test_file_path. - Fix drift de test_file_path en comfyui_fetch_output_audio.md (apuntaba a un *_test.py inexistente; corregido a tests/test_*.py). Elimina el WARN de fn index. - docs/capabilities/comfyui.md: subsecciones Audio (ACE-Step) y Templates oficiales. - docs/capabilities/comfyui-overview.md: sección 05b audio, fetch_output_audio en Outputs, Templates oficiales en Workflows I/O. (flux ya estaba documentada.) fn index limpio (las 5 sin WARN); sin drift nuevo en fn doctor uses-functions. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.0 KiB
5.0 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| comfyui_extract_template | function | py | ml | 1.0.0 | impure | def comfyui_extract_template(name: str, comfyui_python: str | None = None, to_api: bool = False, server: str = "127.0.0.1:8188") -> dict | Extrae el grafo de nodos de un workflow template oficial de ComfyUI por su template_id. Devuelve el grafo completo (formato UI: nodes/links), la lista de class_types que usa (aplanando subgrafos y descartando UUID de instancia), el formato, el bundle y los assets en disco. Opcionalmente (to_api=True) convierte el grafo UI a API format reutilizando comfyui_import_workflow_json (requiere un servidor ComfyUI vivo). Nombre inexistente -> error legible con sugerencias, sin traceback. Localiza el interprete de ComfyUI y usa su API oficial via subprocess. Impura: lee disco (+ red opcional si to_api). |
|
|
false | error_go_core |
|
dict {ok, name, format, class_types, has_subgraphs, n_nodes, graph, api_workflow, api_error, bundle, version, assets, error}. graph = dict del template (formato UI o API). class_types = lista ordenada de tipos de nodo reales. api_workflow = dict API si to_api tuvo exito, si no {}. Nunca lanza: nombre inexistente -> ok=False con error + sugerencias. | true |
|
python/functions/ml/tests/test_comfyui_extract_template.py | python/functions/ml/comfyui_extract_template.py |
Ejemplo
# Lanzable directo (grafo slim + class_types de un template concreto):
python/.venv/bin/python3 python/functions/ml/comfyui_extract_template.py sdxl_simple_example
# Con conversion a API format (necesita ComfyUI corriendo en 127.0.0.1:8188):
python/.venv/bin/python3 python/functions/ml/comfyui_extract_template.py sdxl_simple_example --to-api
import sys, os
sys.path.insert(0, os.path.join(os.environ["HOME"], "fn_registry", "python", "functions"))
from ml.comfyui_extract_template import comfyui_extract_template
res = comfyui_extract_template("sdxl_simple_example")
print(res["format"], res["n_nodes"], "nodos") # ui_graph 25 nodos
print(res["class_types"]) # ['CheckpointLoaderSimple', 'KSamplerAdvanced', ...]
graph = res["graph"] # dict cargable en la UI tal cual
Cuando usarla
Cuando quieras reutilizar la estructura de nodos de un template oficial: cargar su
grafo en tu UI, usarlo de base para un workflow propio, o saber exactamente que
class_types encadena. Segundo paso del flujo listar (comfyui_list_templates) ->
extraer. Para encolar el resultado en /prompt usa to_api=True (o pasa el grafo por
comfyui_import_workflow_json).
Gotchas
- El grafo viene en formato UI (nodes/links con posiciones), no en API format. La
UI de ComfyUI lo entiende tal cual (cargalo o copia el dict); para
/prompthay que convertirlo a API format conto_api=True. to_api=Truereutilizacomfyui_import_workflow_json, que necesita un servidor ComfyUI vivo para mapear los widgets a sus claves de input. Sin servidor, la extraccion del grafo UI sigue funcionando (ok=True) y el motivo del fallo de conversion va enapi_error(no rompe). KISS: no se fuerza la conversion.- Templates subgraphed (con
definitions.subgraphs,has_subgraphs=True): la conversion a API NO expande el subgraph (limitacion de la normalizacion UI->API estandar), asi queapi_workflowpuede quedar con solo los nodos top-level. Para esos, cargar el grafo UI en la UI es lo fiable.class_typessí incluye los nodos reales de dentro del subgraph. - Nombre inexistente ->
ok=Falseconerrorlegible y sugerencias por substring (o difflib). No lanza traceback. - El paquete vive en el venv de ComfyUI; si no se encuentra el interprete o el paquete,
ok=Falseindicandopip install comfyui-workflow-templates.