Adobe 写真・動画のリサイズ
写真や動画をユーザー指定の寸法、アスペクト比、または名前付きサイズにリサイズします。
ソーシャルメディアプラットフォームセット(Instagram、TikTokなど)の場合は → 代わりに adobe-create-social-variations スキルを使用してください。
ツールリファレンス
| ステップ | ツール | 備考 |
|---|---|---|
| ファイルピッカーを開く | asset_add_file | presignedAssetUrl、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_upload | 2番目の呼び出し;ボード用の署名付きCC URLを返す |
| Fireflyボードを作成 | create_firefly_board | finalize 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, 1920x1080 | width: 1920, height: 1080 |
4K | 3840 × 2160 |
HD, 1080p | 1920 × 1080 |
720p | 1280 × 720 |
480p | 854 × 480 |
A4 印刷 | 2480 × 3508 (300 DPI ポートレート) |
Letter 印刷 | 2550 × 3300 (300 DPI ポートレート) |
16:9, 1:1, 4:5, 9:16 | 比率文字列 → output: "16:9" として渡す |
square | output: "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(画像) — バッチ
フォームでバッチが選択された場合、またはユーザーが複数のファイルを提供した場合:
- 各ファイルに対して
asset_add_file()を呼び出し、個別の署名付きURLを取得 - 同じパラメータで各ファイルに対して
image_crop_and_resizeを呼び出す - すべての
outputUrl値を収集 - すべての出力を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 / UHD | 3840 × 2160 |
| 1080p / HD | 1920 × 1080 |
| 720p | 1280 × 720 |
| 480p | 854 × 480 |
| 縦長 9:16 | 1080 × 1920 |
| スクエア 1:1 | 1080 × 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>
重要な注意事項
- 常に最初に
adobe_mandatory_initを呼び出します。 これは必須の初期化手順です。 /mnt/user-data/uploads/パスを直接使用することは避けてください。すべてのファイル操作にはasset_add_file()を使用してください。image_crop_and_resizeは、fit: "extract"が明示的な{ width, height }と一緒に使用された場合、画像を歪ませます。代わりに比率文字列を使用するか、outputを省略してください。resizeVideoPollは遅延ツールです — 呼び出す前にロードしてください。- バッチ処理は順次実行されます。20を超える画像の場合は、ターンをまたいだページネーションが必要になる場合があります。
- 写真のデフォルトのフィットモードは
reframeです。ユーザーが明示的な場合のみ変更します。 - Fireflyボード作成が失敗した場合は、ボードリンクを省略し、ワークフローを続行してください。