mcpField
A
adobe-retouch-portraits

adobe-retouch-portraits

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

adobe-retouch-portraits について

写真家向けのバッチポートレートレタッチスキルで、Adobe のクリエイティブツールを使って選択した画像を処理します。基本処理は非生成型で、対応する環境に限り、人物以外の背景を限定的に生成編集できます。

主な機能

  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-retouch-portraits

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

詳細

Adobe Retouch Portraits

写真家向けの、手を離して実行できる一括レタッチパイプラインです。ユーザーが画像を選択し、必要に応じて調整を追加すると、エージェントが Adobe のクリエイティブツールを使ってバッチ全体を実行します。

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

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


生成 AI に関するポリシー

このレタッチパイプラインは、デフォルトで完全に非生成型です。 中核となるワークフロー(自動水平補正、自動トーン調整、調整、プリセット、ぼかし、切り抜き)では生成 AI を使用しません。生成 AI を許可していないサーフェス(Claude を含む)では、この非生成型パイプラインのみを実行します。

生成編集を実行できるのは、サーフェスがそれを許可している場合のみです。 image_fill_area などの生成ツール(例:Codex)を利用できる場合に限り、そのサーフェスでは生成 AI が許可されています。このようなツールを利用できない場合(例:Claude)は、いかなる種類の生成編集も行わないでください。呼び出し、試行、提案、言及はせず、非生成型パイプラインのみを実行してください。

生成 AI が許可されている場合も、背景に限り、最小限の使用にとどめます。 その場合に限り、通常の表示サイズで修正が見えないときに、image_fill_area を使って人物以外の領域(壁、床、空、小道具など)のほこり、センサーアーティファクト、傷を修正できます。壁全体を塗り直すのではなく、ほこりを取り除く程度にしてください。どのサーフェスでも、顔、肌、髪、体、衣服に生成ツールを決して適用しないでください。シーンの変更、オブジェクトの削除、環境の変更、フレームの拡張は行わないでください。

ユーザーから人物を生成的に変更するよう依頼された場合(例:「彼女の髪色を変えて」「彼を若く見せて」)、このスキルでは人物への生成編集を行わないことを説明してください。生成機能がまったくないサーフェスでは、ここでは生成編集を利用できないことも伝えてください。そのうえで、専用の生成ワークフローを提案してください。


ツールリファレンス(Adobe for creativity connector)

手順ツール備考
取り込みasset_add_file + read_widget_contextインタラクティブなファイルピッカー。read_widget_context で URI を解決します
取り込み (ウィジェットなしの場合の代替手段)asset_initialize_file_upload + asset_finalize_file_uploadasset_add_file が利用できない場合のみ — ローカルファイルを CC にアップロードします
プリセットの検索image_list_presets起動時に一度だけ実行し、スマートプリセットプランを作成します
傾き補正image_auto_straighten画像ごと
自動トーンimage_apply_auto_tone (cameraRawFilter)画像ごと
トーン調整image_apply_adjustmentsバッチ処理 — すべての調整を 1 回の呼び出しで実行します
被写体/身体の検出image_select_subject顔、身体の部位、衣服を検出します
アダプティブ補正image_apply_preset画像ごと、オプトイン(ステップ 5 を参照)
背景ぼかしimage_apply_lens_blur画像ごと、優先して使用 — 深度を考慮したボケ
強い/スタイライズされたぼかしimage_apply_effects (effect: "gaussianBlur")画像ごと、ユーザーが強いぼかしを明示的に求めた場合のみ。image_apply_gaussian_blur にフォールバックします
背景のクリーンアップimage_fill_area(任意。生成機能)表面で生成 AI が許可されている場合(Codex など、ツールが利用可能な場合)のみ — 背景に限り、人物には使用しません。Claude では使用しません
切り抜きimage_crop_and_resize画像ごと
サンプルプレビューasset_preview_fileimage[0] のみ、処理前/処理後を表示 (ウィジェットなしの場合の代替手段:URL を直接提示します)
最終プレビューasset_preview_fileサイズ変更の手順なしで、すべての最終 URL を直接表示 (ウィジェットなしの場合の代替手段:URL を直接提示します)
Firefly Boardcreate_firefly_board取り込み時のソースの署名付き URL

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

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

{ "skill_name": "adobe-retouch-portraits", "skill_version": "4.1.0" }

また、このサーフェスがサポートするウィジェットと、エグレスが有効かどうかも確認できます。asset_add_file と asset_preview_file の両方が利用可能な場合は、デフォルトのフロー(記載どおりにステップ 1、2c、8)に従ってください。どちらかが利用できない場合(Codex など)は、そのステップの ウィジェットなしの場合の代替手段 を使用してください。ツールの結果に importantNote が含まれる場合、またはコネクターが今回のターンに「Asset Storage & Display」に関するガイダンスを挿入する場合は、それに従ってください。ここに記載されている表示のデフォルト設定より優先されます。


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

初期化の直後、取り込みやユーザーへの質問より前に image_list_presets を呼び出してください。これにより、ユーザーのプランで利用できるすべてのプリセットが得られるため、ステップ 5 でプランを考慮したスマートなプリセット選択を作成できます。

Tool: image_list_presets
Params: {}

返されたリストから、プリセットを 4 つのカテゴリに分類して プリセットプラン を作成してください。以下の命名上の手がかりを使って各プリセットを分類します。これらは固定された名前ではなく、あくまでヒューリスティックなので、判断して適用してください。

プリセットプランの分類

1. 人物向けアダプティブプリセット — 被写体の体、肌、服、または歯を対象とします
命名の手がかり:Adaptive、Subject、Portrait、Person、Skin、Body、Clothes、Outfit、Pop、Warm Pop、Enhance、Teeth、Whiten、Smile、Brighten
目的:人物の被写体を最も効果的に引き立てるプリセットを1~3個選びます。肌や体を対象とするプリセット、または被写体全体のコントラストや暖かみを高めるプリセットを優先してください。空や背景だけに影響するプリセットは避けてください。歯、笑顔、ホワイトニングを示す名前のプリセットは、Step 2で「Whiten Teeth」が選択されたときに使えるよう、ここに含めてください。

2. 全体のムード/トーンプリセット — 画像全体のトーンの特徴を設定します
命名の手がかり:Mood、Tone、Warm、Cool、Golden、Cinematic、Film、Natural、Airy、Fade、Matte、Classic
目的:プリセットを1つだけ選びます。ポートレートに最適な、ニュートラルまたは暖かみのある見た目を選んでください。ユーザーがエディトリアルスタイルを希望している場合を除き、ネオンやシュールなものなど、過度なスタイル表現は避けてください。

3. 全体のトゥーン/ルックプリセット — スタイルの見た目を適用します
命名の手がかり:Toon、Style、Look、Preset、Vintage、Retro、B&W、Mono、Haze、Glow、Edit、Creative
目的:プリセットを1つだけ選びます。ムードプリセットを補完するものを選び、同じ効果の重複は避けてください。ムードプリセットがすでにシネマティックまたは暖色系の場合は、スタイル表現を控えめにしてください。

4. 背景ぼかしプリセット — 背景を柔らかくして、被写体を引き立てます
命名の手がかり:Blur Background、BG Blur、Bokeh、Depth、Focus、Defocus
目的:背景ぼかしプリセットを1つだけ選びます。ユーザーがこのプリセットの適用を選んだ場合、Step 6のぼかし(image_apply_lens_blur / image_apply_effects)の代わりに使用します。

フォールバック戦略:

  • いずれかの分類に該当するプリセットがない場合は、無理に適さないものを選ばず、その分類は空欄にします。
  • プランからプリセットが一つも返されない場合(403または空のリスト)は、Step 5を完全にスキップし、概要に次のように記載します:"アダプティブ補正は利用できません — このプランではプリセットが見つかりませんでした。" これは処理を妨げないエラーです — 他のすべてのパイプライン手順(トーン調整、プレビュー確認、全件バッチ処理)は通常どおり続行します。スキップするのはStep 5だけです。
  • 分類2と3は全体のムード/スタイルレイヤーです。ポートレートに明らかに適したものが見つからない場合はスキップしてください。適さないプリセットを適用するより、スキップするほうが適切です。

Step 2の前に、選択したプリセットをプリセットプランとして保存してください。ユーザーが選んだムード/スタイル(Step 2aで収集)は、各分類で選ぶプリセットの調整に反映できます。詳しくはStep 2aのガイダンスを参照してください。確認メッセージ(Step 2)で、最終的なプランをユーザーに提示してください。


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

パラメーターを指定せずに asset_add_file を呼び出します。ユーザーが次の操作を行えるインタラクティブな UI が表示されます。

  • CC ストレージを参照して、フォルダーまたは個別のファイルを選択する
  • デバイスからアップロードする(ローカルファイル)
  • Cowork の場合:ローカルフォルダーのパスを直接選択する
Tool: asset_add_file
Params: {}

重要: asset_add_file は imageURIs: [] を返します。これは想定どおりであり、エラーではありません。実際の URI は、ユーザーがファイルを選択した後の次のユーザーメッセージで届きます。続行する前に、その返信を待ってください。

URI を受け取ったら、asset_add_file を指定して read_widget_context を呼び出し、正しい署名付き S3 URL に解決します。以降のすべてのツール呼び出しには、解決済みの URL を使用してください。dcx-stage.adobe.io URI はネットワークでブロックされているため、まず read_widget_context で解決する必要があります。

ユーザーのメッセージにすでに CC URN(例:urn:aaid:sc:US:…)が含まれている場合も、Claude では必ずこのファイル選択フローに従ってください。CC URN は有効な署名付き URL ではありません。これを解決する方法は read_widget_context のみです。

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

ウィジェットを利用できない場合の代替手順(asset_add_file がこの環境で利用できない場合のみ。例:Codex)— ユーザーにファイルの選択を求めず、ファイルの保存場所からソース URI を取得してください。image_* ツールが受け付けるのは Creative Cloud ストレージ URI のみです。ローカルパスをそのまま渡さないでください。

ソース操作
ローカルパスにあるファイル(例:/mnt/user-data/uploads/…)まず adobe_mandatory_init でエグレスの状態を確認してください。 エグレスが有効な場合:各ファイルをプログラムでステージングします。ファイルサイズと MIME タイプを取得し、asset_initialize_file_upload({ path: "<filename>", media_type: "<mime>" }) を呼び出して、返されたアップロード URL にバイトデータを PUT します。次に asset_finalize_file_upload({ filename: "<filename>", transfer_document: <from initialize response> }) を呼び出し、後続の呼び出しには返された署名付き CC URL を使用します。エグレスが無効、またはプログラムによるアップロードに失敗した場合、この環境では代替手順を続行できません。その制約をユーザーに伝えてください。
Creative Cloud にすでに保存されているファイルCC 署名付き URL で直接参照します。

プログラムによる手順では、asset_add_file と read_widget_context のどちらも使用しません。取得した署名付き CC URL を sourceURIs[] として収集します。


ステップ 2a:ムードとスタイルの選択

パイプライン計画を提示する前に、ポートレートに希望するムードとスタイルをユーザーに尋ねてください。これに基づいて、プリセット計画の各カテゴリーで優先するプリセットを決めます。

ユーザーのメッセージに明確なムードやスタイルがすでに示されている場合(例:「温かみのある輝き」「暗くムーディー」「すっきりしたヘッドショット」「エディトリアル」)、その内容から推測してください。この質問は省略し、以下の表に従って分類します。

ムードやスタイルが指定されていない場合は、次のメッセージを投稿して質問してください。

📸 Got [N] photo(s)! Before I build your retouching plan — what kind of look are you going for?
Question (single_select):
  question: "🎨 What mood or style do you want for these portraits?"
  options:
    - "Natural & Clean — true-to-life, polished, minimal"
    - "Warm & Glowing — golden, soft, flattering"
    - "Moody & Dramatic — dark, contrasty, editorial"
    - "Bright & Airy — light, fresh, lifestyle"
    - "Cinematic — film-inspired, desaturated, storytelling"
    - "Bold & Vibrant — punchy, vivid, social-ready"

待機 — ユーザーの返信があるまでステップ 2 に進まないでください。(この待機は、質問した場合にのみ適用されます。ユーザーのメッセージからムードやスタイルをすでに推測した場合は、待機を省略してステップ 2 に進んでください。)

ムード → プリセット計画のガイダンス

選択されたムードに基づいて、プリセット計画(ステップ 0b で作成)を調整します。各カテゴリーでは、選択されたムードに名前が合致するプリセットを優先してください。

ムードムード/トーンカテゴリーで優先するものトゥーン/ルックカテゴリーで優先するもの
ナチュラルでクリーンNatural、Clean、Classic、Neutral軽め/控えめなルック
温かみのある輝きWarm、Golden、Glow、Sunset、Amber温かみのある補色
ムーディーでドラマチックMoody、Dark、Cinematic、Shadow、DramaMatte、Fade、Vintage
明るく軽やかAiry、Bright、Light、Freshソフトで明るいルック
シネマティックCinematic、Film、Fade、ClassicMatte、Grain、Retro
大胆で鮮やかVibrant、Pop、Bold、Vividパンチの効いたルック

プリセット計画のカテゴリーに候補が複数ある場合は、選択されたムードに最も合うものを選びます。カテゴリー内のプリセットが 1 つだけの場合は、ムードにかかわらずそれを使用します。


Step 2: パイプラインを案内し、オプションを提示する

雰囲気/スタイルが確定したら、ユーザーのメッセージですでに補正、調整、トリミングの希望がすべて明確に指定されているか確認します。

希望が最初からすべて明確に指定されている場合(例:「被写体を際立たせてレタッチ、調整なし、1:1にトリミング」)、AskUserQuestion を完全にスキップし、確認メッセージを送ってから、Step 2c(サンプルプレビュー)に直接進みます。プレビューによる確認は必須です。希望が最初からすべて指定されている場合でも実行します。確認前にバッチ全体の処理を開始しないでください。以下のボタン→パラメータの表に従って、指定された希望を対応付けます。

希望がすべて明確に指定されていない場合(例:「レタッチしてください」のみで、詳細指定がない場合)は、まず次のメッセージを投稿します:

📸 Got [N] photo(s)! The default pipeline will auto-straighten and auto-tone every image.

Let me know if you'd like any extras 👇

次に、以下の3つの質問を AskUserQuestion で行います:

Question 1 (multi_select):
  question: "✨ Adaptive AI enhancements (select any — or none to skip)"
  options:
    - "All"
    - "Enhance Subject — adaptive preset boosts on the person, skin & clothes"
    - "Mood & Tone — apply a portrait-flattering global tone look"
    - "Toon & Style — apply a stylistic look treatment"
    - "Blur Background — soft bg blur preset, respects edges"
    - "Whiten Teeth — brightens teeth (smiles only)"
    - "None"

Question 2 (multi_select):
  question: "🎛️ Manual tweaks (select any — or none to skip)"
  options:
    - "Recover highlights"
    - "Lift shadows"
    - "More contrast"
    - "More vibrant"
    - "Desaturate (muted tones)"
    - "Blur background — depth-aware bokeh (standard)"
    - "Heavy background blur — stylized gaussian blur"
    - "None"

Question 3 (single_select):
  question: "✂️ Crop ratio"
  options:
    - "Auto (landscape→4:3, portrait→3:4)"
    - "1:1 square"
    - "4:5 portrait"
    - "16:9 wide"

ユーザーが選択を返信するまで、処理を保留します。

ボタンの選択をパラメータに対応付ける

アダプティブ補正(Step 0b で作成したプリセットプランに対応付けます):

  • "All" → 4つのカテゴリ(Adaptive Person + Mood + Toon + Blur BG)をすべて実行し、顔が検出された場合は Whiten Teeth も適用します
  • "Enhance Subject" → Adaptive Person Presets カテゴリのすべてのプリセットを適用します
  • "Mood & Tone" → Global Mood / Tone カテゴリの単一プリセットを適用します
  • "Toon & Style" → Global Toon / Look カテゴリの単一プリセットを適用します
  • "Blur Background" → Background Blur カテゴリのプリセットを適用します(その画像では Step 6 をスキップします)
  • "Whiten Teeth" → Adaptive Person Presets カテゴリの Whiten Teeth プリセットを適用します(顔が検出されない場合はスキップします。Step 5 の人物検出を参照してください)
  • "None" → Step 5 全体をスキップします 手動調整(すべてを Step 4b の1回の image_apply_adjustments 呼び出しにまとめます。固定のデフォルト値ではなく、診断結果に応じた範囲を使用してください):
  • "Recover highlights" → highlights: -40 to -70(ハイライトの白飛びが軽度なら -40、露出オーバーが深刻なら -70 を使用します)
  • "Lift shadows" → darks: +30 to +50(正の値でシャドウのディテールを明るくします。わずかに持ち上げる場合は +30、シャドウが非常につぶれている場合は +50 を使用します。肌がくすんだ場合は vibrance で補正することを優先します)
  • "More contrast" → contrast: +15 to +30(わずかにメリハリを加える場合は +15、画像が非常に平坦な場合に限り +30 を使用します)
  • "More vibrant" → vibrance: +15 to +30(ポートレートでは saturation より vibrance を優先します。vibrance は肌の色合いを保護します)
  • "Desaturate" → saturation: -20 to -40(彩度を抑える場合は -20、ほぼモノクロにする場合は -40 を使用します)
  • "Blur background — depth-aware bokeh (standard)" → image_apply_lens_blur → blurRadius: 8(深度を考慮したリアルなボケです。アダプティブぼかしプリセットも適用されている場合は Step 6 をスキップします)
  • "Heavy background blur — stylized gaussian blur" → image_apply_effects → effect: "gaussianBlur", blurRadius: 12, blurTarget: "background"(ユーザーが強い/スタイライズされたぼかしを明示的に希望した場合に限り使用します。Blur Background アダプティブプリセットと併用しないでください)
  • "None" → Step 4b 全体をスキップします トリミング:
  • "Auto" → 横向き → "4:3"、縦向き → "3:4"、フォーカス:"face"
  • "1:1 square" → output: "1:1"、フォーカス:"face"
  • "4:5 portrait" → output: "4:5"、フォーカス:"face"
  • "16:9 wide" → output: "16:9"、フォーカス:"face" すべてのトリミングモードで focus: "face" を使用します。顔が検出されない場合は、focus: "subject" に切り替えます。

ボタンの選択を受け取ったら、設定をユーザーに確認し、プリセットプランも提示します:

✅ Got it — here's your retouching plan:
- Style: [selected mood/style from Step 2a]
- Auto-straighten + auto-tone + auto-light
- Adaptive enhancements: [list selected categories]
  - Person presets: [preset names from bucket 1, or "none"]
  - Mood preset: [preset name, or "none"]
  - Toon preset: [preset name, or "none"]
  - Blur BG preset: [preset name, or "none"]
- Manual tweaks: [list if any, or "none"]
- Crop: [ratio or "auto 4:3/3:4"]
- Blur: [adaptive / heavy / none]

I'll preview the first image so you can confirm before I apply this to all [N] photos.

Step 2b: 大規模バッチに関する警告(N > 5)

N > 5 の場合は、確認メッセージに次の内容を含めます:

⏱ 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 ✅ completion summary with your
download links when done. (No Slack/email notifications available from here.)

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

全画像を一括処理する前に、確定した設定を使用して、最初の画像のみを完全なパイプライン(ステップ 3~7)で処理します。これにより、すべての画像に適用される内容をユーザーが実際に確認できます。

プレビューをすばやく表示するため、パイプラインにかける前に、まず画像 1 を長辺 1200px に縮小します。確認後、最終バッチ(ステップ 3)では、画像 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 の入力として sourceURIs[0] ではなく、この縮小後の 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 }
  ]
})

ウィジェットが使えない場合の代替手段(この環境で asset_preview_file が利用できない場合のみ。例:Codex)— 2 つの URL をラベル付きでメッセージに直接表示します。

Before: <sourceURIs[0]>
After:  <processed_preview_url>

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

  1. 次のメッセージを投稿します。
👆 Here's a before/after preview using your first photo and the settings you selected.

Please confirm this looks right before I apply it 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"

ここで処理を完全に一時停止します。 ユーザーが明示的に「Yes」を選択するまで、全画像の一括処理を開始してはいけません。この確認は必須であり、ユーザーが希望をどれほど明確に伝えている場合でも、毎回実施します。

「Yes」の場合: フル解像度で、すべての画像(sourceURIs[0…N-1])を対象にステップ 3 に進みます。1200px のプレビュー結果は再利用しないでください。確認用のみの出力であり、最終成果物に含めてはいけません。

「No — 設定を調整」の場合: 必要に応じてステップ 2a に戻り、ムード/スタイルを再収集してから、ステップ 2(AskUserQuestion)に戻ってその他の希望を再収集します。新しい設定が確定したら、必ずプレビューを再実施します。新しい設定で画像 1 を再処理し、新しい適用前/適用後を表示してから、続行する前に再度明示的な確認を求めます。設定を調整した後、プレビュー確認を省略してはいけません。

「Cancel」の場合: 停止し、いつでも再開できることをユーザーに伝えます。


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

一度に 1 枚ずつ処理します(一括処理には対応していません)。

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:
  imageURIs: ["<straightened_url_N>"]
  options:
    type: "cameraRawFilter"

出力: results[0].outputUrl → toned_urls[] に収集


ステップ 4b:トーンの任意調整(一括)

ユーザーがトーン調整を希望した場合、選択されたすべての調整を 1 回の image_apply_adjustments 呼び出しにまとめます。複数回呼び出しを連鎖させる必要はありません。

Tool: image_apply_adjustments
Params:
  imageURIs: [all toned_urls]
  options:
    # Include only the params for tweaks the user selected.
    # Pick a SINGLE numeric value from the diagnostic ranges in Step 2 — do not pass the range string itself.
    # Example values shown; actual values must be chosen based on image severity:
    exposure: 0.4           # "Adjust exposure" — e.g. +0.3 to +0.7 (lift) or -0.3 to -0.5 (reduce)
    highlights: -55         # "Recover highlights" — range: -40 to -70 (severity-matched)
    darks: 40               # "Lift shadows" — range: +30 to +50 (positive lifts dark areas)
    brightness: 10          # if requested — range: +5 to +20
    contrast: 20            # "More contrast" — range: +15 to +30 (lower end unless very flat)
    vibrance: 20            # "More vibrant" — range: +15 to +30 (prefer over saturation for portraits)
    saturation: -30         # "Desaturate" — range: -20 to -40 (lower end unless heavy muting desired)
  outputFileType: "jpeg"

ユーザーが選択していないパラメーターは省略します。1 回の呼び出しで、希望されたすべての調整を同時に行います。

ステップ 5:アダプティブ補正(画像ごと、オプトイン時のみ)

このステップは、ユーザーが 1 つ以上のアダプティブ補正を選択した場合のみ実行します。適用するプリセットは、ハードコードされた名前ではなく、ステップ 0b で作成したプリセットプランに基づきます。

5a:被写体と身体の検出

人物プリセットや歯のプリセットを適用する前に、image_select_subject を呼び出して、フレーム内に何があるかを確認します。これにより、適用するアダプティブ人物プリセットと、歯のホワイトニングが適切かどうかの2つを判断します。

Tool: image_select_subject
Params:
  imageURI: "<tweaked_url_N>"   # Step 4b output if tweaks ran; otherwise toned_url_N
  options:
    bodyParts: ["Face", "Torso", "Clothing", "Skin", "Hair"]

検出結果は次のように使用します:

  • 顔を検出 → ユーザーが歯のホワイトニングを選択している場合は、歯や笑顔のプリセットを含めます
  • 胴体/肌/髪を検出 → 身体を対象としたアダプティブ人物プリセット(肌のスムージング、身体の強調など)を含めます
  • 衣服を検出 → バケット1に衣服や服装を対象としたアダプティブプリセットがある場合は含めます
  • 被写体を検出できない → この画像ではすべてのアダプティブ人物プリセットをスキップします。ムードとトゥーンのプリセットは引き続き適用します
5b:プリセットプランの適用(順番どおり)

プリセットプランから該当するプリセットを順番に適用し、各出力を次のプリセットへの入力として連鎖させます。ステップ2でユーザーが選択したバケットのみを実行します — この実行で有効なバケットを判断するには、ステップ2の対応表を使用します。ユーザーが選択していないバケットはスキップし、有効なバケット内でも検出条件を満たしていないプリセットはスキップします(5aを参照)。

順序(選択されたバケットのみ実行):

  1. アダプティブ人物プリセット(バケット1)—「被写体を強調」、「歯のホワイトニング」、または「すべて」が選択されている場合のみ。バケット内では、顔のみが検出され身体が検出されなかった場合、身体/衣服のプリセットをスキップします。顔が検出されなかった場合は、歯のホワイトニングをスキップします。
  2. グローバルムード/トーンプリセット(バケット2)—「ムードとトーン」または「すべて」が選択されている場合のみ。1回適用します
  3. グローバルトゥーン/ルックプリセット(バケット3)—「トゥーンとスタイル」または「すべて」が選択されている場合のみ。1回適用します
  4. 背景ぼかしプリセット(バケット4)—「背景をぼかす」または「すべて」が選択されている場合のみ。1回適用します。適用した場合、この画像ではステップ6をスキップします
Tool: image_apply_preset
Params:
  imageURI: "<previous_output_url>"   # for first preset: tweaked_url_N (Step 4b output) or toned_url_N if no tweaks ran; for subsequent presets: output of prior preset
  options:
    presetName: "<exact preset name from Preset Plan>"

出力: results[0].outputUrl → 次のプリセットまたはステップ6への入力として連鎖させます。

403(利用権限エラー)の場合: プリセットをスキップします。納品概要に「[プリセット名] はスキップされました — ご利用の Adobe プランには含まれていません」と記載します。残りのプリセットを続行します。 その他の失敗の場合: 前のステップの出力を使用し、概要に「[プリセット名] をスキップ」と記載します。


ステップ6:背景ぼかし(画像ごと)

ステップ5で背景ぼかしプリセット(バケット4)が適用された場合は、このステップ全体をスキップします — アダプティブプリセットがすでに背景ぼかしを処理しています。

ぼかしが選択されていない場合: このステップ全体をスキップします。

標準的な背景ぼかし(ユーザーが「背景をぼかす」を選択し、アダプティブぼかしプリセットが適用されていない場合):

image_apply_lens_blur を優先します — 被写体を自動検出してシャープな状態に保ちながら、奥行きを考慮した自然なボケを生成します:

Tool: image_apply_lens_blur
Params:
  imageURI: "<url_N>"
  options:
    blurRadius: 8    # 6–10 for subtle separation; higher for stronger bokeh

失敗した場合は、以下の image_apply_effects にフォールバックし、「レンズぼかしを利用できません — ガウスぼかしを使用」と記載します。

強い/スタイライズされたぼかし(ユーザーが明示的に「強い背景ぼかし」をリクエストした場合):

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"

上記の image_apply_lens_blur の失敗時にこのステップに進んだ場合も、同じフォールバックが適用されます(この場合は blurRadius: 8 を使用します)。

失敗した場合は、前のステップの出力を使用し、その画像について「ぼかしをスキップ」と記載します。

出力: results[0].outputUrl


ステップ7:トリミング(画像ごと)

デフォルトの動作:

  • 横長の画像 → "4:3" にトリミングし、焦点は "face" にします
  • 縦長の画像 → "3:4" にトリミングし、焦点は "face" にします
  • ユーザー指定の比率(1:1、4:5、16:9 など)→ その比率を使用し、焦点は "face" にします
  • トリミングツールで顔を検出できない場合は、focus: "subject" にフォールバックします
Tool: image_crop_and_resize
Params:
  imageURI: "<blur_url_N>"
  options:
    output: "4:3"          # or "3:4" / user choice
    fit: "reframe"
    focus: "face"          # falls back to "subject" if no face detected
  outputFileType: "jpeg"

これらが最終的なフル解像度の納品物です。 final_urls[] として収集します。


ステップ 8:最終プレビュー+ダウンロードリンク+Firefly ボード

最終出力 URL をそのまま asset_preview_file に渡してください。最初に image_crop_and_resize を通さないでください。白い帯が入ったり、意図しないトリミングが発生したりするためです。asset_preview_file はサムネイルを適切に処理します。

バッチサイズにかかわらず、毎回 asset_preview_file を呼び出してください。

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

ウィジェットが利用できない場合の代替方法(Codex など、この環境で asset_preview_file が利用できない場合のみ)— 完了メッセージに最終出力 URL を画像ごとに 1 件ずつ直接記載します。

portrait_1.jpg → <final_url_1>
portrait_2.jpg → <final_url_2>
// ... 画像ごとに 1 件

画像 URL をインライン表示する UI クライアントでは、自動的に画像が表示されます。Codex やその他の非 UI エージェントでは、ネイティブのファイルダウンロードツールを使って各画像をワークスペースにダウンロードし(<final_url_1> を portrait_1.jpg として保存するなど)、代わりにそのローカルパスを参照してください。

Firefly ボードを作成する

以下のように、最終出力 URL を指定して Firefly ボードツールを呼び出してください。

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

ボードリンクの処理:

  • 返された URL を取り出し、board_url として保存します。
  • board_url が存在し、空でない場合は、完了メッセージに含めます。
  • 呼び出しに失敗した場合、または URL が返されなかった場合は、要約に「Firefly Board は利用できません」と記載します(再試行しても解決しません)。 その後、完了メッセージを投稿します。プレビューグリッドはすべての完了メッセージに含まれます。board_url が返された場合は、ボードリンクも含めます。

N ≤ 3 の場合 — 個別のリンクを記載します:

✅ All done! [N] portraits retouched and ready.

📥 Download your full-resolution portraits:
• Portrait 1 → <final_url_1>
• Portrait 2 → <final_url_2>

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

Pipeline applied: Auto-straighten → Auto-tone (Camera Raw) → [tweaks if any]
→ [adaptive enhancements if any] → [blur if any] → Crop [ratio]

N > 3 の場合 — すべてのリンクを記載します:

✅ All done! [N] portraits retouched and ready.

📥 Your retouched portraits:
• Portrait 1 → <final_url_1>
• Portrait 2 → <final_url_2>
• ...

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

Pipeline applied: Auto-straighten → Auto-tone (Camera Raw) → [tweaks if any]
→ [adaptive enhancements if any] → [blur if any] → Crop [ratio]

詳細度のルール

大規模なバッチ向けです。報告するのは、各ステージの開始、個別の失敗(各失敗につき 1 回だけ記録)、最終的な要約のみです。

  • バッチ全体に対するパイプラインのステージが始まったとき(例:「[N] 枚の画像をまっすぐにしています……」)
  • 個別の画像で失敗が発生したとき(1 回だけ記録して続行)
  • グリッドとダウンロードリンクを含む最終完了要約

出力の抽出に関する参照情報

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

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

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


エラー処理

状況対応
image_list_presets が空または 403 を返すステップ 5 全体をスキップします(ブロックしないため、他のすべてのステップは続行します)。概要に「適応型の補正は利用できません。このプランではプリセットが見つかりませんでした。」と記載します。
image_apply_preset が 403(利用権限)を返すそのプリセットをスキップします。納品の概要に「[プリセット名] はお使いの Adobe プランに含まれていないため、スキップしました。」と記載します。残りのプリセットで続行します。
いずれかのツールが 401(未認証)を返すAdobe OAuth で再認証してから再試行するようユーザーに依頼します
asset_add_file にファイルが表示されない待機し、ピッカーでファイルを選択するようユーザーに伝えます
image_auto_straighten が失敗するステップ 4 に元の URI を渡し、「傾き補正をスキップしました」と記載します
image_apply_auto_tone が失敗する傾き補正済みの URI を次に渡し、概要に記載します
トーン調整が失敗する記録し、前のステップの出力を使って続行します
image_select_subject が失敗する人物検出が必要なプリセット(歯のホワイトニング、人物対象の適応型プリセット)をすべてスキップし、ムードとトゥーンのプリセットは通常どおり適用します
image_apply_preset が失敗する(403 以外)前のステップの出力を使用し、概要に「[プリセット名] をスキップしました」と記載します
カテゴリーにポートレート向けのプリセットが見つからないそのカテゴリーは空のままにし、合わないプリセットを無理に適用しません
image_apply_lens_blur が失敗するeffect: "gaussianBlur", blurRadius: 8, blurTarget: "background" を指定して image_apply_effects にフォールバックし、概要に「レンズぼかしは利用できません」と記載します
image_apply_effects が利用できない/不明なツールである同じ blurRadius と blurTarget を使用して image_apply_gaussian_blur で一度再試行します。ユーザーに表示される変更はありません
image_apply_effects とそのフォールバックの両方が失敗する前のステップの出力を使用し、「ぼかしをスキップしました」と記載します
image_crop_and_resize が失敗するぼかし処理の出力を最終結果として使用し、概要に記載します
asset_preview_file が失敗する、または利用できない最終出力 URL を概要にプレーンテキストのリンクとして提示します(ステップ 8 のウィジェットなしの場合のフォールバックを参照)。
1 枚の画像ですべてのステップが失敗する元の URI を返し、概要に明確に記載します
行き詰まった場合失敗したことを明確に伝え、再試行するか確認します。

厳格な制約

  • バッチ内のすべての画像を処理し、失敗は黙ってスキップせずに通知します。
  • プランを提示する前に、必ずムード/スタイルを収集します(ステップ 2a)。これはプリセットプランのバケット選択に影響します。
  • 処理前後のプレビュー確認(ステップ 2c)は必須です。ユーザーが明示的に「はい」と確認するまで、バッチ全体の処理を開始してはいけません。設定を調整した後は、新しい設定でプレビューを必ず再表示してからバッチを実行します。
  • ポートレートの補正には、saturation よりも vibrance を優先してください。vibrance は肌の色が過飽和になるのをインテリジェントに防ぎます。
  • 背景を分離する場合は、image_apply_effects(effect: "gaussianBlur")よりも image_apply_lens_blur を優先してください。レンズぼかしは深度を認識し、マスキングを使わず、より自然なボケを生み出します。ガウス効果は、ユーザーから明示的に要望された強い、またはスタイライズされたぼかしにのみ使用してください。image_apply_effects がまだ利用できない場合は、従来の image_apply_gaussian_blur を代替としてそのまま使用できます。
  • 調整値は診断に基づいて決めるものであり、ハードコードしません。画像の内容に応じて参照範囲から値を選びます。たとえば、ややフラットな画像には contrast: +15、非常にフラットな画像にのみ +30 を使用します。白飛びが軽度なら highlights: -40、重度なら -70 を使用します。
  • グループ/条件を考慮してください。バッチに撮影条件が明らかに異なる画像(例:屋内と屋外の混在、または露出が大きく異なる画像)が含まれる場合は、確認メッセージでそのことを伝え、ユーザーが選択した同じ設定をすべてに適用します。今後の機能強化として、グループごとに別のパイプラインを実行できる可能性があります。
  • image_apply_auto_tone は type: "cameraRawFilter" を指定して呼び出します。
  • アダプティブ補正はデフォルトでオフです。ユーザーが明示的に選択した場合にのみ実行します。
  • プリセットは常に動的に選択します。実行時に image_list_presets を呼び出し、プリセット名をハードコードしてはいけません。
  • トーン/カラーの調整にはすべて image_apply_adjustments を使用します。個別ツール(image_adjust_highlights、image_adjust_dark_portions、image_adjust_vibrance_and_saturation など)は非推奨であり、使用してはいけません。
  • 背景ぼかしには、プリセットプランの「背景ぼかし」プリセットを使用します(標準的なぼかしには image_apply_lens_blur、強いぼかしには effect: "gaussianBlur" を指定した image_apply_effects も使用可能です)。アダプティブプリセットとステップ 6 は、画像ごとにどちらか一方のみ使用できます。
  • 歯のホワイトニングと身体の部位を対象とするプリセットは、image_select_subject で該当する身体の部位が検出された場合にのみ実行します。
  • デフォルトでは、パイプラインは生成機能を使用しません。生成ツール(image_fill_area、image_generative_expand)は、生成 AI が利用可能な環境(例:Codex)でのみ実行します。利用できない環境(例:Claude)では実行せず、利用可能な場合でも人物には使用しません。上記の生成 AI ポリシーを参照してください。
  • image_* ツールにローカルファイルシステムのパスをそのまま渡してはいけません。ローカルファイルは、まず Creative Cloud にアップロードする必要があります。asset_add_file のピッカーで選択するか(ウィジェットがない場合は代替手段として)、asset_initialize_file_upload → PUT → asset_finalize_file_upload の順にステージングします。有効なのは、その結果得られる署名付き CC URI のみです。
  • ここからプッシュ通知(Slack/メール/テキストメッセージ)を送信することはできません。完了はチャット内の概要で伝えます。

コメント