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> |
||
|---|---|---|
| .. | ||
| types | ||
| context.ts | ||
| cookies.ts | ||
| dataApi.ts | ||
| env.ts | ||
| heartbeat.ts | ||
| imageGeneration.ts | ||
| index.ts | ||
| llm.ts | ||
| localAuth.ts | ||
| map.ts | ||
| notification.ts | ||
| oauth.ts | ||
| sdk.ts | ||
| storageProxy.ts | ||
| systemRouter.ts | ||
| trpc.ts | ||
| vite.ts | ||
| voiceTranscription.ts | ||