MovixOpenSource/README.md
Movix 3a7ab5ad42 feat: synchronise le repo privé — Cast, sources, API et mobile 2.5.7
Gros lot de travail synchronisé depuis le repo privé. Cette mise à jour
regroupe la refonte du lecteur et du Cast, de nouvelles sources VOD/Live TV,
le durcissement de l’API et des proxies, ainsi qu’une nouvelle version de
l’application mobile.

Lecteur, sources et Live TV

- Refonte du lecteur HLS avec sélection et mémorisation de la qualité,
  détection des résolutions, scan des liens, choix des pistes audio et
  fallback contrôlé de 1080p vers 720p.
- Ajoute une garde contre les boucles de changement de source, notamment
  lors des erreurs vidéo et des réponses 429.
- Revoit SeekStreaming de bout en bout : validation des embeds, prise en
  charge de plusieurs candidats, regroupement par serveur, règles de headers
  persistantes et cache d’extraction raccourci.
- Ajoute SwiftFlow pour les films et séries, avec lecteurs VF/VOSTFR, cache
  stale-while-revalidate, déduplication des requêtes et limite partagée côté API.
- Adapte Coflix à son nouveau domaine et à son nouveau thème, ajoute un kill
  switch, développe les wrappers 1jour1film et actualise le domaine Wiflix.
- Ajoute NorthLive et Vavoo à la Live TV, regroupe les variantes d’une même
  chaîne et permet de choisir le serveur ou la qualité.
- Enrichit les Top 10 avec des filtres par période et par algorithme, ainsi
  que de nouvelles métriques de visionnage.

Cast et application mobile

- Unifie le contrôle Cast entre le Web Cast SDK et le pont Android :
  état distant, lecture, pause, seek, arrêt et reprise après reconnexion.
- Ajoute sur Android un relais média LAN sécurisé, limité au Chromecast et
  au réseau Wi-Fi sélectionnés, avec sessions opaques et service foreground.
- Prépare les sources avant diffusion et prend en charge les playlists HLS
  TS/fMP4, les flux progressifs, les sous-titres VTT, SeekStreaming et les
  segments MPEG-TS encapsulés dans des PNG.
- Renforce le proxy média local : support Range, validation des redirections,
  liaison DNS/socket au réseau Cast et meilleure gestion des headers Fsvid.
- Sécurise le bridge WebView avec contrôle de l’origine top-frame, capacités
  propres à chaque document et invalidation lors des navigations.
- Ajoute le Picture-in-Picture Android avec lecture/pause et seek de
  10 secondes depuis la fenêtre flottante.
- Maintient désormais l’écran allumé uniquement pendant une lecture active.
- Publie l’application Android 2.5.7, build 16, avec le nouvel APK et ses
  métadonnées d’intégrité.

API, base de données et paiements

- Remplace 13 migrations SQL isolées par un manifeste de schéma MySQL
  centralisé, additif et capable de détecter les divergences de structure.
- Ajoute le workflow db:init avec prévisualisation, dry-run, verrou MySQL,
  confirmations pour les tables Wrapped et couverture de tests dédiée.
- Rend configurables les limites du pool MySQL et fiabilise les advisory locks.
- Revoit entièrement PayGate : références de callback séparées, nonces,
  validation des wallets et transactions, états monotones, déduplication des
  paiements et protection contre les courses ou réutilisations de txid.
- Renforce l’annulation, la réconciliation et la livraison idempotente des
  factures VIP, avec réponses no-store sur les routes sensibles.
- Distingue les JWT invalides des indisponibilités MySQL afin de renvoyer
  correctement 401 ou 503 sans provoquer de déconnexions inutiles.
- Utilise ZZAPI/Claude Haiku pour la modération, avec OpenRouter/DeepSeek en
  solution de secours.
- Améliore la gestion HLS et Range dans proxiesembed.

Frontend, profils et infrastructure

- Protège la sélection et l’hydratation des profils contre les réponses
  concurrentes, les intentions obsolètes et l’effacement accidentel du
  stockage local.
- Rend VITE_SITE_URL obligatoire et l’injecte dans le runtime, les données
  structurées, le service worker, robots.txt et sitemap.xml.
- Optimise les probes réseau du service worker avec cache court et single-flight.
- Charge dynamiquement les traductions anglaises, plusieurs routes secondaires
  et les données Search/TMDB uniquement lorsqu’elles deviennent nécessaires.
- Ajoute des caches mémoire/session pour les images et contenus TMDB et réduit
  les animations, calculs et rendus hors écran.
- Ajoute la page publique des frais, les coins carrés persistants, une nouvelle
  intro Movix, les avertissements de publicités adultes et de nombreux textes
  Cast, qualité, Live TV et sources.
- Met à jour les extensions Chrome 1.3.12 et Firefox 1.5.9, ainsi que le
  userscript, avec la nouvelle extraction SeekStreaming et la préparation Cast.
- Ajoute une large couverture de tests Kotlin et JavaScript pour le Cast, le
  proxy média, le PiP, le bridge, la base de données, PayGate et le lecteur.
- Ajoute bootstrap-icons et patch-package, régénère les lockfiles npm et
  actualise la documentation d’installation et d’initialisation MySQL.

Co-authored-by: GPT-5.6 Sol <noreply@openai.com>
2026-08-02 12:09:37 +02:00

9.7 KiB

Movix

Movix

Le 1er site de streaming open source made in France et 100% vibecodé.

React | Vite | TypeScript | Node.js | MySQL | Redis | Socket.IO | Python | Rust

React Vite TypeScript Node.js MySQL Redis Socket.IO Python Rust

Licence : Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) · LICENSE

Movix est un monorepo produit pour une plateforme de streaming communautaire. Le frontend, l'API principale, la WatchParty, les proxies, les outils navigateur et plusieurs briques d'infra vivent dans le même dépôt parce qu'ils évoluent ensemble.

Ce n'est pas un simple duo "frontend + backend". Une feature peut très vite traverser plusieurs couches à la fois : interface React, persistance locale, sync backend, extraction vidéo, proxy Python et parfois extension navigateur.

Ce que contient le repo

Zone Rôle Documentation
src/ Frontend Vite + React + TypeScript Frontend
API/Mainapi/ Backend principal clusterisé Main API
API/watchpartyAPI/ Service temps réel WatchParty WatchParty API
API/proxiesembed/ Proxy aiohttp pour embeds, flux et DRM Proxies Embed
API/miscs/ Micro-service Flask pour certains 403 bypass403
extension/ + userscript/ Outils navigateur Movix Movix OS
app/ App mobile React Native (Android OK, iOS non testé) App mobile
wasm/watchparty-sync/ Moteur Rust/WASM de la Sync Pro WatchParty Sync WASM
cloudflareproxy/ Worker Cloudflare CORS/proxy Cloudflare Proxy

Architecture du monorepo

movix-main/
|-- src/                        # Frontend principal
|-- public/                     # Assets statiques et artefacts WASM publiés
|-- API/
|   |-- Mainapi/                # Backend actif
|   |-- watchpartyAPI/          # Temps réel WatchParty
|   |-- proxiesembed/           # Proxy Python haute charge
|   `-- miscs/                  # Micro-services annexes
|-- extension/                  # Extension Chrome / Firefox
|-- userscript/                 # Variante Tampermonkey
|-- app/                        # App mobile React Native (Android/iOS)
|-- wasm/watchparty-sync/       # Sync Pro en Rust/WASM
|-- cloudflareproxy/            # Worker Cloudflare
|-- functions/                  # Handlers serverless annexes
|-- PreMid/                     # Présence PreMiD
`-- RivestreamCloudflareProxy/  # Variante de worker pour Rivestream

Démarrage rapide

⚠️ L'utilisation de ce code implique le maintien des crédits et l'interdiction stricte de le monétiser (Zéro pub et abonnements). Voir la License complète

Prérequis

  • Node.js 18+ et npm
  • Python 3.10+ pour les services Python
  • MySQL et Redis pour API/Mainapi
  • Rust + wasm-bindgen seulement si tu touches la Sync Pro WASM
  • React Native CLI + Android Studio (et Xcode + CocoaPods sur Mac) seulement si tu touches l'app mobile app/ — iOS n'a pas été testé, voir app/README.md

Installer les dépendances utiles

npm install
cd API/Mainapi
npm install

API/watchpartyAPI/ n'a pas son propre package.json : il consomme les dépendances du node_modules racine.

Configurer les .env avant de lancer quoi que ce soit

Ne saute pas cette étape. Une bonne partie du monorepo dépend des variables d'environnement pour les URLs, la base de données, Redis, les proxys, TMDB, Turnstile et plusieurs intégrations de lecture.

# Frontend
cp .env.example .env

# API principale
cp API/Mainapi/.env.example API/Mainapi/.env

# WatchParty
cp API/watchpartyAPI/.env.example API/watchpartyAPI/.env

# Proxy embed
cp API/proxiesembed/.env.example API/proxiesembed/.env

# bypass403
cp API/miscs/.env.example API/miscs/.env

Initialise ensuite le schéma de l'API principale avant de démarrer les services :

cd API/Mainapi
npm run db:init

Sur une base existante, la commande demande confirmation ; elle en demande une seconde pour les modifications des tables Wrapped, qui peuvent être longues si elles sont volumineuses.

Lancer le minimum utile en local

# Frontend - http://localhost:3000
npm run dev
# Backend principal - http://localhost:25565
cd API/Mainapi
npm run dev
# WatchParty - http://localhost:25566
node API/watchpartyAPI/watchparty.js

Services optionnels selon la zone que tu touches :

# Proxy embed
cd API/proxiesembed
pip install -r requirements.txt
python server.py
# bypass403
cd API/miscs
pip install flask requests python-dotenv
python bypass403.py

Configuration

Les fichiers d'exemple ou de config existants sont déjà dans le repo :

  • Frontend : .env.example
  • API principale : API/Mainapi/.env.example
  • WatchParty : API/watchpartyAPI/.env.example
  • Proxy embed : API/proxiesembed/.env.example
  • bypass403 : API/miscs/.env.example

Les variables frontend les plus importantes sont VITE_MAIN_API, VITE_WATCHPARTY_API, VITE_PROXY_BASE_URL, VITE_API_PROXY_BASE_URL, VITE_PROXIES_EMBED_API et VITE_SITE_URL.

Pour un premier lancement local, configure au minimum :

  • /.env
  • API/Mainapi/.env
  • API/watchpartyAPI/.env

Comment s'orienter vite

  • Feature frontend : commence par src/App.tsx, puis la page cible dans src/pages/.
  • Auth, profils, persistance : regarde src/context/, src/App.tsx, API/Mainapi/routes/authRoutes.js et API/Mainapi/routes/sync.js.
  • Lecture vidéo et proxies : recoupe src/pages/Watch/, les composants player, API/Mainapi/liveTvRoutes.js, API/proxiesembed/ et parfois extension/.
  • WatchParty : vérifie à la fois API/watchpartyAPI/watchparty.js, src/pages/WatchParty*.tsx, src/hooks/useWatchParty.ts, src/utils/watchparty*.ts et src/workers/watchpartySync.worker.ts.
  • Browser tooling : si tu modifies l'extension, compare toujours extension/Chrome/ et extension/Firefox/, puis vérifie si le userscript doit suivre.
  • Sync Rust/WASM : modifie wasm/watchparty-sync/, puis rebuild public/wasm/watchparty-sync/.

Points importants avant de contribuer

  • Le backend actif est API/Mainapi/. Le vieux contenu directement sous API/ n'est plus la référence.
  • Ce monorepo n'utilise pas de workspace tooling : chaque sous-projet garde ses scripts.
  • Une partie importante de l'état produit vit dans localStorage et dans la sync backend. Ne raisonne pas "base de données only".
  • Le lint frontend se lance à la racine avec npm run lint.
  • Il n'y a pas de suite de tests globale fiable pour tout le repo. Vérifie au minimum les scripts touchés et le comportement manuel.

Documentation par module

Licence

Ce projet est distribué sous licence Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0). Le texte complet est disponible dans LICENSE.

Avertissement

Ce projet est fourni uniquement à des fins éducatives, de recherche et de démonstration. Il n'encourage ni ne cautionne une utilisation illégale, le contournement de droits, ou toute violation des lois applicables. Chaque utilisateur est seul responsable de l'usage qu'il en fait.