Skip to main content
Document de référence pour une personne ou une organisation qui évalue Syntheo Desktop. Il est mis à jour à chaque changement de flux réseau ou de stockage. Principe : Syntheo Desktop est un client local. Il n’a ni serveur, ni base centrale, ni compte, et n’émet aucune télémétrie. L’éditeur n’accède à aucune donnée et n’est pas responsable de traitement : l’utilisateur l’est, sur son poste.
État au 2026-10-26 : l’audio ne touche plus jamais le disque, sur aucun chemin. La capture de réunion, la dictée, l’import et le dépôt d’un fichier audio, ainsi que le découpage interne du traitement batch, travaillent entièrement en mémoire ; le fichier importé est lu à son emplacement d’origine, sans copie dans le dossier de données. Providers : endpoints on-premise uniquement. La transcription parle aux protocoles OpenAI et NVIDIA NIM ; le résumé, le chat et le générateur de templates parlent à un seul endpoint LLM configuré, une API OpenAI-compatible (vLLM, Ollama, llama.cpp server…).

Données stockées

Tout est stocké sur le poste, dans le dossier de données de l’application (syntheo sous le répertoire de données de l’utilisateur, par exemple ~/.local/share/syntheo sous Linux). Aucune de ces données n’est envoyée à l’éditeur. Aucune inférence sur le poste : l’application ne télécharge ni n’exécute aucun modèle (transcription, LLM, diarisation ou empreintes vocales). Une version antérieure a pu laisser des fichiers de modèles dans les dossiers models/stt et models/llm du dossier de données, ainsi que dans le cache de modèles Soniqo sous macOS : ils ne sont plus ni lus ni chargés, et peuvent être supprimés à la main. Les empreintes vocales qu’une version antérieure a pu enregistrer (vecteurs dans le trousseau du système, références dans les tables voiceprint_exemplars et voiceprint_candidates) sont effacées au démarrage ; si le trousseau refuse une suppression, l’effacement est retenté au lancement suivant.

Flux réseau

  • Endpoints d’inférence configurés par l’utilisateur, et eux seuls : ASR (protocole OpenAI : Realtime et /v1/audio/transcriptions ; NVIDIA NIM WebSocket) et l’endpoint LLM configuré (API OpenAI-compatible). L’audio de la capture et le texte (transcript, notes, prompts) y transitent, sans empreinte d’appareil ni identifiant de tâche dans les en-têtes. Une URL de transcription non reconnue est traitée avec le protocole OpenAI, jamais renvoyée vers un service tiers.
  • TLS recommandé dès que l’endpoint n’est pas sur la machine ou un réseau de confiance (par exemple via un reverse proxy ou un VPN). L’application accepte HTTP en clair uniquement vers un hôte privé (machine locale, réseau local, plage Tailscale, noms .local) et exige HTTPS ailleurs.
  • Un endpoint exploité par un tiers devient sous-traitant de l’utilisateur (art. 28 RGPD) : contrat et localisation des données à vérifier.
  • Autres flux, hors inférence :
    • notes de version : celles de la version installée sont incluses dans l’application ; afficher celles d’une autre version déclenche une requête non authentifiée vers GitHub (raw.githubusercontent.com, ou l’API publique api.github.com pour une version nightly). Seul le numéro de version est transmis ;
    • icônes de certains écrans chargées depuis api.iconify.design (aucune donnée personnelle transmise, mais une requête réseau) ;
  • Pas de compte, pas de synchronisation, pas de rapport d’erreur, pas de mise à jour automatique (les mises à jour passent par les GitHub Releases, téléchargées par l’utilisateur).
  • Aucune intégration de calendrier ni de tâches : Apple Calendar, Rappels et les intégrations hébergées héritées (calendriers Google et Outlook, Linear, GitHub) sont retirées du code.

Garanties techniques

  • Aucun compte ni authentification : le code d’authentification hérité (Supabase, plugin auth) est supprimé.
  • Aucune télémétrie, aucun rapport d’erreur : le code d’analyse (PostHog) et de rapport d’erreur (Sentry) est retiré (crates/analytics, plugins/analytics, dépendances posthog-rs, sentry, @sentry/react), ainsi que l’identifiant d’appareil qui n’existait que pour la télémétrie. Il n’y a plus rien à désactiver.
  • Clés dans le trousseau du système, pas dans la base.
  • Aucun audio sur disque, sur aucun chemin : la session de capture ne démarre plus d’enregistreur, la rétention est figée à « aucune » et un test Rust vérifie qu’aucun fichier audio n’apparaît dans le dossier de session ; ni lecteur, ni retranscription, ni empreintes vocales. La dictée produit un WAV en mémoire, l’import et le dépôt d’un fichier transcrivent depuis l’emplacement d’origine sans copie, et le découpage batch se fait en mémoire.
  • Garde-fou dans les tests : apps/desktop/src/no-cloud-imports.test.ts échoue si un module cloud ou d’authentification retiré est réimporté.
  • Contrôle de bout en bout : une capture réseau pendant une session complète ne doit montrer que les endpoints d’inférence configurés et les flux listés plus haut ; tout autre flux est traité comme une vulnérabilité (voir SECURITY.md).

Responsabilités de l’utilisateur

  • Informer les participants avant d’enregistrer une réunion (art. 13 et 14 RGPD). En France, enregistrer une conversation privée à l’insu des participants est puni par l’article 226-1 du Code pénal ; en entreprise, les salariés doivent être informés. Au démarrage de chaque capture, l’application affiche un rappel d’informer les participants ; il est activé par défaut et se désactive dans Paramètres → Réunions (« Rappeler aux participants l’enregistrement »).
  • Choisir les endpoints d’inférence et en assumer le traitement : un endpoint auto-hébergé reste sous le contrôle de l’utilisateur ; un endpoint tiers est un sous-traitant.
  • Gérer la durée de conservation des transcripts et des notes, et les supprimer quand ils ne sont plus nécessaires.
  • Analyse d’impact (AIPD) : à envisager par une organisation qui déploie l’outil à grande échelle ou pour des réunions sensibles (art. 35 RGPD).
  • Protéger le poste (chiffrement du disque, session verrouillée) : les données y sont stockées en clair dans la base locale.