Skip to main content
Glama

Bench Studio

Deja de alquilar el envoltorio. Sé dueño de la capa creativa.

Un estudio creativo local para imágenes, videos, sitios web, PDFs diseñados y flujos de trabajo de agentes de IA.

Licencia MIT Node 22.5+ 73 rutas de modelo 5 proveedores Listo para MCP

Inicio rápido · Consejos · Cómo funciona en profundidad · Qué cambió y por qué · Seguridad y privacidad

Catálogo de modelos de Bench Studio

Bench Studio pone 73 rutas de imagen y video seleccionadas de 5 proveedores, refinamiento de prompts, controles conscientes de capacidades, custodia local de archivos y un registro de costos transparente detrás de una interfaz. El mismo sistema está disponible para Claude, Codex, Cursor y otros clientes compatibles a través de MCP.

Tus claves permanecen del lado del servidor en tu máquina. Tus prompts son editables antes de que gastes. Tus salidas se reflejan localmente. Tus costos se registran en unidades reales en lugar de desaparecer en créditos misteriosos.

[!NOTA] Esta es la distribución pública saneada. No incluye historial de generación, cargas, base de datos privada, rutas personales, credenciales ni artefactos de compilación local. Tu archivo comienza vacío.

📖 Guía de uso

Guía completa (página de inicio + paso a paso): https://inematds.github.io/bench-studio-en/guia/

Related MCP server: omnicinema-mcp

Por qué existe esto

La mayoría de los productos de IA creativa combinan cinco piezas útiles (acceso a modelos, pulido de prompts, enrutamiento, almacenamiento y facturación) y luego ocultan las uniones detrás de un plan mensual. Bench mantiene la comodidad mientras hace que cada unión sea inspeccionable.

En lugar de…

Bench te da…

La hoja de ruta de modelos de un proveedor

Un registro seleccionado que puedes añadir o reemplazar

Un cuadro de carga genérico

Controles derivados de las entradas aceptadas de cada endpoint

Una reescritura invisible del prompt

Un borrador editable específico del modelo antes del envío

Créditos abstractos

Una estimación previa y metadatos de gasto registrados

Salidas atrapadas en una galería de cuenta

Archivos reflejados localmente y metadatos duraderos

Un flujo de trabajo solo de interfaz

Las mismas capacidades a través de la interfaz y MCP

Esperar la próxima función

Código fuente que puedes inspeccionar, cambiar y ampliar

Bench no es dueño de los modelos subyacentes. Te da la propiedad de la capa portátil que conecta tus ideas, herramientas, proveedores, archivos y costos.

Ejecútalo en tres minutos

Lo que necesitas

Requerido

  • Node.js 22.5+; se recomienda Node 24, porque Bench usa node:sqlite.

  • npm.

Esa es toda la lista. Cada proveedor es opcional y se degrada por sí solo: una clave faltante hace que esos modelos aparezcan como no disponibles, con el motivo y cómo solucionarlo; el estudio aún se inicia. Trae al menos uno de estos para generar algo:

Proveedor

Modelos

Costo

Lo que necesitas

fal.ai

37

dólares, precios en vivo

FAL_KEY

Kling

26

créditos del plan

npm i -g @klingai/cli-global && kling login

Agnes AI

4

cero

AGNES_API_KEY

kie.ai

4

créditos

KIE_API_KEY

inemaimg

2

cero (tu GPU)

un servidor local en ejecución

Opcional, pero que vale la pena

  • Una clave de Google AI Studio o OpenRouter para el refinamiento de prompts. Sin un refinador, tu prompt se envía en bruto, lo que Agnes rechaza porque requiere inglés.

  • Google Chrome, para impresión de PDF y vista previa visual.

  • Un Codex o Claude Code con sesión iniciada, para compilaciones de sitios web y documentos impulsadas por agentes.

1. Clona e instala

git clone https://github.com/inematds/bench-studio-en.git
cd bench-studio-en
npm install

2. Añade credenciales del lado del servidor

cp .env.example .env

Completa lo que tengas. .env.example documenta las 19 variables: qué desbloquea cada una, cómo factura y dónde crear la clave. Las claves permanecen del lado del servidor y nunca se envían al navegador; .env está en gitignore y se escribe con permisos de solo propietario.

Orden de lectura, primero el más alto:

exported in your shell  >  .env in the project  >  ~/.env

O salta el archivo por completo: inicia el estudio y usa el botón Config en la esquina superior derecha. Muestra cada configuración (presente o faltante, de dónde proviene el valor y los últimos 4 caracteres), te permite probar cada proveedor y escribe .env por ti. Por seguridad, solo acepta escrituras desde la máquina que ejecuta el estudio.

3. Inicia el estudio

npm run dev

Abre http://localhost:5200.

Servicio

Dirección

Estudio

http://localhost:5200

API local

http://localhost:8787

Resumen de salud y capacidades

http://localhost:8787/api/health

Si algún puerto está ocupado:

PORT=8790 BENCH_API_PORT=8790 BENCH_WEB_PORT=5201 npm run dev

Acceder desde otra máquina

Ambos puertos están vinculados a loopback, por lo que una instalación nueva solo te responde a ti. Abrir eso implica tres cosas: la interfaz escuchando en todas las interfaces, una regla de cortafuegos y recordar deshacer ambas. Un comando hace las tres:

./scripts/remote.sh open      # publish the interface on this machine's IP
./scripts/remote.sh status    # open or closed, and with what protection
./scripts/remote.sh close     # back to local access only

open imprime la dirección para compartir, luego te dice que reinicies con npm run dev. close revierte exactamente lo que hizo open (leyendo un archivo de estado escrito en el momento de abrir, no adivinando) y deja la regla SSH intacta, porque eliminar eso es cómo la gente se bloquea de su propio servidor.

Dos banderas que vale la pena conocer:

./scripts/remote.sh open --ip 203.0.113.7   # only that address, not the internet
./scripts/remote.sh open --firewall         # also enable ufw (SSH allowed first)

open ofrece establecer una contraseña antes de abrir algo. Di que sí y pasa a npm run set-password; presiona Enter (o responde n) y el estudio se abre sin contraseña, que es el valor predeterminado documentado. La oferta está ahí por la asimetría a continuación: este es el último momento en que establecer una contraseña está a una pulsación de tecla.

La contraseña no se puede establecer ni cambiar desde la otra máquina, ni siquiera después de iniciar sesión. POST /api/config/password responde 403 a cualquier cosa que no provenga de loopback, sesión o no, y la pantalla de Config lo dice en lugar de mostrarte un campo inactivo. Esa regla evita que quien encuentre un puerto abierto establezca su propia contraseña y te bloquee el acceso a tu propio estudio. Por lo tanto:

npm run set-password    # on the machine running the studio, over SSH or at the keyboard

Lo que open deliberadamente no hace: publicar la API. El puerto 8787 permanece en loopback (BENCH_API_HOST), por lo que el endpoint que escribe archivos y gasta dinero solo es accesible a través de la interfaz, en la propia máquina.

Esta es una postura de prueba, no un despliegue. El tráfico es HTTP plano y legible en tránsito. Para cualquier cosa que permanezca activa, lee la siguiente sección.

Dejarlo funcionando de forma segura

En orden aproximado de lo que realmente te protege:

  1. Establece una contraseña en la instalación. En una máquina que será accesible, hazlo parte de la configuración: npm install, luego npm run set-password, luego ./scripts/remote.sh open. Hacerlo en ese orden significa que el estudio nunca está abierto sin contraseña y nunca necesitas la pantalla de contraseña a la que no puedes acceder desde la red.

  2. Mantén la API en loopback. El valor predeterminado. BENCH_API_HOST=0.0.0.0 es una exclusión voluntaria que deberías tener una razón para usar.

  3. Limita quién puede acceder. ./scripts/remote.sh open --ip <tu-ip> es mejor que un puerto abierto. Una dirección de Tailscale es mejor que ambas y no necesita ningún puerto.

  4. Activa el cortafuegos. ./scripts/remote.sh open --firewall permite SSH primero, luego habilita ufw. También revisa el panel de cortafuegos de tu proveedor de VPS: está delante de ufw y no responde a nadie en la máquina.

  5. Termina HTTPS al frente. Apunta un dominio a la máquina y coloca nginx o Caddy al frente con un certificado de Let's Encrypt, proxyando /api, /media, /previews, /inputs y /projects a 127.0.0.1:8787 y sirviendo dist/ de npm run build como el sitio. Luego cierra el 5200 por completo. Si haces esto, haz que el proxy envíe X-Forwarded-For: la regla de solo máquina a continuación depende de ello.

  6. Ejecútalo como su propio usuario, no como root, bajo una unidad systemd, con .env en 600 (que es como el estudio lo escribe).

  7. Ciérralo cuando termine la prueba. ./scripts/remote.sh close. Una exposición que olvidaste es la que te cuesta créditos de proveedor.

Consejos que te ahorran tiempo y dinero

Comienza con las rutas gratuitas. Agnes (4 modelos) e inemaimg (2, en tu propia GPU) no cuestan nada. En el catálogo de modelos, el interruptor Sin costo activa exactamente ese grupo. Úsalos para encontrar el prompt que funciona, luego gasta en el modelo que lo renderiza mejor.

Selecciona el catálogo una vez. 73 modelos son muchos para desplazarse. Filtra por proveedor, luego usa "Deshabilitar esos N" para ocultar lo que no usarás. La selección es una preferencia, no un bloque: oculta los modelos de los selectores, pero un Rehacer de un resultado antiguo aún funciona. Eliminar data/catalog-prefs.json restaura el estado de fábrica.

Refina antes de gastar. El prompt refinado es editable antes del envío. Léelo. Es el lugar más barato para detectar un malentendido; después de enviar, la solución cuesta otra ejecución.

Mantén dos refinadores configurados. La cadena es Gemini → OpenRouter → Codex local. Con uno solo, una cuota agotada deja todo el estudio fuera de servicio: el prompt pasa en bruto y Agnes rechaza el no inglés con un error que parece un problema de Agnes pero no lo es.

Rehacer en lugar de volver a escribir. Cada resultado lleva el modelo, los controles, el prompt refinado, la idea original y los archivos adjuntos. Rehacer restaura todo, para que puedas ajustar una cosa sin pagar por una reescritura.

El mismo modelo puede existir en dos rutas. Veo, Nano Banana, gpt-image y gemini-image aparecen a través de más de un proveedor, con diferentes facturas (dólares en fal, créditos del plan en Kling). El proveedor se muestra junto al nombre en el selector; es una elección real, no un duplicado.

Kling nunca reintenta automáticamente, a propósito. Cada trabajo de Kling se cobra, incluidos los fallos. No se reenvía nada a tus espaldas.

Vigila el disco, no la CPU. Cada archivo se refleja localmente porque las URL de los proveedores caducan (24h en Kling, temporal en Agnes). Aproximadamente 1.3 MB por imagen y 0.7–5 MB por video. El estudio está inactivo con 274 MB de RAM.

¿Construyendo un sitio web? Prefiere un agente. Codex y Claude Code escriben los archivos ellos mismos y corrigen sus propios errores. Los motores de modelo (Qwen local, OpenRouter) solo devuelven texto, por lo que no necesitan sandbox y no cuestan nada, pero necesitan más supervisión.

Apunta el constructor a una referencia que poseas. Establece un sitio o PDF tuyo en Config y el constructor calibra su acabado en función de él (tokens, fuentes, paleta, radios). Nunca copia marca, texto, estructura ni archivos.

Lo que puedes hacer

Espacio de trabajo

Lo que ofrece

Crear

Imágenes y vídeos con referencias conscientes del modelo, controles, borradores de prompt editables, citas, progreso y resultados en línea.

Catálogo de modelos

Rutas seleccionadas de texto a imagen, edición de imágenes, texto a vídeo, imagen a vídeo y vídeo de referencia.

Resultados

Un archivo local que contiene el prompt enviado, el modelo, la URL del proveedor, el archivo local y el coste registrado.

Sitios web

Sitios estáticos originales con código fuente editable, vista previa local y paquete descargable.

Documentos

PDFs diseñados respaldados por HTML editable, impresión Chromium y verificación previa de desbordamiento.

Conectar

Configuración MCP corregida por máquina y una habilidad portátil para agentes compatibles.

Bench Studio create workspace

El sistema en 30 segundos

flowchart LR
    Idea["Your idea"] --> Client{"How do you want to work?"}
    Client -->|Create manually| UI["React studio"]
    Client -->|Delegate to an agent| MCP["MCP server"]

    UI --> API["Local API"]
    MCP --> API

    API --> Prompt["Editable prompt refinement"]
    API --> Router["Capability-aware router"]
    API --> Quote["Quote and pricing engine"]

    Prompt --> Router
    Router --> Prov["fal · Kling · Agnes · kie · inemaimg"]
    Prov --> Mirror["Local media mirror"]

    API --> Projects["Website and PDF runner"]
    Projects --> Archive["Inspectable project source"]

    Quote --> Ledger[("Local SQLite ledger")]
    Mirror --> Ledger
    Archive --> Ledger

El navegador nunca recibe los secretos del proveedor. Se comunica con un servicio local que valida las cargas útiles específicas del modelo, posee las credenciales, transmite el progreso, replica los artefactos y registra metadatos duraderos.

Elige la estrategia de conexión adecuada

Bench utiliza un agregador porque un único modelo de autenticación y cola es la forma práctica de admitir un catálogo grande e intercambiable. Esa no es la única arquitectura válida.

flowchart TB
    Need{"What do you actually need?"}
    Need -->|One stable model| Direct["Use its first-party API"]
    Need -->|Many interchangeable models| Bench["Use Bench + an aggregator"]

    Direct --> D1["Potentially lowest route price"]
    Direct --> D2["One integration per provider"]
    Direct --> D3["Best for a narrow workflow"]

    Bench --> B1["One authentication and queue model"]
    Bench --> B2["Consistent controls and records"]
    Bench --> B3["Best for a flexible studio"]

Un agregador puede no ser siempre la ruta más barata. Bench hace explícita esa compensación en lugar de llamarla «margen cero».

Una solicitud, desde la idea hasta el recibo

sequenceDiagram
    participant U as User or agent
    participant B as Bench
    participant R as Capability router
    participant F as fal.ai
    participant L as Local archive

    U->>B: Describe the result
    B->>R: Select a model and inspect accepted inputs
    R-->>B: Controls, limits, and pricing unit
    B-->>U: Editable prompt and preflight estimate
    U->>B: Approve generation
    B->>F: Validated model-specific payload
    F-->>B: Queue progress and output URL
    B->>L: Mirror media and write metadata
    B-->>U: Local result, provider result, and recorded cost

Bench registra lo que se envió. Nunca afirma que una referencia adjunta influyó en un resultado simplemente porque una API aceptó el campo; la fidelidad creativa aún requiere revisión humana.

Inteligencia del modelo, no un menú desplegable lleno de URL

Cada endpoint tiene suposiciones diferentes. Algunos aceptan una imagen, otros una lista, algunos requieren un fotograma de inicio y otros no aceptan referencias. Bench mantiene el descubrimiento separado de la admisión de producción:

flowchart LR
    Catalog["Live provider catalog"] --> Discover["Discovery snapshot"]
    Discover --> Evidence["Schema and pricing evidence"]
    Evidence --> Review{"Safe for production?"}
    Review -->|Not yet| Observe["Keep observable"]
    Review -->|Yes| Registry["Curated registry"]
    Registry --> UI["Relevant UI controls"]
    Registry --> MCP["Validated MCP inputs"]

Esto evita que un modelo recién publicado, renombrado o subespecificado rompa silenciosamente un flujo de trabajo de pago.

El refinamiento del prompt permanece visible

  1. Escribe una solicitud creativa normal.

  2. Bench añade la estructura que el modelo seleccionado probablemente entienda.

  3. Revisa el prompt reescrito como un borrador editable.

  4. Cámbialo o recházalo antes de gastar nada.

  5. Almacena el prompt final enviado junto con el resultado.

Si no hay ninguna clave de Google configurada, el prompt original pasa sin cambios y la interfaz informa que el refinamiento está desactivado.

Transparencia de costes sin matemáticas de marketing

Antes del envío, Bench estima el coste a partir de la unidad de precio del modelo y los parámetros solicitados. Una vez completado, registra el importe facturado cuando el proveedor expone suficientes datos del recibo.

flowchart LR
    Params["Model + duration + resolution + quantity"] --> Estimate["Preflight estimate"]
    Estimate --> Approval["Explicit approval"]
    Approval --> Run["Provider execution"]
    Run --> Record["Recorded cost + confidence"]

Los precios cambian. Las estimaciones no son garantías. Bench distingue los valores estimados, medidos y registrados en lugar de presentar los tres como el mismo hecho.

Tu límite de datos local

El repositorio comienza sin un directorio data/. Bench lo crea en la primera ejecución:

data/
├── bench.db              # generations, assets, spend, and projects
├── inputs/               # mirrored uploads
├── outputs/              # mirrored generations
├── previews/             # local video posters
└── projects/             # website and document source files

Todo el directorio es ignorado por Git. Eliminar un resultado borra su registro local en la base de datos y los archivos replicados. No afirma eliminar copias retenidas por un proveedor de modelos externo.

flowchart LR
    Browser["Browser UI\nno provider keys"] --> Local["Loopback API\nkeys + validation"]
    Agent["Local MCP client"] --> Local
    Local --> Provider["External model provider"]
    Local --> Disk["Local SQLite + files"]

Úsalo desde Claude, Codex o Cursor

Inicia Bench, abre Conectar, elige tu cliente y copia la configuración generada. Bench inserta la ruta absoluta correcta para la máquina actual; el repositorio en sí mismo no incluye el directorio personal de ningún usuario.

El servidor MCP expone once herramientas enfocadas para:

  • descubrir modelos e inspeccionar contratos de capacidad;

  • subir medios de referencia locales;

  • generar imágenes y vídeos;

  • leer resultados, vistas previas y gastos;

  • crear y consultar proyectos de sitios web o documentos;

  • recuperar artefactos de proyectos locales.

La habilidad incluida en integrations/skills/bench-studio/ proporciona juicio y orientación sobre el flujo de trabajo. MCP proporciona la capa de ejecución en vivo.

Mapa del proyecto

bench-studio-public/
├── src/                     # React interface
├── server/
│   ├── server.mjs           # loopback API and orchestration
│   ├── mcp.mjs              # stdio MCP server
│   ├── registry.json        # curated production roster
│   ├── capabilities.json    # accepted-input contracts
│   ├── profiles/            # prompt and pricing intelligence
│   └── mcp-app/             # embedded MCP interface
├── integrations/
│   ├── skills/bench-studio/ # portable agent workflow skill
│   └── macos/               # optional launch-agent templates
├── tests/                   # contracts, persistence, API, a11y, and E2E
├── docs/                    # public README media
├── .env.example             # placeholders only
└── package.json

Documentación

Documento

Lo que cubre

docs/COMO-FUNCIONA.md

Cómo funciona el sistema internamente: el contrato del proveedor, las trampas medidas por proveedor, las clases de coste, disponibilidad vs curación, la cadena de refinamiento, el constructor y el modelo de seguridad

docs/ACESSO-REMOTO.md

Acceso remoto y configuración VPS: por qué la contraseña va antes del puerto, qué toca remote.sh, orden de endurecimiento y qué sigue abierto

docs/HISTORICO.md

Todo lo construido sobre el kit original y cada error encontrado — separando los que ya estaban de los introducidos en el camino

CHANGELOG.md

Versión por versión

.env.example

Los 19 ajustes, qué desbloquea cada uno y dónde obtener la clave

SECURITY.md

Modelo de amenazas e informes

Comandos útiles

Comando

Propósito

npm run dev

Inicia la API local y la interfaz web.

npm run build

Construye la aplicación web de producción.

npm run registry

Reconstruye el registro de modelos seleccionados.

npm run capabilities

Reconstruye el manifiesto de capacidades.

npm run catalog:sync

Actualiza el descubrimiento de proveedores y la evidencia de precios.

npm run mcp

Inicia el servidor MCP stdio.

npm run set-password

Establece o cambia la contraseña del estudio (-- --remove la elimina).

./scripts/remote.sh open

Publica la interfaz en la IP de esta máquina, incluyendo la regla de cortafuegos.

./scripts/remote.sh close

Lo deshace — de vuelta al acceso solo local.

./scripts/remote.sh status

Abierto o cerrado, en qué puerto, con o sin contraseña.

npm run test:contracts

Ejecuta pruebas de API, persistencia y contratos de modelo.

npm run test:mcp

Prueba de humo del descubrimiento MCP y el comportamiento de medios.

npm run test:e2e

Ejecuta recorridos del navegador y comprobaciones de accesibilidad (necesita npx playwright install chromium una vez).

npm run test:release

Ejecuta la puerta de lanzamiento completa.

Seguridad y privacidad

Postura predeterminada. Ambos puertos se vinculan a loopback y no hay contraseña — hablar con tu propia máquina no debería requerir una. Nada sale de tu máquina excepto las llamadas que haces a los proveedores que configuraste.

Claves. Se leen del lado del servidor, nunca se devuelven a la interfaz de usuario. La pantalla de Configuración muestra presencia, origen y los últimos 4 caracteres — nunca el valor. .env se escribe con permisos solo del propietario (600) y está en gitignore.

Contraseña opcional. Establece BENCH_PASSWORD y la API requiere una sesión:

npm run set-password              # asks for it, without echoing
npm run set-password -- --remove

Almacenada como un hash scrypt, para que nadie lea tu contraseña del archivo. Establecerla o cambiarla cierra la sesión de todos los demás inmediatamente. ¿La olvidaste? Elimina la línea de .env y reinicia — ese es el camino de recuperación, a propósito, porque quien tenga ese archivo ya tiene las claves dentro.

La contraseña protege la API y tus archivos generados. El shell de la interfaz aún se sirve a cualquiera que llegue al puerto, pero sin una sesión no muestra nada. Ocultar también el shell es trabajo de un proxy inverso, no de este proceso.

Escribir ajustes es solo desde la máquina. Incluso con una sesión válida, se rechaza POST a los endpoints de configuración desde la red — cambiar las claves requiere estar en la máquina. Esto sobrevive al proxy de desarrollo: la API solo confía en un origen reenviado cuando el socket ya es loopback, por lo que una solicitud desde la red no puede falsificarlo.

Exponerlo. ./scripts/remote.sh open publica la interfaz y abre el puerto; close deshace ambos. Consulta Alcanzarlo desde otra máquina y Dejarlo funcionando de forma segura. Prefiere Tailscale o un proxy inverso protegido con contraseña en lugar de un puerto abierto.

  • Los medios generados pueden ser retenidos por un proveedor externo según los términos de ese proveedor.

  • La creación de sitios web y documentos puede invocar un agente de codificación autenticado localmente. Revisa el código fuente generado antes de implementarlo.

Lee SECURITY.md antes de exponer, modificar o redistribuir el servicio.

Límites honestos

  • Bench es una herramienta local para un solo usuario, no un producto SaaS alojado multiinquilino.

  • El registro se selecciona intencionalmente; la presencia en el catálogo no garantiza la admisión en producción.

  • Las entradas aceptadas no garantizan fidelidad creativa.

  • La salida del sitio web es estática por diseño.

  • La creación de PDF depende de una instalación local de Chrome.

  • La disponibilidad y los precios de los modelos pueden cambiar después de una sincronización del catálogo.

  • Ser dueño de la capa significa mantener una pequeña pieza de software.

Confianza en el lanzamiento

La puerta de lanzamiento cubre compilaciones de producción, contratos de API y base de datos, descubrimiento MCP, recorridos del navegador, accesibilidad, contención responsiva, estados de fallo, transiciones de modelo y capturas de pantalla visuales.

npm run test:release

Licencia

Bench Studio Public está disponible bajo la Licencia MIT.


Los modelos hacen el trabajo pesado. Bench hace visible la capa que los rodea—y la tuya.

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • MCP server for Luma Dream Machine AI video generation

  • MCP server for Google Veo AI video generation

  • MCP server for Wan AI video generation

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/inematds/bench-studio-en'

If you have feedback or need assistance with the MCP directory API, please join our Discord server