Application web de création de bandes rythmo pour le doublage vidéo. Écrire ses répliques, les placer à l'image près, les rejouer sous la vidéo — dans le navigateur, sans rien installer.
Août 2025 - Actuellement (13 mois, 800+ commits)
Projet personnel, développé et hébergé en autonomie
Conception, développement full-stack, infrastructure et déploiement
La bande rythmo, c'est ce ruban de texte qui défile sous l'image en studio de doublage et sur lequel le comédien cale sa voix. C'est l'outil central du métier, et pourtant il reste enfermé dans des logiciels de bureau lourds, chers, souvent réservés aux studios installés. Toute une communauté — le fandub, les écoles, les traducteurs — travaille avec des moyens détournés faute de mieux.
AgfaRythmo répond à ce manque : on importe une vidéo, on écrit les répliques, on les place à l'image près sur une à dix lignes, on attribue des personnages colorés, et on rejoue le tout parfaitement synchronisé sous la vidéo. Le tout dans un navigateur, à plusieurs en temps réel, sur ordinateur comme sur tablette. Un pipeline d'intelligence artificielle entièrement auto-hébergé peut même extraire automatiquement les dialogues d'une vidéo : séparation des voix, transcription, identification des personnages, création des timecodes.
C'est mon projet le plus ambitieux : treize mois de développement en continu, plus de 800 commits, entièrement seul — du composant Vue jusqu'à l'administration du serveur. J'y ai touché à tout : conception produit, back-end Laravel, interface, intégration de modèles d'IA, orchestration Docker, RGPD, et même le démarchage des premiers utilisateurs.
Bande de une à dix lignes défilant en synchronisation parfaite avec la vidéo, avec placement des répliques à l'image près, séparateurs de texte, personnages aux couleurs personnalisables et annulation illimitée. C'est le cœur de l'application, celui sur lequel s'est concentré l'essentiel du travail de précision.
Un pipeline en six étapes qui isole la voix de la musique, transcrit la parole en douze langues, identifie qui parle et pose les timecodes tout seul. Whisper, Demucs et la diarisation tournent sur mon propre serveur : aucune donnée utilisateur ne part chez un tiers.
Détection acoustique des débuts de parole et des changements de plan, affichés comme des aimants sur la bande. Ils ne créent rien et ne déplacent rien : l'adaptateur garde la main, il gagne seulement en précision et en vitesse de calage.
Invitations par e-mail avec trois niveaux de permissions, et surtout des curseurs de présence : on voit en direct où travaillent les autres sur la bande, avec la possibilité de se téléporter à leur position. Le tout sans serveur temps réel, par un polling maîtrisé.
Export d'un MP4 avec la bande incrustée et filigrane personnalisable, export de sous-titres par personnage, et un format de sauvegarde propriétaire qui embarque le projet complet — vidéo et audios compris — pour le réimporter à l'identique.
Traduction des répliques via plusieurs moteurs interchangeables, dont un fonctionnant entièrement hors-ligne. Pratique pour dégrossir une adaptation depuis une version originale avant de la retravailler à la main.
L'utilisateur cale sa bande au centième de seconde dans le navigateur. Si l'export vidéo est généré par un rendu serveur écrit séparément, le moindre écart de police, d'espacement ou de synchronisation trahit son travail — et il faut maintenir deux fois la même logique d'affichage, avec la certitude qu'elles finiront par diverger.
Plutôt que de réimplémenter le rendu, j'ai fait capturer le vrai composant de l'application. Le serveur ouvre l'interface dans un navigateur sans interface graphique, la fait avancer image par image et envoie chaque capture à FFmpeg, qui remonte le tout avec l'audio d'origine. Zéro duplication : ce qui est à l'écran est exactement ce qui est exporté, définitivement.
L'extraction complète des dialogues tourne à environ deux fois le temps réel : quarante-cinq minutes de calcul pour un épisode de vingt-deux minutes, avec des bornes précises à trois dixièmes de seconde près seulement. Impossible de la lancer systématiquement, et pas assez précise pour du calage fin.
J'ai séparé les deux besoins. Pour le calage, une détection acoustique dédiée, bien plus légère, repère les débuts de parole à environ trente millisecondes près et tourne à quatre-vingt-dix fois le temps réel — un rapport de un à quarante-cinq, ce qui permet de la lancer dès la création du projet. Elle reste volontairement non destructive : elle propose des repères, elle ne touche jamais au travail de l'utilisateur. Cette garantie technique est devenue mon meilleur argument face à la crainte, bien réelle dans le milieu, d'être dépossédé par l'IA.
Sur tablette et sur téléphone, la bande pouvait se figer définitivement pendant que la vidéo continuait, sans autre solution que de recharger la page. Un défaut rédhibitoire pour un outil censé fonctionner sur tout appareil, et difficile à diagnostiquer car il ne se produisait jamais sur ma machine de développement.
J'ai d'abord ajouté un diagnostic pour rendre ces gels visibles au lieu de les subir. La cause était un coût de calcul trop élevé à chaque image : j'ai mis en cache les mesures de texte pour supprimer les recalculs de mise en page, remplacé le rendu réactif du défilement par une manipulation directe de la position, et regroupé les décalages de synchronisation au même endroit. En parallèle, l'éditeur travaille désormais sur une version allégée de la vidéo pour rendre les déplacements instantanés, sans dégrader la qualité de l'export final.
C'est le projet qui m'a le plus fait progresser, parce que personne n'était là pour prendre les décisions à ma place. Chaque choix technique, chaque abandon de fonctionnalité et chaque incident en production ont été les miens, du premier commit jusqu'à la mise en ligne.