Le moteur communautaire qui agrège, teste, répare et maintient les providers Nuvio.
VO · VF · VOSTFR • Mobile · Desktop · TV
Tous les providers publiés : VF, VOSTFR, VO et autres langues.
https://raw.githubusercontent.com/niakw/Niakvio/refs/heads/main/manifest.json
Projection centrée sur les providers proposant du français ou du sous-titrage français.
https://raw.githubusercontent.com/niakw/Niakvio/refs/heads/main/vf/manifest.json
Dans Nuvio, copiez l'URL du manifest souhaité dans la gestion des plugins/providers puis actualisez le repository lorsque nécessaire.
Les URL restent stables. NiakVIO peut faire évoluer derrière elles les bundles, versions, domaines, règles runtime, preuves et états d'activation.
NiakVIO ne stocke ni n'héberge de vidéo. Le projet maintient des manifests, des métadonnées, des règles de compatibilité et des bundles de providers consommés côté client.
- Nuvio Mobile —
NuvioMedia/NuvioMobile - Nuvio Desktop —
NuvioMedia/NuvioDesktop - NuvioTV —
NuvioMedia/NuvioTV
NiakVIO agrège et compare plusieurs upstreams au lieu de dépendre d'une seule copie d'un provider :
- Gowaru —
Gowaru/gowaru-nuvio-providers - Yoru —
yoruix/nuvio-providers - All-in-One Nuvio —
NuvioPlugin/All-in-One-Nuvio
La provenance et les licences tierces sont suivies dans PROVENANCE.json et THIRD_PARTY_NOTICES.md.
Un provider peut fonctionner aujourd'hui puis casser demain à cause d'un domaine déplacé, d'une API modifiée, d'un lecteur remplacé, d'un token devenu obsolète ou d'une différence entre Mobile, Desktop et TV.
NiakVIO ajoute une couche de maintenance entre les repositories providers et Nuvio :
- un point d'installation unique plutôt qu'une collection de manifests à gérer séparément ;
- plusieurs variantes comparées avant de modifier du code ;
- réparation automatique bornée lorsque la meilleure variante connue ne fonctionne plus ;
- contrôle réel du média, pas seulement de l'URL retournée ;
- vérification de l'œuvre, de la saison et de l'épisode pour éviter les faux positifs ;
- attention particulière au français sans inventer VF/VOSTFR à partir d'un simple nom de domaine ;
- preuves séparées Mobile, Desktop et TV ;
- dernier état sain conservé lorsqu'une nouvelle observation est seulement inconclusive ;
- publication atomique et fail-closed pour empêcher une génération partielle de remplacer silencieusement un état sain.
L'objectif n'est donc pas d'afficher le plus grand nombre possible de providers. L'objectif est de publier le plus de providers réellement utiles possible, avec suffisamment de preuves pour savoir pourquoi ils fonctionnent — ou pourquoi ils ne fonctionnent plus.
Pour une même famille, NiakVIO peut disposer de plusieurs bundles issus des upstreams, d'un dernier état publié et d'un LKG. La sélection d'un sibling sain est tentée avant une réparation structurelle.
Le moteur distingue notamment :
- hub d'information ;
- domaine terminal ;
- redirection ;
- API ;
- peer observé ;
- domaine historique encore cohérent ;
- route appartenant à un autre provider.
Une migration de domaine n'est pas promue simplement parce qu'un serveur répond en HTTP.
Lorsque cela est nécessaire, la récupération peut suivre la chaîne réelle :
provider
→ recherche / catalogue / API
→ fiche exacte de l'œuvre
→ saison / épisode
→ iframe / lecteur
→ JavaScript / XHR / JSON
→ playlist / média final
Les budgets de pages, embeds, hosts, fetches, taille de réponse et temps empêchent cette exploration de devenir une navigation sans limite.
Une URL n'est pas considérée comme valide uniquement parce qu'elle se termine par .m3u8 ou .mp4. Les contrôles peuvent confirmer ou rejeter :
- playlist HLS réelle (
#EXTM3U) ; - DASH/MPD ;
- signatures de conteneurs ;
- HTML ou JSON déguisé en média ;
- publicité, preview ou asset parasite ;
- redirection incohérente ;
- premier segment ou contenu inaccessible ;
- contexte
Referer/Origin/ headers nécessaire à la lecture.
Un flux jouable correspondant à la mauvaise œuvre est un échec, pas un succès.
Les preuves peuvent combiner titre, alias, année, type, saison, épisode, metadata catalogue/player, nom du média et durée attendue/mesurée.
VF/VOSTFR n'est jamais déduite d'un seul indice. Selon les informations disponibles, NiakVIO combine metadata provider, domaine, catalogue, player, pistes audio, sous-titres et observations de lecture.
Les commits clients acceptés sont épinglés dans sources.json et les validations natives utilisent les repositories officiels.
| Client | Repository | Preuve |
|---|---|---|
| Nuvio Mobile | NuvioMedia/NuvioMobile |
runtime Android/iOS et contrat Mobile |
| Nuvio Desktop | NuvioMedia/NuvioDesktop |
runtime Desktop Windows/macOS/Linux |
| NuvioTV | NuvioMedia/NuvioTV |
runtime Android TV |
Le contrat logique ARCHI 2 est commun, mais une preuve Desktop ne vaut jamais automatiquement preuve Mobile ou TV.
Le corpus natif couvre actuellement plusieurs œuvres représentatives de films, séries et anime et exécute chaque provider dans le runtime du client concerné. Les jobs ciblés permettent de retester un seul device — et, pour TV, une seule fixture — sans relancer inutilement tout le parc.
NiakVIO repose sur Provider Engine V2 / ARCHI 2.
provider_catalog.json est le registre canonique de publication. manifest.json et vf/manifest.json sont des projections déterministes du même catalogue et non deux bases concurrentes.
3 upstreams + état publié/LKG
│
▼
Discovery multi-variantes
│
▼
hubs / DNS / domaines
│
▼
provider_catalog.json
│
▼
ProviderSpec + Resolver Core V2
│
▼
Evidence Matrix
│
▼
Repair Brain V2
│
▼
média + identité + langue + contexte
│
┌─────┼─────┐
▼ ▼ ▼
Mobile Desktop TV
└─────┼─────┘
▼
publication fail-closed
┌─────┴─────┐
▼ ▼
manifest.json vf/manifest.json
La description complète se trouve dans ARCHITECTURE.md et l'implémentation du moteur dans engine_v2/README.md.
Certaines primitives historiques de scripts/ sont encore utilisées lorsqu'elles assurent une fonction qui n'a pas encore d'équivalent V2 : LKG, adaptation de routes, probes spécialisés, génération de bundle, etc.
Elles restent derrière ARCHI 2 : aucun second manifest, orchestrateur ou système d'activation concurrent ne doit devenir une deuxième source de vérité.
Le pipeline principal est .github/workflows/sync.yml.
Quick peut notamment :
- rafraîchir hubs et domaines ;
- découvrir les variantes upstream ;
- comparer les siblings ;
- conserver le bundle publié/LKG ;
- lancer une réparation bornée sur les familles non résolues ;
- publier une amélioration lorsqu'elle est effectivement prouvée.
Il évite d'attendre un Deep pour une simple migration de domaine ou une réparation déjà comprise.
Deep est réservé aux opérations plus coûteuses :
- nouvelles variantes et connaissances provider ;
- corpus plus large ;
- intégration d'un nouveau provider ;
- changement structurel du moteur ;
- reconstruction ou recherche de route plus profonde ;
- validation stricte d'identité, de qualité et de transport.
Un changement courant ne force donc pas automatiquement une reconstruction profonde de tout le système.
Le Repair Brain ne considère pas no_streams comme une cause. Il cherche à classer l'étape fautive : DNS, accès, recherche, fiche, épisode, player, extraction média, contexte playback, transport, identité ou contrat Nuvio.
Sa boucle de travail est :
diagnostic
↓
hypothèse de réparation
↓
mutation en sandbox
↓
retest
↓
acceptation ou mémoire d'échec
Une stratégie échouée peut être mémorisée pour éviter de répéter mécaniquement le même repair. Une stratégie réussie n'est réutilisable automatiquement qu'après les preuves prévues par la politique du moteur.
Le Brain Learning Lab est séparé de la publication : il travaille en sandbox, produit une mémoire sanitizée et n'a pas le droit de publier directement un provider ou un manifest.
Un audit historique 5.20.63 sert de bootstrap de départ afin de confronter les nouvelles observations à un état antérieur riche. Les apprentissages futurs doivent ensuite être portés par les preuves du moteur, les corpus natifs et la mémoire d'expérience du Brain — pas par une liste humaine de providers à forcer.
Une mise à jour upstream vide ou cassée ne doit pas écraser un provider publié sain.
NiakVIO peut conserver :
- snapshots LKG upstream ;
- bundle publié comme sibling ;
- état d'activation précédemment prouvé ;
- routes et domaines historiquement cohérents ;
- provenance et catégories validées.
Un signal inconclusif peut conserver le dernier état sain. La quarantaine est destinée aux contradictions fortes de sécurité ou d'identité, pas à un simple zéro résultat isolé.
Films, séries et anime sont des dimensions de test distinctes. La cible de largeur du projet est 10 providers jouables par œuvre, dont au moins 3 VF lorsque le catalogue permet réellement de les obtenir.
Cette cible n'autorise aucun faux positif : mauvaise œuvre, mauvais épisode, durée incohérente ou média non lisible ne comptent pas.
Le dispositif comprend :
- corpus complet Desktop ;
- corpus complet Mobile ;
- corpus complet TV ;
- jobs ciblés par device ;
- fixtures TV parallélisées pour diagnostiquer et retester uniquement l'œuvre concernée ;
- synthèse cross-device destinée au moteur et au Brain.
La publication est atomique et fail-closed. La transaction peut inclure :
provider_catalog.json;- bundles providers ;
manifest.json;vf/manifest.json;- provenance ;
- états domaine/LKG ;
- versions ;
FILE-HASHES.json;SHA256SUMS.json;PATCH-SHA256SUMS.txt.
Une génération incohérente ne remplace pas silencieusement le dernier état publié.
Lorsqu'une transaction change réellement une donnée visible côté client :
- le patch provider peut être augmenté ;
- une réactivation peut faire tourner l'ID client case-only pour éviter un ancien état local désactivé ;
- la projection VF est resynchronisée depuis le catalogue ;
- la release globale est propagée aux manifests et métadonnées associées ;
- un rerun sans changement reste idempotent.
| Workflow | Rôle |
|---|---|
sync.yml |
discovery → repair → validation → publication Quick/Deep |
provider-engine-v2.yml |
tests et observation ARCHI 2 |
brain-learning-lab.yml |
expérimentation et mémoire du Repair Brain en sandbox |
availability.yml |
disponibilité des providers publiés |
domain-refresh.yml |
observation des domaines |
engine-regression-offline.yml |
non-régressions moteur hors réseau |
provider-rebuild-offline.yml |
reconstruction hors réseau |
final-native-client-validation-v2.yml |
validation native Mobile/Desktop/TV |
native-corpus-device-lab.yml |
corpus natif cross-device complet |
native-corpus-device-targeted.yml |
retests ciblés Desktop/Mobile/TV |
provider-catalogue-breadth-lab.yml |
largeur de catalogue |
permanent-real-client-labs.yml |
reproductions réelles Desktop/Mobile |
permanent-android-real-client.yml |
banc Android isolé |
provider-status-export.yml |
snapshot diagnostic |
Les workflows temporaires, one-shot et orchestrateurs superseded ne font pas partie de l'architecture cible.
Niakvio/
├── provider_catalog.json # source canonique de publication
├── manifest.json # projection générale
├── vf/manifest.json # projection francophone
├── engine_v2/ # Provider Engine V2 / ARCHI 2
│ ├── src/ # contrats, resolver, repair, evidence
│ ├── scripts/ # ingestion, observation, apprentissage
│ ├── config/ # politiques et adapters
│ └── tests/ # invariants V2
├── providers/ # bundles publiés hashés
├── scripts/ # primitives runtime/compatibilité nécessaires
├── automation/ # upstreams, LKG et états durables
├── tests/ # non-régressions publication/compatibilité
├── .github/workflows/ # production, labs et preuves natives
├── PROVENANCE.json
├── FILE-HASHES.json
├── SHA256SUMS.json
└── PATCH-SHA256SUMS.txt
Prérequis : Node.js 24+ et Python 3.
npm install
npm test
node engine_v2/tests/provider-catalog.test.mjsDiagnostics :
npm run diagnosticsLes tests locaux ne remplacent pas la validation native lorsqu'un changement touche le playback ou le contrat d'un client Nuvio.
main: état stable et publiable ;lab/desktop-mobile-realetlab/tv-real: labs permanents ;- les branches temporaires
fix/*,ci/*,proof/*,tmp/*,chore/*etrefactor/*doivent disparaître après intégration ou abandon vérifié.
Une branche n'est jamais supprimée avant comparaison avec main. Du contenu unique utile doit être intégré ou explicitement abandonné.
Le moteur applique des budgets de workers, des protections réseau/SSRF, des contrôles d'identité, une publication fail-closed et une sanitisation des artefacts CI. Les secrets, tokens, cookies, headers sensibles et URL signées ne doivent pas être persistés dans la mémoire d'apprentissage publique.
NiakVIO est un projet communautaire indépendant, non affilié aux développeurs de Nuvio ni aux services tiers référencés. Le projet ne contrôle pas la disponibilité, le contenu, les droits ou les pratiques de sites tiers. L'utilisation doit respecter la législation applicable et les conditions des services concernés.
Voir DISCLAIMER.md, LICENSE, NOTICE, SECURITY.md, CONTRIBUTING.md et CODE_OF_CONDUCT.md.