Le Sentier — les vidéos¶
Le Sentier est une série de courtes vidéos, une par fonctionnalité, à mi-chemin entre la démonstration et la documentation. Chaque vidéo est une étape : un dossard au départ, des ravitos (les chapitres, cliquables sur le profil altimétrique du lecteur) et une arche d'arrivée qui renvoie vers la page de documentation correspondante.
On y suit Camille, une athlète fictive qui prépare le Trail des Crêtes (42 km, 2 100 m D+). Toutes les données montrées sont inventées.
Dans le lecteur
Narration en français ou en anglais (sélecteur de langue), sous-titres
(bouton ou touche c), espace pour lecture/pause, flèches pour ±5 s. Le tableau de bord
n'existe qu'en français : les versions anglaises gardent ses captures, légendées en anglais.
La bande-annonce¶
Le projet en un coup d'œil : le staff, le bilan matinal, les garde-fous, le jour de course, vos données.
Ligne de départ¶
Du git clone au premier /today : installation, authentification Garmin, /coach-setup et /coach-doctor en moins de deux minutes.
Le réveil du traileur¶
HRV, FC de repos et readiness lues ensemble chaque matin : le verdict, sa raison, et comment régler le bilan.
Le plan qui sait dire non¶
Sept garde-fous calculés relisent la semaine avant son écriture et son envoi au calendrier Garmin : un second avis déterministe et testé.
Parler à son coach¶
Le chat du tableau de bord : trace des outils, carte d'approbation, politique de permissions, budget et fournisseurs.
Tour du propriétaire¶
Visite guidée du tableau de bord local, en lecture seule : une question par vue.
La course, segment par segment¶
Du GPX au plan de course : allures par segment, énergie, matériel obligatoire, montre, puis débrief plan contre réalisé.
Disséquer une sortie¶
Une sortie trail passée au scalpel : FIT, zones, allure ajustée, dérive, montées, durabilité, HRR, énergie, comparaison.
Ravito¶
Une phrase libre devient des données : le modèle extrait, le script calcule, et ne devine jamais un produit.
Usure¶
Du kilométrage à l'inspection photo : alerte de seuil, verdict en quatre couleurs, indices de foulée (jamais un diagnostic), foulée mesurée, kits et bilan de carrière.
Le coach dans la poche¶
La machine coach, la synchronisation automatique (horaires ou veille), la notification push, Remote Control et les commandes courtes, le tableau de bord mobile, et ce qui n'est pas possible.
Trois voix, une décision¶
La même décision dite par trois styles de coaching : le ton, la fermeté et la longueur se règlent, jamais le verdict.
Vos données, votre sentier¶
Vos données restent des fichiers Markdown chez vous : un bloc validé, un index jetable, un tableau de bord local, et ce qui quitte la machine.
Comment c'est fait¶
Aucun fichier vidéo n'est stocké : chaque image est dessinée en JavaScript sur un canvas, à partir du seul temps écoulé. Une vidéo se lit, se met en pause et se parcourt comme une vraie, mais pèse quelques dizaines de kilo-octets (plus sa piste de voix).
| Élément | Où | Rôle |
|---|---|---|
| Moteur | docs/video/engine/ |
Lecteur, profil altimétrique, dossard, arche d'arrivée, outils de dessin |
| Script | docs/video/<étape>/script.json |
Découpage en scènes et texte dit, en français et en anglais |
| Scènes | docs/video/<étape>/scenes.js |
Le dessin de chaque scène, calé sur les répliques |
| Voix | audio/<langue>.m4a, timing.js, subs.<langue>.vtt |
Générés par scripts/video_narration.py |
| Captures | docs/video/shots/ |
Le vrai tableau de bord, servi sur l'espace de travail fictif de Camille |
La voix est une synthèse vocale locale (Kokoro,
hors ligne) : ff_siwis en français, bm_george en anglais. Les mots qu'elle prononce mal
se corrigent dans docs/video/lexicon.json, sans toucher aux sous-titres.
D'autres moteurs se choisissent avec --engine (le choix est noté dans timing.js) :
| Moteur | Où | Lexique IPA [[…]] |
Prérequis |
|---|---|---|---|
kokoro (défaut) |
local, ONNX | oui | modèle dans ~/.cache/kokoro-onnx |
azure |
Azure AI Speech, palier gratuit F0 | oui (SSML <phoneme>) |
AZURE_SPEECH_KEY, AZURE_SPEECH_REGION |
edge |
mêmes voix Microsoft, sans compte | non | réseau ; point d'accès non officiel, pour écouter seulement |
kyutai |
local, MLX (Apple Silicon) | non | ~4 Go téléchargés au premier lancement |
chatterbox |
local, PyTorch, voix clonable | non | ~3 Go téléchargés au premier lancement |
Un moteur sans IPA lit le mot d'origine, sauf entrée dédiée sous "<langue>@<moteur>" dans
le lexique (ex. "fr@kyutai": {"readiness": "rédinesse"}). Pour comparer avant de choisir,
--sample écrit l'extrait d'une scène hors de la série :
uv run --with kokoro-onnx --with soundfile scripts/video_narration.py bilan-matinal \
--sample triptych --engine kyutai --voice fr=unmute-prod-website/developpeuse-3.wav --out /tmp/voix
# 1. l'espace de travail fictif de Camille, puis les captures du tableau de bord
python3 scripts/video_demo_workspace.py /tmp/camille
uv run --with playwright scripts/video_capture.py
# 2. la voix, le minutage et les sous-titres (modèle Kokoro dans ~/.cache/kokoro-onnx)
uv run --with kokoro-onnx --with soundfile scripts/video_narration.py garde-fous
# 3. la galerie de cette page et les vignettes
uv run --with playwright scripts/video_gallery.py --posters
# 4. un MP4 (voix + sous-titres désactivables), ou toute la série
uv run --with playwright scripts/render_video.py --episode garde-fous --lang en
uv run --with playwright scripts/render_video.py --episode all --burn-subs
Le palier B des tests vérifie que le minutage, la galerie et les vignettes sont à jour
(python3 scripts/video_narration.py --check, python3 scripts/video_gallery.py --check).













