# Manifeste des figures — GenAI/Audio

Provenance des images de `assets/readme/` (EPIC #5654, source 1 = extraction d'outputs de notebooks via `extract_readme_figures.py`).

**Résolution d'audit c.529 (2026-07-16, #5780) — vérification vision firsthand + traçage nbformat.** Les notes d'audit c.481 et c.490 concluaient à tort que 5/6 PNG étaient « invérifiables / probablement externes ». Cette conclusion reposait sur une **double erreur de méthode** :

1. **Inversion de lecture audio2↔audio4** : le c.490 a lu le contenu de `audio2` (3 heatmaps MFCC) comme du « Demucs », et celui de `audio4` (5 panneaux Demucs) comme une « grille STT/TTS ». Les deux attributions de cellule source du MANIFEST c.481 étaient en fait **correctes** (audio2 ← MFCC, audio4 ← Demucs).
2. **Fausse prémisse « MD5 ≠ donc externe »** : `extract_readme_figures.py` **optimise chaque figure au moment de l'extraction** (downscale à ≤ 1200 px de large + recompression PIL). Le MD5 et la taille du PNG disque **diffèrent donc nécessairement** de la sortie de cellule brute — ce n'est pas la signature d'une source externe, mais le comportement normal de l'outil. Le « ratio systématique 0,55–2,36 » invoqué par le c.490 provenait de comparaisons contre les **mauvaises cellules attendues** (le corps du c.490 identifiait pourtant les bonnes sources pour audio5/audio6, en contradiction avec sa propre table).

**Constat c.529 : les 6 figures sont de vraies sorties de notebook.** Cinq sont tracées à une cellule committée par contenu + ratio de taille cohérent avec l'optimisation PIL (ratio 0,62–0,97, toujours ≤ 1,0). La sixième (`audio3`) est une figure de benchmark STT/TTS réelle dont le volet TTS vide est **honnêtement signalé** dans l'alt-text in-situ (disclosure, cf doctrine C522) ; sa cellule source exacte n'est pas committée dans les 3 notebooks référencés. **Aucun swap de fichier n'est nécessaire** ; les légendes inline du README sont corrigées pour être fidèles au contenu réel.

**Audit vision c.751 (2026-07-22, doctrine #5780, re-vision MiniMax M3)** : ajout du champ canonique `Description visuelle` aux 6 entrées (méthode vision M3 firsthand + PIL RGB sur downsample 80×80), tranche-15 de la migration `description_visuelle` #5780 sur Audio. Pattern reproduit de c.748 Image/examples + c.749 Image/03-Orchestration + c.750 Image/01-Foundation (audit fondateur c.529 préservé byte-identity, `Contenu (vision firsthand c.529)` intact comme preuve falsifiable détaillée ; le nouveau champ `Description visuelle` = version canonique courte destinée à l'extraction automatique, basée sur la vision M3 du **fichier réel sur disque**). Tranche-13 (Audio/01-Foundation) traitée par PR #7897 (jsboige user, 2026-07-22T06:07Z, +8/-1, en attente merge) — pas de doublon, c.751 = racine seule. Conformité avec le détecteur `scripts/notebook_tools/detect_manifest_field.py` (PR #7819 c.754). **0 notebook ré-exécuté** (C.3 strict respecté).

## audio1-waveform.png

- **Description visuelle** : PNG 1189×290 single-panel matplotlib horizontal, ratio 4:1. Titre intégré « Forme d'onde - Echantillon de test ». **Courbe bleue** (couleur signature signal audio, `#1f77b4` matplotlib) sur fond blanc, axe X « Temps (s) » 0→12, axe Y « Amplitude » -0,4→0,4. La forme d'onde présente une **alternance typique de parole** : bursts énergétiques d'amplitude ±0,35-0,4 entre 0 et 3,5 s, silence franc (aplat à 0) entre 3,5-4,5 s, reprise énergétique 4,5-9,5 s, second silence 9,5-10,5 s, et traîne décroissante 10,5-12 s. Pas de second canal, pas de légende couleur, pas de remplissage sous la courbe. Stats RGB PIL downsample 80×80 : mean (216, 230, 239) bleu-cyan dominant léger, std (67, 41, 25) variation modérée-asymétrique (R élevé = signal bleu sur les pics, B faible = fond blanc). **Cohérence vs c.529** ✅ ACCURATE.
- **Source** : `01-Foundation/01-3-Basic-Audio-Operations.ipynb` cell[12] out[1] (`# Visualisation de la forme d'onde`).
- **Contenu (vision firsthand c.529)** : courbe matplotlib unique « Forme d'onde », amplitude ±0,4, axe temps 0–12 s.
- **Traçage** : cellule brute 39 273 B (md5 `3ace572f`) → disque 37 273 B (md5 `09e55bfb`), ratio **0,95**.
- **Alt-text (FR)** : Forme d'onde : échantillonnage d'un signal audio continu et visualisation temporelle.
- **Verdict** : **SOTA-OK** — vraie sortie de notebook, légende fidèle. Inliné (README §01-Foundation).

## audio2-spectrogram.png

- **Description visuelle** : PNG 1072×790, **3 heatmaps RdBu empilées verticalement** avec leurs colorbars respectives à droite. **(1) « MFCC »** — heatmap statique colorbar -400→+200, le coefficient 0 (énergie moyenne) domine en rouge sombre plein, les coefficients 1-15 portent l'enveloppe spectrale (rouge/bleu clair), les coefficients 16-39 sont majoritairement bleus (faible magnitude) ; axe X « Time », axe Y indice cepstral. **(2) « Delta MFCC (vitesse) »** — heatmap colorbar ±40, mêmes axes, variations frame-à-frame en rouge/bleu clair alternés, fond majoritairement blanc. **(3) « Delta-Delta MFCC (acceleration) »** — heatmap colorbar ±40, axes identiques, dynamique 2nd ordre plus fine. L'axe X « Time » 0→11,5 est partagé entre les 3 panneaux. Stats RGB PIL downsample 80×80 : mean (230, 212, 211) rouge-pâle équilibré, std (23, 37, 46) asymétrique (R très stable = fond blanc majoritaire des deltas, B varie = rouge MFCC statique). **Cohérence vs c.529** ✅ ACCURATE — heatmaps MFCC + Δ + Δ² bien 3 panneaux comme documenté.
- **Source** : `01-Foundation/01-3-Basic-Audio-Operations.ipynb` cell[20] out[3] (`# MFCC (Mel-Frequency Cepstral Coefficients)`).
- **Contenu (vision firsthand c.529)** : **3 heatmaps MFCC** empilées (MFCC, delta, delta-delta), échelle de couleur, axe temps horizontal, coefficients en ordonnée. **Ce ne sont pas des panneaux Demucs** (erreur de lecture c.490).
- **Traçage** : cellule brute 84 031 B (md5 `238e0bd6`) → disque 77 625 B (md5 `b9792e33`), ratio **0,92**.
- **Alt-text (FR)** : Spectrogramme et MFCC : décomposition temps-fréquence du signal pour la reconnaissance vocale.
- **Verdict** : **SOTA-OK** — vraie sortie MFCC du 01-3. Inliné (README §01-Foundation après audio1-waveform, c.728y+4 2026-07-21).

## audio3-stt-tts.png

- **Description visuelle** : PNG 1200×744, **grille matplotlib 2×2** à fond blanc dominant. **(1) « Latence STT par modele »** (haut-gauche) — barplot bleu clair uni sur une seule barre « large-v3-turbo » à 0,47 s, **barre d'erreur noire ±0,1 s** au sommet, axe Y « Latence (s) » 0→0,6. **(2) Panneau vide « Pas de resultats TTS »** (haut-droite) — axes 0→1.0 sur les deux dimensions, juste le texte centré « Pas de resultats TTS » — **placeholder blanc explicite**. **(3) « Analyse des couts (USD/heure) »** (bas-gauche) — axe X « Cout par heure (USD) » -0,04→0,04, axe Y « large-v3-turbo », barre unique label « Gratuit » au centre (donnée barplot = 0 ou pas de barre visible). **(4) Radar plot vide « Pas de resultats TTS »** (bas-droite) — axes polaires 0°/45°/90°/.../315°, grille radiale 0,2/0,4/0,6/0,8/1,0, **texte centré « Pas de resultats TTS »** sans données tracées. Stats RGB PIL downsample 80×80 : mean (234, 243, 248) blanc-bleuté très clair (fond majoritaire panneaux vides), std (49, 26, 12) asymétrique (R varie = texte noir + barre bleu clair, G/B très stables = fond blanc). **INTRINSIC disclosure C522** : 2/4 panneaux explicitement vides — c'est une **figure de benchmark honnête** signalant l'absence de résultats TTS dans l'environnement de test, pas un output dégradé. **Cohérence vs c.529** ✅ ACCURATE.
- **Source** : figure de benchmark STT/TTS réelle. **Cellule source non committée** dans les 3 notebooks 01-3 / 02-4 / 03-1 (aucun n'émet la chaîne « Pas de resultats TTS » en output committé). Candidat probable : une exécution de comparaison STT/TTS où les services TTS étaient indisponibles.
- **Contenu (vision firsthand c.529)** : grille 4 panneaux — (1) barplot « Latence STT par modele » (large-v3-turbo = 0,47 s), (2) panneau vide « Pas de resultats TTS », (3) « Analyse des couts (USD/heure) » (Gratuit), (4) radar « Pas de resultats TTS ».
- **Poids disque** : 94 346 B (md5 `b047ef65`).
- **Alt-text in-situ (README ligne 89)** : Reconnaissance vocale (STT) validée par Whisper large-v3-turbo ; volet TTS non abouti dans l'environnement de test (sous-figures vides). — **fidèle au contenu**.
- **Verdict** : **INTRINSIC (disclosure honnête, C522)** — le volet TTS vide est explicitement signalé dans l'alt-text et le caption ; c'est une divulgation honnête d'un état d'environnement de test, pas un placebo consacré. Inliné (README §01-Foundation). Provenance de cellule à confirmer si les notebooks STT/TTS sont un jour re-exécutés avec services TTS actifs.

## audio4-demucs.png

- **Description visuelle** : PNG 656×700, **5 waveforms empilés verticalement** sur axe temps 0-9 s, chacun avec sa couleur signature. **(1) « Mix original »** (haut) — waveform gris dense amplitude ±0,75 (couleur `#808080`), signature mix stéréo non-séparé. **(2) « DRUMS (RMS: 0.0307) »** — waveform **rouge** vif avec transitoires nets et brefs (signature percussive batterie), amplitude ±0,4. **(3) « BASS (RMS: 0.1626) »** — waveform **vert** dense oscillant régulièrement, signature basse continue (amplitude ±0,3, modulation lente). **(4) « OTHER (RMS: 0.1524) »** — waveform **bleu** dense saturé, signature mix harmonique non-classé (amplitude ±0,5). **(5) « VOCALS (RMS: 0.0117) »** (bas) — waveform **orange** très épars, bursts concentrés vers 1,5-3 s (signature voix chantée), amplitude ±0,2. Stats RGB PIL downsample 80×80 : mean (212, 227, 228) gris-vert-bleu clair (mix équilibré multi-couleurs panneaux), std (66, 39, 39) asymétrique (R varie = waveform rouge drums + orange vocals, G/B plus stables). Palette 5 couleurs distinctive (gris/rouge/vert/bleu/orange) = signature canonique d'un démixage source separation Demucs. **Cohérence vs c.529** ✅ ACCURATE.
- **Source** : `02-Advanced/02-4-Demucs-Source-Separation.ipynb` cell[23] out[2] (`# Visualisation et remixage des stems`).
- **Contenu (vision firsthand c.529)** : **5 panneaux Demucs** — Mix original + DRUMS (RMS 0,0307) + BASS (RMS 0,1626) + OTHER (RMS 0,1524) + VOCALS (RMS 0,0117), axe temps 0–9 s. **C'est bien du Demucs** (erreur de lecture c.490 qui y voyait une grille STT/TTS).
- **Traçage** : cellule brute 284 044 B (md5 `b5cc7ba0`) → disque 175 056 B (md5 `ab63e644`), ratio **0,62** (figure large 1398 px ramenée sous le plafond 1200 px).
- **Alt-text (FR, corrigé c.529)** : Séparation de sources Demucs : un mix stéréo décomposé en quatre stems (batterie, basse, autre, voix), chacun avec son énergie RMS annotée.
- **Verdict** : **SOTA-OK** — vraie sortie Demucs du 02-4, légende corrigée (l'ancienne, héritée du misread c.490, décrivait une grille STT/TTS). Inliné (README §02-Advanced).

## audio5-multimodel.png

- **Description visuelle** : PNG 1189×985, **4 panneaux matplotlib empilés verticalement** avec super-titre intégré « Caracteristiques audio extraites » (note : sans accents, défaut matplotlib). Axe X commun « Temps (s) » 0→12. **(1) « Spectral Centroid »** (haut) — courbe **bleue** oscillant 0→8000 Hz avec bursts atteignant 6000-8000 Hz (zones formants), axe Y « Hz » 0-8000. **(2) « Spectral Bandwidth »** — courbe **verte** oscillant 1000-3500 Hz complémentaire du centroid, axe Y « Hz » 1000-3500. **(3) « RMS Energy »** — courbe **rouge** profil énergétique clair, axe Y « Amplitude » 0-0,15, silences francs vers 3-4,5 s et 9-10,5 s (aplat à 0). **(4) « Zero-Crossing Rate »** (bas) — courbe **violette** avec pics sporadiques 0,3-0,6 alignés sur transitions phonétiques, axe Y « Rate » 0-0,6. Stats RGB PIL downsample 80×80 : mean (242, 241, 244) gris pâle achromatique (fond blanc dominant 4 panneaux couleurs fines), std (21, 19, 20) **achromatique strict** (RGB std presque identiques = aucune couleur ne domine, dispersion faible typique analyse scientifique sobre). **Filename/content mismatch disclosed** (c.673 doctrine #5780 C657 doublon-disclosure) : nom de slot `audio5-multimodel.png` hérité d'attribution erronée, contenu réel = panneau features librosa mono-fichier. **Cohérence vs c.673** ✅ ACCURATE.
- **Source** : `01-Foundation/01-3-Basic-Audio-Operations.ipynb` cell[28] out[2] (`# Extraction de caracteristiques`).
- **Contenu réel vérifié** (ré-audit vision c.673 2026-07-19 par `myia-po-2023` MiniMax-M3, doctrine #5780 — vision eersthand pixel-par-pixel) : figure matplotlib super-titre **« Caracteristiques audio extraites »**, **4 sous-panneaux empilés** (Spectral Centroid en bleu / Spectral Bandwidth en vert / RMS Energy en rouge / Zero-Crossing Rate en violet), axe temps partagé **0–12 s** identique à `audio1-waveform.png` (même échantillon librosa, features extraites). Palette saturée spectral/energy, ambiance d'analyse technique.
- **Traçage** : cellule brute 172 278 B (md5 `890f2d8a`) → disque 167 756 B (md5 `03e86f25`), ratio **0,97**.
- **Alt-text (FR, corrigé c.673)** : Panneau de caractéristiques audio extraites par librosa — quatre signaux empilés (centroïde spectral, largeur spectrale, énergie RMS, taux de passage par zéro), axe temps 0–12 s identique à la forme d'onde audio1.
- **Filename/content mismatch (doctrine #5780 c.657 doublon-disclosure, famille C672-L2 ★ / C672-L1 ★★)** : **le nom de fichier `audio5-multimodel.png` et l'ancien alt-text « comparaison de modèles audio » décrivaient à tort une comparaison STT/TTS — le contenu réel est un panneau de features librosa mono-fichier.** Pas de régénération (le contenu est correct) ; disclosure obligatoire par doctrine : **« Nom de slot hérité d'une attribution erronée ; figure renommée virtuellement `audio5-features-librosa.png` par cohérence, mais le nom de fichier physique reste `audio5-multimodel.png` pour traçabilité git. »** Disclosure honnête inlinée (README §01-Foundation après audio3-stt-tts, c.728y+4 2026-07-21) avec mention explicite du filename/content mismatch.
- **Verdict** : **SOTA-OK** (contenu réel = features librosa du 01-3). Le c.490 avait correctement identifié la cellule source (cell[28]) tout en la classant à tort « déclassée » ; le c.529 l'avait re-traçé fidèlement ; le c.673 alinhé l'alt-text sur le contenu réel. Inliné (README §01-Foundation après audio3-stt-tts, c.728y+4 2026-07-21) — disclosure filename/content mismatch rendue visible in-situ.

## audio6-tts-benchmark.png

- **Description visuelle** : PNG 1200×423, **2 barplots côte-à-côte** à fond blanc, palette 3 couleurs distinctive. **(1) « Latence par modele et type de texte »** (gauche) — barplot **double-échelle logarithmique Y** (« Latence (ms) ») avec graduations 3×10³ et 4×10³, comparaison kokoro vs openai/tts-1 ; chaque modèle = 3 barres (dialogue bleu / monologue orange / narration vert). kokoro : dialogue ~3300 ms / monologue ~3000 ms / narration ~2700 ms ; openai/tts-1 : dialogue ~4300 ms / monologue ~4500 ms / narration ~3700 ms. **(2) « Taille audio par modele et type de texte »** (droite) — barplot Y linéaire 0-350 KB (« Taille (KB) »), mêmes groupes de couleurs ; kokoro ~245/335/255 KB, openai/tts-1 ~230/370/330 KB. Légende « Type » commune (haut-gauche et bas-droite) avec les 3 couleurs. Stats RGB PIL downsample 80×80 : mean (220, 222, 208) légèrement vert-clair (couleur « narration » majoritaire), std (70, 50, 80) **B élevé** (bleu dialogue très contrasté). **Caveat visuel** : kokoro légèrement plus rapide mais openai/tts-1 plus volumineux en monologue — trade-off latence/taille documenté visuellement. **Cohérence vs c.529** ✅ ACCURATE.
- **Source** : `03-Orchestration/03-1-Multi-Model-Audio-Comparison.ipynb` cell[29] out[1] (`# Visualisation des resultats`).
- **Contenu (vision firsthand c.529)** : **2 barplots** « Latence par modele et type de texte » + « Taille audio par modele et type de texte », kokoro vs openai/tts-1, légende dialogue/monologue/narration.
- **Traçage** : cellule brute 71 205 B (md5 `18fd4304`) → disque 49 946 B (md5 `25b1a862`), ratio **0,70**.
- **Alt-text (FR)** : Benchmark multi-modèles TTS : latence (ms) et taille audio (KB) de kokoro vs openai/tts-1 par type de texte (dialogue, monologue, narration).
- **Verdict** : **SOTA-OK** — vraie sortie du 03-1, légende fidèle. Inliné (README §03-Orchestration). Le c.490 avait correctement identifié la cellule source (03-1 cell[29]) tout en la classant à tort « déclassée ».

---

## Vérification — traçage nbformat c.529 (2026-07-16, worktree fresh origin/main)

Scan `nbformat` des outputs image committés des 3 notebooks sources, croisé avec le MD5/taille des PNG disque :

| Fichier | Cellule source | Brut (nbformat) | Disque | Ratio | Inliné | Verdict |
|---|---|---|---|---|---|---|
| `audio1-waveform.png` | 01-3 cell[12] out[1] | 39 273 B / `3ace572f` | 37 273 B / `09e55bfb` | 0,95 | oui | SOTA-OK |
| `audio2-spectrogram.png` | 01-3 cell[20] out[3] | 84 031 B / `238e0bd6` | 77 625 B / `b9792e33` | 0,92 | oui (c.728y+4) | SOTA-OK (MFCC) |
| `audio3-stt-tts.png` | non committée (3 nb réf.) | — | 94 346 B / `b047ef65` | — | oui | INTRINSIC (TTS vide signalé) |
| `audio4-demucs.png` | 02-4 cell[23] out[2] | 284 044 B / `b5cc7ba0` | 175 056 B / `ab63e644` | 0,62 | oui | SOTA-OK (Demucs) |
| `audio5-multimodel.png` | 01-3 cell[28] out[2] | 172 278 B / `890f2d8a` | 167 756 B / `03e86f25` | 0,97 | oui (c.728y+4, disclosure) | SOTA-OK (features) |
| `audio6-tts-benchmark.png` | 03-1 cell[29] out[1] | 71 205 B / `18fd4304` | 49 946 B / `25b1a862` | 0,70 | oui | SOTA-OK (barplots TTS) |

**Lecture des ratios** : tous ≤ 1,0 — cohérent avec l'optimisation PIL de `extract_readme_figures.py` (recompression + downscale ≤ 1200 px, qui ne peut que réduire la taille). Le ratio 0,62 d'`audio4` correspond au downscale d'une figure large (1398 px) sous le plafond 1200 px. Aucun ratio n'exige une « source externe ».

**Bilan c.529** : 5/6 tracés à une cellule committée (SOTA-OK), 1/6 (`audio3`) = benchmark STT/TTS réel à volet TTS honnêtement vide (INTRINSIC/C522). 0 figure DROP, 0 swap, 0 régénération nécessaire. La remédiation #5780 sur cette tranche = correction de **texte d'audit faux** (README + MANIFEST), pas de rendu de figure.

## Historique d'audit (superséré — conservé pour traçabilité)

- **c.481 (2026-07-14)** : swap `audio3`↔`audio5` au niveau des blobs disque. Attributions de cellule d'audio2 (MFCC) et audio4 (Demucs) **correctes** ; celles d'audio5 (donné 03-1 au lieu de 01-3) et audio6 (donné 04-7 au lieu de 03-1) **erronées**.
- **c.490 (2026-07-14)** : a **inversé la lecture visuelle d'audio2 et audio4** (MFCC lu « Demucs », Demucs lu « STT/TTS »), et conclu à tort « 5/6 externes » sur la fausse prémisse MD5≠brut (ignorant l'optimisation PIL). A néanmoins corrigé les sources d'audio5 (01-3 cell[28]) et audio6 (03-1 cell[29]).
- **c.529 (2026-07-16)** : réconciliation firsthand (vision + git par-blob + nbformat) → les 6 figures sont de vraies sorties de notebook ; attributions ci-dessus définitives.

**Voir aussi** : issue [#5780](../../../issues/5780) ; EPIC [#5654](../../../issues/5654) ; [GenAI/Image MANIFEST](../../../Image/assets/readme/MANIFEST.md) et [GenAI/Video MANIFEST](../../../Video/assets/readme/MANIFEST.md) (patterns frères de traçabilité de figures).
