kie · v0.5

Documentación

Todo lo que hace la CLI, en una página. JSON en stdout al hacer pipe, tablas en la terminal, códigos de salida para bifurcar.

Instalación

Node ≥ 20. El paquete tiene cero dependencias en runtime y se publica desde GitHub Actions con provenance de npm.

npm i -g @uxdata-co/kie
kie version
npm audit signatures   # opcional: verifica que el tarball salió del repo

Desde el código: clona julio-daza/kie-cli y luego cd kie && npm install && npm run build && npm link.

API key

Crea una key dedicada para agentes en kie.ai/api-key y ponle ahí topes por hora/día más una lista blanca de IPs — KIE los aplica aunque alguien se salte esta CLI. KIE es prepago: mantén un saldo moderado.

  • kie key set — pega la key, la entrada está oculta.
  • kie key check — origen, key enmascarada, validez, saldo.
  • kie key delete — la elimina del almacén.
kie key set
kie key check

Orden de resolución: KIE_API_KEY solo con KIE_ALLOW_ENV_KEY=1 → Keychain de macOS (servicio kie-cli) → ~/.config/kie/key (0600). KIE_DISABLE_KEYCHAIN=1 fuerza el archivo. La key nunca aparece en stdout, stderr, el ledger ni la config.

Comandos

Los comandos de generación esperan la tarea, descargan el resultado y cierran el ledger, salvo que pases --no-wait.

kie key set|check|deleteGuardar la API key (Keychain / archivo 0600), verificarla, eliminarla.
kie creditsSaldo más el gasto de hoy contra el presupuesto diario.
kie models [--kind image|video]Catálogo curado con los flags que soporta cada modelo.
kie image <modelo> --prompt … [opts]Generar una imagen, esperar, descargar.
kie video <modelo> --prompt … [opts]Generar un video, esperar, descargar.
kie run <model-id> --input '{…}' --max-credits NVía de escape para cualquier modelo del Market de KIE.
kie status <taskId>Una consulta, sin descarga.
kie wait <taskId> [--out dir]Consultar hasta terminar, descargar, cerrar el ledger.
kie upload <archivo>Archivo local → URL temporal para --ref / --image (KIE lo borra a los ~3 días).
kie ledger [--limit 20]Registro local de gasto con creditsConsumed reales.
kie config set <clave> <valor>dailyBudget · maxCreditsPerTask · outDir · pollSeconds · waitTimeoutSeconds
kie skill install [--agent claude|codex|cursor|gemini|all]Instalar el skill kie-media (--project para el repo actual).

Flags de generación

El catálogo traduce los flags genéricos a los campos de entrada de cada modelo; --set pasa cualquier campo crudo.

--prompt <texto>El prompt.
--ref <url>Imagen de referencia, repetible (edición / estilo / referencia multimodal).
--image <url> / --end-image <url>Primer y último frame para video.
--aspect, --resolution, --duration16:9 · 1K|2K|4K|720p · segundos
--sound, --fast, --formatAudio nativo · variante barata · png|jpg
--set clave=valorCampo crudo del modelo, repetible. callBackUrl se rechaza.
--max-credits <n>Aceptar gastar hasta n créditos en esta tarea.
--dry-runImprime el request exacto, no envía nada.
--out <dir>, --name <base>, --no-waitDónde van los archivos · nombre base · enviar y volver.
--json, --pretty, --no-color, --quietControl de salida. JSON es automático al hacer pipe.

Catálogo de modelos

Alias que escribes → ids de modelo en KIE. Solo nano-banana-2 tiene estimación de créditos verificada; el resto exige --max-credits.

nano-banana-2imagenGoogle Nano Banana 2 — genera + edita con hasta 14 referencias. Est. 1K=8 · 2K=12 · 4K=18 créditos.
seedream-v4imagenByteDance Seedream V4 — texto a imagen, pasa a edición con --ref.
kling-3.0videoKling 3.0 — 3–15 s, audio nativo, --set mode=pro.
seedance-2.5videoByteDance Seedance 2.5 — frames o referencias multimodales, 4–30 s.
minimax-h3videoMiniMax H3 — elige el submodelo según tus flags (texto / imagen / referencia).
veo3videoGoogle Veo 3 — endpoint propio, --fast para veo3_fast.

Cualquier modelo del Market de KIE que no esté en el catálogo:

kie run <vendor>/<modelo> --input '{"prompt":"…"}' --max-credits 30 --dry-run
kie run <vendor>/<modelo> --input '{"prompt":"…"}' --max-credits 30

Guardia de gasto y códigos de salida

Se evalúa antes de que cualquier request salga de la máquina. Si bloquea, el código de salida es 3 y no se envió nada.

  1. 01Tope por tarea — los modelos con estimación verificada se comparan con maxCreditsPerTask; el resto necesita un --max-credits explícito.
  2. 02Presupuesto diario — ~/.config/kie/ledger.jsonl registra cada tarea; al completarse se escribe el creditsConsumed real. Las pendientes cuentan por su tope.
  3. 03Saldo — la estimación (o el tope) debe caber en los créditos restantes de la cuenta.

Códigos de salida

0éxito
1la tarea falló del lado de KIE (no se cobra)
2error de uso
3bloqueado por la guardia de gasto — no se envió nada
4tiempo agotado — la tarea sigue corriendo; kie wait
5error de API / autenticación

Configuración

~/.config/kie/config.json (o $KIE_CONFIG_DIR). Se lee con kie config y se cambia con kie config set .

dailyBudget200Créditos máximos por día UTC entre todas las ejecuciones (≈ US$1 a $0.005/crédito)
maxCreditsPerTask50Tope por tarea para modelos con estimación conocida
outDir./kie-mediaDónde se descargan los resultados
pollSeconds5Intervalo de consulta mientras espera
waitTimeoutSeconds900Deja de esperar tras esto; la tarea sigue en KIE
kie config
kie config set dailyBudget 300

Skill de agente (kie-media)

El paquete incluye un skill (spec Agent Skills) que enseña a los agentes de código a usar la CLI: revisar el presupuesto primero, imágenes antes que video, siempre acotar el gasto en video, devolver rutas de archivo y nunca tocar la key. Un comando lo instala para los agentes que uses.

kie skill install                  # los cuatro
kie skill install --agent claude   # uno de: claude | codex | cursor | gemini
kie skill install --project        # en el repo actual, para el equipo
kie skill install --force          # sobrescribe una copia vieja

Claude Code

path
~/.claude/skills/kie-media
invoke
/kie-media

CLI, app de escritorio y extensión de IDE. Los skills se detectan al iniciar la sesión.

Codex

path
~/.agents/skills/kie-media
invoke
$kie-media · /skills

CLI, extensión de IDE y app de escritorio.

Cursor

path
~/.cursor/skills/kie-media
invoke
/ en el chat del Agente

Cursor 2.4+. También lee ~/.agents/skills.

Gemini CLI

path
~/.gemini/skills/kie-media
invoke
auto (activate_skill) · /skills list

Pide consentimiento la primera vez. También lee ~/.agents/skills.

Sin la CLI: npx skills add julio-daza/kie-cli (skills.sh) instala la misma carpeta para cualquier agente soportado.

Contrato de salida

Si stdout es una terminal ves tablas, paneles y un spinner en vivo. Con pipe, o con --json, stdout es estrictamente JSON y los mensajes van a stderr — eso es lo que deben usar los agentes. --pretty fuerza la vista humana; --no-color o NO_COLOR quita el ANSI.

kie image nano-banana-2 --prompt "…" --json
{
  "taskId": "task_…",
  "model": "nano-banana-2",
  "state": "success",
  "creditsConsumed": 8,
  "files": ["kie-media/nano-banana-2-c0ffee12.png"]
}

Notas de seguridad

  • La CLI solo habla con api.kie.ai, kieai.redpandaai.co (host de subida de KIE) y las URLs de resultado que KIE devuelve.
  • Nunca envía callBackUrl; --set callBackUrl=… y --input {"callBackUrl":…} se rechazan.
  • Los resultados siempre se descargan — las URLs de KIE expiran en ~24 h — y la CLI devuelve rutas, no enlaces.
  • Las subidas con kie upload van al almacenamiento temporal de KIE y se borran a los ~3 días.
  • Reporta vulnerabilidades en privado por GitHub Security Advisories (ver SECURITY.md).

Preguntas frecuentes

¿Funciona en Linux o Windows?

Sí. Sin Keychain, la key se guarda en ~/.config/kie/key con permisos 0600. Todo lo demás es idéntico.

¿Cómo se construye el paquete de npm?

Cada release la publica GitHub Actions desde un tag de git, con provenance de npm: el tarball queda vinculado criptográficamente al commit que lo produjo. Cero dependencias en runtime: lo que auditas es lo que corre.

¿Y si un modelo no está en el catálogo?

kie run <model-id> --input '{…}' --max-credits N envía cualquier modelo del Market de KIE. Revisa el schema en docs.kie.ai primero, o usa --dry-run.

¿Puedo usarlo sin un agente?

Claro. En la terminal muestra tablas, paneles y un spinner en vivo; si haces pipe obtienes JSON.