Zonza : dictée vocale locale macOS (MLX-Whisper + cercle pulsant)
Reconstruction propre de l'ancien projet Dictée. Bundle id neuf (cloud.mrtechlab.zonza), chemin de build unique vers /Applications (plus jamais de builds /tmp enregistrés dans LaunchServices). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# 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).
|
||||
Reference in New Issue
Block a user