feat(reels): montage Remotion unifié, aperçu en direct, tests et CI

Montage (étape 3) :
- Nouvelle composition ReelVideo : sous-titres animés mot à mot (3 styles :
  Impact, Surligné, Épuré), logo, effet de fin et fondu, en React
- Le service Python prépare l'image (recadrage, HDR, stabilisation, dernière
  image figée) et la piste son finale (/prepare-reel) ; Remotion compose
- Reels d'images sur les mêmes composants, avec le vrai minutage de la voix
- Police Montserrat embarquée (plus de dépendance à Google Fonts)
- REEL_RENDERER=ffmpeg conserve le rendu FFmpeg, plus rapide, en secours
- Script de pré-bundle réparé (échouait en silence : require en ESM)

Interface (étape 4) :
- Aperçu en direct avec @remotion/player, identique au rendu final ; la voix
  testée cale les sous-titres, sinon minutage estimé
- Choix du style de sous-titres sur les 4 pages Reel
- Vraie progression : étape réelle du rendu, échecs visibles 24 h avec leur
  cause ; fin de la barre simulée et du faux « publié avec succès »

Outillage (étape 5) :
- Tests vitest (minutage identique à Python, validation, sécurité) et
  pytest ; CI GitHub Actions (tsc, tests, build, ruff)
- Captures d'écran, out.mp4 et scripts de test retirés de la racine

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Ze4bs7tpF1KGWUk6ZZSZ4
This commit is contained in:
Claude committed 2026-09-24 14:37:42 +00:00
1 parent 3c6a66bf64
commit 9b66a6dc5a
64 files changed
+2488 -782

No files matched your search

-9
View File
@@ -1,9 +0,0 @@
#!/usr/bin/env node
// Pre-bundle Remotion composition during Docker build.
// This warms up the Webpack cache so the first user render is fast.
const { bundle } = require('@remotion/bundler');
const path = require('path');
bundle({ entryPoint: path.resolve(__dirname, '../client/src/remotion/index.ts') })
.then(loc => console.log('✅ Remotion pre-bundle OK:', loc))
.catch(e => { console.warn('⚠️ Remotion pre-bundle skipped:', e.message); process.exit(0); });
+25
View File
@@ -0,0 +1,25 @@
#!/usr/bin/env node
// Pré-bundle des compositions Remotion pendant le build Docker : le cache
// Webpack est chaud, le premier rendu d'un utilisateur démarre plus vite.
// Même configuration que server/services/reels/remotionRenderer.ts.
import path from "node:path";
import { fileURLToPath } from "node:url";
import { bundle } from "@remotion/bundler";
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
bundle({
entryPoint: path.join(root, "client/src/remotion/index.ts"),
webpackOverride: (config) => ({
...config,
resolve: {
...config.resolve,
alias: { ...(config.resolve?.alias ?? {}), "@shared": path.join(root, "shared") },
},
}),
})
.then((location) => console.log("✅ Remotion pre-bundle OK:", location))
.catch((error) => {
console.warn("⚠️ Remotion pre-bundle skipped:", error.message);
process.exit(0);
});