Communitygithub.com

kalash33/adobe-resize-photos-and-videos

使用 Adobe 工具將照片和影片調整為精確的像素尺寸或長寬比。每當使用者想要調整影像或影片檔案的大小、縮放或變更尺寸時,請使用此技能。

adobe-resize-photos-and-videos 是什麼?

此技能是專為 AI 代理設計,用於支援 Adobe Creative Cloud 的生態系統,能將影像或影片調整為使用者指定的確切像素尺寸、長寬比或命名尺寸(如 4K、HD、A4)。它透過結構化逐步工作流程,引導代理處理缺失的參數、類型判斷、尺寸解析,並基於檔案類型(image/* 或 video/*)路由至正確的調整流程。對於照片,它使用 `image_crop_and_resize` 工具支援多種調整模式(如 reframe、pad、extract)與智慧對焦功能;對於影片,則使用 `video_resize` 工具搭配輪詢機制。工作流程也包含批次處理、輸出預覽、儲存至 Creative Cloud 及建立 Firefly 展示板等功能。這個技能確保 AI 代理能正確呼叫 Adobe API,避免常見陷阱(例如無效的 `/mnt/user-data/uploads/` 路徑),並在需要時透過詢問使用者來收集遺漏的參數。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kalash33/kstack/tree/HEAD/skills/adobe-adobe-resize-photos-and-videos

在你喜歡的 AI 中提問

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

說明文件

Adobe 調整照片和影片大小

將圖片或影片調整為使用者指定的尺寸、長寬比或命名大小。 針對社群媒體平台組合(Instagram、TikTok 等)→ 請改用 adobe-create-social-variations 技能。


工具參考

步驟工具備註
開啟檔案挑選器asset_add_file回傳 presignedAssetUrl、assetId 和 mediaType
在 CC 中尋找資產asset_search圖片需透過 asset_add_file 重新暫存;影片可直接使用 id
渲染 PSD/AIdocument_render_vector在調整大小前轉換為 JPEG
調整圖片大小image_crop_and_resize每個尺寸呼叫一次;預設為 reframe
預覽輸出asset_preview_file所有輸出在單一呼叫中處理
上傳至 CC(開始)asset_initialize_file_upload區塊上傳管線中的第一個呼叫
上傳至 CC(完成)asset_finalize_file_upload第二個呼叫;回傳用於展示板的 presigned CC URL
建立 Firefly 展示板create_firefly_board傳入 import_adobe_storage 並附上最終 URL
調整影片大小video_resize回傳 statusId 供輪詢使用
輪詢影片調整狀態resizeVideoPoll延遲工具 — 必須先載入才能呼叫

工作流程

步驟 0 — 初始化 Adobe 工具

首先呼叫 adobe_mandatory_init。這會回傳檔案處理規則及工作流程其餘部分所需的路由指引。

{ "skill_name": "adobe-resize-photos-and-videos", "skill_version": "1.0.1" }

步驟 1 — 權限檢查

現在 adobe_mandatory_init 已確認「Adobe for creativity」連接器啟用,請對照上述工具參考表格,檢查哪些工具可透過該連接器使用。


立即需要執行

步驟 1: 若參數缺失或不明確 → 執行多步驟收集(下方步驟 2)。 步驟 2: 若未上傳檔案,執行步驟 3(asset_add_file({}))。 步驟 3: 偵測圖片或影片,並路由至正確的工作流程(步驟 5 圖片/影片)。


步驟 2 — 多步驟收集

當使用者未提供完整參數(類型 + 尺寸 + 適應模式)時執行。 若使用者的訊息已包含全部三者,則跳過此步驟。

使用 AskUserQuestion 逐步收集參數。

步驟 2a — 類型

AskUserQuestion([{
  question: "照片還是影片?",
  type: "single_select",
  options: ["照片", "影片"]
}])

步驟 2b — 尺寸

如果是照片(multi_select — 使用者可選擇一個或多個):

AskUserQuestion([{
  question: "尺寸 — 選擇您需要的所有選項",
  type: "multi_select",
  options: [
    "1080 × 1080 — Instagram 正方形",
    "1080 × 1350 — Instagram 直式",
    "1080 × 1920 — 限時動態 / Reels",
    "1920 × 1080 — YouTube / 橫式",
    "1280 × 720 — YouTube 縮圖",
    "1200 × 675 — X / Twitter 貼文",
    "1200 × 630 — Facebook / OG 圖片",
    "1080 × 566 — LinkedIn 貼文",
    "2560 × 1440 — YouTube 橫幅",
    "3840 × 2160 — 4K / UHD",
    "400 × 400 — 個人資料 / 頭像",
    "2480 × 3508 — A4 列印(300 dpi)",
    "自訂 — 我會輸入"
  ]
}])

若使用者包含「自訂」→ 後續提問:「請輸入您的自訂尺寸(例如 1500×800):」

若使用者選擇多個預設選項 → 每次針對一個尺寸執行 image_crop_and_resize, 每次使用相同的來源 URI 和參數。最後一起預覽所有輸出。

如果是影片(multi_select — 使用者可選擇一個或多個):

AskUserQuestion([{
  question: "尺寸 — 選擇您需要的所有選項",
  type: "multi_select",
  options: [
    "1080 × 1920 — Reels / TikTok / 限時動態",
    "1920 × 1080 — YouTube / 橫式",
    "1080 × 1080 — 正方形貼文",
    "1280 × 720 — YouTube 720p",
    "3840 × 2160 — 4K / UHD",
    "854 × 480 — SD / 480p",
    "自訂 — 我會輸入"
  ]
}])

若使用者選擇多個影片預設選項 → 為每個尺寸提交獨立的 video_resize 工作, 輪詢至完成,最後一起預覽所有輸出。

步驟 2c — 適應模式

如果是照片(single_select):

AskUserQuestion([{
  question: "適應模式",
  type: "single_select",
  options: [
    "Reframe — 裁切填滿",
    "Pad — 黑邊信箱,不裁切",
    "Extract — 隔離主體"
  ]
}])

如果是影片(single_select):

AskUserQuestion([{
  question: "適應模式",
  type: "single_select",
  options: [
    "Letterbox — 保持比例",
    "Crop — 填滿,無黑邊",
    "Stretch — 強制精確(變形)"
  ]
}])

步驟 2d — 智慧對焦(僅限照片)

AskUserQuestion([{
  question: "智慧對焦 — 裁切應以何處為中心?",
  type: "single_select",
  options: [
    "主體",
    "臉部 / 肖像",
    "上半身",
    "中心(幾何)",
    "命名物件 — 我會描述"
  ]
}])

若使用者選擇「命名物件」→ 後續提問:「請描述該物件(例如『紅色汽車』、『標誌』):」

步驟 2e — 選項(僅限照片)

AskUserQuestion([{
  question: "還有其他選項嗎?",
  type: "multi_select",
  options: [
    "批次 — 多張圖片",
    "輸出:JPEG",
    "輸出:PNG"
  ]
}])

步驟 2f — 來源(僅限影片)

AskUserQuestion([{
  question: "影片在哪裡?",
  type: "single_select",
  options: [
    "從裝置上傳",
    "從 Creative Cloud"
  ]
}])

步驟 3 — 取得來源檔案

關鍵 — /mnt/user-data/uploads/ 路徑不可用做 URL。 即使使用者已附加檔案且該檔案在上下文中顯示為 /mnt/user-data/uploads/ 路徑, 您也不能將此路徑傳遞給任何 Adobe 工具。請呼叫 asset_add_file() 來暫存檔案 — /mnt/user-data/uploads/ 路徑無法被 Adobe 工具擷取。

錯誤  ❌  imageURI: "/mnt/user-data/uploads/photo.jpg"
錯誤  ❌  imageURI: "file:///mnt/user-data/uploads/photo.jpg"
正確  ✅  呼叫 asset_add_file() → 使用挑選器上下文中的 presignedAssetUrl

尚無檔案 → 立即開啟挑選器:

asset_add_file()

從回傳的 mediaType 偵測類型:

  • image/* → 圖片工作流程
  • video/* → 影片工作流程

步驟 4 — 解析目標尺寸

使用者輸入解析為
1920×1080、1920x1080width:1920,height:1080
4K3840 × 2160
HD、1080p1920 × 1080
720p1280 × 720
480p854 × 480
A4 列印2480 × 3508(300 DPI 直式)
Letter 列印2550 × 3300(300 DPI 直式)
16:9、1:1、4:5、9:16比例字串 → 傳遞為 output: "16:9"
squareoutput: "1:1"
僅寬度(800px wide)width:800,使用比例字串維持長寬比

若表單中未指定目標,且使用者訊息中也未提及 → 提問:

「您需要什麼尺寸?(例如 1920×1080、A4、16:9)」


圖片工作流程

步驟 5(圖片)— 有效的 URI 來源

只有這些可用作 imageURI:

  • 來自 asset_add_file() 的 presignedAssetUrl ✅
  • 來自先前工具呼叫的 outputUrl ✅
  • 使用者提供的公開 HTTPS URL ✅

不可用作 imageURI:

  • /mnt/user-data/uploads/ 路徑 ❌
  • 直接來自 asset_search 的 renditionURL ❌
  • file:// URI ❌
來源解決方法
上傳的檔案asset_add_file() → presignedAssetUrl
CC 儲存資產asset_search → 透過 asset_add_file() 重新暫存 → presignedAssetUrl
先前工具輸出直接使用 outputUrl
PSD / AI 檔案document_render_vector(JPEG,300 DPI)→ outputPresignedUrl

步驟 6(圖片)— 適應模式

意圖模式備註
"調整為 WxH" / 預設reframe在目標比例下最大裁切,居中 — 無變形
"不裁切"、"黑邊信箱"、"放入內部"pad以白色填滿空白區域
"隔離主體"、"緊密裁切"extract圍繞偵測區域緊密裁切

預設:reframe。 僅在使用者明確指定時才變更。

⛔ fit: "extract" 與明確的 { width, height } 不相容 — 它會拉伸圖片。請使用比例字串或省略 output。


步驟 7(圖片)— 呼叫 image_crop_and_resize

image_crop_and_resize({
  imageURI: presignedAssetUrl,
  options: {
    output: { width: 1920, height: 1080 },  // 或 "16:9"
    fit: "reframe",
    focus: "subject",  // 或 "face"、"upper_body"、{ prompt: "the car" }、{ x:0.5, y:0.5 }
    quality: 7
  },
  outputFileType: "jpeg"  // 或 "png"(若需要透明度)
})
// 結果.outputUrl → 用於預覽或後續串聯

對焦指南:

  • "subject" — 預設;全身偵測、風景、物體
  • "face" — 肖像、頭部特寫
  • "upper_body" — 胸部以上裁切
  • { prompt: "the logo" } — 來自使用者表單輸入的命名物件
  • { x: 0.5, y: 0.5 } — 幾何中心(無明確主體)

步驟 8(圖片)— 批次

若在表單中選取了批次,或使用者提供了多個檔案:

  1. 對每個檔案呼叫 asset_add_file() 以取得個別的 presigned URL
  2. 對每個檔案使用相同參數呼叫 image_crop_and_resize
  3. 收集所有 outputUrl 值
  4. 在單一呼叫中對所有輸出呼叫 asset_preview_file

在此環境中,呼叫會依序執行。若超過 10 張圖片,請先與使用者確認後再開始。

跨回合分頁(批次 >20): 對於大量批次,對話上下文可能會在所有圖片處理完成前填滿, 導致 Claude 在批次中途暫停。這是預期行為 — 並非錯誤。發生時:

  • 說明已完成多少張及剩餘張數(例如「20 / 24 完成 — 輸入 '繼續' 處理剩餘部分」)
  • 等待使用者確認後再繼續
  • 繼續時,從下一張未處理的圖片開始,直到結束
  • 僅在最後一張圖片完成後,一起預覽所有輸出

步驟 9(圖片)— 預覽 + 交付 + Firefly 展示板

asset_preview_file({
  assets: [
    { name: "photo_1920x1080.jpg", presignedAssetUrl: result.outputUrl },
    // 所有成功輸出
  ]
})

儲存至 CC + 建立 Firefly 展示板

預覽後,使用區塊上傳管線將每個輸出上傳至 CC 儲存 (asset_initialize_file_upload → PUT 區塊 → asset_finalize_file_upload)。

然後使用最終輸出 URL 呼叫 Firefly 展示板工具:

create_firefly_board({
  import_adobe_storage: [
    final_output_url_1,
    final_output_url_2,
    // ...
  ]
})

✅ 確認有效(Stage): 使用來自 asset_finalize_file_upload 的 presigned URL 的 import_adobe_storage 能成功填入展示板。

❌ 無效: 使用 CC URN(urn:aaid:sc:US:...)的 import_generic_assets — USS 索引延遲會導致空白展示板。

若展示板建立失敗或 URL 格式錯誤,請省略展示板連結(重試無幫助)。

在展示板步驟後張貼完成摘要:

✅ 完成![N] 張圖片已調整大小並就緒。

📥 下載:
• resized_1920x1080.jpg → <cc_storage_url>
[若 N ≤ 3,則逐項列出;若 N > 3,則提供單一資料夾連結]

🎨 在 Firefly 展示板中檢視 → <board_url>   ← 若展示板建立失敗則省略

影片工作流程

步驟 5(影片)— 取得資產 ID

影片工具需要 assetId,而非 URL。

來源方法
透過 asset_add_file 上傳使用回傳的 assetId
CC 儲存asset_search 搭配 filters.mediaType: "video/mp4" → 使用資產 id

步驟 6(影片)— 常見目標

名稱尺寸
4K / UHD3840 × 2160
1080p / HD1920 × 1080
720p1280 × 720
480p854 × 480
直式 9:161080 × 1920
正方形 1:11080 × 1080

步驟 7(影片)— 呼叫 video_resize

⚠️ resizeVideoPoll 是延遲工具 — 請先載入它才能進行輪詢。 直接呼叫而未載入會失敗並出現「not loaded」錯誤。

video_resize({
  assetId: videoAssetId,
  width: targetW,
  height: targetH,
  mode: "letterbox"  // 預設;請參閱下方模式表格
})
// 回傳 { jobStatus: "pending", statusId }

模式 — 使用精確的 API 值(非使用者面向的標籤):

使用者輸入API 值行為
"fit"、"preserve ratio"、"letterbox""letterbox"保持比例,新增黑邊(預設)
"fill"、"crop to fill"、"no bars""crop"裁切邊緣以精確填滿目標
"stretch"、"force exact""stretch"變形以符合精確目標

ℹ️ 影片的自動重新構圖功能目前在 Claude 中尚不可用,但新工具一直在新增。如果您需要更多控制,請嘗試使用 Adobe Premiere。

輪詢: 在呼叫之前載入延遲工具 resizeVideoPoll — 直接呼叫會失敗並出現「not loaded」。

// 步驟 1:載入延遲工具

…

[內容因翻譯而截斷]

相關技能