Communitygithub.com

Expand et Fill Génératifs Firefly

Utilisez les API Generative Expand et Generative Fill d'Adobe Firefly – décidez quand utiliser chacune, maîtrisez les stratégies de masque, le placement, le contrôle du rapport hauteur/largeur et les schémas de prompt pour l'extension et l'édition propres d'images.

Qu'est-ce que Expand et Fill Génératifs Firefly ?

Cette compétence vous guide dans l'utilisation des deux API d'Adobe Firefly Services : Generative Expand (pour agrandir le canevas et générer du contenu dans les nouvelles zones) et Generative Fill (pour modifier ou remplacer des régions existantes guidées par un masque). Elle couvre les décisions clés (agrandir ou remplir), les stratégies de création de masques (manuelles, programmatiques, via Photoshop API), le contrôle du placement de l'image source, les schémas de prompt pour décrire le contenu des nouvelles zones, et les recettes de conversion de rapports hauteur/largeur (ex. : 1:1 vers 16:9). La documentation inclut des exemples concrets de pipelines de production, comme l'extension d'un key-art unique vers plusieurs formats (paysage, portrait, story) ou le remplacement de fond à l'échelle en inversant un masque de sujet. Elle est conçue pour les environnements de production où le volume dépasse 50 images par jour, automatisant la génération de masques et la soumission parallèle des tâches afin d'éviter les goulots d'étranglement et de garantir des résultats fiables.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add Focus-GTS/firefly-services-skills

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation


name: firefly-expand-fill name: firefly-expand-fill description: Utilisation des APIs Generative Expand et Generative Fill d'Adobe Firefly — quand les utiliser, stratégies de masque, contrôle du placement et du rapport hauteur/largeur, schémas de prompt pour l'extension et le remplacement propres, différence entre remplissage et remplacement de zones d'image. À utiliser chaque fois que l'utilisateur mentionne « agrandissement génératif », « étendre le canevas », « remplissage génératif », « inpainting », « outpainting », « supprimer un objet », « remplacer l'arrière-plan », « agrandir l'image », « remplir l'image », « masque », « expand-async », « fill-async », ou souhaite agrandir/réparer/modifier une image existante. Encapsule les schémas de production pour l'extension d'arrière-plan sur les assets clés et le remplacement d'arrière-plan aligné sur la marque dans les créateurs de campagnes. license: Apache-2.0 compatibility: Nécessite les scopes firefly_api, ff_apis. Points d'accès : firefly-api.adobe.io/v3/images/expand et /v3/images/fill. Les images sources doivent être transmises sous forme de références de stockage. allowed-tools: Bash(curl:) Bash(jq:) Read Write Edit metadata: version: "1.0.0" category: édition-d-images

Que fait Expand et Fill Génératifs Firefly ?

Deux API liées mais distinctes pour modifier des images existantes. Expand agrandit le canevas et génère du nouveau contenu dans la zone agrandie. Fill modifie ou remplace des régions à l'intérieur du canevas existant, guidé par un masque. Choisir la bonne API est la moitié de la bataille ; le reste est la qualité du masque.

Quand Utiliser Cette Compétence

Utilisez cette compétence quand :

  • L'utilisateur souhaite étendre le canevas d'une image dans n'importe quelle direction
  • L'utilisateur souhaite remplacer ou modifier une région d'une image (arrière-plan, objet, zone de texte)
  • Une campagne nécessite plusieurs rapports hauteur/largeur à partir d'un seul asset source
  • Une équipe créative souhaite supprimer un objet indésirable d'une image
  • L'utilisateur mentionne l'inpainting, l'outpainting, l'expansion ou le remplissage

N'utilisez PAS cette compétence quand :

  • L'utilisateur souhaite une image entièrement nouvelle — utilisez firefly-generate-image-v3-async
  • L'utilisateur souhaite des variations stylistiques d'une image existante — utilisez firefly-generate-similar
  • La transformation est purement raster (accentuation, correction des couleurs) — utilisez l'API Lightroom

Expand vs Fill — Tableau de Décision

BesoinPoint d'accès
Agrandir le canevas, générer du contenu dans la nouvelle zoneExpand
Modifier le rapport hauteur/largeur d'une image (1:1 → 16:9)Expand
Supprimer un objet et réparer la zoneFill
Remplacer l'arrière-plan tout en gardant le sujetFill avec un masque couvrant l'arrière-plan
Remplacer une région spécifique (ciel, sol, chemise d'une personne)Fill
Inpainting d'une zone endommagée ou indésirableFill
Outpainting (le classique "générer au-delà du cadre" de l'IA artistique)Expand

En résumé : le canevas s'agrandit = Expand. Le canevas reste identique = Fill.

Expand Génératif

Étape 1 — Soumettre le Travail d'Expand

curl --silent -X POST 'https://firefly-api.adobe.io/v3/images/expand' \
  -H "Authorization: Bearer $FIREFLY_SERVICES_ACCESS_TOKEN" \
  -H "X-Api-Key: $FIREFLY_SERVICES_CLIENT_ID" \
  -H 'Content-Type: application/json' \
  -d '{
    "image": {"source": {"uploadId": "$SOURCE_UPLOAD_ID"}},
    "size": {"width": 2304, "height": 1280},
    "prompt": "un paysage désertique qui s'étend au loin",
    "placement": {
      "alignment": {"horizontal": "center", "vertical": "center"}
    },
    "numVariations": 2
  }'

Renvoie le schéma de travail asynchrone (jobId, statusUrl, cancelUrl) — interrogez de la même manière que firefly-generate-image-v3-async.

Le Champ placement

placement contrôle où l'image originale se trouve dans le nouveau canevas (plus grand) :

"placement": {
  "alignment": {"horizontal": "center", "vertical": "center"},
  "inset": {"left": 0, "top": 0, "right": 0, "bottom": 0}
}
AlignementEffet
center, centerOriginale au milieu, agrandie également de tous les côtés
left, centerOriginale à gauche, agrandie vers la droite
right, topOriginale en haut à droite, agrandie vers le bas et la gauche

Utilisez inset pour un contrôle fin au pixel près. Schéma typique : originale au centre, agrandissement uniforme. Pour les variantes de réseaux sociaux (paysage → portrait), placez l'originale décentrée pour que le sujet se trouve dans la zone de sécurité.

Le Champ prompt pour Expand

Les prompts décrivent ce que la nouvelle zone (agrandie) doit contenir. L'image originale reste inchangée. Exemples :

OriginalePromptRésultat
Portrait d'une personne"le reste de son corps en costume d'affaires"Tête originale + nouveau corps
Produit sur fond blanc"un plan de travail de cuisine avec lumière matinale"Produit en scène
Gros plan paysage"un vaste ciel avec des nuages épars au-dessus"La scène continue vers le haut

Laissez prompt vide pour que Firefly étende stylistiquement le contenu existant (courant pour les workflows de recadrage/re-recadrage).

Recettes de Rapports Hauteur/Largeur

Cas d'utilisation courants en production :

DepuisVerssizeplacement.alignment
1024×1024 (1:1)1408×768 (16:9 paysage)largeur 1408, hauteur 768center, center
1024×1024 (1:1)768×1408 (9:16 portrait)largeur 768, hauteur 1408center, top (visage bas)
1408×768 (key art)2304×1280 (cinématique)largeur 2304, hauteur 1280center, center
1024×1024 (carré)1024×1792 (portrait story)largeur 1024, hauteur 1792center, top

Fill Génératif

Étape 1 — Préparer le Masque

Fill nécessite un masque qui indique à Firefly quelle région modifier. Pixels blancs = remplir ceci. Pixels noirs = préserver. Niveaux de gris = mélange doux.

Le masque doit avoir les mêmes dimensions que l'image source. Générez le masque côté client (éditeur d'images, API Photoshop, ou par programmation avec sharp / pillow) et téléchargez-le comme référence de stockage.

# Téléchargement du masque
MASK_UPLOAD_ID=$(curl --silent -X POST 'https://firefly-api.adobe.io/v2/storage/image' \
  -H "Authorization: Bearer $FIREFLY_SERVICES_ACCESS_TOKEN" \
  -H "X-API-Key: $FIREFLY_SERVICES_CLIENT_ID" \
  -H "Content-Type: image/png" \
  --data-binary "@./mask.png" \
  | jq -r '.images[0].id')

Étape 2 — Soumettre le Travail de Fill

curl --silent -X POST 'https://firefly-api.adobe.io/v3/images/fill' \
  -H "Authorization: Bearer $FIREFLY_SERVICES_ACCESS_TOKEN" \
  -H "X-Api-Key: $FIREFLY_SERVICES_CLIENT_ID" \
  -H 'Content-Type: application/json' \
  -d '{
    "image": {
      "source": {"uploadId": "$SOURCE_UPLOAD_ID"},
      "mask": {"source": {"uploadId": "$MASK_UPLOAD_ID"}}
    },
    "prompt": "un fond de salon moderne minimaliste",
    "numVariations": 2
  }'

Renvoie le schéma de travail asynchrone — interrogez pour obtenir la complétion.

Le Champ prompt pour Fill

Les prompts décrivent ce qui doit apparaître dans la région masquée. La région non masquée reste inchangée.

Le masque couvrePromptRésultat
L'arrière-plan d'une photo produit"plan de travail en marbre de cuisine"Produit inchangé, nouvel arrière-plan
Une personne indésirable"banc de parc vide"Personne supprimée, le banc remplit la zone
Une zone d'étiquette"espace blanc minimal"Étiquette disparue, zone nettoyée
La zone de couleur d'un véhicule"peinture rouge mat"Véhicule maintenant rouge

Stratégies de Génération de Masques

StratégieOutilQuand
Masque manuelPhotoshop, éditeur d'imagesTravail créatif ponctuel
Masque programmatiquesharp, pillowRégions géométriques (moitié supérieure, tiers gauche)
Détection du sujetAPI Photoshop select_subject ou segmentation personnaliséeRemplacer l'arrière-plan, isoler le sujet
Masque par couleur cléSeuil sharpRemplacer une région de couleur spécifique
Segmentation IASAM (Segment Anything), MediapipePipelines de segmentation en production

Pour les workflows à volume élevé (extension d'arrière-plan sur des centaines d'assets clés par jour), les masques sont générés par programmation à partir de la détection du sujet — jamais à la main.

Combiner Expand + Fill dans un Pipeline

Un pipeline de production courant :

Key-art source (1408×768)
  ↓ Expand (vers 2304×1280, prompt étendant la scène)
Image agrandie
  ↓ Fill (masque couvre la zone de texte, prompt : "fond propre")
Version cinématique nettoyée
  ↓ Appliquer les actions de l'API Photoshop (superposition de texte, composition de calques)
Asset final

C'est le schéma canonique de génération de key-art condensé. Chaque étape est un travail asynchrone ; le pipeline est mis en file d'attente (voir firefly-services-rate-limits).

Schémas de Production

Schéma : Génération multi-rapport à partir d'une source

À partir d'un key-art carré, générez les formats paysage + portrait + story :

const aspects = [
  { name: 'paysage-16-9', size: { width: 1408, height: 768 }, alignment: { horizontal: 'center', vertical: 'center' } },
  { name: 'portrait-9-16', size: { width: 768, height: 1408 }, alignment: { horizontal: 'center', vertical: 'top' } },
  { name: 'story-9-16', size: { width: 1024, height: 1792 }, alignment: { horizontal: 'center', vertical: 'top' } },
];

const jobs = await Promise.all(
  aspects.map(a => submitExpand({
    sourceUploadId: SOURCE_ID,
    size: a.size,
    placement: { alignment: a.alignment },
    prompt: 'continuer la scène naturellement',
    numVariations: 2,
  })),
);

Trois soumissions, ~6 sorties en parallèle. Persistez chacune avec l'étiquette de format pour l'équipe créative en aval.

Schéma : Remplacement d'arrière-plan à l'échelle

Pour les échanges d'arrière-plan dans les créateurs de campagnes de marque :

Image source
  ↓ API Photoshop : select_subject → masque (sujet blanc, arrière-plan noir)
  ↓ Inverser le masque (sujet noir, arrière-plan blanc) — Sharp/Pillow
Requête Fill avec masque inversé
  ↓ prompt : "<arrière-plan aligné sur la marque>"
Sortie : sujet préservé, nouvel arrière-plan

L'étape d'inversion est critique — select_subject de Photoshop donne le masque du sujet ; pour le remplacement d'arrière-plan, vous avez besoin de l'inverse.

Validation

Les pipelines Expand/Fill sont prêts pour la production quand :

  1. La décision entre Expand et Fill est documentée par cas d'utilisation
  2. La génération de masques est automatisée, pas manuelle (pour tout volume >50)
  3. Les masques sont validés pour les bonnes dimensions et la bonne polarité avant soumission
  4. La sortie est inspectée visuellement par rapport à la source avant d'être marquée comme réussie
  5. Les pipelines multi-rapports soumettent en parallèle, pas en séquentiel
  6. Les décisions de placement sont alignées avec les directives de zone de sécurité de la marque

Dépannage et Cas Particuliers

  • La sortie Expand présente une couture visible entre l'original et le nouveau contenu : L'original peut avoir une couleur ou un grain inhabituel. Essayez de régénérer avec un changement de graine, ou développez le prompt avec une description des qualités de la source.
  • Le prompt Fill est ignoré : Le masque est probablement inversé (blanc = préserver, noir = remplir au lieu de l'inverse). Revérifiez la polarité du masque.
  • La sortie Fill déborde en dehors du masque : Les bords du masque sont trop doux (fort flou gaussien). Affinez les bords du masque, ou utilisez un masque binaire.
  • Expand change le placement du sujet de manière inattendue : Définissez explicitement placement.alignment — les valeurs par défaut peuvent déplacer le sujet.
  • Masque trop volumineux (>8 Mo) : Compressez le masque. Un PNG en niveaux de gris à canal unique avec une palette limitée se compresse généralement bien.
  • Expand vers un rapport hauteur/largeur extrême semble non naturel : Étendez en deux étapes : original → intermédiaire → final. Chaque étape est un saut plus petit.
  • Fill supprime complètement le sujet : Le masque chevauche le sujet. Réduisez le masque à l'arrière-plan uniquement.

Enchaînement avec d'Autres Compétences

  • firefly-services-storage-refs — Téléchargement du masque + source
  • firefly-generate-image-v3-async — Même schéma asynchrone
  • photoshop-api-actions — Pour la génération automatisée de masques (select_subject)
  • firefly-services-rate-limits — Pour les pipelines par lots

Références

Skills associés