torrentio-scraper/
│
├── addon/ # 🎯 Core del addon de Stremio
│ ├── serverless.js # Router principal con todas las rutas
│ ├── addon.js # Lógica del addon (streams, catalogs)
│ ├── index.js # Servidor Express para desarrollo local
│ ├── package.json # Dependencias del addon
│ │
│ ├── lib/ # Librerías del addon
│ │ ├── manifest.js # ⭐ Genera manifest.json dinámicamente
│ │ ├── configuration.js # Parseo de configuraciones
│ │ ├── cache.js # Sistema de caché
│ │ ├── filter.js # Filtros de streams
│ │ ├── sort.js # Ordenamiento de streams
│ │ └── ...
│ │
│ ├── moch/ # Integración con servicios debrid
│ │ ├── realdebrid.js
│ │ ├── alldebrid.js
│ │ ├── premiumize.js
│ │ └── ...
│ │
│ └── static/ # Archivos estáticos
│ ├── images/
│ │ ├── background_v1.jpg
│ │ └── logo_v1.png
│ └── videos/
│ └── *.mp4 # Videos de error/estado
│
├── api/ # 🚀 Serverless Functions de Vercel
│ └── index.js # Handler que importa addon/serverless.js
│
├── public/ # 📦 Archivos públicos servidos por Vercel
│ ├── images/ # Copia de addon/static/images
│ └── videos/ # Copia de addon/static/videos
│
├── vercel.json # ⚙️ Configuración de Vercel
├── package.json # Scripts y metadata del proyecto
│
├── README.md # Documentación principal
├── DEPLOYMENT.md # Guía de deployment
├── STREMIO.md # Explicación del manifest de Stremio
└── TESTING.md # Guía de testing
Usuario/Stremio
↓
https://tu-proyecto.vercel.app/manifest.json
↓
Vercel Router (vercel.json)
↓
api/index.js (Serverless Function)
↓
addon/serverless.js (Router)
↓
addon/lib/manifest.js (Genera manifest dinámicamente)
↓
JSON Response con manifest
GET /→ Redirect a/configureGET /configure→ Página de configuración HTMLGET /:config/configure→ Página con configuración específica
GET /manifest.json→ Manifest por defectoGET /:config/manifest.json→ Manifest con configuración
GET /:config/stream/:type/:id.json→ Streams para contenido- Ejemplo:
/stream/movie/tt0111161.json - Ejemplo:
/stream/series/tt0903747:1:1.json
- Ejemplo:
GET /:config/catalog/:id/skip=:n.json→ Catálogo de debridGET /:config/meta/:type/:id.json→ Metadata de debridGET /resolve/:moch/:apiKey/:hash/...→ Resolver link de debrid
GET /images/*→ Logo, background, etc.GET /videos/*→ Videos de error/estado
El parámetro de configuración es una string con opciones separadas por |:
realdebrid=API_KEY|language=spanish|qualityfilter=1080p
1. Sin configuración (por defecto):
https://tu-proyecto.vercel.app/manifest.json
2. Con RealDebrid:
https://tu-proyecto.vercel.app/realdebrid=abc123/manifest.json
3. Con múltiples opciones:
https://tu-proyecto.vercel.app/realdebrid=abc123|language=spanish|qualityfilter=1080p/manifest.json
Configura cómo Vercel maneja las requests:
- Enruta todo a
api/index.js - Configura memoria y timeout
- Los archivos en
public/se sirven automáticamente
Serverless function que:
- Importa
addon/serverless.js - Actúa como proxy entre Vercel y el addon
Router principal que:
- Define todas las rutas del addon
- Maneja requests y responses
- Incluye rate limiting
Genera el manifest dinámicamente:
- Lee la configuración del usuario
- Construye el objeto manifest
- Incluye recursos, catálogos, tipos, etc.
const app = express();
app.use(serverless);
app.listen(7000);export default function (req, res) {
serverless(req, res);
}Configura en el dashboard de Vercel:
| Variable | Propósito | Requerida |
|---|---|---|
MONGODB_URI |
Caché de streams | Opcional |
POSTGRESQL_URI |
Base de datos de torrents | Opcional* |
METRICS_USER |
Usuario para /swagger-stats |
Opcional |
METRICS_PASSWORD |
Password para métricas | Opcional |
*Nota: Necesitarás una base de datos con torrents scrapeados para que el addon devuelva streams reales.
- No hay
manifest.jsonestático: El manifest se genera en tiempo de ejecución - Archivos estáticos: Deben estar en
public/para que Vercel los sirva - Timeout: 10 segundos en Free tier, considera Vercel Pro si necesitas más
- Base de datos: Sin ella, el addon no devolverá streams reales
- Rate limiting: Configurado en
serverless.js(300 req/hora por IP)
Con esta estructura, tu proyecto está listo para:
- ✅ Desplegarse en Vercel
- ✅ Generar manifests dinámicos
- ✅ Servir archivos estáticos
- ✅ Manejar todas las rutas de Stremio
- ✅ Integrarse con servicios debrid
¡Solo falta conectar una base de datos con torrents scrapeados!