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> |
||
|---|---|---|
| .. | ||
| _core | ||
| assistantOperator.ts | ||
| auth.logout.test.ts | ||
| db.ts | ||
| ffmpegLocal.ts | ||
| gemini.test.ts | ||
| keyboardShortcuts.test.ts | ||
| llmConfig.ts | ||
| routers.test.ts | ||
| routers.ts | ||
| segmentationService.ts | ||
| servicesConfig.test.ts | ||
| servicesConfig.ts | ||
| storage.ts | ||
| uploadRoute.ts | ||
| videoProcessor.test.ts | ||
| videoProcessor.ts | ||