Sans contexte, le modele rendait « Playwright » en « PlayWreck », « iCloud » en « Auriclaw », « Supabase » en « Supabass », « Vercel » en « Versell » : 4 termes sur 5 faux, mesure sur audio reel. Avec l'amorce (initial_prompt), les 5 sont corrects, sans changer de modele ni ralentir (1,3 s). Passer a large-v3-turbo a ete teste et ecarte : PIRE sur le meme echantillon (« commit sur Gitea » -> « commis sur JTA », « Stripe » -> « Trip »), pour 1,5 Go de plus. C'est l'amorce qui paie, pas la taille du modele. VOCABULAIRE est une simple liste a completer dans core.py. Whisper ne lit que ~224 tokens d'amorce et tronque le reste EN SILENCE : la longueur est donc bornee explicitement, pour qu'un ajout de termes ne soit jamais sans effet a l'insu de celui qui l'ecrit (47 termes = 416 caracteres sur 800). 34 tests passent (27 + 7 nouveaux). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| assets | ||
| launcher | ||
| tests | ||
| .gitignore | ||
| app.py | ||
| audio_level.py | ||
| build_app.sh | ||
| conftest.py | ||
| controller.py | ||
| core.py | ||
| engine.py | ||
| LICENSE | ||
| pulse_window.py | ||
| README.md | ||
| requirements.txt | ||
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+Vsimulé). Si non accordée, le texte reste dans le presse-papier : faisCmd+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.