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:
2026-06-24 00:30:30 +02:00
parent 495f545ec1
commit f12272d002
72 changed files with 6049 additions and 0 deletions
@@ -0,0 +1,80 @@
---
name: comfyui_search_civitai_models
kind: function
lang: py
domain: ml
version: "1.0.0"
purity: impure
signature: "def comfyui_search_civitai_models(query: str, *, types: str = \"Checkpoint\", base_model: str | None = None, sort: str = \"Highest Rated\", limit: int = 20, token: str | None = None) -> dict"
description: "Busca modelos/LoRAs en Civitai via su API publica GET /api/v1/models y normaliza cada resultado a {name, type, base_model, version_id, download_url, nsfw} (primera version del modelo). La busqueda publica funciona SIN token; el token solo sube el rate limit y desbloquea modelos restringidos. Impura: HTTP GET a civitai.com. Solo stdlib."
tags: [comfyui, ml, civitai, search, models, stable-diffusion, http]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: ["json", "urllib.error", "urllib.parse", "urllib.request"]
params:
- name: query
desc: "Texto de busqueda (nombre del modelo, ej. 'dreamshaper')."
- name: types
desc: "Tipo(s) de modelo Civitai, CSV: Checkpoint, LORA, TextualInversion, Controlnet, VAE, Upscaler, ... keyword-only."
- name: base_model
desc: "Filtra por modelo base (ej. 'SD 1.5', 'SDXL 1.0'). None no filtra. keyword-only."
- name: sort
desc: "Orden Civitai: 'Highest Rated', 'Most Downloaded', 'Newest'. keyword-only."
- name: limit
desc: "Numero maximo de resultados (1-100). keyword-only."
- name: token
desc: "API token de Civitai (header Authorization Bearer). Opcional: la busqueda publica funciona sin el. No hardcodear: pasar desde pass/vault. keyword-only."
output: "dict {ok, items, count, error}. items = lista de {name, type, base_model, version_id, download_url, nsfw} (primera version de cada modelo). ok=False con error si la peticion falla; una busqueda sin resultados devuelve ok=True con items=[] (no es error)."
tested: false
tests: []
test_file_path: ""
file_path: "python/functions/ml/comfyui_search_civitai_models.py"
---
## Ejemplo
```python
import sys, os
sys.path.insert(0, os.path.join(os.environ["HOME"], "fn_registry", "python", "functions"))
from ml.comfyui_search_civitai_models import comfyui_search_civitai_models
# Busqueda publica, sin token:
out = comfyui_search_civitai_models("dreamshaper", types="Checkpoint", limit=5)
for it in out["items"]:
print(it["name"], it["base_model"], "->", it["download_url"])
# out["items"][0] == {"name": "DreamShaper", "type": "Checkpoint",
# "base_model": "SD 1.5", "version_id": 128713,
# "download_url": "https://civitai.com/api/download/models/128713", "nsfw": False}
# Filtrar LoRAs SDXL, con token desde pass (si lo hubiera):
# import subprocess
# tok = subprocess.run(["pass","civitai/api-token"], capture_output=True, text=True).stdout.strip() or None
# loras = comfyui_search_civitai_models("detail", types="LORA", base_model="SDXL 1.0", token=tok)
```
El `download_url` que devuelve se pasa directo a `comfyui_download_model(url=...)`
para bajar el modelo a la carpeta correcta.
## Cuando usarla
Cuando necesites descubrir un checkpoint o LoRA por nombre/tema antes de
descargarlo: te da el `download_url` listo para `comfyui_download_model`. Encadena
con `comfyui_resolve_workflow_deps` para resolver los modelos que le faltan a un
workflow ajeno.
## Gotchas
- Impura: HTTP GET a `civitai.com`. Requiere conexion a internet (NO usa el server
local de ComfyUI, asi que no choca con reinicios del server).
- La busqueda publica funciona sin token. Sin token el rate limit es mas bajo y
algunos modelos restringidos no aparecen o su `download_url` exige login.
- `download_url` apunta a `api/download/models/<versionId>`: muchos modelos exigen
token para descargar aunque salgan en la busqueda (Civitai responde HTML de
login). `comfyui_download_model` detecta ese HTML y devuelve ok=False.
- Solo se devuelve la PRIMERA version de cada modelo (`modelVersions[0]`, la mas
reciente). Para versiones antiguas consulta la API por `version_id`.
- Una busqueda sin resultados NO es error: devuelve `ok=True, items=[], count=0`.
- No hardcodear el token: pasarlo desde `pass`/vault.