mirror of
https://github.com/R0m1k3/Socialflow.git
synced 2026-10-21 22:18:12 +02:00
feat: Implement Remotion video rendering API with TTS, word timings, and Docker pre-bundling.
This commit is contained in:
1 parent
d98d43cd06
commit
e472e05a3b
3 files changed
+33
-5
No files matched your search
+8
-1
@@ -63,7 +63,14 @@ ENV NODE_OPTIONS="--max-old-space-size=4096"
|
|||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
# Nettoyer les fichiers inutiles pour réduire la taille
|
# Nettoyer les fichiers inutiles pour réduire la taille
|
||||||
RUN rm -rf client node_modules/.cache
|
# On garde client/src/remotion car le serveur en a besoin au runtime pour le bundling
|
||||||
|
RUN rm -rf client/node_modules \
|
||||||
|
client/.vite \
|
||||||
|
node_modules/.cache \
|
||||||
|
/tmp/remotion-*
|
||||||
|
|
||||||
|
# Pré-bundler la composition Remotion pendant le build (speedup au premier rendu)
|
||||||
|
RUN node scripts/prebundle-remotion.js || true
|
||||||
|
|
||||||
# Exposer le port de l'application
|
# Exposer le port de l'application
|
||||||
EXPOSE 5555
|
EXPOSE 5555
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#!/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); });
|
||||||
@@ -23,6 +23,20 @@ const storage = multer.diskStorage({
|
|||||||
|
|
||||||
const upload = multer({ storage });
|
const upload = multer({ storage });
|
||||||
|
|
||||||
|
/** Cached Remotion bundle URL — only bundle once per process lifecycle */
|
||||||
|
let remotionBundleCache: string | null = null;
|
||||||
|
|
||||||
|
async function getBundle(): Promise<string> {
|
||||||
|
if (remotionBundleCache) return remotionBundleCache;
|
||||||
|
// Resolve relative to this file so it works in Docker and locally
|
||||||
|
// __dirname = server/routes, so ../.. → project root → client/src/remotion/index.ts
|
||||||
|
const entryPoint = path.resolve(__dirname, "../../client/src/remotion/index.ts");
|
||||||
|
console.log("📦 Bundling Remotion from:", entryPoint);
|
||||||
|
remotionBundleCache = await bundle({ entryPoint });
|
||||||
|
console.log("📦 Bundle cached at:", remotionBundleCache);
|
||||||
|
return remotionBundleCache;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Strips hashtags and emojis from text for TTS synthesis.
|
* Strips hashtags and emojis from text for TTS synthesis.
|
||||||
* Visual display keeps the full text.
|
* Visual display keeps the full text.
|
||||||
@@ -138,10 +152,8 @@ remotionRouter.post("/render", upload.array("images", 4), async (req, res) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("🎬 Bundling Remotion project...");
|
console.log("🎬 Getting Remotion bundle (cached)...");
|
||||||
const bundleLocation = await bundle({
|
const bundleLocation = await getBundle();
|
||||||
entryPoint: path.resolve(process.cwd(), "client/src/remotion/index.ts"),
|
|
||||||
});
|
|
||||||
|
|
||||||
const inputProps = { images: imageUrls, overlayText, audioUrl, wordTimings };
|
const inputProps = { images: imageUrls, overlayText, audioUrl, wordTimings };
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user