film-qa
Vous vérifiez des images et des chiffres, pas des intentions. Un PASS nécessite une preuve : un chemin de fichier que vous avez ouvert ou un nombre que vous avez mesuré.
Tout le reste est NON VÉRIFIÉ : <raison>. N'écrivez jamais PASS pour quelque chose que vous n'avez pas regardé ou mesuré.
Chemins (relatifs à launch-video/, ou studio/ dans le dépôt launchfilm) : source du film films/<slug>/ (film.json,
STORYBOARD.md, BRIEF.md), rendus out/<slug>/, QA qa/<slug>/ (la CLI écrit report.md ; vous écrivez QA.md à côté).
Indicateurs de la CLI exacts : npx launchfilm <cmd> --help. Commandes avec syntaxe testée : references/commands.md.
Procédure
- Passe automatique.
npx launchfilm qa <slug>→ lisez d'abordqa/<slug>/report.md(planches, ffprobe, volume sonore, vérifications automatiques). Copiez ses nombres mesurés dans QA.md comme preuve ; ne remesurez pas ce qu'il a mesuré. - Planches. Ouvrez chaque planche contact que le rapport liste (ou
npx launchfilm sheet <slug>). Lisez chaque cellule. Listez les fichiers que vous avez ouverts dans QA.md (preuve T12). - Arrêts sur image.
npx launchfilm still <slug> <t> --preset <id>pour chaque préréglage que le film exporte, à : chaque transition de plan- 6 images, chaque début de texte + maintien/2, image 0, la dernière image, et chaque intervalle que la détection d'image figée ou d'image noire signale.
Plus un arrêt sur image à
--scale 0.25(480×270 pour 16:9) sur l'image du texte principal : l'aperçu de la timeline X. Lisez chaque PNG.
- 6 images, chaque début de texte + maintien/2, image 0, la dernière image, et chaque intervalle que la détection d'image figée ou d'image noire signale.
Plus un arrêt sur image à
- Mesurez ce que le rapport n'a pas fait : volume sonore, crête vraie, images noires, intervalles figés, temps de coupure par rapport au rythme, contraste derrière le texte, zones de sécurité, longueurs des lignes de sous-titres. Commandes dans references/commands.md.
- Vérifications bloquantes T1–T12 ci-dessous, puis vérifications de livraison D1–D16. Chacune obtient PASS / ÉCHEC / NON VÉRIFIÉ + preuve + règle.
- Rédigez
qa/<slug>/QA.mdà partir de references/qa-template.md. - Boucle de correction. Tout ÉCHEC : transmettez la constatation à scene-build ou sound avec les numéros d'image, refaites le rendu seulement de la plage concernée
(
npx remotion render … --frames=<a>-<b>ou l'équivalent CLI), revérifiez ces éléments. Maximum 2 boucles ; puis signalez les ÉCHECs restants à l'utilisateur avec les arrêts sur image joints. Ne jamais rétrograder un ÉCHEC en PASS sans nouvelle preuve.
Vérifications bloquantes : les 12 indices (métier/00)
| Id | Condition de passage | Preuve |
|---|---|---|
| T1 statique | aucun intervalle figé ≥ 0,6 s sauf le temps de stabilisation du titre final (≤ 3 s) ; chaque intervalle signalé vérifié par des arrêts sur image à son début et sa fin montrant un dérive ou un mouvement | sortie freezedetect + 2 arrêts sur image par intervalle |
| T2 easing par défaut | grep G1 (scene-build) vide dans films/<slug> ; aucune transition CSS | sortie grep |
| T3 tout à la fois | chaque groupe de ≥ 3 éléments frères entre de manière décalée (états partiels visibles dans une cellule de planche ou décalage ≥ 1 image dans le code) ; entrée du groupe ≤ 24 images | références de cellules de planche ou lignes de code |
| T4 une seule vitesse | film > 20 s a ≥ 1 rupture de rythme (silence, coupure brutale au noir, changement de palette, maintien ≥ 2× la durée médiane du plan) ; mode lancement : chaque coupure à ±2 images d'un temps fort | limites film.json vs beats.json ; coupures détectées |
| T5 son | chaque événement visuel de film.json a un effet sonore ou est couvert par la voix off / la musique ; la musique baisse sous la voix off ; silence réel là où prévu | nombre d'événements avec/sans son ; volume sonore d'une fenêtre voix off vs une fenêtre uniquement musicale |
| T6 texte comme étiquette | texte principal ≥ 8 % de la hauteur de l'image quand le texte est le message (déclarations 10 %) ; chaque texte se maintient ≥ 0,2 × (mots + 1) s ; ≤ 3 lignes ; sous-titres ≤ 2 lignes | tableau par élément |
| T7 aspect plat | mode lancement : grain + vignette présents ; un traitement nommé par section ; mode produit : filets de cheveux, ombres douces ; pas d'effet de bande dans le dégradé le plus sombre de l'arrêt sur image mp4 | grep + arrêt sur image du mp4 |
| T8 mise en page web | un point focal par arrêt sur image ; aucun paragraphe > 3 lignes ; pas de puces ; chrome de l'interface utilisateur uniquement là où le chrome est le point | arrêts sur image |
| T9 stock générique | chaque clip de métrage dans films/<slug>/footage/SOURCES.md avec source + licence ; clips de stock gradés et coupés ≤ 1,5 s | SOURCES.md + arrêts sur image |
| T10 transitions décoratives | transitions ⊂ vocabulaire ; transitions non-coupure ≤ 1 par 5 s ; blur-dissolve ≤ 12 images | film.json |
| T11 modèle avant histoire | STORYBOARD.md a approved: ; image 0 pas noire et différente de l'arrêt sur image à 0,5 s ; catégorie de produit claire à 1,5 s (x, li) / 1 s (reel) ; récompense après le problème ; ≥ 2 s calme sur la surface de la marque à la fin | arrêts sur image 0, 0,5, 1,5 s, dernières 2 s |
| T12 jamais regardé | cette QA : chaque planche et arrêt sur image listé comme ouvert | liste des fichiers dans QA.md |
Tout ÉCHEC dans T1–T12 bloque le rendu pour livraison et le packaging.
Vérifications de livraison (par préréglage ; numérotation = métier/08#vérifications-de-livraison)
Valeurs depuis harness.config.json presets, sinon métier/10#presets. Utilisez ces identifiants exactement ; métier/08 et QA.md les partagent.
| Id | Condition de passage |
|---|---|
| D1 | vidéo h264, profil High (ffprobe de Remotion affiche 100), pix_fmt yuv420p, conteneur mp4 |
| D2 | largeur × hauteur exactement celle du préréglage |
| D3 | fps constant = fps de la composition (r_frame_rate = avg_frame_rate) |
| D4 | durée = film.json ±1 image, et dans la plage de longueur du préréglage (x-16x9 ≤ 140 s, reel-9x16 ≤ 90 s) |
| D5 | audio aac LC (ffprobe de Remotion affiche 1), 48000 Hz, 2 canaux, ~192 kbps ; hero-loop : aucun flux audio |
| D6 | volume sonore intégré −14 ±1 LUFS ; crête vraie ≤ −1,5 dBTP ; voix off −16…−14 LUFS là où mesurable |
| D7 | moov avant mdat (faststart) |
| D8 | affiche = image 0 de ce préréglage existe, même taille, pas noire (YAVG > 20), montre l'accroche |
| D9 | SRT à côté du rendu pour chaque préréglage avec voix off ; mêmes phrases que les sous-titres ; HH:MM:SS,mmm ; ≤ 2 lignes ; ≥ 0,8 s chacune ; heures ±2 images |
| D10 | rien d'important (sous-titres, texte, logo, l'interface utilisée) en dehors de la zone de sécurité du préréglage (arrêt sur image en superposition) |
| D11 | sous-titres incrustés sur chaque préréglage avec voix off (hero-loop : aucun, ph-16x9 selon sa configuration) ; ≤ 2 lignes ; ≤ 42 caractères/ligne (16:9), ≤ 32 (4:5, 1:1, 9:16) ; jamais au-dessus de l'élément changeant ; contraste ≥ 4,5:1 pour les sous-titres et le texte sur les images, ≥ 3:1 accent sur fond ; lisible sur les arrêts sur image à 480 px (16:9) et 360 px (4:5, 9:16) de large |
| D12 | listes d'images figées et noires correspondent aux maintiens conçus et aux temps forts noirs uniquement (listés dans film.json ou STORYBOARD) |
| D13 | balises BT.709 ou HD non balisé ; le dégradé le plus sombre ne montre aucun nouvel effet de bande dans l'arrêt sur image mp4 par rapport au PNG |
| D14 | taille de fichier sous la limite : x ≤ 512 Mo, héros README ≤ 10 Mo |
| D15 | out/<slug>/credits.txt liste chaque actif CC BY avec sa ligne de crédit ; films/<slug>/footage/SOURCES.md complet |
| D16 | hero-loop uniquement : image N égale image 0 ; un fichier bouclé 3× ne montre aucun saut aux raccords |
Lisibilité du texte dans le temps
Pour chaque élément de texte dans film.json (déclarations, sous-titres, étiquettes, texte d'interface que la voix off pointe) : mots, images d'entrée/sortie, maintien = (sortie − entrée) / fps, requis = 0,2 × (mots + 1) s. Vérifiez également sur l'arrêt sur image 480×270 que la ligne principale est toujours lisible (lettres distinguables). Une ligne par élément dans QA.md.
Règles pour le rapport
- Chaque PASS cite une preuve :
qa/<slug>/stills/x-16x9-12.30.png,I = −14,2 LUFS,grep G1 : 0 lignes. - Les nombres mesurés conservent les unités et l'outil qui les a produits (
system ffmpeg 8.1 ebur128ouremotion ffmpeg loudnorm). Le ffmpeg intégré de Remotion manqueebur128,signalstats,freezedetect,tile,drawboxet la sortie rawvideo : utilisez un ffmpeg système pour ceux-ci et mentionnez-le ; s'il n'en existe pas, ces éléments sont NON VÉRIFIÉS. - Un ÉCHEC nomme la plage d'images, la règle (
métier/NN#ancreouT#/D#) et la correction proposée. - Le bloc de résumé dit PRÊT seulement lorsque T1–T12 et D1–D16 sont tous PASS (D16 uniquement pour hero-loop) (NON VÉRIFIÉ compte comme non prêt, avec raison).