Addon Stremio minimale che funziona come stream provider per film aperti/cercati in Stremio.
- L’utente apre un film in Stremio e il client invia una richiesta
streamconargs.id(IMDb, es.tt0111161). - Il server legge i file split
streams_part_*.jsondalla root della repo deployata. - I file validi vengono uniti in una singola struttura:
- merge di tutte le chiavi in
movieStreams - concat di tutti i record in
authorizedIndex
- merge di tutte le chiavi in
- Dopo il merge viene fatta deduplica robusta:
movieStreams[imdbId]dedup pertitle + urlauthorizedIndexdedup per prioritàimdbId, altrimentititle normalizzato + year
- Lo stream handler prova prima il lookup diretto in
movieStreams[imdbId]. - Se non trova stream validi, prova fallback metadata TMDB (solo metadata) e matching su
authorizedIndex. - In ogni caso il risultato finale è sempre
{ streams: [...] }oppure{ streams: [] }senza crash.
- Solo sorgenti autorizzate/locali controllate dall’utente.
- Nessuno scraping di siti terzi.
- Nessuna integrazione con VixSrc o siti non autorizzati.
- Nessun frontend aggiuntivo.
- Nessun database complesso.
- Nessun uso di Express.
Il manifest è stream-first e supporta:
resources: ["stream"]types: ["movie"]idPrefixes: ["tt"]catalogs: []version: "1.2.1"
- Il loader cerca solo file che matchano esattamente
streams_part_XX.json(due cifre). - I file sono ordinati in modo numerico (
01,02, ...,20). - Se un file è malformato, viene loggato e ignorato, ma il caricamento continua.
streams.jsonè ignorato di default e usato solo come fallback opzionale se mancano totalmente i file split.- Se non esiste nessuna sorgente valida, il server usa fallback sicuro:
{ "movieStreams": {}, "authorizedIndex": [] }
Ogni file parte deve avere la forma seguente:
{
"movieStreams": {
"tt1254207": [
{
"title": "Big Buck Bunny - HTTPS HLS",
"url": "https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8"
}
]
},
"authorizedIndex": [
{
"imdbId": "tt0111161",
"title": "The Shawshank Redemption",
"year": 1994,
"streams": [
{
"title": "Authorized stream",
"url": "https://example.com/authorized/shawshank.m3u8"
}
]
}
]
}movieStreams: lookup direttoIMDb ID -> streams.authorizedIndex: fallback tramite metadata (title/originalTitle/year) ->streams.
Priorità del resolver:
imdbIdesattotitlenormalizzato +yearoriginalTitlenormalizzato +year
La normalizzazione rende il matching robusto a:
- accenti
- punteggiatura
- maiuscole/minuscole
- spazi multipli
Per garantire playback interno:
- usare sempre
url(HTTP/HTTPS), maiexternalUrl - usare URL diretti media (
.m3u8,.mp4,.webm,.mov,.mkv) - URL tipo pagine/player (
/watch,/embed,/player,.html) vengono scartati come non idonei
Per ogni richiesta stream vengono loggati:
stream request imdbIddirect lookup hit yes/nometadata lookup success yes/noauthorized match found yes/nostreams returned count
Per la sanitizzazione stream vengono loggati anche i motivi di scarto:
invalid_urlexternalUrl_not_allowednon_direct_media_url
TMDB è opzionale e usato solo per metadata durante la risoluzione secondaria. Variabili supportate:
TMDB_BEARER_TOKEN(preferito)TMDB_API_KEY(fallback)
npm install
npm startManifest locale:
http://localhost:7000/manifest.json
- Push su GitHub.
- Crea Web Service su Render.
- Build command:
npm install - Start command:
npm start - (Opzionale) imposta
TMDB_BEARER_TOKEN/TMDB_API_KEY. - Re-deploy/restart per applicare env vars.
Manifest deploy:
https://<service-name>.onrender.com/manifest.json
I file JSON split vengono letti direttamente dal filesystem della repo deployata (__dirname).
Quindi su Render i streams_part_*.json devono essere presenti nel deploy.
Questo addon non costruisce un catalogo globale proprio: usa direttamente il search/catalog già presenti in Stremio.
Il playback compare solo quando esiste uno stream valido nei streams_part_*.json (o fallback streams.json); in caso contrario ritorna streams: [].