# 8. Compressa (fichiers) et CinéRadar (films et séries)

## 8.1 Compressa — conversion et compression de fichiers

**Principe** : traiter dans le navigateur tout ce qui peut l'être (confidentialité, rapidité, aucun coût serveur), et n'utiliser le serveur que pour Word ↔ PDF (LibreOffice) et la compression PDF avancée (Ghostscript).

| Catégorie | Outils (pages) | Moteur |
|---|---|---|
| Images | convertisseur (JPG, PNG, WebP, AVIF) + pages JPG→WebP, PNG→WebP, WebP→JPG, PNG→JPG, JPG→AVIF ; compresseur (+ JPG, PNG) ; redimensionner ; recadrer ; filigrane | Canvas, encodeur AVIF WebAssembly (@jsquash/avif), PNG à palette (UPNG) |
| PDF | fusionner, diviser, extraire des pages, organiser (glisser, pivoter, supprimer), pivoter, PDF→JPG/PNG, images→PDF, filigrane, extraire les images, compresser | pdf-lib, pdf.js ; Ghostscript (serveur) si installé |
| Documents | Word→PDF, PDF→Word, CSV↔JSON↔HTML↔TXT | LibreOffice (serveur) si installé, sinon mode navigateur (mammoth, extraction de texte) |
| Autres | créer un ZIP, renommer par lot | fflate |

Fonctionnement commun : zone de dépôt (glisser-déposer, coller, clavier), limites de taille et de nombre, file de traitement avec progression, résultat avec tailles avant/après et pourcentage, comparaison avant/après pour les images, téléchargement unitaire ou ZIP. La zone de dépôt de l'accueil propose les outils adaptés au type de fichier et transmet les fichiers à l'outil choisi sans envoi au serveur.

**Sécurité côté serveur** (`app/Services/Files/FileConverter.php`) :
- type réel vérifié par le contenu (signature PDF, structure DOCX), DOCX avec macros refusés ;
- 25 Mo par fichier, 6 conversions par minute et 60 par jour et par IP, 2 conversions simultanées, délai maximal de 90 s ;
- uniquement depuis le site lui-même (contrôle de l'origine), uniquement si le site publie l'outil ;
- chaque tâche dans un dossier isolé au nom aléatoire, profil LibreOffice dédié, Ghostscript en mode `-dSAFER` ;
- antivirus ClamAV facultatif (`FILES_CLAMSCAN_PATH`) ;
- résultats téléchargeables 30 minutes puis supprimés (`files:cleanup`, toutes les 10 minutes) ; jamais mis en cache.

Mise en service des outils serveur : installer LibreOffice et Ghostscript, puis renseigner `FILES_SOFFICE_PATH` et `FILES_GHOSTSCRIPT_PATH`. Sans eux, les outils concernés basculent automatiquement en mode navigateur et l'indiquent.

**Publicité** : aucune annonce à côté ni à l'intérieur de la zone de traitement (pas d'emplacement « en-tête » sur ce site) ; annonces uniquement dans l'article explicatif, la colonne latérale de l'article et en fin de page.

## 8.2 CinéRadar — films et séries gérés dans le back-office

**Catalogue** : aucune API externe. Les films et séries (titre, titre original, synopsis, accroche, date ou année, durée, genres, pays, langue, réalisation/création, distribution « Nom — Rôle », classification, mots-clés, bande-annonce YouTube, liens « Où regarder », affiche, image de fond, droits de diffusion) se créent dans **Site → Films & séries**. Les séries ont des saisons et des épisodes, chacun pouvant recevoir sa vidéo. Brouillon / en ligne, « À l'affiche » (mis en avant sur l'accueil), compteur de vues.

**Vidéos volumineuses** :
- envoi par morceaux de 4 Mo (`VIDEO_CHUNK_MB`) : aucune limite de taille imposée par le site, seul l'espace disque du serveur compte (vérifié avant l'envoi) ; les limites PHP `upload_max_filesize` / `post_max_size` ne s'appliquent pas au fichier entier ;
- barre de progression, débit, temps restant, pause / reprise, annulation ; reprise automatique après une coupure réseau, et même après fermeture de la page (choisir à nouveau le même fichier) ;
- type réel vérifié à la fin (MP4, WebM, Ogg, MOV) ; fichiers stockés hors du dossier public (`storage/app/private/videos/{site}`), servis par `/video/{title|episode}/{id}` avec requêtes HTTP Range (lecture progressive et déplacement dans la vidéo), uniquement pour les titres publiés du site ;
- remplacer ou supprimer une vidéo supprime l'ancien fichier ; envois abandonnés supprimés après 48 h (`videos:cleanup`, toutes les heures).

En production derrière Nginx, prévoir `client_max_body_size` ≥ taille d'un morceau (ex. 8M) ; pour de gros volumes, un stockage disque dédié. Format conseillé : MP4 (H.264 + AAC) avec l'option « faststart ».

**Pages** : accueil (titre à l'affiche, « À regarder maintenant », ajouts récents, films et séries populaires, mieux notés par les membres), listes (populaires, récents, mieux notés, avec vidéo), pages de genre, découverte multicritère (genre, année, langue, pays, vidéo disponible, tri) et recherche (titres, acteurs, réalisateurs), titres les plus consultés, fiches film/série (lecteur vidéo, synopsis, équipe, distribution, bande-annonce, où regarder, saisons, avis, titres similaires), pages saison (épisodes avec lecteur à la demande), pages des personnes (titres du catalogue où elles apparaissent), sélections éditoriales, actualités et guides, « Ma liste ».

**Fonctions** : favoris et liste « À regarder » enregistrés sur l'appareil, recommandations d'après les genres des favoris, partage, recherche instantanée, comptes membres pour noter et commenter, avis publiés après modération (onglet « Avis »).

**SEO et AdSense** :
- données structurées Movie (durée), TVSeries, TVSeason, Person, ItemList ; note agrégée = celle des membres du site uniquement (au moins 3 avis) ;
- annonces sur une fiche seulement si son synopsis compte au moins 80 mots ou si elle a 3 avis publiés (contenu propre), jamais à côté du lecteur vidéo ; désactivables pour toutes les fiches dans Paramètres → Films et séries ;
- pages de personnes avec un seul titre en `noindex`.

**Droits de diffusion** : ne mettre en ligne que des vidéos dont vous détenez les droits (ou du domaine public) et le renseigner dans le champ « Droits de diffusion » (affiché sous le lecteur). Diffuser une œuvre sans autorisation est illégal et AdSense interdit la monétisation de contenus qui enfreignent les droits d'auteur (suspension du compte). Le catalogue de départ (19 films) ne contient que des informations factuelles et des résumés originaux, sans affiche ni vidéo.
