Files
fn_registry/python/functions/ml/comfyui_load_skill.md
T
egutierrez f8793f96ac fix(comfyui): firmas sin keyword-only para que fn run las despache
El generador de runner de fn run (cmd/fn/pyrunner.go::generatePyRunner)
parsea la signature de la funcion desde el frontmatter del .md y emite
`<param> = _args[i]` por cada parametro posicional. Cuando la firma es
keyword-only (`def f(*, ...)`), el `*` se trata como un nombre de parametro
y genera la linea invalida `* = _args[0]`, que rompe el runner con
`SyntaxError: invalid syntax` antes de ejecutar la funcion.

Se quita el separador keyword-only (`*,`) de la firma — tanto en la `def`
del .py como en el campo `signature:` del .md (la fuente que lee el
indexer y el runner) — convirtiendo los parametros keyword-only en
parametros normales con su mismo default. No cambia nombres, defaults ni
comportamiento: las llamadas con keyword siguen siendo validas.

Afecta a 5 funciones detectadas en el report 0208 §3.3, todas con
SyntaxError reproducido via `fn run <id>`:
- comfyui_fetch_civitai_image_meta
- comfyui_load_skill
- comfyui_save_skill
- comfyui_import_workflow_png
- comfyui_list_skills

Se completa ademas el fix de comfyui_interrupt_queue: el commit 643ebfb8
quito el `*,` del .py pero dejo el `*,` en el campo `signature:` del .md,
que es justo lo que lee el runner — por eso `fn run comfyui_interrupt_queue`
seguia fallando. Aqui se corrige el .md.

Verificado: tras el cambio las 6 despachan sin SyntaxError (las 4 con
primer arg requerido devuelven el `missing required arg` esperado del
runner; list_skills e interrupt_queue ejecutan `ok:true`). Tests
existentes verdes (comfyui_fetch_civitai_image_meta_test.py +
tests/test_comfyui_interrupt_queue.py: 8 passed).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 07:23:59 +02:00

2.7 KiB

name, kind, lang, domain, version, purity, signature, description, error_type, tags, uses_functions, uses_types, params, output, file_path
name kind lang domain version purity signature description error_type tags uses_functions uses_types params output file_path
comfyui_load_skill function py ml 1.0.0 impure def comfyui_load_skill(slug: str, version=None, library_dir: str = None) -> dict Lee una receta de skill ComfyUI de la libreria de disco: recipe.json (version actual) o un snapshot versions/vN.json. Hermana inversa de comfyui_save_skill; el round-trip save(recipe)->load(slug) devuelve un dict identico. library_dir default ~/ComfyUI/skills_library. Slug, version o archivo inexistente -> {ok:False} sin lanzar. error_go_core
comfyui
comfyui-skill
ml
skill
library
name desc
slug Slug de la skill (nombre de su carpeta en la libreria).
name desc
version Si None, lee recipe.json (version actual). Si se pasa (int 1, '1' o 'v1'), lee el snapshot versions/vN.json. keyword-only.
name desc
library_dir Raiz de la libreria en disco. Default ~/ComfyUI/skills_library. keyword-only.
dict {ok, recipe, slug, path, version, error}. En exito ok=True y recipe es el dict guardado; si slug/version/archivo no existen ok=False y recipe=None. python/functions/ml/comfyui_load_skill.py

comfyui_load_skill

Carga una receta de skill guardada por comfyui_save_skill. Paso de entrada del flujo del grupo comfyui-skill: load_skillcomfyui_build_skill_workflow → submit → wait.

Ejemplo

import sys, os
sys.path.insert(0, os.path.join(os.environ["HOME"], "fn_registry", "python", "functions"))
from ml.comfyui_load_skill import comfyui_load_skill

# Version actual
res = comfyui_load_skill("portrait_cinematic_sdxl", library_dir="/tmp/skills_demo")
if res["ok"]:
    recipe = res["recipe"]

# Un snapshot concreto (v1, v2, ...)
old = comfyui_load_skill("portrait_cinematic_sdxl", version=1, library_dir="/tmp/skills_demo")

O directo: ./fn run comfyui_load_skill demo_skill --library-dir /tmp/skills_demo.

Cuando usarla

  • Para recuperar una receta antes de compilarla con comfyui_build_skill_workflow.
  • Para inspeccionar un snapshot histórico concreto (version=N) y comparar cómo evolucionó una skill.

Gotchas

  • No lanza excepción: slug inexistente, versión inválida o archivo ausente devuelven {ok: False, recipe: None, error: ...}. Comprueba res["ok"] antes de usar res["recipe"].
  • version acepta varios formatos: int 1, str "1" o "v1" apuntan a versions/v1.json. Cualquier otra cosa da error de versión inválida.
  • Round-trip exacto con save: lee el JSON tal cual se guardó; no normaliza ni rellena campos.
  • library_dir por defecto ~/ComfyUI/skills_library: pásalo explícito para librerías de test o aisladas.