Communitygithub.com

Firefly 生成式擴充與填補

使用 Adobe Firefly 的 Generative Expand 和 Generative Fill API — 包含遮罩策略、位置與長寬比控制、提示模式,以及填充與取代影像區域的差異。

Firefly 生成式擴充與填補 是什麼?

此技能專注於 Adobe Firefly Services 中的兩個核心影像編輯 API:Generative Expand 與 Generative Fill。它幫助開發者與 AI 代理理解何時該使用擴充(擴大畫布)或填補(修改現有區域),並提供遮罩製作、位置對齊、提示設計等生產級模式。技能支援多種平台(如 Claude Code, Cursor, Codex),並包含完整的非同步作業流程、API 端點範例(curl/jq),以及實務管線範例(如從單一素材產生多種長寬比、批次背景替換)。透過詳盡的決策表、生產模式與故障排除指南,開發者可以自動化從素材上傳、遮罩生成到最終資產輸出的全流程,確保在企業級工作流程中同時兼顧品質與效率。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add Focus-GTS/firefly-services-skills

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Firefly 生成式擴充與填補 是做什麼的?

兩個相關但用途不同的 API,用於修改現有影像。擴充會擴大畫布,並在新增區域生成新內容。填補則透過遮罩引導,修改或取代現有畫布內的區域。選擇正確的 API 是成功的一半,另一半則取決於遮罩品質。

何時使用此技能

在以下情況使用此技能:

  • 使用者想要向任何方向延伸影像的畫布
  • 使用者想要取代或修改影像中的區域(背景、物體、文字區域)
  • 行銷活動需要從單一素材產生多種長寬比
  • 創意團隊想要從影像中移除不需要的物體
  • 使用者提到修飾、外繪、擴充或填補

請勿在以下情況使用此技能:

  • 使用者想要一張全新的影像——請使用 firefly-generate-image-v3-async
  • 使用者想要現有影像的風格變體——請使用 firefly-generate-similar
  • 轉換僅是純點陣編輯(銳利化、色彩校正)——請使用 Lightroom API

擴充 vs 填補 — 決策表

需求端點
擴大畫布,在新區域生成內容擴充
變更影像長寬比(1:1 → 16:9)擴充
移除物體並修補區域填補
保留主體同時替換背景填補(遮罩覆蓋背景)
替換特定區域(天空、地面、人物的衣服)填補
修補受損或不需要的區域填補
外繪(經典 AI 藝術「生成超出畫面」)擴充

簡而言之:畫布變大 = 擴充。畫布不變 = 填補。

生成式擴充

步驟 1 — 提交擴充工作

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": "一片廣闊的沙漠景觀,持續延伸至遠方",
    "placement": {
      "alignment": {"horizontal": "center", "vertical": "center"}
    },
    "numVariations": 2
  }'

傳回非同步工作模式(jobId、statusUrl、cancelUrl)——以與 firefly-generate-image-v3-async 相同的方式輪詢。

placement 欄位

placement 控制原始圖像在新(較大)畫布中的位置:

"placement": {
  "alignment": {"horizontal": "center", "vertical": "center"},
  "inset": {"left": 0, "top": 0, "right": 0, "bottom": 0}
}
對齊方式效果
center、center原始影像置中,各方向等量擴充
left、center原始影像靠左,向右擴充
right、top原始影像位於右上角,向下及向左擴充

使用 inset 進行精細的像素級控制。典型模式:原始影像置中,均勻擴充。對於社群媒體變體(橫向→直向),將原始影像偏離中心,使主體落在安全區域內。

擴充的 prompt 欄位

提示描述新(擴充)區域應包含的內容。原始影像保持不變。範例:

原始影像提示結果
人物肖像"穿著商務西裝的身體其餘部分"原始頭部 + 新身體
白色背景上的產品"一個早晨光線下的廚房檯面"產品融入場景
風景特寫"上方有散落雲朵的廣闊天空"場景向上延伸

留空提示,讓 Firefly 以風格延伸現有內容(常見於裁切/重新裁切工作流程)。

長寬比配方

常見生產使用案例:

從到sizeplacement.alignment
1024×1024 (1:1)1408×768 (16:9 橫向)寬 1408,高 768center, center
1024×1024 (1:1)768×1408 (9:16 直向)寬 768,高 1408center, top (下半臉)
1408×768 (主視覺)2304×1280 (電影級)寬 2304,高 1280center, center
1024×1024 (方形)1024×1792 (限時動態直向)寬 1024,高 1792center, top

生成式填補

步驟 1 — 準備遮罩

填補需要一個遮罩來告訴 Firefly 要修改哪個區域。白色像素 = 填補這個區域。黑色像素 = 保留。灰階 = 柔和的混合。

遮罩必須與來源影像具有相同的尺寸。在客戶端(影像編輯器、Photoshop API 或程式化使用 sharp / pillow)生成遮罩,並以上傳為儲存參考。

# 上傳遮罩
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')

步驟 2 — 提交填補工作

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": "一個現代簡約的客廳背景",
    "numVariations": 2
  }'

傳回非同步工作模式——輪詢直到完成。

填補的 prompt 欄位

提示描述遮罩區域內應顯示的內容。未遮罩的區域保持不變。

遮罩覆蓋範圍提示結果
產品拍攝的背景"大理石廚房檯面"產品不變,新背景
一個不需要的人物"空長椅"人物移除,長椅填滿區域
標籤區域"極簡白色空間"標籤消失,區域清除
車輛的顏色區域"消光紅漆"車輛現在是紅色

遮罩生成策略

策略工具時機
手動遮罩Photoshop、影像編輯器一次性創意工作
程式化遮罩sharp、pillow幾何區域(上半部、左三分之一)
主體偵測Photoshop API select_subject 或自訂分割取代背景、隔離主體
色彩鍵遮罩sharp 閾值取代特定顏色區域
AI 分割SAM (Segment Anything)、Mediapipe生產分割管線

對於高產量工作流程(每日數百個主視覺素材的背景延伸),遮罩是透過主體偵測程式化生成的——絕不手動。

在管線中結合擴充與填補

一個常見的生產管線:

來源主視覺 (1408×768)
  ↓ 擴充(至 2304×1280,提示延伸場景)
擴充後的影像
  ↓ 填補(遮罩覆蓋文字區域,提示:「乾淨背景」)
清理後的電影級版本
  ↓ 套用 Photoshop API 動作(文字疊加、圖層合成)
最終素材

這是典型的主視覺生成模式的濃縮。每個階段都是一個非同步工作;管線前方有佇列(請參閱 firefly-services-rate-limits)。

生產模式

模式:從單一素材進行多長寬比生成

給定一個正方形主視覺,產生橫向 + 直向 + 限時動態格式:

const aspects = [
  { name: 'landscape-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: '自然地延續場景',
    numVariations: 2,
  })),
);

三個提交,平行產生約 6 個輸出。每個輸出都帶有長寬比標籤保存,供下游創意團隊使用。

模式:大規模背景替換

用於品牌活動創作者背景交換:

來源影像
  ↓ Photoshop API: select_subject → 遮罩(主體白色,背景黑色)
  ↓ 反轉遮罩(主體黑色,背景白色)—— Sharp/Pillow
使用反轉遮罩的填補請求
  ↓ prompt: "<品牌對齊背景>"
輸出:主體保留,新背景

反轉步驟至關重要——Photoshop 的 select_subject 提供主體遮罩;對於背景替換,您需要的是反轉版本。

驗證

當滿足以下條件時,擴充/填補管線已準備好投入生產:

  1. 每個使用案例都記錄了擴充與填補之間的決策
  2. 遮罩生成是自動化的,而非手動(對於任何超過 50 的數量)
  3. 遮罩在提交前已驗證正確的尺寸和正確的極性
  4. 輸出在標記為成功之前,已與來源進行視覺檢查
  5. 多長寬比管線平行提交,而非依序
  6. placement 決策符合品牌安全區域指南

故障排除與邊緣情況

  • 擴充輸出在原始與新內容之間有明顯接縫: 原始影像可能有異常顏色或顆粒感。嘗試變更種子重新生成,或擴充提示以描述來源影像的品質。
  • 填補提示被忽略: 遮罩可能反轉(白色 = 保留,黑色 = 填補,而非相反)。重新檢查遮罩極性。
  • 填補輸出超出遮罩邊界: 遮罩邊緣太柔和(嚴重的高斯模糊)。銳利化遮罩邊緣,或使用二值遮罩。
  • 擴充意外變更主體位置: 明確設定 placement.alignment——預設值可能會移動主體。
  • 遮罩太大(>8MB): 壓縮遮罩。單通道灰階 PNG 搭配有限調色盤通常可良好壓縮。
  • 擴充到極端長寬比看起來不自然: 分兩步驟擴充:原始 → 中等 → 最終。每個步驟的跨度較小。
  • 填補完全移除主體: 遮罩與主體重疊。將遮罩限制為僅背景。

與其他技能串聯

  • firefly-services-storage-refs — 遮罩 + 來源上傳
  • firefly-generate-image-v3-async — 相同的非同步模式
  • photoshop-api-actions — 用於自動化遮罩生成(select_subject)
  • firefly-services-rate-limits — 用於批次管線

參考資料

相關技能