retrotoon-studio/server
Ubuntu 0b8f804449 feat: refonte architecturale Génération / Composition séparées
Problème: l'onglet Calques était inutile (vide en pratique), et le studio
Génération IA mélangeait création (prompts) et post-production (déplacer,
annoter, inpainter). Mental model confus.

Solution: séparation claire des responsabilités:

# STUDIO GÉNÉRATION (onglet "Génération IA")
Recentré sur sa mission unique: produire du contenu IA brut.
- Prompt + style + N variantes + galeries
- Preview live (CompositePreview empile bg+fg actifs)
- 3 modes preview: Live / Figé / Original
- Bouton "Figer composite"
- SUPPRIMÉ: toolbar OUTILS (Manipuler/Annoter) - déménagent en Composition
- Hint vers l'onglet Composition pour les retouches

# STUDIO COMPOSITION (onglet "Calques" renommé "Composition")
Nouveau composant CompositionStudio (550 lignes) avec 3 zones:
- Gauche (260px): Liste layers avec drag-drop, visible/lock/opacity
- Centre (1fr): Canvas live, toolbar Sélection/Manipuler/Annoter,
  bouton "Figer composite", overlays LayerManipulator + AnnotationCanvas
- Droite (280px): Inspecteur du layer sélectionné
  * Name editable
  * Source visuelle (variant picker pour changer la source)
  * Opacity slider, blend mode
  * Transform display (modifié via outil Manipuler)
  * Masque preview + clear
  * Dupliquer / Supprimer

# MODÈLE DE DONNÉES UNIFIÉ
Table layers enrichie (migration ALTER TABLE):
- frameId (composition est par-frame)
- sourceVariantId (FK vers frameVariants - réutilisable)
- imageUrl (pour layers d'effets/objets sans variant source)
- blendMode (normal/multiply/screen/overlay)
- transform JSON (x, y, scale, rotation, flipH, flipV)
- maskUrl spécifique au layer

# AUTO-CRÉATION DES LAYERS
Lors de generation.regenerateBackground/Character:
- Création/sync d'un layer correspondant via upsertLayerForVariant
- name auto ("Arrière-plan IA" / "Personnage IA")
- sourceVariantId pointe vers la variante générée
- order: 0 pour bg, 1 pour character

# COMPOSITING SERVEUR REFONDU
compositing.composeFrame utilise désormais les layers DB:
- Itère sur listLayersForFrame(frameId)
- Résout chaque imageUrl via sourceVariantId ou imageUrl direct
- Applique opacity, blendMode, transform, maskUrl du layer
- Fallback sur les anciens champs frame.regenerated*Url si pas de layers

# NOUVEAUX ENDPOINTS tRPC
- layers.listForFrame(frameId)
- layers.patch (toutes propriétés partielles)
- layers.duplicate(layerId)
- layers.createCustom(frameId, type, name, imageUrl?)
- (existant: reorder, toggleVisibility, toggleLock, delete, create)

# MIGRATION DES DONNÉES EXISTANTES
Script créé: 14 layers générés à partir des frameVariants actives
de 10 frames qui n'avaient pas de layers.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 16:21:29 +00:00
..
_core feat(M3): Édition par zone - inpainting localisé via masque 2026-05-21 06:48:21 +00:00
assistantOperator.ts feat: pipeline complet - annotation, compositing réel, auto-compose, drag-drop layers 2026-05-21 05:19:07 +00:00
auth.logout.test.ts fix: audit complet et pipeline fonctionnel RetroToon Studio 2026-05-21 01:37:08 +00:00
db.ts feat: refonte architecturale Génération / Composition séparées 2026-05-21 16:21:29 +00:00
ffmpegLocal.ts fix: audit complet et pipeline fonctionnel RetroToon Studio 2026-05-21 01:37:08 +00:00
gemini.test.ts feat: Import vidéo robuste + Multi-LLM Gemini + NLE Workspace complet 2026-05-20 01:51:58 +00:00
keyboardShortcuts.test.ts Checkpoint: Refactoring complet du système de raccourcis clavier : remplacement du hook useKeyboardShortcuts par un ShortcutsContext React partagé. Le ViewportPanel et le ShortcutSettings partagent désormais le même état via un Provider unique. Les listeners sont automatiquement désactivés pendant l'enregistrement d'un nouveau raccourci pour éviter les conflits. Les modifications sont immédiatement reflétées dans les tooltips et le listener actif. 47 tests passants, zéro erreur TypeScript. 2026-05-20 00:37:46 +00:00
llmConfig.ts feat: migration complète Manus -> auto-hébergé (MinIO + Gemini) 2026-05-21 04:27:48 +00:00
routers.test.ts fix: audit complet et pipeline fonctionnel RetroToon Studio 2026-05-21 01:37:08 +00:00
routers.ts feat: refonte architecturale Génération / Composition séparées 2026-05-21 16:21:29 +00:00
segmentationService.ts feat(M2): Manipulation spatiale des calques personnage 2026-05-21 07:06:26 +00:00
servicesConfig.test.ts Checkpoint: Intégration complète du module servicesConfig : les pipelines FFmpeg (extraction, audio, export) et SAM 2 (segmentation, propagation) lisent la configuration admin et basculent entre mode simulé et service externe. Stratégie de génération LoRA/IP-Adapter avec sélection automatique basée sur modelType du personnage. Contraintes ControlNet/pose intégrées dans le prompt engineering. Cache invalidé automatiquement après sauvegarde admin. 41 tests passants. 2026-05-20 00:15:37 +00:00
servicesConfig.ts Checkpoint: Intégration complète du module servicesConfig : les pipelines FFmpeg (extraction, audio, export) et SAM 2 (segmentation, propagation) lisent la configuration admin et basculent entre mode simulé et service externe. Stratégie de génération LoRA/IP-Adapter avec sélection automatique basée sur modelType du personnage. Contraintes ControlNet/pose intégrées dans le prompt engineering. Cache invalidé automatiquement après sauvegarde admin. 41 tests passants. 2026-05-20 00:15:37 +00:00
storage.ts feat: migration complète Manus -> auto-hébergé (MinIO + Gemini) 2026-05-21 04:27:48 +00:00
uploadRoute.ts feat: migration complète Manus -> auto-hébergé (MinIO + Gemini) 2026-05-21 04:27:48 +00:00
videoProcessor.test.ts Checkpoint: RetroToon Studio v4 - Ajout de l'algorithme de détection de cuts basé sur chi-squared histogramme (hard cuts + dissolves), export vidéo avec bouton fonctionnel dans le workspace, suppression de projet avec cascade complète, compositing amélioré avec alpha blending et propagation temporelle des masques avec drift detection, utilisation effective du maskUrl dans l'inpainting. 34 tests vitest passants, 0 erreur TypeScript. 2026-05-20 00:04:26 +00:00
videoProcessor.ts feat: migration complète Manus -> auto-hébergé (MinIO + Gemini) 2026-05-21 04:27:48 +00:00