Loading...
Loading...
Apply consistent photo adjustments across a set of images so they look like they were edited together. Use this skill whenever the user says "make my photos look cohesive", "give all these the same style", "apply a warm and golden feel to all of these", "make this cinematic", "match the look across my photos", "edit all my travel photos the same way", "batch edit these", "make these consistent", "fix my phone photos", or uploads a folder of photos and wants a unified, polished result. Also triggers for requests like "apply a preset to all of these", "make these look professional", or "they were shot in mixed lighting — can you fix them all". Outputs direct final image URLs plus an in-chat preview grid and optional Firefly Board link. Access: 🔐 Signed-In required | Gen AI: ❌
npx skill4agent add adobe/skills adobe-batch-edit-photos| Step | Tool | Notes |
|---|---|---|
| Ingest | | Interactive file picker |
| Straighten | | Per image |
| Auto-tone | | Per image, |
| Exposure | | Batch — fine-tune option (brighter/darker) |
| Highlights | | Batch — fine-tune option |
| Shadows | | Batch — fine-tune option |
| Bright areas | | Batch — fine-tune option |
| Brightness/Contrast | | Batch, if requested |
| Vibrance/Saturation | | Batch, if requested |
| Color temperature | | Batch — key for "warm", "cool", "golden" looks |
| Look preset | | Per image, core style vehicle |
| Face detect | | Per image, only if crop focus needed |
| Background blur | | Per image, only if explicitly requested |
| Crop | | Per image, optional |
| Sample preview | | Before/after on image[0] only |
| Final preview | | Batch assets array |
| Firefly Board | | All edited outputs |
adobe_mandatory_init{ "skill_name": "adobe-batch-edit-photos", "skill_version": "1.0.1" }adobe_mandatory_initasset_add_fileTool: asset_add_file
Params: {}AskUserQuestionAskUserQuestion📷 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?AskUserQuestion📷 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? 👇AskUserQuestionQuestion 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"image_adjust_color_temperatureimage_apply_preset| Look | Color Temp (a, b, luminance) | Preset | Saturation/Vibrance | Brightness/Contrast |
|---|---|---|---|---|
| Auto (balanced) | none | | none | none |
| Warm & Golden | a=32, b=120, luminance=67 | | vibrance +15 | none |
| Bright & Airy | a=20, b=60, luminance=62 | | saturation -10, vibrance +10 | brightness +15 |
| Moody & Cinematic | a=20, b=-50, luminance=45 | | saturation -20 | contrast +25 |
| Cool & Fresh | a=18, b=-123, luminance=45 | | vibrance +10 | none |
| Vibrant & Punchy | none | | vibrance +30, saturation +15 | contrast +10 |
| Muted & Film | none | none | saturation -35, vibrance -10 | contrast +10 |
image_adjust_highlightsamount: -60image_adjust_dark_portionsamount: +40image_adjust_brightness_and_contrastcontrast: 30image_adjust_vibrance_and_saturationvibrance: 30image_adjust_vibrance_and_saturationsaturation: -30image_adjust_exposureexposure: +0.5exposure: -0.5+0.3image_adjust_light_portionsamount: +20image_apply_gaussian_blurblurRadius: 12, blurTarget: "background"image_crop_and_resizefit: "reframe"outputalign: { x: 0.5, y: 0.5 }image_crop_and_resizefit: "reframe"outputfocus: "face"focus: "subject"✅ Got it — running with:
- Look: [selected look]
- Tweaks: [list if any, or "none"]
- Crop: [ratio or "no crop"] + [Center / Smart crop]
- Background blur: [yes/no]⏱ 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.sourceURIs[0]asset_preview_fileimage_crop_and_resizeasset_preview_file({
assets: [
{ name: "Before", presignedAssetUrl: sourceURIs[0] },
{ name: "After", presignedAssetUrl: processed_url }
]
})👆 Here's a before/after preview using your first photo and the settings you selected.
How does it look?AskUserQuestionQuestion (single_select):
question: "Ready to run the full batch?"
options:
- "✅ Looks great — run all [N] images"
- "🎛️ Adjust settings"
- "❌ Cancel"sourceURIs[1…]AskUserQuestionQuestion (single_select):
question: "Want to preview the new settings first, or run all images now?"
options:
- "👁 Preview first"
- "🚀 Run all [N] images now"sourceURIsTool: image_auto_straighten
Params:
imageURIs: ["<source_uri_N>"]
options:
uprightMode: "auto"
constrainCrop: trueresults[0].outputUrlstraightened_urls[]Tool: image_apply_auto_tone
Params:
imageURI: "<straightened_url_N>"
options:
type: "cameraRawFilter"
outputFileType: "jpeg"type: "cameraRawFilter"image_apply_auto_toneresults[0].outputUrltoned_urls[]image_adjust_color_temperatureimageURIsTool: image_adjust_color_temperature
Params:
imageURIs: ["<toned_url_1>", "<toned_url_2>", ...]
options:
a: <value from mapping> # green-red axis (-128–127)
b: <value from mapping> # blue-yellow axis (-128–127)
luminance: <value from mapping> # 0–100results[N].outputUrlcolor_temp_urls[]Tool: image_apply_preset
Params:
imageURI: "<color_temp_url_N>"
options:
presetName: "<preset from mapping>"Tool: image_adjust_vibrance_and_saturation
Params:
imageURIs: ["<previous_url_N>"]
options:
vibrance: <value>
saturation: <value>Tool: image_adjust_brightness_and_contrast
Params:
imageURIs: ["<previous_url_N>"]
options:
brightness: <value> # omit if not needed for this look
contrast: <value> # omit if not needed for this lookimage_apply_presetimageURIsTool: image_adjust_highlights / image_adjust_dark_portions / image_adjust_brightness_and_contrast /
image_adjust_vibrance_and_saturation / image_adjust_exposure / image_adjust_light_portions
Params:
imageURIs: ["<look_url_1>", "<look_url_2>", ...]
options:
<values from mapping>image_adjust_brightness_and_contrastbrightnesscontrastTool: image_apply_gaussian_blur
Params:
imageURIs: ["<url_N>"]
options:
blurRadius: 12
blurTarget: "background"fit: "reframe"Tool: image_crop_and_resize
Params:
imageURI: "<adjusted_url_N>"
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>"
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[]asset_preview_fileimage_crop_and_resizefit: "pad"fit: "reframe"asset_preview_fileasset_preview_file({
assets: [
{ name: "photo_1.jpg", presignedAssetUrl: final_url_1 },
// ... one per image
]
})asset_preview_fileasset_preview_filecreate_firefly_board({
import_adobe_storage: [
final_output_url_1,
final_output_url_2,
// ...
]
})create_firefly_boardboard_urlboard_urlboard_url✅ 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]✅ 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]{ "results": [{ "success": true, "outputUrl": "https://..." }] }results[N].outputUrlsuccess: false| Situation | Action |
|---|---|
| Skip preset for all images (Pattern 1). Note in summary. Continue with other look steps. |
| Any tone/color tool returns 403 | Skip that step. Note in summary. Continue. |
| Any tool returns "No approval received" | Treat the same as a 403 entitlement error. For optional steps (presets, fine-tune adjustments, preview), skip and note in summary. Retrying does not help for this error — continue per the rules above. |
| Any tool returns 401 | Ask user to re-authenticate via Adobe OAuth and retry. |
| Any tool returns "file too large or corrupted" | Stop processing that image immediately. Do not retry, do not attempt alternative URLs. Tell the user: "I couldn't process [filename] — it's either too large or the file may be damaged. Try re-uploading a smaller version, or check that the file opens correctly on your end." Flag the image in the summary and continue with remaining images. |
| Remind user to select files in the picker. |
| Use original URI; note "straighten skipped". |
| Use straightened URI; note in summary. |
| Any adjustment tool fails | Use previous step's output; note in summary. |
| Use previous output; note "blur skipped". |
| Use blur/adjusted output as final; note in summary. |
| Present final output URLs as plain text links in the summary instead. |
| All steps fail on one image | Return original URI; flag clearly in summary. |
image_apply_auto_tonetype: "cameraRawFilter"image_apply_gaussian_blurblurTarget: "background"image_apply_lens_blur