-
Notifications
You must be signed in to change notification settings - Fork 1
fr Developer Guide
🌐 Langue : English | Français
Tout ce qu'il faut pour compiler, tester et contribuer à dictée. Le projet combine Rust (moteur ASR via ONNX Runtime), Python / PyQt6 (assistant de configuration + tray), QML (plasmoid KDE), et Bash (script d'orchestration principal).
Les artefacts de build sont packagés en .deb, .rpm, PKGBUILD Arch, et un tarball portable. Ce guide couvre la structure du dépôt, les features Cargo, les scripts de build, les harnais de test, l'i18n et le workflow de contribution.
- Structure du dépôt
- Source de vérité vs fichiers packagés
- Compiler depuis les sources
- Builds de paquets
- Internes du pipeline audio
- État runtime & IPC
- Tests
- Internationalisation
- Contribuer
dictee/ # racine du dépôt git
├── Cargo.toml # Workspace Rust
├── src/ # Rust — moteur ASR (bibliothèque + binaires)
│ ├── lib.rs # API publique
│ ├── audio.rs # WAV, STFT, mel-spectrogrammes
│ ├── parakeet_tdt.rs # Modèle TDT (25 langues)
│ ├── canary.rs # Modèle Canary AED
│ ├── nemotron.rs # Streaming Nemotron (EN seul)
│ ├── sortformer.rs # Diarisation (4 locuteurs)
│ ├── model*.rs, decoder*.rs # Wrappers ONNX
│ ├── timestamps.rs # Alignement token→mot→phrase
│ └── bin/ # Exécutables
│ ├── transcribe.rs # CLI batch
│ ├── transcribe_daemon.rs # Serveur socket Unix
│ ├── transcribe_client.rs # Client daemon + enregistrement micro
│ ├── transcribe_diarize.rs # TDT + Sortformer
│ ├── transcribe_stream_diarize.rs # Nemotron + Sortformer
│ └── transcribe_diarize_batch.rs # Pipeline chunked (v1.3 finale)
├── dictee # Script shell principal (source de vérité)
├── dictee-setup.py # Assistant de configuration PyQt6
├── dictee-tray.py # Icône tray PyQt6
├── plasmoid/ # Widget KDE Plasma 6
├── po/ # Traductions gettext (setup + tray)
├── pkg/ # Arbre dpkg-deb (artefact, PAS source de vérité)
├── tests/ # Suites de tests
├── build-deb.sh # Build .deb (CPU + CUDA)
├── build-rpm.sh # Build .rpm (CPU + CUDA)
├── PKGBUILD # Paquet Arch
└── install.sh / uninstall.sh
Les fichiers à la racine du dépôt (dictee, dictee-setup.py, dictee-tray.py) sont la source de vérité.
build-deb.sh les copie dans pkg/ au moment du build. Ne jamais éditer les fichiers dans pkg/ directement — ils seront écrasés au prochain build.
git clone https://github.com/rcspam/dictee.git
cd dictee
# CPU seul (défaut)
cargo build --release
# CUDA + diarisation Sortformer
cargo build --release --features "cuda,sortformer"Binaires de sortie dans target/release/ :
-
libparakeet_rs.so(bibliothèque, pour futurs bindings) -
transcribe,transcribe-daemon,transcribe-client -
transcribe-diarize,transcribe-stream-diarize,transcribe-diarize-batch
Déclarées dans Cargo.toml :
| Feature | Défaut | But |
|---|---|---|
cpu |
✅ | Execution provider CPU |
ort-defaults |
✅ | Défauts sensés ONNX Runtime |
cuda |
❌ | Execution provider CUDA 12 |
tensorrt |
❌ | Optimisation TensorRT (expérimental) |
coreml |
❌ | Apple CoreML (macOS-only, inutilisé dans dictée) |
directml |
❌ | DirectX 12 (Windows-only, inutilisé) |
openvino |
❌ | Intel OpenVINO |
webgpu |
❌ | WebGPU (usage navigateur) |
nnapi |
❌ | Android NNAPI (inutilisé) |
sortformer |
❌ | Diarisation locuteurs via Sortformer |
Combos typiques :
- Machine dev :
--features cuda,sortformer - Build CI CPU : (défaut, pas de features)
- Build CI CUDA :
--features cuda,sortformer
Pas d'étape de build — les fichiers dictee-setup.py et dictee-tray.py sont interprétés à l'exécution.
Dépendances (installer pour développement) :
pip install PyQt6 PyQt6-WebEngine text2num faster-whisper voskInstall dev (pas besoin de packaging) :
kpackagetool6 -t Plasma/Applet -i plasmoid/packageRéinstaller après édition :
kpackagetool6 -t Plasma/Applet -u plasmoid/package
# Redémarrer plasmashell si le widget est déjà sur un panneau :
killall -15 plasmashell && kstart plasmashell &./build-deb.shProduit :
dictee-cpu_1.3.1_amd64.debdictee-cuda_1.3.1_amd64.debdictee-plasmoid_1.3.1_all.deb-
dictee-1.3.1_amd64.tar.gz(tarball portable)
Étapes clés :
-
cargo build --release(variante CPU) +cargo build --release --features cuda,sortformer(variante CUDA) - Copier les binaires Rust dans
pkg/dictee/usr/bin/ - Copier les scripts shell (
dictee,dictee-postprocess, etc.) danspkg/dictee/usr/bin/ - Copier les scripts Python (
dictee-setup.py→/usr/bin/dictee-setup) — note : renommé sans.py - Copier le plasmoid dans
pkg/dictee-plasmoid/usr/share/dictee/dictee.plasmoid - Build variante CUDA : intégrer les libs CUDA via venv pip (depuis v1.3)
-
dpkg-deb --build pkg/dictee-cpuetc.
./build-rpm.shMêmes sorties mais .rpm. Utilise rpmbuild avec un fichier spec.
makepkg -siUtilise PKGBUILD à la racine du dépôt. Build depuis les sources, pas de binaires pré-compilés.
Microphone (PipeWire)
↓ parecord --format=s16le --rate=48000 --channels=1
↓
/dev/shm/.dictee_rec.wav (capture brute)
↓ rééchantillonnage sox à 16 kHz mono
↓
/dev/shm/.dictee_rec_16k.wav
↓ transcribe-client envoie via socket Unix
↓
Socket Unix : $XDG_RUNTIME_DIR/transcribe.sock
↓
transcribe-daemon (Rust)
↓
src/audio.rs : preemphasis(0.97) → STFT(n_fft=512, hop=160, win=400, Hann)
↓
Banque filtres mel (128 bins, Slaney, garde log 5.96e-8)
↓
Tenseur ONNX (1 × 128 × T)
↓
Encodeur (FastConformer) → Décodeur (TDT)
↓
Texte (avec ponctuation native)
↓
Réponse socket Unix
↓
Script shell dictee → dictee-postprocess → dotool type
Source complète : src/audio.rs (côté Rust), pkg/dictee/usr/bin/dictee-transcribe (wrapper Python).
Voir CLI-Reference#fichiers-détat pour la liste complète. Sûr multi-utilisateur via suffixe $UID.
Le daemon écoute sur $XDG_RUNTIME_DIR/transcribe.sock. Le protocole est line-based :
Requête :
TRANSCRIBE /chemin/vers/audio.wav [lang=fr] [translate_to=en]
Réponse :
OK <payload-json>
Le payload inclut : texte de transcription, timestamps word-level, labels locuteurs (si diarisation), langue détectée, confiance.
Implémentation dans src/bin/transcribe_daemon.rs.
cargo test
cargo test --features sortformer682 tests dans tests/test-postprocess.py — 12 étapes pipeline × 7 langues × cas limites :
cd tests
python -m unittest test-postprocess.py -v148 tests dans tests/test-pipeline.py — pipeline transcription complet avec ASR mocké :
python -m unittest test-pipeline.py -vpython tests/test-wer.py --backend parakeet --lang fr --corpus commonvoice- docs/test-checklist-ui-pipeline.md — 39 checks UI
- docs/test-protocol-vocal.md — 38 dictées vocales à vérifier
GitHub Actions lance tous les tests automatisés à chaque push :
- Post-traitement (
XDG_CONFIG_HOMEisolé) - Pipeline
- Tests unitaires Rust
-
msgfmt --checksur tous les.po
dictee-setup.py et dictee-tray.py utilisent gettext avec domaine dictee et catalogues dans po/ :
-
po/dictee.pot— template (régénéré depuis les chaînes source viaxgettext) -
po/{fr,de,es,it,uk,pt}.po— traductions -
po/{lang}/LC_MESSAGES/dictee.mo— compilé (généré parmsgfmt)
Workflow :
# Extraire nouvelles chaînes dans le template
xgettext -L Python -o po/dictee.pot dictee-setup.py dictee-tray.py
# Mettre à jour les traductions existantes
msgmerge --update po/fr.po po/dictee.pot
# Compiler en .mo
msgfmt po/fr.po -o po/fr/LC_MESSAGES/dictee.moDomaine séparé plasma_applet_com.github.rcspam.dictee :
plasmoid/package/contents/locale/{fr,de,es,it,uk,pt}/LC_MESSAGES/plasma_applet_com.github.rcspam.dictee.mo
Buildé par le packager plasmoid.
Inline, p. ex. :
Name=Dictée
Name[fr]=Dictée
Name[de]=Diktat
GenericName=Voice dictation
GenericName[fr]=Dictée vocale
- Fork le dépôt sur github.com/rcspam/dictee
- Créer une branche feature :
git checkout -b feat/ma-feature - Commit avec commits conventionnels :
feat(scope): description/fix(scope): description - Push et ouvrir une PR contre
master - CI doit être verte
- Review de code par le mainteneur
Exemples du git log :
feat(plasmoid): combo langue compact + popup wide + close on deactivatefix(setup): wizard trans sync + langues cibles complètes + largeur combosdocs(wiki): scaffold 20 pages (stubs)chore(version): bump 1.3.0~beta5 → 1.3.0~rc1
- Créer
src/<backend>.rsavec le wrapper du modèle ONNX - Ajouter un binaire dans
src/bin/ou étendretranscribe_daemonpour le supporter - Créer une unité systemd à
pkg/dictee/usr/lib/systemd/user/dictee-<backend>.service - Mettre à jour
dictee-switch-backendpour reconnaître le nouveau nom de backend - Ajouter le support UI dans
dictee-setup.py(combo backend ASR + logique téléchargement modèle) - Documenter dans ASR-Backends et CLI-Reference
- Ajouter règles regex dans
pkg/dictee/usr/share/dictee/rules.conf.defaultavec préfixe[xx] - Ajouter mot déclencheur de continuation dans
continuation.conf.default - Ajouter traduction
.popour setup + tray :po/xx.po - Ajouter traduction plasmoid :
plasmoid/package/contents/locale/xx/ - Tester manuellement contre test-protocol-vocal.md
- CLI-Reference — tous les binaires documentés
- ASR-Backends — vue d'ensemble des backends
- Changelog — notes de release et roadmap
- Troubleshooting — déboguer les problèmes courants
Getting started / Premiers pas
- Installation · 🇬🇧 · 🇫🇷
- Setup-Wizard · 🇬🇧 · 🇫🇷
- Configuration · 🇬🇧 · 🇫🇷
- Plasmoid-Widget · 🇬🇧 · 🇫🇷
- Tray-Icon · 🇬🇧 · 🇫🇷
- Keyboard-Shortcuts · 🇬🇧 · 🇫🇷
- Voice-Commands · 🇬🇧 · 🇫🇷
- GPU-Setup · 🇬🇧 · 🇫🇷
- Diarization · 🇬🇧 · 🇫🇷
- LLM-Diarization · 🇬🇧 · 🇫🇷
Speech recognition / ASR
Translation / Traduction
Post-processing / Post-traitement
- Overview · 🇬🇧 · 🇫🇷
- Rules-and-Dictionary · 🇬🇧 · 🇫🇷
- LLM-Correction · 🇬🇧 · 🇫🇷
- Numbers-Dates-Continuation · 🇬🇧 · 🇫🇷
CLI
Reference / Référence
🏠 Repo · 📦 Releases · 🐛 Issues