# 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 ```bash 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) ```bash 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 ```bash .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](LICENSE).