Commit graph

13 commits

Author SHA1 Message Date
Ubuntu
6a875ad0d5 feat(M3): Édition par zone - inpainting localisé via masque
L'outil d'annotation existant ne servait qu'à créer un masque global.
Maintenant chaque masque peut déclencher un inpainting IA qui
modifie UNIQUEMENT la zone sélectionnée.

Backend:
- convertMaskForOpenAI(): convertit notre format (blanc=édit/noir=préserve)
  vers format OpenAI (alpha=0=édit/opaque=préserve)
- Auto-redimensionne le mask aux dims de l'image source
- generateImage() accepte maintenant un paramètre maskUrl
- OpenAI images.edits utilise le param "mask" + champ "image" (singulier)
  pour le mode inpainting
- Nouveau endpoint generation.inpaintZone(frameId, maskUrl, prompt, sourceType)
- sourceType: original / bg (regen actif) / fg (perso actif) / composite
- Crée une nouvelle variante du type approprié (Module 1)
- Synchronise les champs legacy

Frontend (AnnotationCanvas):
- Nouveau bouton "Inpainter zone" dans la toolbar
- Form dropdown avec sélecteur de source (original/composite/bg/fg)
  et prompt textarea
- handleInpaint: upload du masque + appel inpaintZone + new variant
- Sauve masque (bouton existant renommé "Sauver masque") séparé de l'inpainting
- AnnotationCanvas reçoit projectId + frameIndex pour pouvoir appeler les routes

Workflow utilisateur:
1. Mode "Annoter" dans le viewport (sur frame originale)
2. Dessine au pinceau/rectangle/lasso la zone à modifier
3. Click "Inpainter zone"
4. Choisit source (original/composite/etc.) + écrit le prompt
5. Click "Lancer inpainting"
6. OpenAI génère uniquement la zone masquée
7. Nouvelle variante créée et visible dans la galerie M1

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 06:48:21 +00:00
Ubuntu
ac327206e2 fix: format d'image 16:9 + redirect intelligent après login
Format ratio (60):
- OpenAI gpt-image-1: choix automatique de size (1024x1024 / 1536x1024 /
  1024x1536) selon ratio cible le plus proche
- Crop sharp post-génération pour matcher EXACTEMENT le ratio source
- segmentationService passe les dimensions du projet (width/height)
  à regenerateBackground et regenerateCharacter
- Routes generation.* récupèrent project.width/height depuis DB
- Testé: frame 25 (854x480) -> bg généré en 854x480 exact

Redirect bug (61):
- DashboardLayout: navigate("/login") déplacé du render vers useEffect
  (anti-pattern React fix)
- main.tsx redirectToLoginIfUnauthorized: préserve l'URL d'origine
  dans ?return=...
- Login.tsx onSuccess: redirige vers ?return URL au lieu de "/"
- Plus de retour à l'accueil après refresh ou opération

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 06:17:47 +00:00
Ubuntu
a40690cabb feat: fallback OpenAI gpt-image-1 quand Gemini en quota dépassé
- OPENAI_API_KEY ajouté dans .env.docker
- imageGeneration.ts: tente Gemini d'abord, fallback OpenAI sur erreur
- Support images.edits (multipart avec ref image) pour gpt-image-1
- Support images.generations (text-only) si pas de ref
- Provider trace dans GenerateImageResponse pour debug
- Testé: pipeline complet frame 25
  * Fond Ghibli: 21s via OpenAI (Gemini 429) -> 1.6MB PNG
  * Personnage moderne: 26s via OpenAI -> 1.6MB PNG RGBA
  * Composite final: 1s via sharp -> 2.6MB PNG

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 05:35:20 +00:00
Ubuntu
fe62b8506e fix: utiliser gemini-2.5-flash-image pour la génération d'images
- Modèle corrigé: gemini-2.0-flash-exp (supprimé) -> gemini-2.5-flash-image
- Pipeline de génération testé et fonctionnel
  (bloqué temporairement par quota API gratuit)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-21 04:53:39 +00:00
Ubuntu
c1606ad4c9 feat: migration complète Manus -> auto-hébergé (MinIO + Gemini)
Infrastructure:
- MinIO déployé en local pour le stockage S3 (docker-compose)
- Storage proxy réécrit: sert les fichiers depuis MinIO en streaming
  (plus de 307 redirect vers CDN externe)
- Legacy /manus-storage/ redirige vers /storage/

LLM & Image Generation:
- LLM: Gemini uniquement (suppression du fallback Forge)
- Image generation: Gemini Imagen direct (suppression Forge GenerateImage)
- llmConfig simplifié, un seul provider

Nettoyage Manus:
- Modules Forge stubbés (dataApi, heartbeat, map, notification, voiceTranscription)
- ENV simplifié (suppression forgeApiUrl, forgeApiKey)
- Analytics Manus supprimées du HTML
- systemRouter simplifié

Migration données:
- 750 fichiers migrés de Forge S3 vers MinIO (69.8 MB)
- URLs DB mises à jour: /manus-storage/ -> /storage/
- Script de migration inclus (scripts/migrate-to-minio.mjs)

Performance:
- Frame load: 500ms -> 62ms (8x plus rapide)
- Plus aucune dépendance réseau transatlantique pour le stockage

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-21 04:27:48 +00:00
Ubuntu
03a924490c feat: améliorations UX/UI workspace
Chat IA:
- Scroll natif avec auto-scroll vers le dernier message
- Input toujours visible en bas du panneau
- Remplace ScrollArea (ref cassé) par div overflow-y-auto

Panneaux redimensionnables:
- Bottom panel (timeline): drag vertical pour ajuster la hauteur (120-600px)
- Right panel (assistant): drag horizontal pour ajuster la largeur (280-700px)
- Handles visuels avec feedback hover

Timeline:
- Molette = zoom (sans Ctrl), Shift+molette = scroll horizontal
- Zoom max augmenté à 20x
- Clic droit = menu contextuel (aller à frame, set IN/OUT, effacer)
- data-seq-id sur les blocs de séquence pour identification

Génération IA:
- Meilleur error handling avec message dans le toast (8s durée)
- Console.error pour debug navigateur

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-21 03:13:34 +00:00
Ubuntu
bf689e5911 perf: réduction drastique des temps de chargement
- Cache utilisateur en mémoire (60s TTL) : élimine la query
  getUserByOpenId (~300ms) de chaque requête authentifiée
- Suppression du upsertUser(lastSignedIn) à chaque requête
- staleTime sur toutes les queries (auth.me: 60s, workspace: 30s,
  frames: 120s, home: 15s)
- refetchOnWindowFocus: false partout

Résultat: auth.me 300ms -> 70ms, workspace load 2.5s -> 0.8s

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-21 02:53:22 +00:00
Ubuntu
cee95145e5 fix: auth ne fait plus d'appel OAuth quand l'utilisateur existe en DB
L'authenticateRequest appelait getUserInfoWithJwt sur l'API Manus
à chaque requête, même pour les utilisateurs déjà en base.
Maintenant: si l'utilisateur existe en DB, on le retourne directement
sans appel réseau externe. L'appel OAuth ne se fait que pour les
nouveaux utilisateurs non-locaux.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-21 02:34:20 +00:00
Ubuntu
0c41340b25 perf: optimisation lecture temps réel et cache images
- Chargement bulk des URLs de frames (1 query au lieu de 1/frame)
- Preload des 30 prochaines frames pendant la lecture
- Cache navigateur activé sur le proxy S3 (max-age=3600, immutable)
- Fallback query tRPC uniquement si la map n'a pas la frame

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-21 01:49:45 +00:00
Ubuntu
20a643c4ce fix: audit complet et pipeline fonctionnel RetroToon Studio
Corrections critiques:
- Fix titre HTML {{project_title}} -> %VITE_APP_TITLE%
- Suppression vitePluginManusRuntime (360KB -> 4KB index.html)
- Upload vidéo: multer au lieu du parsing binary maison (anti-corruption)
- Extraction audio ffmpeg + sauvegarde sourceAudioUrl en DB
- Page /login dédiée + correction redirect auth
- Test moteurs IA: vrai HEAD request avec latence
- Suppression spam logs [Auth] Missing session cookie
- Fix fuite passwordHash dans auth.me
- Cookie sameSite: none -> lax (CSRF)

Sécurité:
- Endpoints admin protégés par adminProcedure (role=admin requis)
- Sidebar admin masquée pour non-admins
- AdminPanel: page accès refusé pour non-admins
- Bootstrap admin optimisé (skip rehash si identique)

Fonctionnalités:
- Export vidéo MP4 réel via ffmpeg local (H.264 + AAC audio)
- Download parallèle par batch de 20 (export 10x plus rapide)
- Détection de scènes réelle via ffmpeg scene detect
- Analyse arrière-plans via Gemini Vision (remplace Math.random)
- Gemini: conservation du role system + support image_url
- Suppression thinking.budget_tokens:128 (LLM config)
- Thumbnails de frames dans la timeline
- Toast export avec bouton télécharger
- Endpoint extraction audio à la demande

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-21 01:37:08 +00:00
Manus
e72537b20b feat: Import vidéo robuste + Multi-LLM Gemini + NLE Workspace complet
🎬 RetroToon Studio - Pipeline IA de recomposition de dessins animés

 Fonctionnalités:
- Import vidéo avec 3 modes (Rapide/Qualité/Personnalisé)
- Extraction frames robuste avec tolérance aux erreurs réseau
- Détection de plans par histogramme chi-squared
- Workspace NLE avec 6 modes de viewport
- Timeline avec séquences, marqueurs et audio synchronisé
- Loupe duale (zoom 2-8×, grille pixel)
- Assistant IA en langage naturel
- Segmentation par calques (SAM 2 architecture)
- Administration des moteurs IA

🧠 Intelligence Artificielle:
- Support multi-fournisseur LLM (Gemini 2.5 Flash + Built-in)
- Configuration dynamique depuis l'admin panel
- Fallback automatique entre fournisseurs
- Analyse de frames par vision multimodale

🐛 Corrections:
- Fix projects.get retournant undefined (tRPC interdit)
- Fix frames.getByIndex même problème
- Fix flux d'extraction interrompu par erreurs réseau isolées
- Les frames sont maintenant enregistrées même si l'extraction est partielle

📦 Stack: React 19 + tRPC 11 + Tailwind 4 + Drizzle ORM + MySQL
2026-05-20 01:51:58 +00:00
Manus
60d7d01c4e Checkpoint: RetroToon Studio v1.0 - Application professionnelle de recomposition d'animation. Inclut : thème blueprint architectural, schéma DB complet (8 tables), timeline NLE multipistes, segmentation IA (SAM 2), assistant opérateur autonome avec LLM, moteur de regénération IA, système Character Sheet, administration IA modulaire, mode test/simulation, 22 tests passants, 0 erreur TypeScript. 2026-05-19 23:38:28 +00:00
Manus
ac5969fbe8 Initial project bootstrap 2026-05-19 23:15:42 +00:00