Édition #6 · 18 août 2026
Le clip doit finir sur la punchline — pas sur le premier point
Mi-août, le chantier n’était plus le cadrage : c’était le moment lui-même. Groq a pris la transcription et la détection. Puis on a vu que les clips s’arrêtaient trop tôt, qu’ils s’entassaient dans les dix premières minutes, et qu’un JSON vide tuait tout le job. Trois couches, un seul ressenti : tu reçois enfin des extraits qui tiennent jusqu’à la révélation.
En une phrase
Upcut cherche maintenant des moments sur toute la source, et recule la fin du clip jusqu’à la révélation — tant que ça tient dans la durée que tu as choisie.
01 — Le coût caché
Whisper coûtait presque tout. GPT presque rien.
Le poste dominant n’était pas « l’IA qui choisit les clips ». C’était la transcription de toute la vidéo. On a basculé Whisper et la détection de moments vers Groq : même job, autre facture. Le rendu ffmpeg, lui, n’a pas bougé — c’est volontaire.
Sauf que changer de modèle, ce n’est pas un find-and-replace. Llama 3.3 a été retiré. Le JSON mode de gpt-oss renvoyait 400. Un tableau `moments: []` abortait le job avant le filet de secours. En prod, ça s’appelait PROCESSING_FAILED sur une VOD tout à fait normale.
- STT : whisper-large-v3-turbo (Groq) à la place de whisper-1
- Chat : gpt-oss, puis Qwen en secours — plus de 404 sur un modèle retiré
- Un JSON vide ou cassé ne tue plus le job : retry, autre modèle, puis fenêtres réparties
→ La génération continue. Tu n’as plus un projet rouge parce que le parseur n’a pas aimé la réponse.
02 — Le premier tiers
Toute la VOD était transcrite. Seules les 10 premières minutes étaient clipées.
Groq transcrivait bien l’heure. Puis le modèle de moments ne voyait qu’un mur de lignes Whisper trop fines — il piochait dans l’intro, et s’arrêtait. Sur une Studio de 40 minutes, les trois clips sortaient du premier bloc. Le reste de la conversation n’existait pas.
On compacte maintenant les lignes en blocs de quelques secondes, et on impose début / milieu / fin dès que la source dépasse ~12 minutes. Si la couverture reste trop basse, une seconde passe force l’étalement.
→ Une VOD longue donne des clips dans l’intro et plus loin. Plus un trio coincé à 8:00.
03 — La coupe
Le premier point n’est pas la punchline.
« Dernier mot ? Non. » — puis la réponse. L’ancien cut tombait sur le point d’interrogation. Le clip était grammaticalement fini. Il était narrativement mort.
Après la détection, un passage extra lit ce qui vient après la coupe. Si la révélation est encore dans ta durée max, on recule la fin jusqu’à là. Et la durée min n’est plus un parking : un 60–90 vise le haut de la plage quand l’idée continue, au lieu de s’arrêter à 1:01 par politesse.
- Un seul appel de refine pour tout le lot (timeout 20 s) — pas un aller-retour par clip
- Whisper bilingue : une intro EN sur une source FR ne colonise plus tout le sous-titrage
- Gros upload et « Refaire des clips » réutilisent le fichier déjà là
→ Le fichier s’arrête quand l’idée s’arrête. Pas au premier silence poli.
04 — Ce que tu ressens
Partager un dossier. Reprendre le lien collé.
Sur un projet terminé : Partager copie un lien `/s/…`. La personne en face crée un compte (ou se connecte), revoit les clips, télécharge le lot. Plus d’envoi pièce par pièce.
Et si tu colles l’URL sur la landing avant d’être connecté : le lien survit à Google, à l’email, au va-et-vient login / register. Le modal d’options s’ouvre avec la même vidéo — y compris l’alerte crédits si la source est trop longue pour le solde.
→ Moins de friction autour du clip. Le travail, c’est encore le moment — pas le lien perdu après signup.
Chronologie express
- 16/08Whisper + détection de moments : OpenAI → Groq
- 16/08Moments étalés sur toute la VOD (plus seulement l’intro)
- 16/08Refine de fin : la coupe suit la punchline, dans la durée max
- 16/08Landing : l’URL collée survit à l’inscription
- 17/08Whisper bilingue, fallback Groq, reuse des uploads
- 18/08JSON Groq cassé / moments vides → retry au lieu d’un job mort
- 18/08Lien de partage d’un dossier de clips (compte requis)
Pour les curieux
Sous le capot, sans jargon inutile
detectMoments compacte les lignes Whisper, impose des bins début/milieu/fin, retry JSON sans json_object, puis Qwen, puis fenêtres heuristiques — plus d’abort sur moments:[].
refine-end : un appel Groq pour le lot, borné par duration_max. Whisper : chunks auto + gap-fill après intro EN.
Partage : route /s/{token}, hors robots.txt. Auth conserve ?next= pour ne pas perdre le dossier après verify-email.
Prêt à générer ?
Colle un lien YouTube ou Twitch — Gaming, talk ou podcast, les clips suivent ce que tu as lancé.