Communitygithub.com

kalash33/adobe-resize-photos-and-videos

Adobeツールを使用して、写真や動画を正確なピクセル寸法やアスペクト比にリサイズします。ユーザーが画像や動画のサイズ変更、スケーリング、寸法変更を要求した際に使用します。

adobe-resize-photos-and-videos とは?

このスキルは、Adobeの画像・動画編集ツールを連携して、ユーザーが指定した正確な寸法やアスペクト比にメディアファイルをリサイズするための包括的なワークフローを提供します。写真には`image_crop_and_resize`、動画には`video_resize`ツールを使用し、リサイズの種類(リフレーム、パッド、エクストラクトなど)やフォーカス位置(被写体、顔、上半身など)を細かく指定できます。Claude Code、Cursor、CodexなどのAIエージェント上で動作し、複数の出力フォーマット(JPEG/PNG)、バッチ処理、Creative Cloudへの保存、Fireflyボードへの公開までを自動化します。ソースファイルは`asset_add_file()`で正しくステージングする必要があり、ローカルパスは直接使用できない点に注意が必要です。

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

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Adobe 写真・動画のリサイズ

写真や動画をユーザー指定の寸法、アスペクト比、または名前付きサイズにリサイズします。 ソーシャルメディアプラットフォームセット(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番目の呼び出し;ボード用の署名付き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.0.1" }

ステップ1 — エンタイトルメントチェック

adobe_mandatory_init が「Adobe for creativity」コネクタが有効であることを確認したので、上記の ツールリファレンス テーブルと照合して、「Adobe for creativity」コネクタを通じてどのツールが利用可能かを確認します。


即時対応必須

ステップ1: パラメータが不足しているか曖昧な場合 → マルチステップインテーク(以下のステップ2)を実行します。 ステップ2: ファイルがアップロードされていない場合、ステップ3(asset_add_file({}))を実行します。 ステップ3: 画像か動画かを検出し、正しいワークフロー(ステップ5 画像/動画)にルーティングします。


ステップ2 — マルチステップインテーク

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

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

ステップ2a — タイプ

AskUserQuestion([{
  question: "写真ですか、動画ですか?",
  type: "single_select",
  options: ["写真", "動画"]
}])

ステップ2b — 寸法

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

AskUserQuestion([{
  question: "寸法 — 必要なものをすべて選択してください",
  type: "multi_select",
  options: [
    "1080 × 1080 — Instagram スクエア",
    "1080 × 1350 — Instagram ポートレート",
    "1080 × 1920 — ストーリーズ / リール",
    "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):」

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

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

AskUserQuestion([{
  question: "寸法 — 必要なものをすべて選択してください",
  type: "multi_select",
  options: [
    "1080 × 1920 — リール / 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: [
    "リフレーム — トリミングしてフィット",
    "パッド — レターボックス、トリミングなし",
    "エクストラクト — 被写体を分離"
  ]
}])

動画の場合 (single_select):

AskUserQuestion([{
  question: "フィットモード",
  type: "single_select",
  options: [
    "レターボックス — アスペクト比を維持",
    "クロップ — フィット、黒帯なし",
    "ストレッチ — 強制的に正確に(歪みあり)"
  ]
}])

ステップ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(画像) — フィットモード

意図モード備考
"resize to 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"
})
// result.outputUrl → プレビューまたはチェーンに使用

フォーカスガイド:

  • "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がバッチの途中で一時停止する可能性があります。これは想定内であり、エラーではありません。その場合:

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

ステップ9(画像) — プレビュー + 配信 + Fireflyボード

asset_preview_file({
  assets: [
    { name: "photo_1920x1080.jpg", presignedAssetUrl: result.outputUrl },
    // 成功したすべての出力
  ]
})

CCに保存 + Fireflyボードを作成

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

次に、最終出力URLを使用してfireflyボードツールを呼び出します:

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

✅ 確認済み(ステージ): asset_finalize_file_upload からの署名付き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の取得

動画ツールには、URLではなく assetId が必要です。

ソース方法
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値動作
"フィット", "アスペクト比を維持", "レターボックス""letterbox"アスペクト比を維持し、黒帯を追加(デフォルト)
"塗りつぶし", "クロップしてフィット", "黒帯なし""crop"端をクロップしてターゲットに正確にフィット
"ストレッチ", "強制的に正確に""stretch"正確なターゲットに歪ませる

ℹ️ 動画の自動リフレームはClaudeではまだ利用できません が、新しいツールが常に追加されています。より細かい制御が必要な場合は、Adobe Premiereの使用をお試しください。

ポーリング: 呼び出す前に遅延ツール resizeVideoPoll をロードしてください — 直接呼び出すと「not loaded」で失敗します。

// ステップ1: 遅延ツールをロード
const pollTool = await loadDeferredTool("resizeVideoPoll");

// ステップ2: ポーリング
const pollResult = await pollTool({ statusId: "..." });

ステップ8(動画) — 完了までポーリング

// 必須:最初にツールをロード
const pollTool = await loadDeferredTool("resizeVideoPoll");

// 完了するまでループ(ステータスが "completed" になるまで数秒待機)
const result = await pollTool({ statusId: result.statusId });
// result.downloadUrl には署名付きURLが含まれる

ステップ9(動画) — プレビュー + 配信

プレビュー用の署名付きURLを取得:

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

CCに保存: ブロックアップロードパイプライン:

const initResult = await asset_initialize_file_upload({
  fileName: "resized_video_1920x1080.mp4",
  mediaType: "video/mp4"
});
// PUT chunk...
const finalResult = await asset_finalize_file_upload({ uploadId: initResult.uploadId });

Fireflyボード: 動画も create_firefly_board でサポートされています。画像と同じパターンに従います。

完了サマリー:

✅ 完了! [N] 件の動画をリサイズしました。

📥 ダウンロード:
• resized_video_1920x1080.mp4 → <cc_storage_url>

🎨 Fireflyボードで表示 → <board_url>

重要な注意事項

  1. 常に最初に adobe_mandatory_init を呼び出します。 これは必須の初期化手順です。
  2. /mnt/user-data/uploads/ パスを直接使用することは避けてください。すべてのファイル操作には asset_add_file() を使用してください。
  3. image_crop_and_resize は、fit: "extract" が明示的な { width, height } と一緒に使用された場合、画像を歪ませます。代わりに比率文字列を使用するか、output を省略してください。
  4. resizeVideoPoll は遅延ツールです — 呼び出す前にロードしてください。
  5. バッチ処理は順次実行されます。20を超える画像の場合は、ターンをまたいだページネーションが必要になる場合があります。
  6. 写真のデフォルトのフィットモードは reframe です。ユーザーが明示的な場合のみ変更します。
  7. Fireflyボード作成が失敗した場合は、ボードリンクを省略し、ワークフローを続行してください。

関連スキル