La aplicación
Compartir una única factura de IA en un hogar
Cómo compartir una sola factura de IA en el hogar, con límite de gasto y revocación por persona
Esta página es una traducción automática de la documentación en inglés.
openplate utiliza el modelo de aportar tu propia clave: cada persona apunta la app a un proveedor de IA y paga sus propios escaneos de platos. En un mismo hogar esto resulta absurdo. Nadie quiere cuatro cuentas de proveedor, y compartir una sola clave es todavía peor: no puedes saber quién gastó qué, y revocar el acceso a una persona se lo revoca a todas.
No necesitas un servidor para esto. La solución está en el proveedor: una sola cuenta, una clave por persona y un límite de gasto por clave. Lee primero esa sección; las dos soluciones basadas en servidores que se explican más abajo son para los casos que esta no cubre.
Nada de esto comparte un diario. El registro de comidas de cada persona permanece en el almacenamiento de su propio navegador y en su propio dispositivo. Lo único que viaja por la red es una foto que sale y una estimación que regresa. Quien paga la factura puede ver cuántas peticiones hizo cada persona y cuánto costaron, pero no puede ver qué comió nadie.
La versión resumida, con OpenRouter
OpenRouter permite generar tantas claves de API como quieras bajo una misma cuenta, cada una con su propio límite de crédito y su propia línea de consumo. Esa es exactamente la funcionalidad que necesita un hogar.
- Una persona crea la cuenta en openrouter.ai y añade saldo. Solo esa persona inicia sesión; nadie más necesita una cuenta.
- Abre la página de claves y crea una clave por persona. Ponle a cada clave el nombre de la persona: ese nombre es el que verás después en el desglose de uso, por lo que "Sam" es mucho mejor que "clave 3".
- Define un límite de crédito en cada clave al crearla. Este es el límite máximo. Una clave sin límite puede consumir todo el saldo de la cuenta, así que considera "sin límite" como lo que debes evitar aquí.
- Envía a cada persona su propia clave. Envíala como enviarías una contraseña, no por un chat grupal que quede guardado para siempre.
- Cada persona pega la suya. En openplate: Ajustes → IA, elige OpenRouter y usa el panel "pegar una API key manualmente". La clave se guarda solo en ese navegador. Queda excluida de la exportación JSON y nunca llega al servidor de openplate.
Esa es toda la configuración. Cinco minutos, sin contenedores, sin mantenimiento.
Ponerlo en marcha
- Quién gastó qué: el panel de OpenRouter desglosa el uso por clave. Como cada clave lleva el nombre de una persona, esa es tu factura por persona.
- Revocar a una persona: elimina su clave. Ninguna otra persona se ve afectada, nadie más cambia un ajuste y la persona revocada no tiene alternativa: esa clave era su única credencial. Su diario queda intacto; nunca estuvo en la clave.
- Darle más a alguien: sube el límite de esa clave. Se aplica de inmediato, sin reiniciar nada en ningún sitio.
- La clave de alguien deja de funcionar: alcanzó su límite o eliminaste la clave. openplate mostrará el error del proveedor; la solución está en la página de Keys, no en la app.
Limita también la cuenta, no solo las claves. Los límites por clave restringen a cada persona, pero el saldo de la cuenta es lo que realmente se consume. Mantén el saldo en una cantidad que no te importe perder y recárgalo deliberadamente.
Automatizarlo. OpenRouter también ofrece una API para crear y gestionar claves mediante programación, algo útil de saber si vas a aprovisionar a más de un puñado de personas. Para una familia, el panel es más rápido que escribir el script.
La otra alternativa: una instancia administrada de openplate-core
Si tu proveedor no emite subclaves con límite (Mistral, la mayoría de las API directas de proveedores), la receta de subclaves anterior no tiene con qué trabajar. Para eso sirve una instancia administrada de openplate-core: define INSTANCE_MODE=managed (requiere CORE_URL), y el servicio de cuentas que tu hogar ya usa para la sincronización se convierte también en el proxy de IA, con una cuota diaria de peticiones por cuenta.
Elígela en lugar de las subclaves del proveedor cuando:
- Tu proveedor no tiene límite de gasto por clave, por lo que el tope debe estar en un sitio que controles.
- Quieres un límite de peticiones diarias por persona en lugar de un saldo de crédito por persona.
- Pones al hogar frente a tu propia máquina con openplate-inference, donde no hay ningún panel de proveedor; una instancia administrada añade la cuota por persona y el uso que la lista de permitidos de
API_KEYSdescrita abajo no tiene. - Quieres que la revocación sea una sola acción en la pantalla de administración en lugar de una clave compartida que todos deban volver a pegar.
Usa subclaves del proveedor siempre que puedas. Si estás en OpenRouter, ya terminaste hace cinco minutos y no hay ningún servicio que mantener activo.
Configuración: levanta openplate-core (consulta sync.md y topologies.md) y define INSTANCE_MODE=managed en la app de openplate. Apunta el servidor central a tu proveedor con UPSTREAM_BASE_URL, UPSTREAM_API_KEY y AI_ADVERTISED_MODEL en .env. La última línea es obligatoria. Sin un modelo, la app no escaneará. Genera la primera invitación, para ti, en el servidor con ADMIN_TOKEN, como administrador (en self-hosting.md tienes el comando). A partir de ahí, invita a otras personas en /admin dentro de la app y asigna a cada cuenta una cuota diaria. Si configuras el correo en el servidor central, la invitación se enviará por correo a la persona. Si no lo configuras, /admin te mostrará el enlace y podrás enviarlo como enviarías una contraseña. Cuando alguien olvida su contraseña, el proceso es idéntico. Sin correo configurado, el usuario te lo solicita y tú creas el enlace de restablecimiento en Personas, dentro de /admin. Cada persona inicia sesión y su cuenta ya incluye la conexión con la IA. No hay pasos aparte ni nada que pegar. Suspender o reactivar una cuenta se hace desde esa misma pantalla de administración y surte efecto de inmediato.
Dos cosas que conviene saber antes de depender de esto. La cuota cuenta peticiones, no dinero, así que mantén también un límite estricto de gasto en la clave principal del proveedor: solo el proveedor puede frenar el cobro. Además, la cuota de una persona se asigna de forma explícita por cuenta; no existe una opción ilimitada por defecto.
La sincronización y el proxy de IA son ahora el mismo servicio, de modo que el servidor de una instancia gestionada ve más cosas que uno no gestionado: una dirección de correo, texto cifrado para el que no tiene clave y, en el caso de un escaneo, la foto, que se lee una sola vez y no se almacena. Sigue sin ver nunca una entrada del diario en claro. Mira architecture.md para ver con detalle qué guarda cada componente.
La alternativa: una máquina de inferencia compartida
Si tienes el hardware, la otra forma de compartir una factura es no tener factura. Ejecuta openplate-inference en una máquina en casa, y cada escaneo del hogar se procesará de forma local sin recurrir a ningún proveedor en la nube. Mira topologies.md para conocer los costes en hardware y trabajo operativo: exige bastante más que pegar cinco claves en un panel.
También dispone de claves por persona, aunque son más rudimentarias. API_KEYS en el contenedor de inferencia es una lista separada por comas de claves bearer admitidas:
-e API_KEYS="opk_alex_...,opk_sam_...,opk_robin_..."Entrega a cada persona una entrada de esa lista, y cada una pegará la suya en openplate dentro de Ajustes → IA → Compatible con OpenAI, junto con la URL base de la instancia (por ejemplo http://openplate.example.lan:8300/v1) y el modelo openplate-plate-1. Si eliminas una clave de la lista y reinicias, revocas solo el acceso a esa persona.
Dos limitaciones claras frente a las subclaves del proveedor:
- No hay límite de gasto ni de tasa por clave. La lista no es más que una lista de permisos. No hay problema si el recurso es tu propia GPU inactiva y las peticiones no cuestan dinero.
- La generación y distribución de las claves corre por tu cuenta. Sirve cualquier cadena aleatoria (
openssl rand -base64 24); no hay panel de control ni informe de uso por persona: solo tienes los registros del contenedor.
Lista completa de variables: docs/configuration.md de openplate-inference.
No uses el atajo de IA que proporciona la instancia para esto. Si defines DEFAULT_INFERENCE_API_KEY en openplate, todos acceden con un toque y sin pegar claves, pero esa clave queda incrustada en el HTML de la página y cualquiera que pueda abrir la app puede verla con view-source; por tanto, vuelve a ser una credencial compartida con el mismo problema inicial. Sirve para una LAN o una tailnet donde confíes en todos los que tengan acceso, pero es inadecuada en cualquier otro caso. Mira configuration.md.
Cuentas para la familia
Tanto la sincronización como una instancia administrada le dan a cada persona una cuenta en el servicio openplate-core que tú ejecutas.
- Usa invitaciones. Crea la primera cuenta para ti en el servidor (self-hosting.md contiene el comando). Después, invita a cada persona desde
/adminen la app. - Mantén
OPEN_SIGNUPdesactivado. Permite que cualquiera que encuentre la dirección pida una cuenta. Una familia no necesita eso. - El correo es opcional. Si no hay correo,
/adminmuestra cada enlace de invitación y de restablecimiento, y tú mismo lo pasas. self-hosting.md explica ambas opciones y cómo configurar el correo si lo deseas.