Darkwood Blog Blog
  • Articles
  • Auto
fr
  • de
  • en
Connexion
  • Blog
  • Articles
  • Auto

⬆️ Flowvox update : Symfony devient une plateforme d’agents vocaux temps réel

le 17 mai 2026

En février 2026, j’avais publié un premier prototype expérimental autour de la transcription vocale en PHP avec Whisper.cpp.

https://blog.darkwood.com/article/i-m-building-a-dictation-engine-in-php-flow-symfony-whisper-cpp

L’objectif était simple :

enregistrer sa voix, la retranscrire localement, puis exporter le résultat.

Trois mois plus tard, le projet a énormément évolué.

Flowvox n’est plus seulement un POC console.

C’est désormais une plateforme de workers vocaux temps réel construite avec Symfony 8, Messenger, Mercure, Symfony UX, OpenAI Realtime et Hotwire Native.

Pourquoi cette mise à jour maintenant ?

La raison est très simple : OpenAI vient de faire évoluer massivement son API audio temps réel.

Dans leur démonstration récente, plusieurs nouveautés ont été présentées :

  • traduction multilingue temps réel
  • transcription fluide en streaming
  • agents vocaux capables d’appeler des tools
  • raisonnement en arrière-plan
  • conservation du contexte conversationnel.

Ce n’est plus simplement de la reconnaissance vocale.

La voix devient une interface programmable.

Et c’est précisément la direction dans laquelle Flowvox évolue.

Le prototype initial : Whisper.cpp + terminal

La première version de Flowvox était extrêmement minimaliste.

Architecture :

Microphone
→ ffmpeg
→ whisper.cpp
→ transcription locale

Le système fonctionnait entièrement en ligne de commande :

php bin/console voice:start
php bin/console voice:stop
php bin/console voice:worker

Il n’y avait :

  • aucune UI
  • aucun temps réel
  • aucune orchestration distribuée
  • aucune notion de session.

L’objectif était uniquement de valider qu’il était possible de faire de la transcription locale en PHP avec Whisper.cpp.

Passage à une architecture distribuée

La nouvelle version change complètement de philosophie.

Le cœur du système repose maintenant sur :

  • Symfony Messenger
  • darkwood/flow
  • Mercure
  • Doctrine
  • Symfony UX
  • providers de transcription interchangeables.

Architecture simplifiée :

flowchart LR
    UI["Symfony UX"]
    MQ["Messenger"]
    W["Voice Worker"]
    F["Flow Pipeline"]
    OAI["OpenAI Realtime"]
    WC["Whisper.cpp"]
    M["Mercure"]

    UI --> MQ
    MQ --> W
    W --> F
    F --> WC
    F --> OAI
    W --> M
    M --> UI

Le point important :

le worker n’est pas l’interface.

L’UI ne fait que piloter des workers vocaux indépendants.

Chaque session possède sa propre queue Messenger :

voice_demo
voice_mobile
voice_conference
voice_stream

Cela permet d’avoir :

  • plusieurs workers
  • plusieurs appareils
  • plusieurs sessions simultanées
  • une architecture distribuée.

Flow orchestration

Le pipeline repose toujours sur Darkwood Flow.

Trois étapes principales :

Étape Rôle
InputProviderFlow Lecture des événements START / STOP
RecorderFlow Enregistrement audio
TranscribeFlow Transcription

Le worker reste long-running et écoute les événements Messenger.

Lorsqu’un START est reçu :

  1. le worker démarre l’enregistrement
  2. ffmpeg capture l’audio
  3. la session est suivie
  4. les événements sont publiés via Mercure.

Lorsqu’un STOP est reçu :

  1. le fichier WAV est finalisé
  2. la transcription démarre
  3. l’UI reçoit les mises à jour.

Symfony UX + Mercure : le temps réel

Une des plus grosses évolutions du projet est l’arrivée d’une vraie interface web temps réel.

Stack utilisée :

  • Twig
  • Symfony UX
  • Turbo
  • Stimulus
  • Mercure.

Le dashboard permet maintenant :

  • de voir les workers actifs
  • de démarrer/arrêter une session
  • de suivre les événements live
  • d’afficher les transcriptions
  • d’accéder à l’historique.

Architecture temps réel :

sequenceDiagram
    participant Worker
    participant Mercure
    participant Browser

    Worker->>Mercure: publish event
    Mercure->>Browser: live update
    Browser->>UI: refresh transcript

L’intérêt est énorme :

Symfony peut maintenant faire du temps réel moderne sans React ni frontend séparé.

Providers de transcription

Une autre évolution importante est l’introduction d’une couche DDD avec providers interchangeables.

Flowvox peut maintenant fonctionner avec plusieurs moteurs :

Provider Type
whisper_cpp Local
whisper_cpp_stream Local realtime
openai_batch Cloud batch
openai_realtime_whisper Cloud realtime

La sélection se fait via une variable d’environnement :

FLOWVOX_TRANSCRIPTION_PROVIDER=

Le moteur peut changer.

L’UX reste identique.

OpenAI Realtime Whisper

C’est probablement la nouveauté la plus importante.

Avant :

START
→ parler
→ STOP
→ transcription

Maintenant :

START
→ streaming audio
→ transcription live
→ partials
→ UI temps réel

Le fonctionnement :

flowchart LR
    MIC["Micro"]
    FFMPEG["ffmpeg"]
    WS["WebSocket OpenAI"]
    WORKER["Worker"]
    MERCURE["Mercure"]
    UI["Symfony UX"]

    MIC --> FFMPEG
    FFMPEG --> WS
    WS --> WORKER
    WORKER --> MERCURE
    MERCURE --> UI

Le worker envoie les chunks audio à OpenAI Realtime via WebSocket.

Le modèle retourne des transcriptions partielles.

Le worker publie ensuite ces événements vers Mercure.

Et Symfony UX met à jour l’interface en direct.

Traduction multilingue temps réel

OpenAI introduit aussi GPT Realtime Translate.

Cela permet :

  • de parler en français
  • de traduire en anglais
  • ou même de changer dynamiquement de langue pendant la conversation.

Le modèle suit la structure de la phrase et attend parfois les verbes avant de traduire, ce qui rend le résultat beaucoup plus naturel.

C’est extrêmement intéressant pour :

  • conférences
  • podcasts
  • support client
  • éducation
  • médias.

Symfony UX Native + iOS

Autre grosse évolution : l’intégration native mobile.

Flowvox utilise maintenant :

composer require symfony/ux-native

L’idée est de conserver :

  • Twig
  • Symfony UX
  • Turbo
  • Stimulus

tout en utilisant un shell mobile natif basé sur Hotwire Native.

Architecture :

flowchart LR
    Twig --> Turbo
    Turbo --> WebView
    WebView --> SwiftUI
    Stimulus --> NativeBridge

L’application iOS repose sur une WebView connectée au serveur Symfony local.

Le résultat :

  • même application
  • même backend
  • même UI
  • version web + version native.

Darkwood Navi : traçabilité des workflows

Flowvox intègre aussi Darkwood Navi.

L’objectif :

  • enregistrer les événements
  • suivre les exécutions
  • tracer les workflows
  • rendre les traitements reproductibles.

Cela prépare surtout les prochaines étapes :

  • agents vocaux
  • tool calling
  • workflows déclaratifs
  • orchestration IA.

Vision long terme

Flowvox n’est plus seulement un moteur de transcription.

La direction devient beaucoup plus ambitieuse :

une plateforme vocale programmable pour Symfony.

Les prochaines étapes :

  • GPT Realtime Translate
  • agents vocaux
  • tool calling
  • orchestration Flow
  • workflows Navi
  • intégration Uniflow
  • automation pilotée par la voix.

L’objectif n’est plus simplement :

“parler à son application”.

Mais plutôt :

“avoir une application qui réagit, raisonne et agit en temps réel à travers la voix”.

Conclusion

En quelques mois, Flowvox est passé :

d’un POC terminal Whisper.cpp
→ à une plateforme vocale temps réel Symfony

Avec :

  • workers distribués
  • orchestration Flow
  • Symfony UX
  • Mercure
  • OpenAI Realtime
  • Hotwire Native
  • providers interchangeables
  • traçabilité Navi.

La voix devient progressivement une interface programmable.

Et je pense que Symfony possède aujourd’hui toutes les briques nécessaires pour devenir une excellente plateforme pour ce type de systèmes.

Flowvox continue d’évoluer comme terrain d’expérimentation autour :

  • des workers vocaux
  • de l’orchestration temps réel
  • des agents pilotés par la voix
  • de Symfony UX
  • de Symfony AI
  • et des workflows déclaratifs avec Flow et Navi.

L’objectif n’est plus simplement de retranscrire de l’audio.

L’objectif est maintenant de construire des interfaces vocales programmables capables :

  • d’écouter
  • de raisonner
  • de traduire
  • et d’agir dans des systèmes externes en temps réel.

Ressources

  • Flowvox Announcement
  • Flowvox GitHub
  • Symfony UX Native
  • OpenAI Realtime API
  • whisper.cpp

Tu peux ajouter cette section à la fin de l’article.

Ressources & projets

Le code source et les expérimentations autour de Flowvox sont disponibles publiquement :

  • Flowvox (Symfony voice platform)
  • Flowvox iOS (Hotwire Native)
  • Slides SlideWire de la présentation

Technologies utilisées :

  • Whisper.cpp
  • Symfony UX Native

Annonces et documentation OpenAI :

  • Annonce OpenAI Realtime Audio Models
  • Documentation OpenAI Realtime Translation

Site

  • Plan du Site
  • Contact
  • Mentions légales

Network

  • Hello
  • Blog
  • Apps
  • Photos

Social

Darkwood 2026, tous droits réservés