You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Cette proposition s'inspire directement du travail de SwitchAngel sur YouTube — 4 vidéos de livecoding Strudel visionnées et analysées localement le 2026-09-11 :
SwitchAngel a inventé — ou du moins porté à un niveau rare — un genre complet : narration poétique slammée + construction orchestrale multi-pistes Strudel + modulation lente par slider + visualizer génératif + storytelling final (écran qui s'éteint, musique qui décroît). Ce n'est pas du livecoding "regardez je tape du code", c'est une performance construite où chaque élément (voix, code, image, fin) joue un rôle.
Ce qui est retenu pour le pipeline : la méthode — narration poétique pré-écrite + TTS expressif + Strudel multi-pistes incrémental + capture navigateur en temps réel + visualizer custom + fade-out coordonné. Ce qui n'est PAS retenu : son code Strudel, ses transcriptions, son audio, ses vidéos, son ASCII art. Aucune archive SwitchAngel ne sera committée dans le dépôt. Tout le banc d'analyse reste local sous G:\Mon Drive\MyIA\IA\Bibliographie IA\SwitchAngel-livecoding-strudel\2026-09-11\ (périmètre bibliography-hygiene.md §2).
Voix : la voix off dans la vidéo générée sera synthétisée (Kokoro / FishAudio), pas clonée. La règle de 02-2-XTTS-Voice-Cloning.ipynb (« consentement écrit obligatoire ») s'applique aussi à la voix SwitchAngel, même si elle est parfois traitée. Si un jour SwitchAngel donne son accord explicite, la cellule de garde du pipeline citera son nom avec lien et date du consentement — pas avant.
Contexte — pourquoi cette proposition maintenant
Le dépôt a déjà les briques :
Notebook Strudel embryon : MyIA.AI.Notebooks/GenAI/Audio/04-Applications/04-5-LiveCoding-LLM-Music.ipynb (48 cellules, kernel Python 3, mini-notation + itération conversationnelle LLM, exercices de livecoding). Couvre la construction musicale incrémentale et l'intégration web <strudel-editor> dans Jupyter, mais aucun pipeline de production vidéo.
Manque : un pipeline unifié qui prend (a) un script Strudel + (b) un texte poétique de narration, et produit (c) une vidéo .mp4 avec (i) la capture du navigateur Strudel, (ii) la voix off TTS expressive, (iii) le visualizer, (iv) le mixage et le fade-out final.
Input : un style (trance, ambient, techno, melancholy) + une durée cible (3-10 min) + un BPM.
Output : un script Strudel Python-string contenant N voies parallèles ($:), avec :
Un plan de modulation lente par slider (paramètres X[i] qui évoluent au cours du temps selon une courbe).
Des effets de spatialisation (.delay, .room, .pan(rand)) sur chaque voie.
Un trancegate rythmique sur la voix principale.
Un scope() ou pianoroll() sur 1-2 voies pour la visualisation interne.
Méthode : réutiliser le notebook 04-5-LiveCoding-LLM-Music.ipynb (LLM compositeur) + un module strudel_compose.py qui contraint la sortie à un format valide (parsing mini-notation côté Python).
Étape 2 — Narration poétique (LLM, sortie texte)
Input : le script Strudel (étape 1) + le style + la durée cible.
Output : un texte de voix off structuré en segments {start_s, end_s, text, intensity} qui :
Nomme l'action (« let's add the bass », « next, the supersaw ») — comme dans SwitchAngel.
Glisse vers le poétique (« once there was a lonely melody wandering... »).
Tient en 60-90 s pour les vidéos courtes (3 min) ou 100 % de la durée pour les ambient lents.
Méthode : LLM avec system prompt dédié, calibré sur le genre observé (pas le contenu — zéro verbatim). Sortie : JSON segments timestampés.
Étape 3 — Synthèse vocale (TTS expressif)
Input : les segments JSON de l'étape 2.
Output : N fichiers WAV voix off (un par segment, ou concaténé).
Méthode : FishAudio S2-Pro (29 tags prosodiques via v4/fishaudio_client.py, déjà dans le workflow audiobook) ou Kokoro pour les voix simples. Voix libres (pas de clonage, pas d'imitation de SwitchAngel).
Input : le script Strudel de l'étape 1.
Output : une vidéo .webm du navigateur (audio + visuel) en train de jouer le script en temps réel.
Méthode :
Lancer Playwright headless sur https://strudel.cc/ (le 04-5 a déjà l'intégration <strudel-editor>, mais pas le boot du REPL).
Injecter le script Strudel via la console DevTools.
Capturer la vidéo de l'écran (page.video) et l'audio (page.evaluate(() => { navigator.mediaDevices.getDisplayMedia...}) OU routage audio via BlackHole/VB-Cable sur Windows, ou — plus simple — laisser le navigateur jouer et capturer via une autre entrée micro virtuelle).
Synchroniser audio navigateur + voix off TTS : mixer les deux pistes dans ffmpeg.
Défi technique : la capture audio du navigateur sans casser la latence. À tester d'abord avec un POC : playwright + strudel.cc + 30 s de musique + capture vidéo. Si infaisable, fallback : capture audio seule + rendu visuel = screen-recording manuel (mais perd la synchronicité fine).
Étape 5 — Visualizer custom (option V1, hors V0)
Input : l'audio mixé de l'étape 4.
Output : un overlay vidéo (calques alpha) avec un visualizer FFT ou un donut "Patron Angel".
Méthode V0 : skip — la capture navigateur Strudel inclut déjà les scopes internes (scope(), pianoroll()), c'est suffisant. Méthode V1 : composant Three.js custom ou shader GLSL piloté par analyse FFT du mix final. Sortie .webm transparente → composite ffmpeg avec la capture navigateur.
Étape 6 — Composition finale (ffmpeg)
Input : la vidéo capture navigateur (étape 4) + la voix off WAV (étape 3) + le générique ASCII art (PNG transparent ou SVG) + optionnellement le visualizer (étape 5).
Output : un .mp4 final avec :
Layout : Strudel à gauche 70 %, ASCII art + webcam/avatar à droite 30 %.
Sous-titres SRT (optionnel, via faster-whisper ou depuis les segments JSON étape 2).
Fade-out coordonné (vidéo qui s'éteint en parallèle de la musique).
Méthode : pipeline ffmpeg documenté dans 04-12-Compilation-Audio.ipynb (crossfade 20 ms, loudnorm, concat) + overlay moviepy ou ffmpeg -filter_complex.
Acceptance — vérifiable, 5 critères
Pipeline exécutable de bout en bout : commande unique python scripts/livecoding_video_pipeline.py --style trance --duration 180 --output out/trance_demo.mp4 qui produit un .mp4 ≥ 60 s sans intervention manuelle.
Code Strudel réellement joué dans le navigateur : assertion que la page strudel.cc est chargée, le script est injecté, l'audio est produit (vérif via page.evaluate qui lit le contexte audio Web Audio API).
Voix off expressive : 1 voix TTS (Kokoro ou FishAudio), prosodie non plate (≥ 3 variations pitch/intensity/pace sur la vidéo démo), pas de voix par défaut documentation.
Mix final propre : loudness normalisée (-14 LUFS), pas de clip, durée = script durée ± 5 s.
Vérification visuelle post-prod : la vidéo démo montre (a) le code Strudel en cours d'évolution (au moins 3 états visibles distincts au cours du temps), (b) la voix off audible et synchronisée, (c) le fade-out final musique + vidéo coordonné.
Hors scope (voie 3 B.0)
Voix SwitchAngel clonée — non (consentement obligatoire, règle 02-2-XTTS-Voice-Cloning.ipynb).
Recopiage verbatim des textes poétiques SwitchAngel — non (audit-cross-source-distillation).
Archive SwitchAngel dans le dépôt — non (bibliography-hygiene §2, archive canonique hors Git).
Générique visuel fixe ASCII art — la V0 utilise un simple titre overlay (strudel + narration), l'ASCII art "SWITCH ANGEL" est explicitement NON copié (il appartient à SwitchAngel, pas un template générique).
Effet "vocodé" sur la voix TTS — la V0 vise une voix propre, le vocodeur serait une V1 si besoin (cf. voix FishAudio S2-Pro tags).
Risques identifiés
Capture audio navigateur sur Windows : routeur audio virtuel requis (VB-Cable / BlackHole). Vérifier disponibilité sur po-2023.
Latence navigateur / Playwright : le REPL Strudel a un délai audio non négligeable (~50-200 ms selon cps). Test POC 30 s avant d'investir dans le pipeline complet.
LLM compositeur Strudel : le notebook 04-5 montre que c'est faisable mais pas trivial (sortie parfois invalide). Préférer la composition template + variantes (remplir un template avec paramètres) à la composition libre pour la V0.
Droits TTS voix : FishAudio S2-Pro a une licence qui peut restreindre la redistribution ; vérifier la licence exacte avant de publier une démo publique.
Lane / routage
myia-po-2023 (RTX 3090 + services Docker GenAI) pour le POC + itération. Si l'audio navigateur nécessite une latence basse, basculer sur la machine H100 (ai-01).
Hommage — SwitchAngel, source d'inspiration
Cette proposition s'inspire directement du travail de SwitchAngel sur YouTube — 4 vidéos de livecoding Strudel visionnées et analysées localement le 2026-09-11 :
SwitchAngel a inventé — ou du moins porté à un niveau rare — un genre complet : narration poétique slammée + construction orchestrale multi-pistes Strudel + modulation lente par slider + visualizer génératif + storytelling final (écran qui s'éteint, musique qui décroît). Ce n'est pas du livecoding "regardez je tape du code", c'est une performance construite où chaque élément (voix, code, image, fin) joue un rôle.
Ce qui est retenu pour le pipeline : la méthode — narration poétique pré-écrite + TTS expressif + Strudel multi-pistes incrémental + capture navigateur en temps réel + visualizer custom + fade-out coordonné. Ce qui n'est PAS retenu : son code Strudel, ses transcriptions, son audio, ses vidéos, son ASCII art. Aucune archive SwitchAngel ne sera committée dans le dépôt. Tout le banc d'analyse reste local sous
G:\Mon Drive\MyIA\IA\Bibliographie IA\SwitchAngel-livecoding-strudel\2026-09-11\(périmètrebibliography-hygiene.md§2).Voix : la voix off dans la vidéo générée sera synthétisée (Kokoro / FishAudio), pas clonée. La règle de
02-2-XTTS-Voice-Cloning.ipynb(« consentement écrit obligatoire ») s'applique aussi à la voix SwitchAngel, même si elle est parfois traitée. Si un jour SwitchAngel donne son accord explicite, la cellule de garde du pipeline citera son nom avec lien et date du consentement — pas avant.Contexte — pourquoi cette proposition maintenant
Le dépôt a déjà les briques :
MyIA.AI.Notebooks/GenAI/Audio/04-Applications/04-5-LiveCoding-LLM-Music.ipynb(48 cellules, kernel Python 3, mini-notation + itération conversationnelle LLM, exercices de livecoding). Couvre la construction musicale incrémentale et l'intégration web<strudel-editor>dans Jupyter, mais aucun pipeline de production vidéo.MyIA.AI.Notebooks/GenAI/Audio/04-Applications/04-6à04-13, Epic [EPIC] GenAI Audiobook Agentique — Pipeline 5-pass avec voice cloning + tags expressifs #1028) : TTS multi-voix Kokoro / FishAudio S2-Pro (29 tags prosodiques), analyse littéraire, casting par personnage, compilation FFmpeg avec loudnorm. Le plus avancé.03-2-Audio-Pipeline-Orchestration.ipynbSection 4 "Generation de podcast multi-voix" (démo 2 voix, 48.7 s). Spec narrative + POC, pas industrialisé.04-2-Transcription-Pipeline(SRT/VTT Whisper),04-4-Audio-Video-Sync(moviepy + ffmpeg + Whisper),Video/04-1-Educational-Video-Generation(script → visuels → narration vocale → assemblage),scripts/audiobook_pipeline.py(orchestrateur).127.0.0.1:36540), whisper-api (8190), tts-gateway (8196), tts-kokoro, tts-fishaudio.Manque : un pipeline unifié qui prend (a) un script Strudel + (b) un texte poétique de narration, et produit (c) une vidéo
.mp4avec (i) la capture du navigateur Strudel, (ii) la voix off TTS expressive, (iii) le visualizer, (iv) le mixage et le fade-out final.Périmètre proposé — pipeline en 6 étapes
Étape 1 — Composition Strudel multi-pistes (Python, hors navigateur)
Input : un style (
trance,ambient,techno,melancholy) + une durée cible (3-10 min) + un BPM.Output : un script Strudel Python-string contenant N voies parallèles (
$:), avec :.delay,.room,.pan(rand)) sur chaque voie.trancegaterythmique sur la voix principale.scope()oupianoroll()sur 1-2 voies pour la visualisation interne.Méthode : réutiliser le notebook
04-5-LiveCoding-LLM-Music.ipynb(LLM compositeur) + un modulestrudel_compose.pyqui contraint la sortie à un format valide (parsing mini-notation côté Python).Étape 2 — Narration poétique (LLM, sortie texte)
Input : le script Strudel (étape 1) + le style + la durée cible.
Output : un texte de voix off structuré en segments
{start_s, end_s, text, intensity}qui :Méthode : LLM avec system prompt dédié, calibré sur le genre observé (pas le contenu — zéro verbatim). Sortie : JSON segments timestampés.
Étape 3 — Synthèse vocale (TTS expressif)
Input : les segments JSON de l'étape 2.
Output : N fichiers WAV voix off (un par segment, ou concaténé).
Méthode : FishAudio S2-Pro (29 tags prosodiques via
v4/fishaudio_client.py, déjà dans le workflow audiobook) ou Kokoro pour les voix simples. Voix libres (pas de clonage, pas d'imitation de SwitchAngel).Étape 4 — Capture navigateur Strudel (Playwright + audio sync)
Input : le script Strudel de l'étape 1.
Output : une vidéo
.webmdu navigateur (audio + visuel) en train de jouer le script en temps réel.Méthode :
https://strudel.cc/(le04-5a déjà l'intégration<strudel-editor>, mais pas le boot du REPL).page.video) et l'audio (page.evaluate(() => { navigator.mediaDevices.getDisplayMedia...})OU routage audio via BlackHole/VB-Cable sur Windows, ou — plus simple — laisser le navigateur jouer et capturer via une autre entrée micro virtuelle).ffmpeg.Défi technique : la capture audio du navigateur sans casser la latence. À tester d'abord avec un POC :
playwright+strudel.cc+ 30 s de musique + capture vidéo. Si infaisable, fallback : capture audio seule + rendu visuel = screen-recording manuel (mais perd la synchronicité fine).Étape 5 — Visualizer custom (option V1, hors V0)
Input : l'audio mixé de l'étape 4.
Output : un overlay vidéo (calques alpha) avec un visualizer FFT ou un donut "Patron Angel".
Méthode V0 : skip — la capture navigateur Strudel inclut déjà les scopes internes (
scope(),pianoroll()), c'est suffisant.Méthode V1 : composant Three.js custom ou shader GLSL piloté par analyse FFT du mix final. Sortie
.webmtransparente → composite ffmpeg avec la capture navigateur.Étape 6 — Composition finale (ffmpeg)
Input : la vidéo capture navigateur (étape 4) + la voix off WAV (étape 3) + le générique ASCII art (PNG transparent ou SVG) + optionnellement le visualizer (étape 5).
Output : un
.mp4final avec :Méthode : pipeline
ffmpegdocumenté dans04-12-Compilation-Audio.ipynb(crossfade 20 ms, loudnorm, concat) + overlaymoviepyouffmpeg -filter_complex.Acceptance — vérifiable, 5 critères
python scripts/livecoding_video_pipeline.py --style trance --duration 180 --output out/trance_demo.mp4qui produit un.mp4≥ 60 s sans intervention manuelle.strudel.ccest chargée, le script est injecté, l'audio est produit (vérif viapage.evaluatequi lit le contexte audio Web Audio API).Hors scope (voie 3 B.0)
02-2-XTTS-Voice-Cloning.ipynb).strudel + narration), l'ASCII art "SWITCH ANGEL" est explicitement NON copié (il appartient à SwitchAngel, pas un template générique).Risques identifiés
cps). Test POC 30 s avant d'investir dans le pipeline complet.Lane / routage
myia-po-2023(RTX 3090 + services Docker GenAI) pour le POC + itération. Si l'audio navigateur nécessite une latence basse, basculer sur la machine H100 (ai-01).Tell applicable
🤖 Generated with Claude Code