mcpField
A
adobe-batch-edit-photos

adobe-batch-edit-photos

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

adobe-batch-edit-photos について

写真セット全体に統一感のある色調やスタイルを適用する、写真家向けのバッチ編集スキルです。個々の写真の最適化より、セット全体のまとまりを重視します。

主な機能

  1. 01複数写真の一括処理
  2. 02プリセットによるルックの統一
  3. 03色温度、彩度、コントラストの調整
  4. 04画像要素の任意の選択的強調
  5. 05編集前後のプレビュー

活用シーン

  1. 01旅行写真の色調を統一
  2. 02イベント写真に一貫したトーンを適用
  3. 03全体編集の前にサンプルをプレビュー

MCP 対応

Adobe MCP App ウィジェットでファイル選択とプレビューを行い、Adobe のクリエイティブツールで画像を処理します。

インストール

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

$npx skills add https://github.com/adobe/skills --skill adobe-batch-edit-photos

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

詳細

Adobe Batch Edit Photos

見た目の統一感を重視した一括編集パイプラインです。複数の写真を、まとめて編集したように見せます。ユーザーが仕上がりを選ぶ(または説明する)と、エージェントが Adobe のクリエイティブツールを使って、すべての画像に一貫して適用します。

重要な考え方は、「統一感」を求めるユーザーは、画像ごとの完璧さよりも、セット全体に意図が感じられることを重視するという点です。単一の画像を最大限に仕上げることより、トーンと色の一貫性を優先してください。

表示環境に関する注意: デフォルトのフローでは、Adobe の MCP App ウィジェット(ステップ 1 の asset_add_file ピッカー、ステップ 2c と 8 の asset_preview_file プレビュー)を使用します。記載どおりに進めてください。ウィジェットツールがこの表示環境で利用できない場合に限り(例:Codex)、そのステップに記載されたウィジェットなしの代替手順を使用してください。質問ウィジェットがない場合は、AskUserQuestion の質問を、ラベル付きの選択肢としてプレーンテキストで提示してください。

ここでは対話型の画像編集は行いません。 これは、adobe_mandatory_init の対話型画像ウィジェットのセクションにある、単一画像向けウィジェットの案内に優先します。このスキルは一括処理パイプラインです。画像の数にかかわらず、対話型編集ウィジェット(_app ツール)は呼び出したり、言及したりせず、通常どおり以下のパイプラインを実行してください。


ツールリファレンス

ステップツール備考
取り込みasset_add_file(+read_widget_context)対話型ファイルピッカー。ピッカーの結果は read_widget_context で解決します
取り込み (ウィジェットなしの代替手順)asset_initialize_file_upload + asset_finalize_file_uploadasset_add_file が利用できない場合に限り、ローカルファイルをプログラムで CC にステージングします
プリセットの検出image_list_presets起動時に一度だけ実行し、見た目とプリセットのマップを作成します
傾き補正image_auto_straighten画像ごと
自動トーン調整image_apply_auto_tone画像ごと。type: "cameraRawFilter"
仕上がりの調整image_apply_adjustments一括 — 色温度+自然な彩度/彩度+明るさ/コントラストを 1 回の呼び出しで適用します
微調整image_apply_adjustments一括 — 選択したすべての調整を 1 回の呼び出しで適用します
仕上がりのプリセットimage_apply_preset画像ごと。スタイルの中心となる手段
要素の検出完全な bodyParts 配列を指定した image_select_subject画像ごと。ステップ 5e のオプトイン項目。切り抜きのフォーカスにも使用します
背景のぼかしimage_apply_effects(effect: "gaussianBlur")画像ごと。明示的に依頼された場合のみ使用し、利用できない場合は image_apply_gaussian_blur に切り替えます
切り抜きimage_crop_and_resize画像ごと。任意
サンプルプレビューasset_preview_fileimage[0] のみ、適用前と適用後を表示 (ウィジェットなしの代替手順:2 つの URL を直接提示します)
最終プレビューasset_preview_fileバッチのアセット配列 (ウィジェットなしの代替手順:URL を直接提示します)
Firefly Boardcreate_firefly_board編集済みのすべての出力

ステップ 0 - 前提条件:Adobe ツールを初期化する

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

{ "skill_name": "adobe-batch-edit-photos", "skill_version": "4.1.0" }

ステップ 0b:利用可能なプリセットを確認する

初期化の直後、画像の取り込みやユーザーからの質問より前に、image_list_presets を呼び出してください。これにより、このユーザーのプランで利用できるプリセットの全一覧を取得できます。ステップ 5b では、ハードコードされた名前に頼らず、各ルックに最適なものを選択できます。

Tool: image_list_presets
Params: {}

返された一覧から、各プリセットを最適なルックカテゴリに分類し、ルック→プリセットマップを作成します。以下の名前のシグナルを目安として使用してください。

ルック一致する名前のシグナル
自動(バランス)Auto、Balanced、Natural、Neutral、Default、Adobe Color、Standard
暖かくゴールデンWarm、Golden、Glow、Sunset、Cozy、Amber、Warm Pop
明るく軽やかAiry、Bright、Light、Clean、Pop、Lift、Fresh
ムーディーでシネマティックMoody、Cinematic、Dark、Drama、Dramatic、Shadow、Deep
クールで爽やかCool、Blue、Clear、Crisp、Sky、Azure
鮮やかで力強いVibrant、Punchy、Bold、Vivid、Pop、Saturate
落ち着いたフィルム調Film、Muted、Fade、Faded、Analog、Grain、Vintage、Matte

ルール:

  • 各プリセットは、最大1つのルックに割り当てます。名前が複数のルックに一致する場合(例:「Pop」は明るいルックにも鮮やかなルックにも当てはまる可能性があります)、全体的な特徴が最も近いルックに割り当てます。柔らかく暖かみのあるポップなプリセットは「暖かくゴールデン」に、コントラストが強く力強いポップなプリセットは「鮮やかで力強い」に割り当てます。
  • ルックを主に決めるプリセットには、画像の内容に応じて調整される Adaptive: 接頭辞付きのプリセットを優先します。
  • 各ルックに選べるプリセットは最大 2 つです。強く合致するものをメインに、補完的なものを任意のサブとして選びます。まずメインを適用し、サブは異なる効果を加える場合(例:メインがカバーしないカラーグレーディングを加える場合)のみ適用します。
  • ルックに一致するプリセットがない場合、そのルックでは色温度と手動調整のみを使用し、プリセットは適用しません。
  • image_list_presets の結果が空、または 403 の場合は、すべての画像についてステップ 5b をスキップし、概要に「このプランではプリセットを利用できません」と記載します。ルックのパイプラインの残りの処理(色温度、手動調整)は引き続き実行します。

ステップ 2 より前に、完成したルック→プリセットマップを保存してください。ステップ 5b で参照します。

選択的なアダプティブプリセットの分類(ステップ 5e 用)

同じプリセット一覧から、選択的な補正をユーザーが選んだ場合(ステップ 5e)のみ使用する、別個の分類セットである選択的アダプティブマップも作成します。これらのプリセットは、画像全体ではなく、検出された特定のシーン要素を対象とします。

バケット名前のシグナル適用する条件
被写体/人物Subject、Person、Pop、Warm Pop、Portrait、Skin、BodyFace、Torso、または Skin が検出された場合
空Sky、Blue Drama、Dark Drama、Cloud、Horizon、OutdoorSky が検出された場合
背景Background、BG、Blur Background、Bokeh、Depth、DefocusBackground が検出された場合
体の部位/衣服Clothing、Outfit、Clothes、Hair、Torso、Body PartClothing または Hair が検出された場合
  • 各バケットに選べるプリセットは最大 1 つです。
  • バケットに一致するプリセットがない場合は空のままにし、無理に適合度の低いプリセットを選ばないでください。
  • これらのバケットはルック→プリセットマップとは別のものです。プリセットが実際に適合する場合は、両方に含めてもかまいません。

ステップ 1:画像の取り込み

パラメーターを指定せずに asset_add_file を呼び出して、ファイルピッカーを開きます。

Tool: asset_add_file
Params: {}

asset_add_file は常に imageURIs: [] を返します。これは想定どおりであり、エラーではありません。ユーザーがファイルを選択するまで待ちます。実際の URI は次のメッセージで届きます。その後、asset_add_file を指定して read_widget_context を呼び出し、正しい署名付き S3 URL を取得します。以降のすべてのツール呼び出しには、それらの URL を使用してください。 dcx-stage.adobe.io の URI はネットワークでブロックされます。まず read_widget_context を使って解決してください。

取得した署名付き URL を sourceURIs[] として集め、ステップ 2 に進みます。

ウィジェットがない場合の代替手順(asset_add_file がこの環境(Codex など)で利用できない場合のみ) — ファイルピッカーを開かず、ファイルがすでにある場所からソース URI を取得します。image_* ツールが受け付けるのは Creative Cloud のストレージ URI のみで、生のローカルパスは受け付けません。そのため、ローカルファイルは先に CC にステージングする必要があります。

最初にエグレスを確認します: ステップ 0 の adobe_mandatory_init でエグレスの状態を確認します。エグレスが無効になっている場合は、asset_initialize_file_upload / asset_finalize_file_upload を呼び出さないでください。

ソース対応
ローカルパスにあるファイル AND エグレスが有効各ファイルをプログラムでステージングします。サイズと MIME タイプを取得し、asset_initialize_file_upload({ path: "<filename>", media_type: "<mime>" }) を呼び出し、返されたアップロード URL にファイルのバイト列を PUT してから、asset_finalize_file_upload({ filename: "<filename>", transfer_document: <from the initialize response> }) を呼び出します。返された署名付き CC URL をそれぞれソース URI として使用します。
ファイルがすでに Creative Cloud にあるCC URI を直接参照します。
ローカルパスにあるファイル AND エグレスが無効で、この環境にファイルピッカーがないプログラムによるステージングはブロックされており、この環境にはファイルピッカーもありません。この環境ではステージングできないことをユーザーに伝え、asset_add_file のファイルピッカーが利用可能な環境でワークフローを実行するよう依頼します。

ステップ 2:希望する仕上がりを把握する

URI を取得したら、質問する前に会話を確認して、できるだけ多くの好みを推測してください。

  • 仕上がり:「暖かみのある」「黄金色」「シネマティック」「ムーディー」「明るく開放的」「落ち着いた色調」「フィルム調」「クール」「鮮やか」「メリハリのある」といった言葉から推測できます。
  • 微調整:「ハイライトを復元」「シャドウを持ち上げる」「コントラストを強める」「白飛びしている」「暗すぎる」「もっと鮮やかに」「彩度を下げる」といった言葉から推測できます。
  • トリミング:「トリミングなし」「正方形」「1:1」「縦位置でトリミング」「フレーミングを維持」などから推測できます。
  • 選択的な AI 強調:「アダプティブプリセット」「選択的な強調」「検出した要素に適用」「空向けプリセット」「被写体を際立たせる」、または要素に応じた処理を求める表現から推測できます。Yes と推測した場合は、Q5 = Yes として扱い、ステップ 5e を実行します。No と推測した場合、または言及がない場合は、Q5 = No として扱い、ステップ 5e を完全にスキップします。

3 つのケース:

A — 文脈からすべて明らか: AskUserQuestion を完全にスキップします。確認メッセージを投稿してから、ステップ 2c(サンプルプレビュー)に直接進みます。好みがどれほど明確に示されていても、完全なバッチ処理は開始しないでください。プレビューと確認の段階は必ず実施します。

B — 明らかな点と不明な点がある: 推測した内容を先に確認してから、未回答の質問だけを指定して AskUserQuestion を呼び出します。たとえば、仕上がりと微調整は明らかですが、トリミングが不明な場合は、次のように投稿します。

📷 Got [N] photo(s)! Based on what you said, I'll go with:
- Look: Moody & Cinematic
- Tweaks: Recover blown highlights

Just one thing — do you want a crop?

次に、質問 3 のみを指定して AskUserQuestion を呼び出します。

C — 何も指定されていない: 導入文全体を投稿し、質問を 5 つすべて表示します。

📷 Got [N] photo(s)! I'll apply consistent edits across all of them so
the set looks cohesive.

What kind of look are you going for? 👇

AskUserQuestion で使用する質問全体(未回答のものだけを使用します):

Question 1 (single_select):
  question: "🎨 Pick a base look"
  options:
    - "Auto (balanced, neutral)"
    - "Warm & Golden — cozy, travel, golden hour"
    - "Bright & Airy — clean, light, lifestyle"
    - "Moody & Cinematic — dramatic, contrasty, desaturated"
    - "Cool & Fresh — clear skies, travel, blue tones"
    - "Vibrant & Punchy — vivid, bold, social-ready"
    - "Muted & Film — faded, analog, editorial"

Question 2 (multi_select):
  question: "🎛️ Fine-tune (optional)"
  options:
    - "Recover blown highlights"
    - "Lift dark shadows"
    - "Boost contrast"
    - "Boost color intensity"
    - "Desaturate / muted tones"
    - "Adjust exposure (brighter/darker)"
    - "Tune bright areas"
    - "Blur background (heavy)"
    - "None"

Question 3 (single_select):
  question: "✂️ Crop ratio? (optional)"
  options:
    - "No crop — keep original framing"
    - "1:1 square"
    - "4:5 portrait"
    - "16:9 wide"
    - "4:3 standard"

Question 4 (single_select):  [only ask if Q3 is not "No crop"]
  question: "🎯 How should the crop be framed?"
  options:
    - "Center — crop from center of image"
    - "Smart crop — detect subject/face and frame around it"

Question 5 (single_select):
  question: "✨ Selective AI enhancements? Detects sky, subjects, background & body parts — applies adaptive presets only to elements found in each photo"
  options:
    - "Yes — apply adaptive presets to detected elements"
    - "No — skip selective enhancements"

続行する前に、ユーザーの返答を待ちます。

ユーザーが選択的な強調を選択した場合(Q5 = Yes): 仕上がりを適用した後、画像ごとにステップ 5e を実行します。ユーザーが選択しなかった場合、または質問されていない場合は、ステップ 5e を完全にスキップします。

質問 4 に関する注意: ユーザーのメッセージからすでにフレーミングの好みが読み取れる場合(例:「中央でトリミング」「顔に合わせてトリミング」「被写体を中心にフレーミング」)は、Q4 をスキップして、そのまま推測します。ユーザーが比率を指定していても、フレーミング方法を指定していない場合は、スマートトリミングをデフォルトにします。ほとんどの場合、単純な中央トリミングよりも良い結果が得られます。

仕上がり → パラメーターの対応付け

基本の仕上がり → image_apply_adjustments(色温度 + 自然な彩度/彩度 + 明るさ/コントラスト、ステップ 5a) + image_apply_preset(仕上がり→プリセット対応表から、ステップ 5b):

選択した仕上がりの列をすべて組み合わせて、image_apply_adjustments を1 回だけ呼び出します。色温度、自然な彩度、コントラストごとに個別の呼び出しを行わないでください。列に「none」とあるパラメーターは省略します。

以下のプリセット列は動的になりました。固定の名前ではなく、ステップ 0b で作成した仕上がりの「仕上がり→プリセット対応表」から、その仕上がりに対応するプリセットを使用します。仕上がりに対応するプリセットが見つからなかった場合は、その仕上がりについてステップ 5b をスキップし、色温度と手動調整のみを使用します。

⚠ 非推奨のツールは使用しないでください。 すべての調整は image_apply_adjustments を通じて行います。次元ごとの個別の adjust-* ツールは非推奨です。詳しくは「厳守事項」を参照してください。

ルック色温度(tempA、tempB、tempLuminance)プリセット(Look→Preset Map より)彩度/自然な彩度明るさ/コントラスト
自動(バランス)なし — tempA/tempB/tempLuminance を省略自動(バランス)バケットのプリセットなしなし
暖かくゴールデンtempA=32, tempB=120, tempLuminance=67暖かくゴールデンのバケットプリセット自然な彩度 +15なし
明るく軽やかtempA=20, tempB=60, tempLuminance=62明るく軽やかのバケットプリセット彩度 -10、自然な彩度 +10明るさ +15
ムーディーでシネマティックtempA=20, tempB=-50(負の値 — 寒色寄りに調整)、tempLuminance=45ムーディーでシネマティックのバケット彩度 -20コントラスト +25
クールで爽やかtempA=18, tempB=-123, tempLuminance=45クールで爽やかのバケットプリセット自然な彩度 +10なし
鮮やかで力強いなし — tempA/tempB/tempLuminance を省略鮮やかで力強いのバケット自然な彩度 +30、彩度 +15コントラスト +10
ミュートでフィルム調なし — tempA/tempB/tempLuminance を省略ミュートでフィルム調のバケットプリセット彩度 -35、自然な彩度 -10コントラスト +10

色温度の列が「なし」のルックの場合(自動、鮮やかで力強い、ミュートでフィルム調):image_apply_adjustments の呼び出しに tempA、tempB、または tempLuminance を含めないでください。色温度パラメーターがないルックにこれらを追加すると、結果が不正確になります。

微調整 → image_apply_adjustments パラメーター(すべて Step 6 で1回の呼び出しにまとめます):

  • 「白飛びしたハイライトを復元」→ highlights: -60
  • 「暗いシャドウを持ち上げる」→ darks: +40(正の値 = 暗い領域を持ち上げて明るくする)
  • 「コントラストを強める」→ Step 6 の呼び出しで contrast: +30。Step 5a ではルックのコントラストがすでにピクセルに適用されています。Step 6 は Step 5 の出力に対する別の呼び出しなので、微調整分のみを渡します(contrast: +30)。ルックのコントラスト値と合算しないでください
  • 「色の鮮やかさを強める」→ vibrance: 30
  • 「彩度を下げる/色調を抑える」→ saturation: -30
  • 「露出を調整(明るく/暗く)」→ exposure: +0.5(明るく)または exposure: -0.5(暗く)。文脈から方向を判断し、指定がなければ +0.3 を既定値とします
  • 「明るい領域を調整」→ lights: +20
  • 「背景をぼかす(強め)」→ image_apply_effects → effect: "gaussianBlur", blurRadius: 12, blurTarget: "background"(別の呼び出しです。image_apply_adjustments には含めません。利用できない場合は image_apply_gaussian_blur にフォールバックします)
  • 「なし」→ 微調整の手順を完全に省略

トリミング:

  • 「トリミングなし」→ Step 7 を完全に省略
  • 比率 + 「中央」→ fit: "reframe"、その比率を output に指定し、align: { x: 0.5, y: 0.5 }(中央を基準にした単純な切り抜き)で image_crop_and_resize を呼び出します
  • 比率 + 「スマートトリミング」→ fit: "reframe"、その比率を output に指定し、ポートレートや人物が想定される場合は focus: "face"、それ以外は focus: "subject" を指定して image_crop_and_resize を呼び出します(指定した比率で検出された被写体を中心にスマートに再構成します)

選択を受け取ったら、設定内容をユーザーに確認します:

✅ Got it — running with:
- Look: [selected look]
- Selective AI enhancements: [yes — will apply adaptive presets per detected element / no]
- Tweaks: [list if any, including "Blur background" if selected in Q2, or "none"]
- Crop: [ratio or "no crop"] + [Center / Smart crop]

その後、すぐに Step 2c(サンプルプレビュー)へ進みます。まだバッチ全体の処理は開始しないでください。


Step 2b:大規模バッチの警告(N > 5)

N > 5 の場合、Step 2c の確認プロンプト(前後のプレビューの後)に次の内容を含めます:

⏱ Estimated time for [N] images:
  6–10 → ~3–5 min
  11–20 → ~5–10 min
  20+ → 10+ min

Feel free to step away — I'll post a ✅ summary with download links when done.

ステップ 2c:サンプルプレビュー(画像 1 の適用前/適用後)

全画像を一括処理する前に、確認済みの設定を使って、最初の画像のみを完全なパイプライン(ステップ 3~7。選択した場合はステップ 5e も含む)に通します。これにより、すべての画像に適用される内容をユーザーが実際にプレビューできます。

プレビューをすばやく表示できるように、パイプラインに通す前にまず画像 1 を長辺 1200px に縮小します。最終的な一括処理には、元のフル解像度のソースのみを使用してください。

Tool: image_crop_and_resize
Params:
  imageURI: "<sourceURIs[0]>"
  options:
    output: { width: 1200, height: 1200 }   # caps both dimensions at 1200px; fit:contain preserves aspect ratio, so the long edge (width on landscape, height on portrait) is capped at 1200px
    fit: "contain"
  outputFileType: "jpeg"

結果を preview_source_url として保存します。プレビュー処理では、ステップ 3~7(選択した場合はステップ 5e も含む)の入力として、sourceURIs[0] ではなく preview_source_url を使用してください。

  1. preview_source_url のみで完全なパイプラインを実行します(傾き補正 → トーン → ルック → 選択的な補正 → 微調整 → ぼかし → クロップ)。
  2. 元のフル解像度のソースを「適用前」とし、処理後の縮小画像を「適用後」として asset_preview_file を呼び出します。asset_preview_file は独自にサムネイルを作成するため、サイズの違いはユーザーには見えません。
asset_preview_file({
  assets: [
    { name: "Before", presignedAssetUrl: sourceURIs[0] },
    { name: "After",  presignedAssetUrl: processed_preview_url }
  ]
})

ウィジェットが利用できない場合の代替手段(Codex など、このサーフェスで asset_preview_file を利用できない場合のみ)—次のラベルを付けて、2 つの URL をメッセージに直接表示します。

適用前:<sourceURIs[0]>
適用後:<processed_preview_url>

画像 URL をインライン表示する UI クライアントでは、両方が自動的に表示されます。Codex などの非 UI エージェントでは、ネイティブのファイルダウンロードツールを使って両方のアセットをワークスペースにダウンロードし、<sourceURIs[0]> を before.jpg、<processed_preview_url> を after.jpg として保存してから、代わりにそれらのローカルパスを参照します。

  1. 次のメッセージを投稿します(N > 5 の場合は、ここに一括処理にかかる時間の注記を追加します)。
👆 Here's a before/after preview using your first photo and the settings you selected.

Please confirm before I apply this to all [N] images.
  1. 質問を 1 つだけ指定して AskUserQuestion を呼び出します。
Question (single_select):
  question: "Does the preview look good?"
  options:
    - "✅ Yes — apply to all [N] images"
    - "🎛️ No — adjust settings first"
    - "❌ Cancel"

ここで処理は完全に一時停止します。 ユーザーが明示的に「はい」を選択するまで、一括処理を開始しないでください。この確認手順は必須です。ユーザーがすべての設定をあらかじめ伝えていた場合でも、毎回実行してください。

「はい」の場合: すべての画像(sourceURIs[0…N-1])をフル解像度で一括処理します(ステップ 3~7。選択した場合はステップ 5e も含む)。1200px のプレビュー結果は再利用しないでください。これは確認専用であり、最終成果物に含めてはいけません。

「いいえ — 設定を調整」の場合: ステップ 2 の AskUserQuestion の質問一式を再表示します。新しい設定が確認されたら、必ずプレビューをもう一度実行します。新しい設定で画像[0]を処理し、新しい適用前/適用後の画像を表示してから、続行前に明示的な確認を再度求めてください。設定の調整後にプレビュー確認を省略してはいけません。

「キャンセル」の場合: 了承して停止します。画像は処理しないでください。


ステップ 3:自動傾き補正(画像ごと)

Tool: image_auto_straighten
Params:
  imageURIs: ["<source_uri_N>"]
  options:
    uprightMode: "auto"
    constrainCrop: true

出力:results[0].outputUrl → straightened_urls[]

失敗した場合:元の URI を使用し、その画像について「傾き補正をスキップ」と記録します。


ステップ 4:自動トーン調整(画像ごと)

Tool: image_apply_auto_tone
Params:
  imageURI: "<straightened_url_N>"
  options:
    type: "cameraRawFilter"
  outputFileType: "jpeg"

image_apply_auto_tone には type: "cameraRawFilter" を使用します。出力:results[0].outputUrl → toned_urls[]


Step 5: ルックを適用する

次の順にルックを適用し、出力を連鎖させます。

5a: ルックの調整 — 色温度、自然な彩度/彩度、明るさ/コントラストをまとめて、バッチごとに単一の image_apply_adjustments 呼び出しで適用します。選択したルックに必要なパラメーターのみを指定します(マッピングテーブルを参照)。

Tool: image_apply_adjustments
Params:
  imageURIs: ["<toned_url_1>", "<toned_url_2>", ...]
  options:
    # Color temperature (if look requires it — all three required together):
    tempA: <value>          # e.g. 32 for Warm & Golden
    tempB: <value>          # e.g. 120 for Warm & Golden
    tempLuminance: <value>  # e.g. 67 for Warm & Golden
    # Vibrance / saturation (if look requires it):
    vibrance: <value>
    saturation: <value>
    # Brightness / contrast (if look requires it):
    brightness: <value>
    contrast: <value>
  outputFileType: "jpeg"

出力:results[N].outputUrl → look_adjusted_urls[]

一貫性を保つことが目標です。すべての画像に同じパラメーター値を適用してください。画像ごとの完璧さより、統一感を優先します。

5b: ルックプリセット(選択したルックに一致するものがLook→Preset Mapにある場合)

最初にプライマリプリセットを適用し、セカンダリプリセットがある場合は続けて適用して、出力を連鎖させます。Step 0bで作成したLook→Preset Mapに記載された正確なプリセット名を使用してください。ここで名前をハードコードしないでください。

Tool: image_apply_preset
Params:
  imageURI: "<look_adjusted_url_N>"   # or previous preset output if chaining
  options:
    presetName: "<preset from Look→Preset Map>"

image_apply_presetで403(利用権限エラー)が発生した場合: すべての画像でプリセットをスキップします。納品の概要に「[Preset name] was skipped — not included in your Adobe plan.」と記載してください。Step 5e(選択的な補正が選択されている場合)またはStep 6(微調整)に進みます。このステップより前に実行済みのStep 5aのルック調整は再適用しないでください。


Step 5e: 選択的なアダプティブ補正(画像ごと、オプトインのみ)

ユーザーが質問5に「No」と回答した場合、またはSelective Adaptive Mapに設定済みのバケットがない場合は、このステップ全体をスキップします。

各画像でシーン要素を検出し、実際に見つかった要素に対応するアダプティブプリセットのみを適用します。結果は画像ごとに異なります。フレーム内の要素に応じて、スカイプリセットが適用される画像もあれば、適用されない画像もあります。これは意図した正しい動作です。

5e-1: シーン要素を検出する
Tool: image_select_subject
Params:
  imageURI: "<last_look_chain_url_N>"   # last output for this image: Step 5b preset output if presets ran; otherwise Step 5a look_adjusted_url
  options:
    bodyParts: ["Face", "Torso", "Clothing", "Skin", "Hair", "Sky", "Background"]

検出結果をSelective Adaptiveのバケットに対応付けます。

  • 顔/胴体/肌を検出 → Subject/Personバケットのプリセットを適用
  • 衣服/髪を検出 → Body Parts/Clothesバケットのプリセットを適用
  • 空を検出 → Skyバケットのプリセットを適用
  • 背景を検出 → Backgroundバケットのプリセットを適用
  • 何も検出されない → この画像では選択的なプリセットをすべてスキップし、最後のルック連鎖の出力(プリセットを実行した場合はStep 5bのプリセット出力、それ以外の場合はStep 5aのlook_adjusted_url)をStep 6の入力として使用
5e-2: 検出された要素のプリセットを適用する(連鎖)

上記のバケット条件を満たしたプリセットのみを、次の順に適用します:Subject → Body Parts → Sky → Background。各出力を次のプリセットに引き継ぎます。

Tool: image_apply_preset
Params:
  imageURI: "<previous_output_url>"
  options:
    presetName: "<preset from Selective Adaptive Map>"

出力: selective_urls[]として収集し、Step 6に渡します。

403の場合: そのプリセットをスキップし、「[preset name] skipped — not on your plan.」と記載します。残りの選択的プリセットは続けて適用します。 検出に失敗した場合: その画像では選択的なプリセットをすべてスキップし、ルックの出力をStep 6の入力として使用します。


Step 6: 微調整(選択されている場合はバッチ処理)

選択された微調整をすべて単一の image_apply_adjustments 呼び出しにまとめて、Step 5の出力に適用します。Step 5aのルック調整はすでにピクセルに反映されているため、ここでは微調整の差分値のみを渡します。すべてのURLをまとめて渡します。

Tool: image_apply_adjustments
Params:
  imageURIs: ["<step5_output_url_1>", "<step5_output_url_2>", ...]
  # Use selective_urls[] if Step 5e ran; otherwise the last preset output from Step 5b; otherwise look_adjusted_urls[] from Step 5a.
  options:
    # include only params for tweaks the user selected:
    highlights: -60       # "Recover blown highlights"
    darks: +40            # "Lift dark shadows" (positive lifts dark areas)
    contrast: +30         # "Boost contrast" fine-tune delta only (look contrast already applied by Step 5a)
    vibrance: 30          # "Boost color intensity"
    saturation: -30       # "Desaturate / muted tones"
    exposure: +0.5        # "Adjust exposure" (brighter) or -0.5 (darker)
    lights: +20           # "Tune bright areas"
  outputFileType: "jpeg"

ユーザーが選択していないパラメーターは省略します。1回の呼び出しですべての調整を同時に処理します。

背景のぼかし(選択されている場合、画像ごと):

Tool: image_apply_effects
Params:
  imageURIs: ["<url_N>"]
  options:
    effect: "gaussianBlur"
    blurRadius: 12
    blurTarget: "background"

この環境でimage_apply_effectsを使用できない場合(ツールが登録されていない、または呼び出しが不明なツールのエラーで失敗する場合)は、従来のエフェクト別ツールimage_apply_gaussian_blurで1回再試行します。パラメーターは同じですが、effect判別子は指定しません。

Tool: image_apply_gaussian_blur
Params:
  imageURIs: ["<url_N>"]
  options:
    blurRadius: 12
    blurTarget: "background"

ステップ 7:トリミング(画像ごと、リクエストされた場合)

「トリミングなし」が選択されている場合は、このステップ全体をスキップします。

どちらのトリミングモードも、選択した比率で同じ fit: "reframe" を使用します。違いは、画像内でフレームを配置する方法です。

中央トリミング — 幾何学的な中心から目標の比率に合わせて切り取ります。

Tool: image_crop_and_resize
Params:
  imageURI: "<adjusted_url_N>"   # Step 6 output if fine-tunes ran; otherwise last Step 5 chain output (selective_urls[N] if Step 5e ran, last preset output from Step 5b if presets ran, otherwise look_adjusted_urls[N] from Step 5a)
  options:
    output: "<ratio>"        # "1:1", "4:5", "16:9", "4:3"
    fit: "reframe"
    align: { x: 0.5, y: 0.5 } # geometric center
  outputFileType: "jpeg"

スマートトリミング — 比率は同じですが、幾何学的な中心ではなく、検出された被写体や顔を囲むようにフレームを配置します。元の画像で被写体が中央から外れていても、フレーム内に収まります。

Tool: image_crop_and_resize
Params:
  imageURI: "<adjusted_url_N>"   # Step 6 output if fine-tunes ran; otherwise last Step 5 chain output (selective_urls[N] if Step 5e ran, last preset output from Step 5b if presets ran, otherwise look_adjusted_urls[N] from Step 5a)
  options:
    output: "<ratio>"   # "1:1", "4:5", "16:9", "4:3"
    fit: "reframe"
    focus: "face"       # or "subject" for non-portrait scenes
  outputFileType: "jpeg"

final_urls[] として収集します。トリミングをしない場合、final_urls[] はステップ 6 の出力(微調整を実行した場合)、それ以外はステップ 5 の最後のチェーンの出力(ステップ 5e を実行した場合は selective_urls[]、プリセットを実行した場合はステップ 5b の最後のプリセット出力、それ以外はステップ 5a の look_adjusted_urls[])になります。


ステップ 8:プレビュー

最終出力 URL を asset_preview_file に直接渡してください。最初に image_crop_and_resize を実行してはいけません。リサイズのステップを追加すると、白い帯(fit: "pad" による)や被写体の切り取り(fit: "reframe" による)が発生します。asset_preview_file はサムネイルを適切に処理します。

asset_preview_file({
  assets: [
    { name: "photo_1.jpg", presignedAssetUrl: final_url_1 },
    // ... one per image
  ]
})

asset_preview_file が失敗した場合は、完了の概要に最終出力 URL をプレーンテキストのリンクとして表示してください。

ウィジェットが利用できない場合の代替手段 (この環境(Codex など)で asset_preview_file を利用できない場合のみ) — 完了メッセージに最終出力 URL を直接列挙します(画像ごとに 1 つ。下記のステップ 8 のテンプレートを使用)。画像 URL をインライン表示する UI クライアントでは、自動的に表示されます。Codex などの非 UI エージェントでは、ネイティブのファイルダウンロードツールを使って各画像をワークスペースにダウンロードし(<final_url_1> を photo_1.jpg などの名前で保存)、代わりにそのローカルパスを参照してください。どのクライアントでも、写真ごとのダウンロードリンクが成果物になります。

処理前/処理後のプレビュー(ステップ 2c): ステップ 2c では、まず画像 1 を 1200px に縮小してから、その縮小画像にパイプラインを実行します。「処理前」には元のフル解像度の sourceURIs[0] を、「処理後」には処理済みの 1200px 出力を渡してください。asset_preview_file がサムネイルを適切に処理するため、解像度の違いはユーザーには見えません。追加のリサイズステップを入れないでください。

Firefly Board を作成する

最終出力 URL を使って、次のように Firefly ボードツールを呼び出します。

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

ボードリンクの処理:

  • create_firefly_board はボード URL を返します。これを取り出して board_url に保存します。
  • board_url が存在し、空でない場合は、完了メッセージに含めます。
  • 呼び出しがエラーを返すか、URL を返さない場合は、ボードリンクを省略し、概要に「Firefly Board は利用できません」と記載します(再試行しても解決しません)。 その後、完了メッセージを投稿します。写真ごとのダウンロードリンクは、すべての完了メッセージに含めます。board_url が返された場合は、ボードリンクも含めます。

N ≤ 3 の場合:

✅ Done! [N] photos edited with a consistent [look name] look.

📥 Download:
• Photo 1 → <final_url_1>
• ...

🎨 View in Firefly Board → <board_url>   ← always include if board_url is set

Look applied: [look name] → [brief description of what was applied]

N > 3 の場合:

✅ Done! [N] photos edited with a consistent [look name] look.

📥 Your edited photos:
• Photo 1 → <final_url_1>
• Photo 2 → <final_url_2>
• ...

🎨 View in Firefly Board → <board_url>   ← always include if board_url is set

Look applied: [look name] → [brief description of what was applied]

詳細度のルール

報告するのは、主要なステージの開始、画像ごとの失敗(1 回だけ記録)、最終概要のみです。

  • 主要なステージの開始時(例:「[N] 枚の画像に Warm & Golden のルックを適用しています…」)
  • 画像ごとの失敗(1 回だけ記録し、続行)
  • グリッドとダウンロードリンクを含む最終概要

出力の抽出

すべてのパイプラインツールは、次を返します。

{ "results": [{ "success": true, "outputUrl": "https://..." }] }

results[N].outputUrl を読み取ります。success: false の場合は、「エラー処理」を参照してください。


エラー処理

状況対応
image_list_presets が空、または 403 を返すすべての画像でステップ 5b と 5e をスキップします。概要に「このプランではプリセットを利用できません。」と記載します。色温度の調整と手動調整は引き続き実行します。
ステップ 5e で image_select_subject が失敗するその画像の選択的なプリセットをすべてスキップし、ステップ 6 への入力としてルックの出力を使用します。概要には一度だけ記載します。
image_apply_preset が 403 を返すすべての画像でプリセットをスキップします。概要に「[プリセット名] は Adobe プランに含まれていないため、スキップされました。」と記載します。ほかのルックのステップは続行します。
トーンまたはカラーのツールが 403 を返すそのステップをスキップします。概要に記載して続行します。
いずれかのツールが「No approval received」を返す403 の権限エラーと同様に扱います。任意のステップ(プリセット、微調整、プレビュー)はスキップし、概要に記載します。このエラーは再試行しても解決しないため、上記のルールに従って続行します。
いずれかのツールが 401 を返すAdobe OAuth で再認証してから再試行するよう、ユーザーに依頼します。
いずれかのツールが「file too large or corrupted」を返すその画像の処理を直ちに停止します。再試行しないでください。ユーザーに「[ファイル名] を処理できませんでした。ファイルが大きすぎるか、破損している可能性があります。小さいサイズのファイルを再アップロードするか、お使いの環境でファイルを正しく開けることを確認してください。」と伝えます。概要でその画像に印を付け、残りの画像の処理を続行します。
プログラムによるアップロードが失敗する(PUT 5xx/外部への通信不可)asset_add_file ピッカー(デフォルトの取り込み方法)に切り替え、ファイルをステージングするためにピッカーを開くことをユーザーに伝えます。
asset_add_file にファイルが表示されない(ピッカー経由)ピッカーでファイルを選択するよう、ユーザーに伝えます。
URI が dcx-stage.adobe.io で始まる(ピッカー経由)read_widget_context を使って、実際の署名付き S3 URL に解決します。
image_auto_straighten が失敗する元の URI を使用し、「傾き補正をスキップしました」と記載します。
image_apply_auto_tone が失敗する傾き補正後の URI を使用し、概要に記載します。
いずれかの調整ツールが失敗する前のステップの出力を使用し、概要に記載します。
image_apply_effects が利用できない、または不明なツールである同じ blurRadius と blurTarget を使って、image_apply_gaussian_blur で一度だけ再試行します。ユーザーに見える変更はありません。
image_apply_effects とその代替ツールの両方が失敗する前の出力を使用し、「ぼかしをスキップしました」と記載します。
image_crop_and_resize が失敗するぼかし/調整後の出力を最終結果として使用し、概要に記載します。
asset_preview_file が「No approval received」を返す概要に最終出力の URL をプレーンテキストのリンクとして記載します。
1 つの画像ですべてのステップが失敗する元の URI を返し、概要で明確に印を付けます。

厳守事項

  • バッチ内の画像はすべて処理し、失敗は黙ってスキップせず、フラグを付けます。
  • image_* ツールにローカルファイルシステムのパスをそのまま渡してはいけません。ローカルファイルはまず Creative Cloud に送る必要があります。asset_add_file ピッカーで選択するか、(ウィジェットを使用できない場合は)asset_initialize_file_upload → PUT → asset_finalize_file_upload の順にステージングします。その後に得られる署名付き CC URI のみが、画像ツールで有効なソースです。
  • image_apply_auto_tone は type: "cameraRawFilter" を指定して呼び出します。
  • バッチ内のすべての画像に同じパラメーター値を適用します(完璧さより統一感を優先します)。
  • プリセットの選択は常に動的に行います。実行時に image_list_presets を呼び出し、Look→Preset Map と Selective Adaptive Map の両方を作成します。プリセット名をハードコードしてはいけません。
  • 色調・色の調整(色温度、自然な彩度、彩度、明るさ、コントラスト、露光量、ハイライト、シャドウ、暗部、明部)にはすべて image_apply_adjustments を使用します。個別のツール(image_adjust_color_temperature、image_adjust_vibrance_and_saturation、image_adjust_highlights など)は非推奨のため、使用してはいけません。
  • すべてのルック調整(ステップ 5a)は 1 回の image_apply_adjustments 呼び出しにまとめ、すべての微調整(ステップ 6)も 1 回の image_apply_adjustments 呼び出しにまとめます。調整の呼び出しを複数回連続して行ってはいけません。
  • 選択的なアダプティブ補正(ステップ 5e)は、デフォルトでオフです。質問 5 でユーザーが明示的に有効にした場合にのみ実行します。
  • ステップ 5e では、検出された要素にのみプリセットを適用します。空がない画像には空のプリセットを適用せず、人が写っていない画像には被写体のプリセットを適用しません。このステップで画像ごとに適用内容が異なるのは正しい動作です。
  • プレビュー処理では、画像 1 を幅 1200px に縮小したものを使用し、最終バッチではフル解像度を使用します。
  • 背景のぼかしには image_apply_effects を effect: "gaussianBlur" および blurTarget: "background" とともに使用します。image_apply_effects がまだ利用できない場合は、従来の image_apply_gaussian_blur にフォールバックします(ここでは image_apply_lens_blur は使用しません)。
  • ビフォー・アフターのプレビュー確認(ステップ 2c)は必須であり、省略できません。事前に希望がどれほど明確に示されていても、ユーザーが明示的に確認するまでフルバッチを開始してはいけません。
  • ユーザーが設定を変更した後は、新しい設定で必ずプレビューを再実行してからバッチを開始します。「プレビューなしですぐにすべて実行する」代替手段はありません。
  • 完了の通知は、チャット内に明確なメッセージとして投稿します(プッシュ通知は使用しません)。

コメント