Spaces:
Sleeping
A newer version of the Gradio SDK is available: 6.15.2
Remix Render — Plan d'implémentation
Objectif
Permettre de re-render une histoire déjà générée avec un profil différent (VFX, voix, musique) sans refaire les images IA (coûteuses et lentes). Chaque variante est sauvegardée séparément.
Comment ça marche aujourd'hui
- Dashboard → LANCER LA PRODUCTION
trigger_story.jsonécrit avecstory_id+config00_master_pipeline.pylit le trigger → lanceasset_generator.py(images IA) +story_to_video.py(montage)- La vidéo finale écrase toujours
TT_{slug}_final.mp4
Changements proposés
1. UI — Bouton "REMIX" dans le Project Bin
Ajouter un bouton ⚡ REMIX à côté de chaque histoire dans le bin (ou dans le Master Controls de l'Inspector).
Modal de remix :
- Sélection VFX Profile (dropdown)
- Sélection Voice (dropdown, depuis la liste existante)
- Sélection Background Music (dropdown)
- Checkbox : "Regenerate images (slow)" — décoché par défaut
- Nom de variante (ex.
vhs_jean) → auto-généré ou manuel - Bouton LANCER LE REMIX
2. Backend — Nouveau endpoint POST /api/stories/remix
[MODIFY] main_routes.py
Nouveau endpoint qui écrit un trigger_story.json enrichi avec les overrides de config ET un flag remix_only: true pour sauter la génération d'images.
{
"story_id": "Les Pendus du Brise-Lames",
"story_path": "/data/stories/Rimouski/Les Pendus du Brise-Lames",
"config": {
"remix_only": true, # Saute asset_generator.py
"vfx_profile": "vhs", # Injecté dans env pour story_to_video.py
"voice": "fr-CA-JeanNeural",
"bg_music": "dark_ambient.mp3",
"output_suffix": "vhs_jean" # Nom de sortie unique
}
}
3. Pipeline — Skip asset_generator.py si remix_only
[MODIFY] 00_master_pipeline.py
if triggered_config.get("remix_only"):
info("MODE REMIX : Les images existantes seront réutilisées.")
else:
# ... génération images IA comme avant
run(f'python "{asset_script}"...')
Injection des overrides dans l'environnement avant story_to_video.py :
remix_env = {}
if vfx := triggered_config.get("vfx_profile"):
remix_env["VFX_PROFILE"] = vfx
if voice := triggered_config.get("voice"):
remix_env["VOICE_OVERRIDE"] = voice
if music := triggered_config.get("bg_music"):
remix_env["MUSIC_OVERRIDE"] = music
if suffix := triggered_config.get("output_suffix"):
remix_env["OUTPUT_SUFFIX"] = suffix
4. story_to_video.py — Lecture des overrides env
[MODIFY] story_to_video.py
VOICE_OVERRIDE→ remplace la voix lue depuis le.mdMUSIC_OVERRIDE→ cherche ce fichier dansMUSIC_ASSETS/au lieu du fallback autoOUTPUT_SUFFIX→ append au nom du fichier de sortie :TT_{slug}_final_{suffix}.mp4
Résultat visuel
Dans le Project Bin, les histoires qui ont des variantes auront un indicateur :
📂 LES PENDUS DU BRISE-LAMES [5]
► TT_Les_Pendus_final.mp4 (original)
► TT_Les_Pendus_final_vhs_jean.mp4 (variante 1)
► TT_Les_Pendus_final_grain_sylvie.mp4 (variante 2)
Vérification
- Lancer un remix sans regenerer images → vidéo produite en ~3-5 min au lieu de 30+ min
- La variante est bien sauvegardée avec le suffix correct
- Le UI affiche correctement le statut Engine pendant le remix
Questions ouvertes pour l'utilisateur
Est-ce que tu veux choisir à chaque fois, ou est-ce que tu veux définir des presets de remix (ex. "Preset Horror VHS", "Preset Cinématic Jean") que tu appliques en 1 clic ?
Si tu as déjà des fichiers audio ou des samples de musique que tu veux utiliser, ils doivent être dans
data/assets/background_music/. Je peux aussi ajouter l'upload depuis le UI.