From 23abe41903865c2eb395c7ff34270e1943e5801f Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Thu, 22 Jan 2026 16:20:56 +0100 Subject: [PATCH] =?UTF-8?q?fix=20tts=20and=20texte=20on=20vid=C3=A9o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/pages/new-reel.tsx | 13 +++++++++++++ ffmpeg-service/main.py | 4 +++- server/routes/reels.ts | 4 ++++ server/services/ffmpeg.ts | 6 ++++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/client/src/pages/new-reel.tsx b/client/src/pages/new-reel.tsx index df19abb..108be03 100644 --- a/client/src/pages/new-reel.tsx +++ b/client/src/pages/new-reel.tsx @@ -66,6 +66,7 @@ export default function NewReel() { const [musicVolume, setMusicVolume] = useState([25]); const [ttsEnabled, setTtsEnabled] = useState(false); const [ttsVoice, setTtsVoice] = useState("female"); + const [drawText, setDrawText] = useState(true); // État audio preview const [isPlaying, setIsPlaying] = useState(null); @@ -310,6 +311,7 @@ export default function NewReel() { musicVolume: musicVolume[0] / 100, ttsEnabled, ttsVoice, + drawText, }); }; @@ -697,6 +699,17 @@ export default function NewReel() { rows={4} /> +
+ + +
+
str: @@ -155,7 +156,8 @@ async def process_reel(request: ReelRequest, x_api_key: str = Header(None)): # Text Overlay # If TTS is enabled, we use the generated VTT subtitles for perfect sync # If not, we use the standard drawtext - if request.text: + # Only apply if draw_text is True + if request.text and request.draw_text: if has_tts: # Use subtitles filter # Force style to look like TikTok/Reels text (Bottom center, white, black box) diff --git a/server/routes/reels.ts b/server/routes/reels.ts index b2f432d..1d3b013 100644 --- a/server/routes/reels.ts +++ b/server/routes/reels.ts @@ -187,6 +187,7 @@ reelsRouter.post('/reels/preview', async (req: Request, res: Response) => { wordDuration = 0.6, fontSize = 60, musicVolume = 0.25, + drawText = true, } = req.body; // Récupérer le média vidéo @@ -217,6 +218,7 @@ reelsRouter.post('/reels/preview', async (req: Request, res: Response) => { wordDuration, fontSize, musicVolume, + drawText, }); if (!result.success) { @@ -255,6 +257,7 @@ reelsRouter.post('/reels', async (req: Request, res: Response) => { wordDuration = 0.6, fontSize = 60, musicVolume = 0.25, + drawText = true, } = req.body; // Validation @@ -302,6 +305,7 @@ reelsRouter.post('/reels', async (req: Request, res: Response) => { wordDuration, fontSize, musicVolume, + drawText, }); if (!ffmpegResult.success || !ffmpegResult.videoBase64) { diff --git a/server/services/ffmpeg.ts b/server/services/ffmpeg.ts index 1c34491..28d1ea4 100644 --- a/server/services/ffmpeg.ts +++ b/server/services/ffmpeg.ts @@ -16,6 +16,7 @@ interface FFmpegReelRequest { word_duration?: number; // Durée par mot (default: 0.6s) font_size?: number; // Taille police (default: 60) music_volume?: number; // Volume musique (default: 0.25) + draw_text?: boolean; // Dessiner le texte sur la vidéo (default: true) } interface FFmpegReelResponse { @@ -69,6 +70,7 @@ export class FFmpegService { wordDuration?: number; fontSize?: number; musicVolume?: number; + drawText?: boolean; } = {} ): Promise<{ success: boolean; videoBase64?: string; duration?: number; error?: string }> { const config = this.ensureConfigured(); @@ -83,6 +85,7 @@ export class FFmpegService { word_duration: options.wordDuration ?? 0.6, font_size: options.fontSize ?? 60, music_volume: options.musicVolume ?? 0.25, + draw_text: options.drawText ?? true, }; // Remove undefined values @@ -98,6 +101,7 @@ export class FFmpegService { hasMusicId: !!options.musicId, hasMusicUrl: !!options.musicUrl, hasTTS: options.ttsEnabled, + drawText: options.drawText, }); try { @@ -159,6 +163,7 @@ export class FFmpegService { wordDuration?: number; fontSize?: number; musicVolume?: number; + drawText?: boolean; } = {} ): Promise<{ success: boolean; videoBase64?: string; duration?: number; error?: string }> { const config = this.ensureConfigured(); @@ -173,6 +178,7 @@ export class FFmpegService { word_duration: options.wordDuration ?? 0.6, font_size: options.fontSize ?? 60, music_volume: options.musicVolume ?? 0.25, + draw_text: options.drawText ?? true, }; // Remove undefined values