Las claves se quedan en tu máquina, puedes editar el prompt antes de gastar, los archivos son tuyos y cada centavo aparece detallado.

Guarda tus claves, conoce el formato que espera cada modelo, reescribe la solicitud al estilo de ese modelo, la envía, hace seguimiento, descarga el archivo y anota el costo. Nada de eso es difícil —y ese es el punto: es exactamente la capa por la que los servicios de wrapper cobran una suscripción.
fal, Kling, Agnes, kie y un servidor local en tu GPU funcionan detrás del mismo adaptador. Ninguno es obligatorio: los que falten aparecerán como no disponibles con el motivo, y el estudio se inicia de todos modos.
Tres unidades que no se suman entre sí: dólar, crédito del plan y cero. El consumo real se mide por la diferencia en la cuenta, y lo que no se puede saber antes de ejecutar se marca como desconocido en vez de inventarlo.
El enrutamiento, el catálogo, el precio, la disponibilidad y los reintentos son código determinista. El modelo es una herramienta contratada para cada tarea, nunca un gerente; por eso el costo es previsible.
El mismo flujo sirve para ti en pantalla y para un agente conectado por MCP.
La reescritura se muestra y se puede editar antes antes de que gastes. Es el lugar más barato para detectar un malentendido: después de enviar, corregirlo cuesta otra ronda.
Gemini, luego OpenRouter y después el Codex local. Con un solo refinador, su cuota hace caer todo el estudio; eso fue lo que pasó en producción y por eso se convirtió en una cadena.
Todo el contenido multimedia se replica localmente a propósito: las URL de los proveedores caducan (24h en Kling, temporales en Agnes). Lo que generaste no desaparece cuando el enlace deja de funcionar.
| Proveedor | Modelos | Cómo cobra | Qué necesitas |
|---|---|---|---|
| fal.ai | 37 | dólares, precio en tiempo real | FAL_KEY |
| Kling | 26 | créditos del plan | CLI oficial con inicio de sesión OAuth |
| Agnes AI | 4 | cero | AGNES_API_KEY |
| kie.ai | 4 | créditos | KIE_API_KEY |
| inemaimg | 2 | cero (tu GPU) | servidor local en funcionamiento |
Node es el único requisito real. Todos los proveedores son opcionales y se degradan por sí solos: si falta una clave, esos modelos quedan indisponibles, con el motivo y cómo resolverlo, y el estudio sigue abriéndose.
Node 24 recomendado, porque el estudio usa el node:sqlite nativo: sin base de datos externa ni servicio que iniciar.
node -v # v22.5 o superior
Para generar cualquier cosa. Empieza por los de costo cero si quieres probar sin gastar.
# gratis, sin tarjeta apihub.agnes-ai.com # Agnes
Un refinador (Google AI Studio u OpenRouter); Chrome para imprimir en PDF; Codex o Claude Code para el creador de sitios web con agente.
# sin refinador, el prompt se envía tal cual # — y Agnes rechaza otros idiomas
Comandos reales, en orden. Desde cero hasta el primer archivo generado pasan unos minutos; la mayor parte es el npm install.
Sin etapa de compilación: el estudio se ejecuta directamente desde el código.
git clone https://github.com/inematds/bench-studio-en.git cd bench-studio-en npm install
O .env.example documenta las 19 variables: qué habilita cada una, cómo se cobra y dónde crear la clave. Completa solo las que tengas.
cp .env.example .env # .env está ignorado por git
Inicia la API y la interfaz juntas. La interfaz queda en localhost:5200 y la API en localhost:8787.
npm run dev # abre en http://localhost:5200
Botón Config, en la parte superior derecha. Muestra cada variable: si está presente o no, de dónde proviene y los últimos 4 caracteres — nunca el valor. Puedes probar cada proveedor allí y guardar el .env sin salir de la pantalla. Por seguridad, solo acepta grabaciones de quien está en la propia máquina.
# orden de lectura, de mayor a menor prioridad
exportado no shell > .env do projeto > ~/.env
73 modelos es mucho para recorrer. En Model catalog, filtra por proveedor y desactiva lo que no vayas a usar. Es una preferencia, no un bloqueo: el modelo desaparece de los selectores, pero un Redo de un resultado anterior sigue funcionando.
# volver al estado de fábrica: elimina el archivo rm data/catalog-prefs.json
El botón Sin costo activa exactamente los modelos de costo cero. Úsalos para encontrar el prompt que funciona; después, gasta en el modelo que renderiza mejor.
# 6 modelos sin costo: Agnes (4) + servidor local (2)
Ven sin contraseña, a propósito: comunicarse con la propia máquina no debería pedir una. Si vas a exponerla en la red, configura una: se guarda como hash scrypt, y cambiar la contraseña desconecta a quienes ya estaban dentro.
npm run set-password # pregunta sin mostrar lo que escribes npm run set-password -- --remove # quita la contraseña
De fábrica, solo la propia máquina puede ver el estudio. Para abrirlo al exterior hacen falta tres cosas: que la interfaz escuche en la red, la regla del firewall y acordarse de deshacer ambas. Un comando lo hace todo, y el close deshace exactamente lo que el open hizo.
./scripts/remote.sh open # publica en la IP de la máquina ./scripts/remote.sh status # abierto o cerrado, y con qué protección ./scripts/remote.sh close # vuelve a solo local
O open ofrece la contraseña antes de abrir. Di que sí y llama al set-password; responde n y el estudio se abre sin contraseña, que es lo habitual. La oferta existe por un motivo contundente: la contraseña solo se define en la propia máquina — por la red da 403, incluso después de iniciar sesión. Esta regla impide que quien encuentre el puerto abierto establezca una contraseña propia y te deje fuera. En una VPS, el orden correcto es npm install → npm run set-password → remote.sh open. El puerto de la API (8787) nunca se publica.
./scripts/remote.sh open --ip 203.0.113.7 # solo esa dirección ./scripts/remote.sh open --firewall # activa ufw (SSH liberado antes)
La pestaña Connect entrega la configuración MCP lista para Claude, Codex y Cursor. El agente ve el mismo conjunto de modelos que tú, no una lista paralela.
npm run mcp # servidor MCP en stdio
Los contratos se ejecutan en segundos. La prueba e2e usa un navegador real y requiere Chromium de Playwright una sola vez.
npm run test:contracts # 30 pruebas npx playwright install chromium && npm run test:e2e
Cosas aprendidas al usar el estudio de verdad, no al leer la documentación de los proveedores.
Puedes editarlo antes de enviarlo. Corregirlo ahí es gratis; corregirlo después cuesta otra generación.
Con uno solo, si se agota la cuota, todo se cae; y el síntoma aparece lejos de la causa: Agnes empieza a rechazar por estar en portugués.
Cada resultado incluye el modelo, los controles, el prompt refinado, la idea original y los archivos adjuntos. Redo devuelve todo para que puedas cambiar una cosa sin pagar por otra reescritura.
Veo, Nano Banana, gpt-image y gemini-image aparecen con más de un proveedor y cuentas distintas: dólares en fal, créditos del plan en Kling. El proveedor aparece junto al nombre: es una opción real, no un duplicado.
Todos los trabajos de Kling se cobran, incluso los que fallan. No se vuelve a enviar nada sin que tú lo indiques.
Cada archivo se guarda también localmente: ~1,3 MB por imagen, 0,7–5 MB por video. El estudio inactivo usa 274 MB de RAM y casi nada de CPU.
Codex y Claude Code escriben los archivos y corrigen sus propios errores. Los motores de modelos puros (Qwen local, OpenRouter) no necesitan sandbox y cuestan cero, pero requieren más supervisión.
Un sitio o PDF de tu autoría sirve para calibrar el acabado: tokens, fuentes, paleta y radios. La marca, el texto, la estructura y los archivos nunca se copian.
La configuración de fábrica es lo más cerrada posible sin estorbar: todo en loopback, sin contraseña, y nada sale de tu máquina aparte de las llamadas a los proveedores que configuraste.
Se leen en el servidor y nunca se devuelven a la interfaz. La pantalla muestra si están presentes, su origen y los últimos 4 caracteres. El .env se guarda con permisos solo para el propietario.
Incluso con una sesión válida, se rechaza cambiar la clave o la contraseña a través de la red. La verificación funciona también con el proxy de desarrollo: solo se acepta un origen reenviado cuando el socket ya es local.
Hash scrypt, cookie httpOnly, sesión de 12h. Protege la API y los archivos generados. Ocultar también la interfaz requiere un proxy inverso, no este proceso — y eso se indica en la documentación, no se oculta.
En orden de lo que más protege. El open es una postura de prueba: el tráfico viaja por HTTP sin cifrar y se puede leer en el trayecto.
| # | Qué hacer | Cómo |
|---|---|---|
| 1 | Poner una contraseña a la instalación | npm run set-password antes del open — por la red no se puede, ni siquiera después de iniciar sesión |
| 2 | Mantener la API en loopback | es lo habitual; BENCH_API_HOST=0.0.0.0 es una exclusión consciente |
| 3 | Restringir quién puede acceder | remote.sh open --ip <seu-ip>, o Tailscale (sin puertos abiertos) |
| 4 | Activar el firewall | remote.sh open --firewall — y revisa también el panel de la VPS |
| 5 | HTTPS al frente | nginx/Caddy + Let's Encrypt sirviendo el dist/ y proxy para 127.0.0.1:8787, con X-Forwarded-For |
| 6 | Usuario propio, no root | unidad systemd, .env en 600 |
| 7 | Cerrar al terminar | ./scripts/remote.sh close — la exposición olvidada es la que cuesta créditos |
Lo que ya está listo se midió; lo que falta por hacer está listado sin prometer fechas.