mcpField
A
adobe-resize-photos-and-videos

adobe-resize-photos-and-videos

github.com/adobeクリエイティブ・メディア316290 回インストール今日更新
リポジトリ

adobe-resize-photos-and-videos について

指定した寸法、アスペクト比、プリセットで写真や動画をリサイズする Adobe スキルです。個別・一括処理に対応し、画像の切り抜きや余白追加と動画のリサイズを別の手順で行います。

主な機能

  1. 01寸法・比率・プリセットでリサイズ
  2. 02画像の再構図・余白追加・被写体抽出
  3. 03画像の一括処理
  4. 04動画のクロップ・レターボックス・伸縮
  5. 05出力のプレビューと Creative Cloud へのアップロード

活用シーン

  1. 01画像にカスタム寸法や比率を指定
  2. 02複数の写真を異なるサイズで作成
  3. 03動画を指定寸法にリサイズ
  4. 04処理後のファイルをプレビューして保存

MCP 対応

Adobe のツールワークフローでメディアを処理し、MCP ツールを使ってファイル選択、リサイズ、プレビューを行います。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/adobe/skills --skill adobe-resize-photos-and-videos

インストール後、Claude Code で/adobe-resize-photos-and-videosを入力して読み込まれたか確認します。

同梱ファイルassets/intake-form.html

詳細

Adobe Resize Photos and Videos

画像や動画のサイズを、ユーザー指定の寸法、アスペクト比、または名前付きサイズに変更します。 ソーシャルメディアプラットフォームのセット(Instagram、TikTok など)には、代わりに adobe-create-social-variations スキルを使用してください。


ツールリファレンス

ステップツール備考
ファイルピッカーを開くasset_add_filepresignedAssetUrl、assetId、mediaType を返します
CC 内でアセットを検索asset_search画像の場合は asset_add_file で検索結果を再ステージングします。動画の場合は id を直接使用します
PSD/AI をレンダリングdocument_render_vectorサイズ変更の前に JPEG に変換します
画像のサイズを変更image_crop_and_resize寸法ごとに 1 回呼び出します。デフォルトでは reframe を使用します
出力をプレビューasset_preview_fileすべての出力を 1 回の呼び出しにまとめます
CC にアップロード(開始)asset_initialize_file_uploadブロックアップロードパイプラインの最初の呼び出しです
CC にアップロード(完了)asset_finalize_file_upload2 回目の呼び出しです。ボード用の presigned CC URL を返します
Firefly ボードを作成create_firefly_boardfinalize URL を指定して import_adobe_storage を渡します
動画のサイズを変更video_resizeポーリング用の statusId を返します
動画のサイズ変更をポーリングresizeVideoPoll遅延ツールです。呼び出す前に読み込みます

ワークフロー

ステップ 0 — Adobe ツールを初期化する

最初に adobe_mandatory_init を呼び出します。ワークフローの残りの部分で必要となる、ファイル処理ルールとツールのルーティングに関するガイダンスが返されます。

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

ステップ 1 — 利用資格の確認

adobe_mandatory_init によって「Adobe for creativity」コネクターが有効であることを確認したら、上のツールリファレンス表と照合し、「Adobe for creativity」コネクターから利用可能なツールを確認します。


直ちに必要な操作

ステップ 1: パラメーターが不足している、または曖昧な場合 → 複数ステップのヒアリングを実行します(下記のステップ 2)。 ステップ 2: ファイルがアップロードされていない場合は、ステップ 3(asset_add_file({}))を実行します。 ステップ 3: 画像か動画かを判別し、適切なワークフローに進みます(ステップ 5 の画像/動画)。


ステップ 2 — 複数ステップのヒアリング

ユーザーから必要なパラメーター(種類+寸法+フィットモード)がすべて提供されていない場合に実行します。 ユーザーのメッセージにすでに 3 つすべてが含まれている場合は、完全にスキップします。

AskUserQuestion を使用して、パラメーターを段階的に収集します。

ステップ 2a — 種類
AskUserQuestion([{
  question: "Photo or video?",
  type: "single_select",
  options: ["Photo", "Video"]
}])
ステップ 2b — 寸法

写真の場合(multi_select — ユーザーは 1 つ以上選択できます):

AskUserQuestion([{
  question: "Dimensions — select all you need",
  type: "multi_select",
  options: [
    "1080 × 1080 — Instagram square",
    "1080 × 1350 — Instagram portrait",
    "1080 × 1920 — Stories / Reels",
    "1920 × 1080 — YouTube / landscape",
    "1280 × 720 — YouTube thumbnail",
    "1200 × 675 — X / Twitter post",
    "1200 × 630 — Facebook / OG image",
    "1080 × 566 — LinkedIn post",
    "2560 × 1440 — YouTube banner",
    "3840 × 2160 — 4K / UHD",
    "400 × 400 — Profile / avatar",
    "2480 × 3508 — A4 print (300 dpi)",
    "Custom — I'll type it"
  ]
}])

ユーザーが「カスタム」を選択した場合 → 次の質問をします:「カスタム寸法を入力してください(例:1500×800):」

ユーザーが複数のプリセットを選択した場合は、寸法ごとに image_crop_and_resize を 1 回実行し、 毎回同じソース URI とパラメーターを使用します。最後にすべての出力をまとめてプレビューします。

動画の場合(multi_select — ユーザーは 1 つ以上選択できます):

AskUserQuestion([{
  question: "Dimensions — select all you need",
  type: "multi_select",
  options: [
    "1080 × 1920 — Reels / TikTok / Stories",
    "1920 × 1080 — YouTube / landscape",
    "1080 × 1080 — Square post",
    "1280 × 720 — YouTube 720p",
    "3840 × 2160 — 4K / UHD",
    "854 × 480 — SD / 480p",
    "Custom — I'll type it"
  ]
}])

ユーザーが複数の動画プリセットを選択した場合は、寸法ごとに個別の video_resize ジョブを送信し、 それぞれが完了するまでポーリングして、すべての出力をまとめてプレビューします。

ステップ 2c — フィットモード

写真の場合(single_select):

AskUserQuestion([{
  question: "Fit mode",
  type: "single_select",
  options: [
    "Reframe — crop to fill",
    "Pad — letterbox, no crop",
    "Extract — isolate subject"
  ]
}])

動画の場合(single_select):

AskUserQuestion([{
  question: "Fit mode",
  type: "single_select",
  options: [
    "Letterbox — preserve ratio",
    "Crop — fill, no bars",
    "Stretch — force exact (distort)"
  ]
}])
ステップ 2d — スマートフォーカス(写真のみ)
AskUserQuestion([{
  question: "Smart focus — where should the crop center?",
  type: "single_select",
  options: [
    "Subject",
    "Face / portrait",
    "Upper body",
    "Center (geometric)",
    "Named object — I'll describe it"
  ]
}])

ユーザーが「名前付きオブジェクト」を選択した場合 → 次の質問をします:「オブジェクトを説明してください(例:「赤い車」、「ロゴ」):」

ステップ 2e — オプション(写真のみ)
AskUserQuestion([{
  question: "Any additional options?",
  type: "multi_select",
  options: [
    "Batch — multiple images",
    "Output: JPEG",
    "Output: PNG"
  ]
}])
ステップ 2f — ソース(動画のみ)
AskUserQuestion([{
  question: "Where is the video?",
  type: "single_select",
  options: [
    "Upload from device",
    "From Creative Cloud"
  ]
}])

ステップ 3 — ソースファイルを取得する

重要 — /mnt/user-data/uploads/ のパスは使用可能な URL ではありません。 ユーザーがファイルを添付していて、コンテキスト内に /mnt/user-data/uploads/ のパスとして表示されている場合でも、 このパスを Adobe ツールに渡すことはできません。asset_add_file() を呼び出してファイルをステージングしてください。/mnt/user-data/uploads/ のパスは Adobe ツールから取得できません。

WRONG  ❌  imageURI: "/mnt/user-data/uploads/photo.jpg"
WRONG  ❌  imageURI: "file:///mnt/user-data/uploads/photo.jpg"
CORRECT ✅  call asset_add_file() → use presignedAssetUrl from picker context

ファイルがまだない場合 → すぐにピッカーを開きます:

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 },  // or "16:9"
    fit: "reframe",
    focus: "subject",  // or "face", "upper_body", { prompt: "the car" }, { x:0.5, y:0.5 }
    quality: 7
  },
  outputFileType: "jpeg"  // or "png" if transparency needed
})
// result.outputUrl → use for preview or chaining

フォーカスのガイド:

  • "subject" — デフォルト。全身の検出、風景、物体
  • "face" — ポートレート、顔写真
  • "upper_body" — 胸から上のトリミング
  • { prompt: "the logo" } — ユーザーのフォーム入力で指定された名前付きオブジェクト
  • { x: 0.5, y: 0.5 } — 幾何学的な中心(明確な被写体がない場合)

ステップ 8(画像)— バッチ処理

フォームでバッチ処理が選択されている場合、またはユーザーが複数のファイルを提供した場合:

  1. 各ファイルに対して asset_add_file() を呼び出し、それぞれの事前署名付き URL を取得します
  2. 同じパラメーターを指定して、それぞれに image_crop_and_resize を呼び出します
  3. すべての outputUrl の値を収集します
  4. すべての出力をまとめて 1 回の呼び出しで asset_preview_file に渡します

この環境では、呼び出しは順次実行されます。画像が 10 枚を超える場合は、開始前にユーザーに確認してください。

ターンをまたいだページネーション(バッチが 20 件を超える場合): 大規模なバッチでは、すべての画像の処理が完了する前に会話のコンテキストがいっぱいになり、 Claude がバッチの途中で一時停止することがあります。これは想定内の動作であり、エラーではありません。この場合:

  • 完了した数と残りの数を伝えます(例:「24 件中 20 件完了しました。残りを処理するには「続けて」と入力してください」)
  • 再開する前に、ユーザーの確認を待ちます
  • 再開後は、次の未処理の画像から最後まで処理を続けます
  • すべての画像の処理が完了してから、すべての出力をまとめてプレビューします

ステップ 9(画像)— プレビュー + 配信 + Firefly ボード
asset_preview_file({
  assets: [
    { name: "photo_1920x1080.jpg", presignedAssetUrl: result.outputUrl },
    // all successful outputs
  ]
})
CC に保存 + Firefly ボードを作成

プレビュー後、ブロックアップロードパイプライン (asset_initialize_file_upload → PUT チャンク → asset_finalize_file_upload)を使用して、各出力を CC ストレージにアップロードします。

次に、最終出力 URL を指定して Firefly ボードツールを呼び出します。

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

✅ 動作確認済み(Stage): asset_finalize_file_upload の事前署名付き URL を指定した import_adobe_storage は、ボードへの読み込みに成功します。

❌ 動作しません: CC アセット ID(urn:aaid:sc:US:...)を指定した import_generic_assets。USS のインデックス作成の遅延により、ボードが空になります。

ボードの作成に失敗した場合、または URL の形式が正しくない場合は、ボードへのリンクを省略してください(再試行しても解決しません)。

ボードのステップ後に、完了の概要を投稿します。

✅ Done! [N] image(s) resized and ready.

📥 Download:
• resized_1920x1080.jpg → <cc_storage_url>
[list individually if N ≤ 3, or single folder link if N > 3]

🎨 View in Firefly Board → <board_url>   ← omit if board creation failed

動画のワークフロー

ステップ 5(動画)— アセット ID を取得

動画ツールで必要なのは URL ではなく assetId です。

ソース方法
asset_add_file でアップロード返された assetId を使用します
CC ストレージfilters.mediaType: "video/mp4" を指定して asset_search を呼び出し → アセットの 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"  // default; see mode table below
})
// Returns { 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」エラーが発生します。

// Step 1: load the deferred tool resizeVideoPoll
// Step 2: poll until complete
resizeVideoPoll({ statusId })
// Repeat until jobStatus === "completed"
// Show progress % to user while waiting

Step 8(動画)— プレビュー、納品、Firefly Board

ポーリングが成功し、outputUrl が返された場合は、ブロックアップロードパイプライン(asset_initialize_file_upload → PUT → asset_finalize_file_upload)を使って CC ストレージにアップロードし、署名付き URL を取得してから、次の操作を行います。

asset_preview_file({
  assets: [{ name: "resized_video.mp4", presignedAssetUrl: result.outputUrl }]
})

create_firefly_board({
  import_adobe_storage: [ presignedAssetUrl_from_finalize ]
})

✅ finalize の署名付き URL を指定して import_adobe_storage を渡します。ボードの作成に失敗した場合は、リンクを省略してください。

✅ Done! Video resized to [WxH].

📥 Download → <cc_storage_url>

🎨 View in Firefly Board → <board_url>   ← omit if board creation failed

ポーリングを利用できない場合 → プレビューをスキップし、Step 7 の CC ストレージへのフォールバックメッセージを送信します。


エラー処理

エラー対応
/mnt/user-data/uploads/ または file:// が URI として渡された場合停止します。最初に asset_add_file() を呼び出してください。
リサイズ後の画像が大きすぎる場合quality: 5 を指定して再実行します
動画の assetId が見つからない場合asset_add_file を使って再アップロードします
ソースがターゲットより小さい場合アップスケーリングしてもディテールは増えないことをユーザーに警告し、確認が取れた場合は続行します
無効な video_resize モードの場合API が受け付けるのは "letterbox"、"crop"、または "stretch" のみです — "fit" と "fill" は拒否されます。
extract + {W,H} で引き伸ばしが発生する場合reframe に切り替えます
寸法が指定されていない場合フォームを表示するか、ツールを呼び出す前に明示的に確認します
サポートされていない形式の場合JPG/PNG(画像)または MP4(動画)としてエクスポートするようユーザーに依頼します
resizeVideoPoll が読み込まれていない、または利用できない場合現在のコネクターに既知の制限があります。ポーリングをスキップし、出力を確認するために CC Files をチェックするようユーザーに伝えます。

一般的な寸法の参考

用途寸法
フル HD/Web ヒーロー画像1920 × 1080
4K3840 × 2160
Web サムネイル1280 × 720
正方形1080 × 1080
A4 印刷(300 DPI)2480 × 3508
US レター印刷(300 DPI)2550 × 3300
ブログのアイキャッチ画像1200 × 630
メールヘッダー600 × 200
アバター/プロフィール画像400 × 400
Instagram 縦長画像1080 × 1350
ストーリーズ/縦型1080 × 1920

アセット

assets/intake-form.html — リサイズパラメーターを入力するためのインタラクティブフォームです。 パラメーターが不足している、または曖昧なリサイズワークフローの開始時に表示します。 写真(ターゲットサイズ、フィットモード、スマートフォーカス、一括処理、出力形式)と動画(ターゲットサイズ、フィットモード、ソース)に対応しています。

コメント