Autoaloja OmniRoute: un gateway de IA gratis para 500+ modelos y 290+ proveedores
Actualizado el 29 oct 2026 · 9 min de lectura

Con un solo comando tienes un gateway de IA funcionando en más o menos un minuto, y esto es lo que me sorprendió: antes de configurar un solo proveedor o pegar una sola API key, curl http://localhost:20128/v1/models devolvió 99 modelos (en la v3.8.48, que es la que ejecutamos). Eso incluye 36 alias de enrutado como auto/best-coding y auto/best-free, además de un puñado de pools de proveedores sin autenticación que no te piden absolutamente nada. Uno de ellos respondió a una chat completion real a la primera.
OmniRoute es un gateway de IA gratuito, con licencia MIT, que alojas tú mismo. Pone un único endpoint compatible con OpenAI delante de lo que su README cuenta como 358 proveedores (más de 150 con nivel gratuito), que abarcan Claude, GPT, Gemini, DeepSeek, Kimi, GLM, Mistral y MiniMax. En el camino de las peticiones no hay nada más que tu propio contenedor. Apareció en GitHub en febrero de 2026 y, a 9 de octubre de 2026, suma 74,497 estrellas y 10,738 forks, con la v3.8.51 del 30 de septiembre de 2026 como versión actual. Son bastantes más que las 33,908 estrellas y los más de 290 proveedores que tenía cuando escribimos esto por primera vez en julio. Repasamos la categoría de gateways de IA en general, incluidos OpenRouter y LiteLLM, en nuestra comparativa de routers de LLM con IA.
Una nota sobre qué se probó y cuándo. Los resultados prácticos de abajo (la lista de 99 modelos, la memoria del contenedor, el túnel y su autenticación básica) salen de nuestra ejecución de la v3.8.48 en Docker. Para esta actualización volvimos a comprobar las cifras, los requisitos del motor y de Node, la contraseña por defecto y los comandos de la CLI contra el paquete npm y el README de la v3.8.51, pero no repetimos la prueba con el contenedor.
Resumen
- Qué es: un gateway de IA gratuito, con licencia MIT y autoalojado, de diegosouzapw/OmniRoute - un endpoint compatible con OpenAI, 358 proveedores, más de 150 con nivel gratuito.
- Cómo ejecutarlo:
npm install -g omniroute && omniroute, odocker run -p 20128:20128 diegosouzapw/omniroute. El dashboard y la API están los dos en el puerto 20128. - Arregla una cosa antes que nada: define
INITIAL_PASSWORD, o el login de administrador del dashboard usará por defecto la cadena literalCHANGEME. - Por qué merece la pena: agregación de niveles gratuitos (~1.62B tokens/mes repartidos en 35 pools) y Combos que pasan automáticamente a otro proveedor cuando uno se queda sin cuota.
- Compártelo:
ssh -p 443 -R0:localhost:20128 free.pinggy.iopara obtener una URL HTTPS pública; añade-tantes del host yb:user:passworddespués (ssh -p 443 -R0:localhost:20128 -t free.pinggy.io b:user:password) para proteger el túnel con contraseña.
Ponerlo en marcha
Dos comandos, cualquiera de los dos sirve:
# npm - check the engines field first, it is narrow:
# node >=22.22.2 <23 || >=24.0.0 <27, so Node 23 is excluded
npm install -g omniroute
omniroute
# Docker - nothing else needed
docker run -p 20128:20128 diegosouzapw/omnirouteEl primer arranque genera sus propios secretos. Este es el log real de un contenedor recién creado:
[bootstrap] JWT_SECRET auto-generated (first run)
[bootstrap] STORAGE_ENCRYPTION_KEY auto-generated (first run)
[bootstrap] API_KEY_SECRET auto-generated (first run)
[bootstrap] Secrets persisted to: /app/data/server.env
[bootstrap] INITIAL_PASSWORD is not set - using default 'CHANGEME'. Change it in Settings!
Next.js 16.2.10
- Local: http://localhost:20128
Ready in 0ms
Tres de esos cuatro secretos se gestionan solos. La cuarta línea es lo único que hay que arreglar antes que nada:
export INITIAL_PASSWORD=$(openssl rand -base64 24)Con eso definido, el aviso de CHANGEME no aparece. Para cualquier cosa que pienses dejar en marcha, usa un contenedor con nombre, un volumen persistente y un tiempo de parada de 40 segundos, ya que OmniRoute hace checkpoint de su base de datos SQLite al apagarse:
docker run -d --name omniroute --restart unless-stopped --stop-timeout 40 \
-p 20128:20128 -v omniroute-data:/app/data \
-e INITIAL_PASSWORD \
diegosouzapw/omniroute:latest
En nuestra instancia, el contenedor se quedó en reposo en unos 541 MB de RAM y alrededor de un 3% de CPU sin tráfico.
Lo que obtienes antes de configurar nada
Sin ningún proveedor conectado, la lista de modelos ya viene llena:
curl -s http://localhost:20128/v1/models | jq '.data | length'
# 99De esos 99, 36 son alias de combo auto/* como auto/best-coding y auto/best-free. Son nombres basados en la intención y no modelos: pides auto/best-coding y OmniRoute elige el proveedor configurado que en ese momento cumple esa intención, así que la configuración de tu cliente no tiene que cambiar cuando cambias los proveedores de debajo.
Los 63 restantes salen de pools de proveedores sin autenticación que vienen activados: theoldllm (26 modelos), auggie (15), opencode (8), duckduckgo-web (6) y algunos más pequeños. Una petición normal con formato de OpenAI contra uno de ellos funcionó al instante y devolvió un objeto chat.completion normal con un bloque usage real. Siendo honestos con el resto: de los siete provedores sin autenticación que probamos, solo respondieron dos; los demás devolvieron 403, 418, 502 o 400. Tómatelos como un extra que a veces funciona, no como el motivo para instalar esto.
El dashboard, los combos y la agregación de niveles gratuitos

http://localhost:20128 redirige a /dashboard, que confirma el banner de cifrado y te guía en cuatro pasos: crear una API key, conectar proveedores, apuntar tu cliente a /v1 y monitorizar el uso. Los proveedores se conectan de tres formas: OAuth para suscripciones como Claude Code y GitHub Copilot, pegar y guardar para proveedores con API key como GLM y Mistral, y un interruptor para los pools gratuitos sin autenticación. Los endpoints de gestión están bien protegidos; llamar a /api/free-tier/summary sin key devuelve un 401 limpio.
La función más útil son los Combos, una lista ordenada de modelos más una estrategia de fallback:
{
"name": "premium-coding",
"strategy": "priority",
"models": [
{ "model": "cc/claude-opus-5" },
{ "model": "glm/glm-5.2" },
{ "model": "minimax/MiniMax-M3" }
]
}El README ahora enumera 19 estrategias, entre ellas priority (orden estricto), round-robin, weighted, least-used, cost-optimized, random, cache-optimized (envía las peticiones repetidas a la conexión que tiene el prefijo en caché) y un modo fusion que reparte un prompt entre varios modelos. Nosotros solo probamos las sencillas. OmniRoute sigue la ventana de cuota de cada proveedor (reinicios cada 5 horas y semanales en las suscripciones, diarios o mensuales en los proveedores de API), y cuando uno llega a su límite el combo pasa al siguiente en lugar de devolverle un error a tu cliente.
Ese failover combina bien con el otro gran atractivo del proyecto: la agregación de niveles gratuitos. La referencia FREE_TIERS de OmniRoute sitúa la cuota recurrente documentada en unos 1.62 mil millones de tokens gratis al mes repartidos en 35 pools deduplicados, con Mistral a la cabeza con unos 1,000 millones, seguido de Nara (210M), LLM7 (150M), xKiro (150M) y Groq (30M, como cinco límites por modelo). Tómate esa cifra con cierta cautela. El documento dice que la cifra de Mistral solo se ve dentro de la consola de una cuenta, y una nueva auditoría de septiembre de 2026 quitó Gemini y Ollama Cloud de la suma porque ninguno publica ya una cifra de tokens (el total bajó desde ~1.94B a principios de año por correcciones parecidas). Cuenta también con límites de peticiones: el propio documento de OmniRoute indica 2 peticiones por minuto para el nivel gratuito de Mistral, mientras que el centro de ayuda de Mistral (una página más antigua) dice 1 petición por segundo, así que revisa tu propia consola de administración. Mira nuestra guía de APIs de modelos de IA gratuitas si eso es lo que más te interesa.
Además, la compresión puede recortar entre un 15% y un 95% del uso de tokens antes de que las peticiones lleguen a un proveedor. La configuración por defecto usa dos motores: Caveman comprime prosa y RTK (inspirado en Rust Token Killer) comprime salidas de herramientas repetitivas como logs de compilación y ejecuciones de tests. El README ahora enumera 12 motores combinables en total, incluido LLMLingua-2 y algunos modos con pérdida que tienes que activar tú. El código, las URLs y el JSON pasan intactos con la configuración por defecto, y cada respuesta lleva una cabecera x-omniroute-compression que indica si se aplicó.
Apuntar tus herramientas de programación a OmniRoute
Si ya usas un agente de programación, es un cambio de cinco minutos, no un flujo de trabajo nuevo. Para Claude Code, define ANTHROPIC_BASE_URL=http://localhost:20128 y ANTHROPIC_AUTH_TOKEN=your-omniroute-api-key en ~/.claude/settings.json. Para Codex CLI, export OPENAI_BASE_URL="http://localhost:20128" y OPENAI_API_KEY. Para Cursor, Cline, Continue y RooCode, elige el tipo de proveedor compatible con OpenAI y apúntalo a http://localhost:20128/v1. Si todavía estás comparando agentes, nuestros repasos de las mejores herramientas de IA para programar y de los agentes de programación CLI cuentan qué espera cada uno de un proveedor.
MCP, A2A y la CLI
OmniRoute se expone como servidor MCP (SSE, HTTP streaming o stdio con omniroute --mcp), así que un agente puede manejar el propio gateway, con 110 herramientas detrás de 33 scopes (la aplicación de scopes es opcional, así que revisa ese ajuste antes de darle una key a un agente). Mira nuestra guía sobre cómo exponer un servidor MCP con Pinggy si quieres acceder a él en remoto. Tambien hay un servidor A2A que habla JSON-RPC 2.0 con un framework de skills, aunque esta parte del proyecto es la menos madura y la peor documentada.
La CLI ha crecido hasta más de 80 comandos y cubre casi todo lo que hace el dashboard, algo que importa en máquinas sin interfaz gráfica:
omniroute doctor # checks data dir, DB, providers, port conflicts
omniroute providers test <id> # live round-trip against one provider
omniroute quota # provider quota usage
omniroute combo switch <name> # change the default combo
omniroute reset-password # admin password recoveryomniroute doctor es lo primero a lo que recurrir cuando algo falla. Si OmniRoute corre en un VPS, omniroute connect <host> conecta esa misma CLI al servidor remoto con un token de alcance limitado, así que puedes manejarlo desde tu portátil.
Acceder a tu gateway desde otra máquina con Pinggy
localhost:20128 solo es accesible desde un ordenador. Un túnel de Pinggy lo resuelve sin abrir un puerto en el router:

Tanto el dashboard como la API funcionan a través de él. En nuestro túnel, /v1/models devolvió los mismos 99 modelos y una chat completion llegó en streaming con normalidad. Al cargar esa URL en el navegador, la tarjeta de Quick Start de OmniRoute incluso se actualiza para mostrarla como URL base del cliente, ya que el dashboard lee la dirección por la que se está accediendo realmente.

Como tu gateway ahora guarda todas las keys de proveedor que hayas configurado, ponle una contraseña al propio túnel:
ssh -p 443 -R0:localhost:20128 -t free.pinggy.io b:user:temporarypassEsta es la sintaxis de la documentación de autenticación básica. En nuestra prueba de julio, las peticiones sin credenciales o con credenciales incorrectas recibieron un 401, y solo las correctas llegaron a OmniRoute. Eso te da dos capas independientes: la contraseña del túnel y INITIAL_PASSWORD. Cierra la sesión SSH cuando termines en lugar de dejar un enlace permanente abierto.
Conclusión
Define INITIAL_PASSWORD, ten en cuenta el tamaño de la imagen y pon delante un túnel de Pinggy con autenticación básica cuando necesites acceder desde otro sitio. Los combos, el failover según la cuota, el soporte de MCP/A2A y un catálogo de niveles gratuitos que vale aproximadamente 1.62B tokens al mes hacen de esto mucho software útil para una licencia MIT.