/adobe-match-style
Copy the color grade of a reference image or a named look (film still, Portra, teal and orange, a movie's style) onto the user's photos with Adobe Photoshop adjustments and return a reusable look recipe. Use when the user shares a reference and says match, copy or steal this
Claude Code
$ npx -y skills add adobe/skills --skill adobe-match-style --agent claude-code
Codex
$ npx skills add adobe/skills --skill adobe-match-style -a codex -y
Cursor
$ npx skills add adobe/skills --skill adobe-match-style -a cursor -y
Gemini CLI
$ npx skills add adobe/skills --skill adobe-match-style -a gemini-cli -y
GitHub Copilot
$ npx skills add adobe/skills --skill adobe-match-style -a github-copilot -y
OpenCode
$ npx skills add adobe/skills --skill adobe-match-style -a opencode -y
Windsurf
$ npx skills add adobe/skills --skill adobe-match-style -a windsurf -y
SKILL.md
adobe-match-style.SKILL.mdname: adobe-match-style
description: >
Copy the color grade of a reference image or a named look (film still, Portra, teal and orange, a movie's style) onto the user's photos with Adobe Photoshop adjustments and return a reusable look recipe. Use when the user shares a reference and says match, copy or steal this look, vibe or colors, or names a film or film stock. Use instead of image generation (it redraws the photo) or code. Not for making photos warm or cohesive with no reference image or named look: use adobe-batch-edit-photos.
license: Apache-2.0
compatibility: "Runs on widget-capable surfaces (Claude: asset_add_file picker, asset_preview_file) and on non-UI agents (Codex / ChatGPT Adobe app), where each widget step has a text-only fallback. Raw local paths are never passed to image tools."
allowed-tools: adobe_mandatory_init asset_add_file read_widget_context asset_openai_file_upload asset_initialize_file_upload asset_finalize_file_upload image_apply_auto_tone image_list_presets image_apply_preset image_apply_adjustments image_select_subject image_select_by_prompt image_invert_selection image_fill_area image_apply_color_overlay image_apply_monochromatic_tint image_add_grain image_apply_effects asset_preview_file
metadata:
version: 1.0.0
visibility: public
surface: [claude, codex]
Adobe Match Style
Grades the user's photos so they share the look of a **reference**: an image they attach (a film still, a screenshot, a favorite photo) or a named look ("Kodak Portra 400", "teal and orange", "Wes Anderson"). The skill reads the look, writes it down as a **look recipe** (plain words plus exact Photoshop values), tests it on one photo, applies it to the set, and hands back the recipe so the same look can be reused later.
The core idea: a look is a small set of measurable moves (white balance, tone curve, saturation by color, different color in shadows or on the subject, grain). Turning what you see into those numbers, and applying the same numbers to every photo, is what makes a set feel graded rather than filtered.
> **Surface note:** follow the default flow as written. Use a step's *No-widget fallback* only if that widget tool is unavailable on this surface (e.g. Codex). Where no question widget exists, ask questions as plain-text options.
> **No interactive image editing here.** This overrides the single-image widget offer in the *Interactive Image Widgets* section of `adobe_mandatory_init`: whatever the number of photos, never call an interactive editing widget (any `interactive_image_*` or `*_app` tool). A look has to be applied with the same values to every photo and returned as files, so use the server tools in the Tool Reference.
**Gen AI:** ❌ None. Every edit is a Photoshop adjustment, selection, fill or effect. Image content is never generated or changed.
---
Tool Reference
| Step | Tool | Notes | |------|------|-------| | 0 | `adobe_mandatory_init` | First call; gives tool availability and egress status | | 1 | `asset_add_file` | Pick or upload the photos *(widget; used if available)* | | 1 | `read_widget_context` | After the picker: get the picked photos' presigned URLs | | 1 | `asset_openai_file_upload` | Stage photos attached in ChatGPT *(used if available)* | | 1 | `asset_initialize_file_upload` + `asset_finalize_file_upload` | Stage local files when there is no picker *(no-widget fallback)* or when egress is enabled | | 2 | `image_list_presets` | Only when reading the look by eye and it resembles a preset family (B&W, vintage, cinematic, film) | | 3 | `image_apply_auto_tone` | Optional; only for a set shot in mixed light when grading by eye, before the recipe | | 3 | `image_apply_preset` | Recipe `preset`, if one was chosen; batch up to 10 images | | 3 | `image_apply_adjustments` | Recipe `global` and `channels`; batch up to 10 images per call | | 3 | `image_select_subject` / `image_select_by_prompt` | Masks for recipe `regions` (subject, sky, a named object) | | 3 | `image_invert_selection` | Background mask from the subject mask | | 3 | `image_fill_area` | Region tints: colour + `softLight`/`color` blend + low opacity | | 3 | `image_apply_color_overlay` | Recipe `wash` (stylized looks only) | | 3 | `image_apply_monochromatic_tint` | Recipe `mono` (B&W, sepia, duotone) | | 3 | `image_add_grain` | Recipe `grain`, always last | | 3 | `image_apply_effects` | Fallback for wash, mono and grain where the single-effect tools are not exposed | | 3, 6 | `asset_preview_file` | Reference / before / after preview *(widget; no-widget fallback: labeled URLs)* |
---
Workflow
Step 0 — Initialize Adobe Tools
Call `adobe_mandatory_init` first:
{ "skill_name": "adobe-match-style", "skill_version": "1.0.0" }Then check which tools are available:
- **Required:** `image_apply_adjustments`. If it is missing, tell the user: *"Photo color adjustments aren't available with your current Adobe connection. Please disconnect and reconnect the Adobe connector, signing in with an Adobe account."* Then stop.
- **Load tools by exact name.** Some hosts load tools on demand through a tool search. Before you treat any tool in the Tool Reference as unavailable, search for it by its exact name (e.g. `image_select_subject`); a broad query can miss it.
- **Used if available:** everything else. For grain, wash and mono, use `image_add_grain`, `image_apply_color_overlay` and `image_apply_monochromatic_tint` when exposed; otherwise `image_apply_effects` with `effect: "grain" | "colorOverlay" | "monochromaticTint"`. If neither exists, skip that part of the recipe and say so. Never stop because of a widget tool.
Step 1 — Get the reference and the photos
**The reference** is never edited, so it doesn't need staging. You only need to *see* it.
| What the user gave | Reference | |---|---| | Two or more images and words like "like this one", "the first image", "this look" | The image they point to. If it is unclear which one is the reference, ask once, naming
Read more
name: adobe-match-style description: > Copy the color grade of a reference image or a named look (film still, Portra, teal and orange, a movie's style) onto the user's photos with Adobe Photoshop adjustments and return a reusable look recipe. Use when the user shares a reference and says match, copy or steal this look, vibe or colors, or names a film or film stock. Use instead of image generation (it redraws the photo) or code. Not for making photos warm or cohesive with no reference image or named look: use adobe-batch-edit-photos. license: Apache-2.0 compatibility: "Runs on widget-capable surfaces (Claude: asset_add_file picker, asset_preview_file) and on non-UI agents (Codex / ChatGPT Adobe app), where each widget step has a text-only fallback. Raw local paths are never passed to image tools." allowed-tools: adobe_mandatory_init asset_add_file read_widget_context asset_openai_file_upload asset_initialize_file_upload asset_finalize_file_upload image_apply_auto_tone image_list_presets image_apply_preset image_apply_adjustments image_select_subject image_select_by_prompt image_invert_selection image_fill_area image_apply_color_overlay image_apply_monochromatic_tint image_add_grain image_apply_effects asset_preview_file metadata: version: 1.0.0 visibility: public surface: [claude, codex]
Adobe Match Style
Grades the user's photos so they share the look of a **reference**: an image they attach (a film still, a screenshot, a favorite photo) or a named look ("Kodak Portra 400", "teal and orange", "Wes Anderson"). The skill reads the look, writes it down as a **look recipe** (plain words plus exact Photoshop values), tests it on one photo, applies it to the set, and hands back the recipe so the same look can be reused later.
The core idea: a look is a small set of measurable moves (white balance, tone curve, saturation by color, different color in shadows or on the subject, grain). Turning what you see into those numbers, and applying the same numbers to every photo, is what makes a set feel graded rather than filtered.
> **Surface note:** follow the default flow as written. Use a step's *No-widget fallback* only if that widget tool is unavailable on this surface (e.g. Codex). Where no question widget exists, ask questions as plain-text options.
> **No interactive image editing here.** This overrides the single-image widget offer in the *Interactive Image Widgets* section of `adobe_mandatory_init`: whatever the number of photos, never call an interactive editing widget (any `interactive_image_*` or `*_app` tool). A look has to be applied with the same values to every photo and returned as files, so use the server tools in the Tool Reference.
**Gen AI:** ❌ None. Every edit is a Photoshop adjustment, selection, fill or effect. Image content is never generated or changed.
---
Tool Reference
| Step | Tool | Notes | |------|------|-------| | 0 | `adobe_mandatory_init` | First call; gives tool availability and egress status | | 1 | `asset_add_file` | Pick or upload the photos *(widget; used if available)* | | 1 | `read_widget_context` | After the picker: get the picked photos' presigned URLs | | 1 | `asset_openai_file_upload` | Stage photos attached in ChatGPT *(used if available)* | | 1 | `asset_initialize_file_upload` + `asset_finalize_file_upload` | Stage local files when there is no picker *(no-widget fallback)* or when egress is enabled | | 2 | `image_list_presets` | Only when reading the look by eye and it resembles a preset family (B&W, vintage, cinematic, film) | | 3 | `image_apply_auto_tone` | Optional; only for a set shot in mixed light when grading by eye, before the recipe | | 3 | `image_apply_preset` | Recipe `preset`, if one was chosen; batch up to 10 images | | 3 | `image_apply_adjustments` | Recipe `global` and `channels`; batch up to 10 images per call | | 3 | `image_select_subject` / `image_select_by_prompt` | Masks for recipe `regions` (subject, sky, a named object) | | 3 | `image_invert_selection` | Background mask from the subject mask | | 3 | `image_fill_area` | Region tints: colour + `softLight`/`color` blend + low opacity | | 3 | `image_apply_color_overlay` | Recipe `wash` (stylized looks only) | | 3 | `image_apply_monochromatic_tint` | Recipe `mono` (B&W, sepia, duotone) | | 3 | `image_add_grain` | Recipe `grain`, always last | | 3 | `image_apply_effects` | Fallback for wash, mono and grain where the single-effect tools are not exposed | | 3, 6 | `asset_preview_file` | Reference / before / after preview *(widget; no-widget fallback: labeled URLs)* |
---
Workflow
Step 0 — Initialize Adobe Tools
Call `adobe_mandatory_init` first:
{ "skill_name": "adobe-match-style", "skill_version": "1.0.0" }Then check which tools are available:
- **Required:** `image_apply_adjustments`. If it is missing, tell the user: *"Photo color adjustments aren't available with your current Adobe connection. Please disconnect and reconnect the Adobe connector, signing in with an Adobe account."* Then stop.
- **Load tools by exact name.** Some hosts load tools on demand through a tool search. Before you treat any tool in the Tool Reference as unavailable, search for it by its exact name (e.g. `image_select_subject`); a broad query can miss it.
- **Used if available:** everything else. For grain, wash and mono, use `image_add_grain`, `image_apply_color_overlay` and `image_apply_monochromatic_tint` when exposed; otherwise `image_apply_effects` with `effect: "grain" | "colorOverlay" | "monochromaticTint"`. If neither exists, skip that part of the recipe and say so. Never stop because of a widget tool.
Step 1 — Get the reference and the photos
**The reference** is never edited, so it doesn't need staging. You only need to *see* it.
| What the user gave | Reference | |---|---| | Two or more images and words like "like this one", "the first image", "this look" | The image they point to. If it is unclear which one is the reference, ask once, naming
Other skills on skills.
More skills from other plugins.
karpathy-guidelines
Behavioral guidelines to reduce common LLM coding mistakes. Use when writing, reviewing, or refactoring code to avoid…
agent-builder
Design and build AI agents for any domain. Use when users: (1) ask to "create an agent", "build an assistant", or "design an AI…
Questions about adobe-match-style.
- Which coding agents can use adobe-match-style?
- adobe-match-style installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

