Dictée vocale 100% locale pour macOS (MLX-Whisper + cercle pulsant)
Go to file
Ralph Mayola bfafc6a48c Le masque des modificateurs couvre enfin Command, et jamais Caps Lock
Deux defauts trouves en rendant la sonde injectable.

1. Le masque etait ecrit 0x000F0000 A LA MAIN. Il couvrait Shift, Control et Alt
   mais PAS Command (0x00100000) — pourtant la touche du raccourci de Zonza.
   Maintenir Cmd seul passait donc inapercu. Le masque est desormais COMPOSE
   depuis les constantes nommees de Quartz : un masque calcule de tete se trompe
   en silence, compose il ne peut plus.

2. Le test lisait le CLAVIER PHYSIQUE (`modificateurs_enfonces() is False`). Son
   resultat dependait des mains de l'utilisateur pendant la suite — un echec
   inreproductible a ete observe ce jour, puis 17 executions vertes. La sonde est
   rendue injectable, comme SystemeWindows l'avait deja, et les quatre
   modificateurs sont eprouves un par un. Un test verifie que la sonde reelle rend
   un booleen sans lever, SANS affirmer sa valeur.

Le repli hors Quartz excluait aussi le verrouillage majuscule : actif, il aurait
fait attendre 2 s avant CHAQUE collage, en permanence.

195 tests.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-23 20:04:52 +02:00
assets Zonza : dictée vocale locale macOS (MLX-Whisper + cercle pulsant) 2026-06-12 23:57:59 +02:00
docs/superpowers Spec : remplacer mes estimations par les mesures reelles 2026-08-23 18:45:42 +02:00
interface Le test exerce enfin l'annulation de la garde, dans les deux interfaces 2026-08-23 19:16:41 +02:00
launcher fix: icône barre de menu sur Tahoe — stub libpython + abandon de rumps 2026-06-13 00:54:44 +02:00
moteur Ajoute le moteur faster-whisper, pour les machines sans Apple Silicon 2026-08-23 18:38:09 +02:00
systeme Le masque des modificateurs couvre enfin Command, et jamais Caps Lock 2026-08-23 20:04:52 +02:00
tests Le masque des modificateurs couvre enfin Command, et jamais Caps Lock 2026-08-23 20:04:52 +02:00
.gitignore Zonza : dictée vocale locale macOS (MLX-Whisper + cercle pulsant) 2026-06-12 23:57:59 +02:00
app.py Un lanceur Qt pour Windows, et un assemblage partage 2026-08-23 20:00:03 +02:00
assemblage.py Un lanceur Qt pour Windows, et un assemblage partage 2026-08-23 20:00:03 +02:00
audio_level.py L'overlay devient une barre de dictee au lieu d'un cercle 2026-08-21 00:46:56 +02:00
build_app.sh fix: icône barre de menu sur Tahoe — stub libpython + abandon de rumps 2026-06-13 00:54:44 +02:00
capture.py Le controleur passe par les contrats, la duplication disparait 2026-08-23 18:19:25 +02:00
conftest.py Zonza : dictée vocale locale macOS (MLX-Whisper + cercle pulsant) 2026-06-12 23:57:59 +02:00
contrats.py Renforce les contrats : types complets et docstrings de methode protegees 2026-08-23 17:53:12 +02:00
controller.py Le menu Sons refonctionne, et le transcripteur porte son nom francais 2026-08-23 18:25:08 +02:00
core.py A chaque moteur son modele, et un forcage manuel 2026-08-23 18:45:14 +02:00
diagnostic.py Le diagnostic eprouve le micro au debit reel de l'application 2026-08-23 19:32:08 +02:00
lanceur_qt.py Un lanceur Qt pour Windows, et un assemblage partage 2026-08-23 20:00:03 +02:00
LICENSE Zonza : dictée vocale locale macOS (MLX-Whisper + cercle pulsant) 2026-06-12 23:57:59 +02:00
README.md Zonza : dictée vocale locale macOS (MLX-Whisper + cercle pulsant) 2026-06-12 23:57:59 +02:00
requirements.txt Ajoute l'overlay Qt, pour les plateformes sans Cocoa 2026-08-23 19:05:25 +02:00

Zonza 🎙️

Dictée vocale 100% locale pour macOS (Apple Silicon). Appuie sur un raccourci, un cercle pulse au rythme de ta voix, et ton texte est transcrit puis collé dans l'app active. Inspiré de Superwhisper — open source, hors-ligne, rien ne quitte ta machine.

  • Transcription locale : MLX-Whisper medium (français), aucun envoi réseau.
  • Cercle pulsant : une fenêtre flottante visualise tes intonations en temps réel.
  • Barre de menu : l'app vit dans la barre de menu macOS (jamais dans le Dock).
  • Toggle Cmd+Ctrl+D : démarre / arrête la dictée.

Installation

git clone ssh://git@git.mrtechlab.cloud:2222/rmayola/zonza.git
cd zonza
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
./build_app.sh        # installe /Applications/Zonza.app (lanceur lié à ce dépôt)

Zonza.app est un lanceur léger : il exécute le code via le venv du dépôt (MLX y tourne nativement, là où py2app/PyInstaller échouent sur les shaders Metal). Ne supprime donc ni le dossier du dépôt ni .venv. C'est aussi l'unique chemin de build — on ne construit jamais dans /tmp ni dans le dépôt, pour ne laisser aucune entrée fantôme dans LaunchServices (cause historique d'icônes en double).

Au tout premier lancement, l'app télécharge le modèle Whisper (~512 Mo, une seule fois).

Permissions macOS

Réglages Système → Confidentialité et sécurité :

  • Microphone — popup automatique au 1er enregistrement.
  • Surveillance de l'entrée / Accessibilité — pour la hotkey globale et le collage (Cmd+V simulé). Si non accordée, le texte reste dans le presse-papier : fais Cmd+V à la main.

Usage

  • L'icône 🎙️ apparaît dans la barre de menu (🔴 enregistrement, transcription).
  • Cmd+Ctrl+D : le cercle apparaît, parle.
  • Cmd+Ctrl+D : transcription + collage dans l'app active.
  • Menu : activer/désactiver les sons, quitter.
  • Sécurité : arrêt automatique après 2 minutes d'enregistrement.

Lancer depuis les sources (développement)

source .venv/bin/activate
python3 app.py

Configuration

Édite CONFIG dans core.py : model, language, hotkey, sounds, min_duration_s, max_duration_s, fps, circle_base_radius, circle_amplitude, circle_color_rgb, level_gain, level_attack, level_release, wave_rings, wave_speed.

Tests

.venv/bin/python -m pytest tests/ -v

Architecture

  • core.py — config + utilitaires purs (seuil durée, nettoyage texte).
  • audio_level.py — niveau RMS du micro (alimente l'animation).
  • engine.py — capture, transcription MLX-Whisper, collage, sons.
  • pulse_window.py — fenêtre Cocoa + cercle pulsant + anneaux d'onde.
  • controller.py — machine à états, branche audio → animation → transcription.
  • app.py — app de barre de menu (point d'entrée).

L'icône de l'app est générée par script : python assets/make_icon.py && ./assets/make_icns.sh.

Licence

MIT — voir LICENSE.