AgfaRythmo - Portfolio Martin Parizet
Retour aux projets

logo AgfaRythmo

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.

Détails du projet

Période

Août 2025 - Actuellement (13 mois, 800+ commits)

Client/Contexte

Projet personnel, développé et hébergé en autonomie

Mon rôle

Conception, développement full-stack, infrastructure et déploiement

Le projet

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.

Fonctionnalités

Éditeur de bande rythmo

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.

Extraction automatique des dialogues

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.

Repères de parole et changements de plan

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.

Collaboration en temps réel

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 vidéo et sauvegarde

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 automatique

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.

Défis & Solutions

Défi 1: Garantir que la vidéo exportée soit identique à l'aperçu

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.

Solution:

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.

Défi 2: Un pipeline d'IA trop lent pour être utilisable

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.

Solution:

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.

Défi 3: La bande se figeait sur mobile

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.

Solution:

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.

Ce que j'ai appris

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.

Compétences techniques

  • Développement d'une application Vue 3 et TypeScript à grande échelle, avec plus d'une centaine de composants
  • Conception d'une API Laravel avec traitements longs en arrière-plan et files d'attente
  • Intégration de modèles d'intelligence artificielle en local, sous forte contrainte de mémoire
  • Optimisation fine des performances d'affichage : mise en cache, suppression des recalculs de mise en page, mesure avant correction
  • Administration d'un serveur de A à Z : Docker, reverse proxy, HTTPS, sauvegardes, déploiement automatisé avec mode maintenance
  • Application concrète du RGPD : consentement, export et suppression des données, purge automatique

Compétences transversales

  • Tenir un projet seul sur treize mois, en gardant un rythme de livraison régulier
  • Savoir supprimer une fonctionnalité mal conçue plutôt que s'acharner à la corriger
  • Rédiger des notes de version compréhensibles par des utilisateurs non techniques
  • Aller au contact d'une communauté de métier, écouter ses objections et adapter le produit en conséquence
  • Comprendre un métier que je ne pratique pas, pour concevoir un outil que ses professionnels acceptent d'utiliser
Voir tous mes projets