Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.editmamei/editmamei

NPM · EDITMAMEI · SCANNED SEP 20

Photoshop MCP server: natural-language AI photo editing in desktop Photoshop. AI orchestration.

Available components

0 this week 88 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 39 of 115 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency87
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to editmamei/editmamei). View diagnostics → Pass
  • License check failed: the license (FSL-1.1-MIT) isn't a recognized OSI-approved license. See how to fix → Fail
  • Actively maintained (last published 1 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability59
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 28680 tokens (~462/item across 62 items; 62 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management88
  • Stability check failed: the tool surface changed between 1.1.0 and 1.5.0: 8 tool removals, 0 breaking changes, 3 additions. See how to fix → Fail
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 62 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the io.github.editmamei/editmamei MCP server?

io.github.editmamei/editmamei runs locally as an npm package, launched with npx -y editmamei. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · editmamei

# add to Claude Code
claude mcp add editmamei-editmamei -- npx -y editmamei
// .cursor/mcp.json
{
  "mcpServers": {
    "editmamei-editmamei": {
      "command": "npx",
      "args": [
        "-y",
        "editmamei"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "editmamei-editmamei": {
      "command": "npx",
      "args": [
        "-y",
        "editmamei"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add editmamei-editmamei -- npx -y editmamei
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "editmamei-editmamei": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "editmamei"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add editmamei-editmamei --command npx --arg -y --arg editmamei
# ~/.hermes/config.yaml
mcp_servers:
  editmamei-editmamei:
    command: "npx"
    args: ["-y", "editmamei"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "editmamei-editmamei": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "editmamei"
      ]
    }
  }
}
# add to Vellum
assistant mcp add editmamei-editmamei -t stdio -c npx -a -y editmamei
// mcp.json
{
  "mcpServers": {
    "editmamei-editmamei": {
      "command": "npx",
      "args": [
        "-y",
        "editmamei"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 85 to 88.

  • 19 Sept 26 +26
    • Malware scan: unverified → pass security
    • Judged manipulation: unverified → pass security
    • Schema quality: unverified → excellent functional
  • 18 Sept 26 −25
    • Judged manipulation: pass → unverified security
    • Malware scan: pass → unverified security
    • Schema quality: excellent → unverified functional
    • Package version: 1.4.0 → 1.5.0 functional
  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 71 to 75.

  • 14 Sept 26 −3

    No change was recorded against any check on this day. Stability & Change Management went from 88 to 68.

  • 13 Sept 26 +1
    • CVE-2026-76845 no longer affects this package security
    • Known CVEs: partial → pass security
  • 10 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 79 to 83.

  • 9 Sept 26 0
    • CVE-2026-76845 affects this package security
    • Known CVEs: pass → partial security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/editmamei@1.5.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo editmamei/editmamei
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/editmamei/editmamei/.github/workflows/release.yml@refs/heads/main
Rekor log index 2886636615
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:00d87a3ffac9c868ae28d039ae0bfca545b44242cf73cf40367141ccdcfebf0060d03eda3d5673c2e334fa4d50bf3a5f166f82a580e8b2708557b7e11

Background: How many MCP packages publish verified provenance →

Dependencies 115 packages
Packages resolved 115
Stale 39
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 62 exposed · ~28,680 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
ps_add_adjustment_layer ~2,977

Create a non-destructive adjustment layer above the active layer — hoisted out of the active layer's group by default even though Photoshop's own Mk-AdjL placement rule would otherwise nest it INSIDE that group (pass into_active_group:true to keep that native nesting). Supports the full real-Photoshop tonal/color surface: Curves (with S-curve presets), Levels, Hue/Saturation, Brightness/Contrast, Black & White (with optional tint), Color Balance, Photo Filter (preset or custom color), Vibrance, Channel Mixer, Selective Color, Gradient Map (preset), Exposure (stops + offset + gamma), Color Lookup (3DLUT presets or custom file path), and Invert. Values are editable, maskable, and removable. This is the canonical entry point for tonal/color adjustments — EXCEPT global tone/color on raw-sourced documents, which starts with a Camera Raw develop pass when a camera-raw develop tool is registered (see ps_open_document's is_raw_source); the old destructive bake tools (auto_levels / auto_contrast / desaturate / invert) were removed on 2026-05-31 — if you genuinely need a pixel bake, follow this call with `ps_merge` (mode=visible). Optionally clips the adjustment to only affect the layer directly below it. If a selection is active at call time, the new layer is automatically masked by it (toggle with mask_from_selection / mask_inverted). For destructive ops that don't have an adjustment-layer equivalent in Photoshop (Shadows/Highlights — single-pass shadow/highlight recovery), use `ps_apply_adjustment` (type=shadows_highlights) which auto-duplicates the active layer to keep the original intact. Returns context (the new adjustment layer becomes active) plus parent_path — the actual containing-group chain, so placement is never silent.

NameTypeReqDescription
black_pointnumberFor type=levels. Input black (0-255).
brightnessnumberFor type=brightness_contrast. Brightness (-100 to 100).
bw_bluesnumberFor type=black_and_white. Blue-channel mapping (-200 to 300). PS default 20.
bw_cyansnumberFor type=black_and_white. Cyan-channel mapping (-200 to 300). PS default 60.
bw_greensnumberFor type=black_and_white. Green-channel mapping (-200 to 300). PS default 40.
bw_magentasnumberFor type=black_and_white. Magenta-channel mapping (-200 to 300). PS default 80.
bw_redsnumberFor type=black_and_white. Red-channel lightness mapping (-200 to 300). PS default 40.
bw_tintbooleanFor type=black_and_white. If true, applies a single-color tint over the grayscale conversion (split-toning effect). Pair with bw_tint_hue + bw_tint_saturation.
bw_tint_huenumberFor type=black_and_white when bw_tint=true. Tint hue in degrees (-180 to 180). Default 220 (cool blue).
bw_tint_saturationnumberFor type=black_and_white when bw_tint=true. Tint saturation (0 to 100). Default 25.
bw_yellowsnumberFor type=black_and_white. Yellow-channel mapping (-200 to 300). PS default 60.
cb_highlights_cyan_rednumberFor type=color_balance. Highlights: cyan↔red shift.
cb_highlights_magenta_greennumberFor type=color_balance. Highlights: magenta↔green shift.
cb_highlights_yellow_bluenumberFor type=color_balance. Highlights: yellow↔blue shift.
cb_midtones_cyan_rednumberFor type=color_balance. Midtones: cyan↔red shift.
cb_midtones_magenta_greennumberFor type=color_balance. Midtones: magenta↔green shift.
cb_midtones_yellow_bluenumberFor type=color_balance. Midtones: yellow↔blue shift.
cb_preserve_luminositybooleanFor type=color_balance. Preserve luminosity while shifting color. Default true (matches the PS dialog default).
cb_shadows_cyan_rednumberFor type=color_balance. Shadows: cyan↔red shift (-100 cyan to +100 red). Default 0.
cb_shadows_magenta_greennumberFor type=color_balance. Shadows: magenta↔green shift (-100 magenta to +100 green).
cb_shadows_yellow_bluenumberFor type=color_balance. Shadows: yellow↔blue shift (-100 yellow to +100 blue).
cl_lut_namestringFor type=color_lookup. The LUT file name as Photoshop sees it. Common built-in 3DLUT presets: "3Strip.look", "Bleach Bypass.look", "Candlelight.CUBE", "Crisp_Warm.look", "Crisp_Winter.look", "DropBlu…
cl_lut_typestringFor type=color_lookup. Which LUT slot to load into. Default 3dlut covers .cube / .3dl / .look files (the photographer-typical case). abstract and device_link are for color-management workflows.
clip_to_belowbooleanIf true, the adjustment only affects the layer directly below.
cm_b_constantnumberFor type=channel_mixer. Constant added to Blue output.
cm_b_from_bnumberFor type=channel_mixer. Blue-from-Blue weight. PS default 100.
cm_b_from_gnumberFor type=channel_mixer. Blue-from-Green weight.
cm_b_from_rnumberFor type=channel_mixer. Blue-from-Red weight.
cm_g_constantnumberFor type=channel_mixer. Constant added to Green output.
cm_g_from_bnumberFor type=channel_mixer. Green-from-Blue weight.
cm_g_from_gnumberFor type=channel_mixer. Green-from-Green weight. PS default 100.
cm_g_from_rnumberFor type=channel_mixer. Green-from-Red weight.
cm_gray_constantnumberFor type=channel_mixer with cm_monochrome=true. Constant added to gray output.
cm_gray_from_bnumberFor type=channel_mixer with cm_monochrome=true. Blue contribution to gray. PS default 20.
cm_gray_from_gnumberFor type=channel_mixer with cm_monochrome=true. Green contribution to gray. PS default 40.
cm_gray_from_rnumberFor type=channel_mixer with cm_monochrome=true. Red contribution to gray (-200 to 200). PS default 40.
cm_monochromebooleanFor type=channel_mixer. If true, output is single gray channel and only cm_gray_* params apply. If false, the per-output cm_{r,g,b}_from_* and cm_{r,g,b}_constant params apply for RGB→RGB remix.
cm_r_constantnumberFor type=channel_mixer. Constant added to Red output.
cm_r_from_bnumberFor type=channel_mixer. Red-from-Blue weight. Default 0.
cm_r_from_gnumberFor type=channel_mixer. Red-from-Green weight. Default 0.
cm_r_from_rnumberFor type=channel_mixer with cm_monochrome=false. Red-from-Red weight. PS default 100 (identity).
contrastnumberFor type=brightness_contrast. Contrast (-100 to 100).
curves_presetstringFor type=curves only. Default sCurveMedium.
exp_exposurenumberFor type=exposure. Exposure shift in STOPS (-20 to +20). PS default 0. Photographer-feeling tonal control — 1 stop ≈ 2× linear brightness.
exp_gammanumberFor type=exposure. Gamma correction (0.01 to 9.99). PS default 1.0 (identity). Values <1 brighten midtones; >1 darken them.
exp_offsetnumberFor type=exposure. Offset shift (-0.5 to +0.5). PS default 0. Shifts the black point — most useful for paired with negative exposure for moody/crushed-shadow looks.
gammanumberFor type=levels. Midpoint gamma.
gm_ditherbooleanFor type=gradient_map. Apply dithering to reduce banding.
gm_presetstringFor type=gradient_map. Preset gradient. "black_to_white" is the canonical tonal B&W via gradient. "sepia" is a warm vintage tone. "tint" maps black→tint_color→white using gm_tint_color_hex. For arbit…
gm_reversebooleanFor type=gradient_map. Reverse the gradient direction.
gm_stopsarrayFor type=gradient_map. Custom color stops overriding gm_preset — each {red,green,blue (0-255), location (0-100 shadows→highlights), midpoint (5-95, default 50)}. At least 2; sorted by location. E.g.…
gm_tint_color_hexstringFor type=gradient_map with gm_preset=tint. Mid-tone tint color as a hex string like "#5588CC". Only used when gm_preset=tint.
huenumberFor type=hue_saturation. Hue shift in degrees (-180 to 180).
into_active_groupbooleanPhotoshop's Mk-AdjL descriptor carries no placement target, so with a GROUP active it would natively nest the new layer INSIDE that group. Default false hoists the new layer back out so it lands abov…
lightnessnumberFor type=hue_saturation. Lightness (-100 to 100).
mask_from_selectionbooleanIf true (default) and there is an active selection at the time of this call, the new adjustment layer is automatically masked by that selection. If false, any existing selection is dropped first and…
mask_invertedbooleanOnly meaningful when mask_from_selection is true AND there is an active selection. If true, the resulting mask is inverted — so the adjustment affects EVERYTHING OUTSIDE the selection rather than ins…
namestringOptional name for the new adjustment layer.
pf_color_hexstringFor type=photo_filter. Custom filter color as a hex string like "#EC8A00". Only used when pf_preset is not set.
pf_densitynumberFor type=photo_filter. Filter strength (1-100). PS default 25.
pf_preserve_luminositybooleanFor type=photo_filter. Preserve luminosity. Default true.
pf_presetstringFor type=photo_filter. Named filter preset. If set, takes precedence over pf_color_hex. Common picks: warming_85 (warm portraits), cooling_80 (cool down skies), sepia (vintage), warming_lba / cooling…
pos_levelsnumberFor type=posterize. Number of tonal levels per channel (2-255). PS default 4. Lower values yield a more graphic / illustration look (2-4); higher values are gentler.
saturationnumberFor type=hue_saturation. Master saturation (-100 to 100). Note: vibrance has its own vib_saturation param.
sc_colorsobjectFor type=selective_color. Nested per-color-family CMYK shifts. Each family is an object {cyan, magenta, yellow, black} with values -100 to 100. Omitted families default to zero. Families: reds, yello…
sc_methodstringFor type=selective_color. "relative" scales adjustments by the existing color amount (subtle, the PS default). "absolute" applies fixed CMYK shifts (more aggressive).
thr_levelnumberFor type=threshold. Threshold luminance (1-255). PS default 128. Pixels brighter than the threshold become white; darker become black.
typestringyesAdjustment kind.
vib_saturationnumberFor type=vibrance. Master saturation override (-100 to 100). Affects all colors equally.
vib_vibrancenumberFor type=vibrance. Vibrance (-100 to 100). Saturation boost that protects skin tones and already-saturated colors. Gentler than hue_saturation.saturation.
white_pointnumberFor type=levels. Input white (0-255).
NameTypeReqDescription
clipErrorstring
clippedboolean
contextobject
createdboolean
customValuesAppliedboolean
had_selectionboolean
hoistedbooleanTrue when the new layer had to be moved back out of the previously-active group to honor into_active_group:false (the default). False when it landed correctly on its own, or when the move-back itself…
kindMatchesboolean
layerKindstring
layerNamestring
mask_appliedboolean
mask_inversion_errorstring|null
mask_invertedboolean
parent_patharray|nullThe containing-group name chain (outermost first), empty array at the document root.
raw_develop_pendingstringAdvisory, present only when the active document was opened from a raw source this session and no Camera Raw develop pass has run yet. Nothing failed — the layer was created. Global tone/color on raw…
typestring

No examples provided.

ps_add_fill_layer ~611

Add a non-destructive SOLID COLOR or GRADIENT fill layer (an editable content layer — distinct from ps_fill_layer, which bakes color into the active pixel layer). fill_type=gradient is the go-to for sky fades, color washes, and vignettes (radial + reverse + multiply blend); combine with opacity_stops 100→0 for fade-to-transparent, or ps_bake_layer to rasterize. For fading a layer out via its MASK use ps_layer_mask op=gradient instead. Hoisted out of the active layer's group by default (pass into_active_group:true to keep Photoshop's native nesting). The new fill layer becomes active.

NameTypeReqDescription
anglenumberfill_type=gradient: gradient angle in degrees (Photoshop convention: 90 runs the first stop from the bottom up; 0 runs it left to right).
blueintegerfill_type=solid_color: blue (0-255). Required for solid_color.
ditherbooleanfill_type=gradient: dither to reduce banding.
fill_typestringFill-layer type. solid_color takes red/green/blue (required for that type); gradient takes the gradient_* params + stops (pattern fills still planned).
gradient_typestringfill_type=gradient: gradient geometry. linear for skies/fades, radial for vignettes/glows.
greenintegerfill_type=solid_color: green (0-255). Required for solid_color.
into_active_groupbooleanPhotoshop's Mk-contentLayer descriptor carries no placement target, so with a GROUP active it would natively nest the new fill layer INSIDE that group. Default false hoists the new layer back out so…
offset_xnumberfill_type=gradient: horizontal center offset percent.
offset_ynumberfill_type=gradient: vertical center offset percent.
opacity_stopsarrayfill_type=gradient: opacity stops, each {opacity (0-100), location (0-100), midpoint (5-95, default 50)}. Use e.g. 100→0 for a fade-to-transparent wash. Default: fully opaque.
redintegerfill_type=solid_color: red (0-255). Required for solid_color.
reversebooleanfill_type=gradient: reverse the stop order.
scalenumberfill_type=gradient: gradient scale percent (compress/stretch the ramp).
stopsarrayfill_type=gradient: color stops, each {red,green,blue (0-255), location (0-100 along the ramp), midpoint (5-95, default 50)}. At least 2 when supplied; sorted by location. Default: black at 0 → white…
NameTypeReqDescription
anglenumber
colorobject
contextobject
createdboolean
fill_typestring
gradient_typestring
hoistedbooleanTrue when the new layer had to be moved back out of the previously-active group to honor into_active_group:false (the default). False when it landed correctly on its own, or when the move-back itself…
layer_namestring
parent_patharray|nullThe containing-group name chain (outermost first), empty array at the document root.
reverseboolean
scalenumber
stop_countnumber

No examples provided.

ps_add_layer_style ~448

Apply a layer style (drop shadow, stroke, outer glow, inner shadow, inner glow, or color overlay) to the active layer. Non-destructive and editable. For PHOTO workflows: `stroke` = print-style border around the image (apply to the flattened photo on a transparent canvas, or to a duplicated background); `outer_glow` = atmospheric lift on highlights (halo around the sun, glow around a window or lamp); `drop_shadow` = depth on text overlays and layered composites. Drop shadow uses Multiply blend; outer glow uses Screen; stroke uses Normal. Cannot be applied to a background layer (duplicate or convert it first). Returns context — applying a style changes what exists on the layer (the Lefx descriptor).

NameTypeReqDescription
anglenumberdrop_shadow/inner_shadow: light angle in degrees. 90 = top-down (standard product shadow).
colorobjectEffect color RGB (0-255). Default black for drop shadow, white for glow, black for stroke.
distancenumberdrop_shadow/inner_shadow: shadow offset in pixels.
glow_sizenumberouter_glow/inner_glow: glow blur size in pixels.
glow_spreadnumberouter_glow/inner_glow: glow choke/spread (0-100%).
opacitynumberEffect opacity (0-100).
sizenumberdrop_shadow/inner_shadow: shadow blur size in pixels.
spreadnumberdrop_shadow/inner_shadow: shadow choke/spread (0-100%).
stroke_positionstringstroke only: where the stroke sits relative to the layer edge.
stroke_sizenumberstroke only: stroke width in pixels.
stylestringyesWhich layer style to apply. drop_shadow/inner_shadow share angle/distance/spread/size; outer_glow/inner_glow share glow_size/glow_spread; color_overlay uses only color + opacity. inner_shadow = reces…
NameTypeReqDescription
appliedboolean
contextobject
layerNamestring
stylestring

No examples provided.

ps_apply_adjustment ~737

Apply a DESTRUCTIVE tonal adjustment that Photoshop does NOT offer as an adjustment layer — chosen via `type`. Runs on a DUPLICATE of the active layer by default (auto-duplicate-first — the original is preserved; revert by deleting the copy); pass `apply_to_active_layer: true` to bake in place. Auto-rasterizes text/smart-object layers. `shadows_highlights` recovers blown highlights + crushed shadows in one pass (defaults match Adobe's dialog: 35 shadow amount, +20 color correction); `equalize` stretches/flattens the histogram (parameter-free); `color_lookup` bakes a 3DLUT grade (cl_lut_name required — leaf name of a file in Presets/3DLUTs/ or an absolute .cube/.3dl/.look path). For EDITABLE tonal/color work, prefer ps_add_adjustment_layer.

NameTypeReqDescription
apply_to_active_layerbooleanIf false (default), the color lookup is applied to a duplicate of the active layer named "<OpName> (<Original Name>)" — the original is preserved and the LLM can undo simply by deleting the copy. If…
black_clipnumberPercent of the darkest shadow pixels to clip to pure black (0-50). PS default 0.01 — minimal clipping. Higher values increase contrast but lose shadow detail.
cl_lut_namestringLeaf name of a 3DLUT file in PS's Presets/3DLUTs/ folder (e.g. "TealOrangePlusContrast.3DL", "FallColors.look", "Kodak 5205 Fuji 3510 (by Adobe).cube") OR an absolute path to a .3DL / .look / .cube f…
color_correctionnumberColor saturation compensation for recovered shadows (-100 to +100). PS default +20 — counteracts the desaturation that shadow recovery tends to produce.
highlight_amountnumberHighlight recovery amount (0-100). PS default 0.
highlight_radiusnumberLocal-contrast radius for highlight recovery in pixels (0-2500). PS default 30.
highlight_widthnumberTonal width of highlights (0-100). PS default 50.
midtone_contrastnumberMidtone contrast (-100 to +100). PS default 0.
shadow_amountnumberShadow recovery amount (0-100). PS default 35.
shadow_radiusnumberLocal-contrast radius for shadow recovery in pixels (0-2500). PS default 30.
shadow_widthnumberTonal width of shadows (0-100). Wider = more midtones treated as shadow. PS default 50.
typestringyesWhich destructive adjustment to bake (none exist as adjustment layers in PS). shadows_highlights: one-pass shadow/highlight recovery (shadow_amount, highlight_amount, …). equalize: parameter-free his…
white_clipnumberPercent of the brightest highlight pixels to clip to pure white (0-50). PS default 0.01. Higher values increase contrast but lose highlight detail.
NameTypeReqDescription
color_correctionnumber
contextobject
filterstring
highlight_amountnumber
highlight_radiusnumber
highlight_widthnumber
lut_formatstring
lut_pathstring
midtone_contrastnumber
original_layer_namestring
shadow_amountnumber
shadow_radiusnumber
shadow_widthnumber
target_layer_namestring
target_was_copyboolean

No examples provided.

ps_apply_image ~376

Composite a source layer + channel onto the ACTIVE layer using a calculation blend mode (Image ▸ Apply Image). **Reach for this** for luminosity blends, frequency-separation re-blends, texture overlays, or pulling one channel into another. Source = a layer (merged or named) and a channel (rgb/red/green/blue/alpha). Bakes into pixels, so by default it runs on a DUPLICATE of the active layer (set apply_to_active_layer=true to bake in place). The active layer must be a normal pixel layer. (AM-only; verified live on PS 27.2.0.)

NameTypeReqDescription
apply_to_active_layerbooleanIf false (default), the composite is applied to a duplicate of the active layer named "<OpName> (<Original Name>)" — the original is preserved and the LLM can undo simply by deleting the copy. If tru…
blendstringyesCalculation blend mode: how the source combines with the target. multiply (darken/texture), screen (lighten), overlay/soft_light/hard_light (contrast), difference/exclusion/subtract/add (channel math…
opacityintegerBlend opacity 0-100. Default 100 (full strength).
source_alpha_namestringRequired when source_channel='alpha': the name of the alpha channel to read.
source_channelstringSource channel: 'rgb' (the composite, default), a single 'red'/'green'/'blue' channel, or 'alpha' (then set source_alpha_name).
source_layerstringWhich layer to pull the source from: 'merged' (the flattened composite, default) or an exact layer name.
NameTypeReqDescription
appliedboolean
blendstring
contextobject
opacitynumber
source_channelstring
source_layerstring
target_layer_namestring
target_was_copyboolean

No examples provided.

ps_bake_layer ~170

Flatten the active layer's CURRENT APPEARANCE — the layer plus any adjustment layers clipped to it plus its layer styles — into a NEW pixel layer named "<name> (baked)". Non-destructive: the originals are left intact. This is how you get real baked pixels out of a non-destructive stack: clip a Hue/Saturation (saturation -100) or an Invert adjustment to a layer, then bake to get a desaturated / inverted PIXEL layer for techniques that need actual pixels (line art, blurred-layer blends). Also works on a lone layer with nothing clipped to it — it rasterizes that layer's own appearance (layer styles, smart-object or text content) into a flat pixel copy. The active layer must be top-level (not inside a group).

Input schema present but exposes no named parameters.

NameTypeReqDescription
bakedboolean
baked_layer_namestring
clipped_layers_bakednumber
contextobject
source_layer_namestring

No examples provided.

ps_calculations ~338

Blend TWO sources (each a layer + single channel) into a NEW alpha channel via a calculation blend mode (Image ▸ Calculations). **Reach for this** to build advanced selections/masks from channel math — e.g. difference of two channels to isolate edges, or multiply two channels for a luminosity mask. Non-destructive: adds a new channel (delete it to revert); the result is loadable as a selection via ps_selection_channel op=load. (AM-only; verified live on PS 27.2.0.)

NameTypeReqDescription
blendstringyesCalculation blend mode: how the source combines with the target. multiply (darken/texture), screen (lighten), overlay/soft_light/hard_light (contrast), difference/exclusion/subtract/add (channel math…
opacityintegerBlend opacity 0-100. Default 100.
source1_alpha_namestringRequired when source1_channel='alpha'.
source1_channelstringSource 1 channel: a single 'red'/'green'/'blue' channel, or 'alpha' (+ name).
source1_layerstringSource 1 layer: 'merged' (default) or an exact layer name.
source2_alpha_namestringRequired when source2_channel='alpha'.
source2_channelstringSource 2 channel: a single 'red'/'green'/'blue' channel, or 'alpha' (+ name).
source2_layerstringSource 2 layer: 'merged' (default) or an exact layer name.
NameTypeReqDescription
blendstring
calculatedboolean
channel_countnumber
contextobject
new_channel_namestring
opacitynumber

No examples provided.

ps_clipping_mask ~243

Clip or un-clip the active layer against the layer directly below it — choose with `op`. `create`: use the layer below as the alpha source; PS paints the active layer only where the layer below has pixels. Non-destructive — the upper layer is unchanged. Common for constraining a texture/photo to a shape, or masking an effect to a single underlying layer (the add_adjustment_layer tool already accepts clip_to_below for the adjustment-layer-specific case). Equivalent to Layer > Create Clipping Mask (Ctrl+Alt+G). `release`: the inverse — the layer returns to compositing against the whole canvas. Both ops are idempotent: create no-ops (already_clipped:true) on an already-clipped layer; release no-ops (released:false) on a non-clipped layer.

NameTypeReqDescription
opstringyescreate: clip the active layer to the layer directly below it (that layer becomes the alpha source); no-ops (already_clipped:true) when the layer is already clipped. release: release the active layer…
NameTypeReqDescription
already_clippedboolean
clippedboolean
contextobject
layerNamestring
releasedboolean

No examples provided.

ps_close_document ~172

Close a Photoshop document — the active one by default, or a specific one by name or id. Destructive if save=false and the document has unsaved changes. If two open documents share the requested name the call fails rather than guessing. Returns the closed document name plus a fresh context block (which document, if any, is active afterwards).

NameTypeReqDescription
idintegerTarget an open document by its Photoshop document id. Unambiguous — prefer this when names collide.
namestringTarget an open document by its exact Photoshop name, INCLUDING the extension as shown in the tab (e.g. 'portrait.jpg', not 'portrait'). If two open documents share a name the call fails rather than g…
savebooleanWhether to save changes before closing
NameTypeReqDescription
closedboolean
closedNamestring
contextobject
savedboolean

No examples provided.

ps_compare_regions ~300

Quantitative region comparison — the NUMERIC verification answer when "does it look right?" via get_preview is too subjective. Captures the histogram of two rectangular regions on the same document and reports per-channel mean / stdev / median for each region plus the deltas. **Reach for this when**: (a) "did the placed image match the room's lighting?" — sample a region of the placed image vs a region of the surrounding wall; (b) "did this adjustment do anything visible in the shadows?" — sample the same dark region before and after; (c) "is region A noticeably warmer/cooler than region B?" — read the channel means directly. Single-pixel sampling via a 1×1 rect is supported. Read-only.

NameTypeReqDescription
label_astringOptional label for region A in the response.
label_bstringOptional label for region B in the response.
region_a_bottomnumberyesRegion A bottom edge.
region_a_leftnumberyesRegion A left edge.
region_a_rightnumberyesRegion A right edge.
region_a_topnumberyesRegion A top edge.
region_b_bottomnumberyesRegion B bottom edge.
region_b_leftnumberyesRegion B left edge.
region_b_rightnumberyesRegion B right edge.
region_b_topnumberyesRegion B top edge.
NameTypeReqDescription
contextobject
differencesobject
region_aobject
region_bobject

No examples provided.

ps_convert_image_mode ~231

Convert the document color mode (grayscale / rgb / cmyk / lab). Destructive and document-wide: the image is FLATTENED and, for grayscale, color is discarded (the confirmation prompt is auto-accepted). Use grayscale as the base for halftone / line-art workflows, or rgb to bring a CMYK/Lab doc back for normal editing. Returns updated document context.

NameTypeReqDescription
anglenumberbitmap only: halftone screen angle in degrees (-180 to 180). PS default 45.
frequencynumberbitmap only: halftone screen frequency in lines/inch (1-999). PS default 53.
modestringyesTarget document color mode. grayscale discards color (the "Discard color information?" prompt is auto-confirmed); the document is FLATTENED as part of the conversion. `bitmap` produces a 1-bit halfto…
shapestringbitmap only: halftone dot shape.
NameTypeReqDescription
contextobject
convertedboolean
mode_afterstring
mode_beforestring
requested_modestring

No examples provided.

ps_convert_to_smart_object ~277

Convert the active layer to a Smart Object, or (mode=new_via_copy) copy an existing Smart Object to an independent new one. `convert` (default) wraps the layer content so every subsequent filter becomes a Smart Filter — fully editable and non-destructive. PREREQUISITE for Camera Raw Filter, non-destructive frequency separation, and any workflow where filter parameters need to stay adjustable after the fact. Works on pixel, text, shape, and adjustment layers. Auto-promotes the background layer if needed. Wrapping an already-Smart-Object layer creates a nested Smart Object (valid in Photoshop — the inner SO is preserved as-is). `new_via_copy` requires the active layer to already be a Smart Object and yields a copy with its OWN source (unlinked). Use ps_rasterize_layer to go the other direction.

NameTypeReqDescription
modestringconvert (default): wrap the active layer into a Smart Object in place. new_via_copy: the active layer must ALREADY be a Smart Object — make a NEW Smart Object that is an INDEPENDENT copy (its own emb…
NameTypeReqDescription
background_promotedboolean
contextobject
is_smart_objectboolean
layer_namestring
original_kindstring
source_unlinkedboolean
was_already_smart_objectboolean

No examples provided.

ps_copy_to_new_layer ~233

Copy the current selection into a NEW layer above the active one — Photoshop's "Layer via Copy" (Ctrl+J) — hoisted out of the active layer's group by default even though the underlying CpTL event carries no placement target and would otherwise nest the new layer INSIDE that group (pass into_active_group:true to keep that native nesting). The source layer is left untouched and the new copied layer becomes active. With an active selection only the selected pixels are lifted; with no selection it copies the whole active layer (a plain duplicate). Reach for this to isolate a region for independent transforms or filters (stretch, light rays, a local grade) without altering the source. Returns context so the caller sees the new active layer.

NameTypeReqDescription
into_active_groupbooleanPhotoshop's CpTL (Layer via Copy) event carries no placement target, so with a GROUP active it would natively nest the new layer INSIDE that group. Default false hoists the new layer back out so it l…
NameTypeReqDescription
contextobject
copied_to_new_layerboolean
hoistedbooleanTrue when the new layer had to be moved back out of the previously-active group to honor into_active_group:false (the default). False when it landed correctly on its own, or when the move-back itself…
layer_count_afternumber
layer_count_beforenumber
new_layer_namestring
original_active_layer_namestring
parent_patharray|nullThe containing-group name chain (outermost first), empty array at the document root.

No examples provided.

ps_create_document ~109

Create a new empty Photoshop document with given dimensions, resolution, and color mode. Returns the new document id and name plus active context. Use this when starting from scratch; prefer ps_open_document to load an existing file.

NameTypeReqDescription
color_modestringColor mode (RGB, CMYK, Grayscale)
heightnumberyesDocument height in pixels
resolutionnumberDocument resolution in DPI (default: 72)
widthnumberyesDocument width in pixels
NameTypeReqDescription
contextobject
idnumber
namestring

No examples provided.

ps_create_layer ~57

Create a new empty raster layer above the currently active layer. Non-destructive. Use ps_text (op=create) for text, ps_add_adjustment_layer for adjustments.

NameTypeReqDescription
namestringName for the new layer (optional)
NameTypeReqDescription
contextobject
createdboolean
layerNamestring
parent_patharray|nullThe containing-group name chain (outermost first), empty array at the document root.

No examples provided.

ps_crop_document ~257

Crop the document to a region — EITHER anchor-relational `placement` (preferred: a region relation like inside/gap → the crop is the resolved, gate-verified region bbox, no pixel-guessing) OR absolute pixel bounds (left/top/right/bottom in document space). Destructive: pixels outside the bounds are permanently lost. Idempotent for the same bounds. Returns updated document context.

NameTypeReqDescription
bottomintegerBottom edge position in pixels (raw mode; ignored when placement is set).
leftintegerLeft edge position in pixels (raw mode; ignored when placement is set).
placementobjectANCHOR-RELATIONAL crop (preferred over guessing pixels): a REGION relation (inside/gap) → the crop is the resolved region bounding box, verified by the gate. Crops ONLY if the gate PASSES. When set,…
rightintegerRight edge position in pixels (raw mode; ignored when placement is set).
topintegerTop edge position in pixels (raw mode; ignored when placement is set).
NameTypeReqDescription
contextobject
croppedboolean
newHeightnumber
newWidthnumber
placementobjectPresent when anchor-relational placement was used: the resolved region + gate verdict.

No examples provided.

ps_delete_layer ~137

DESTRUCTIVE: Delete a layer. With no arg, deletes the currently active layer (backward-compatible). With `name`, recurses into groups and deletes the first LAYER matching that name — useful for cleanup workflows where the dead layer is not currently active. A name that matches a group is refused rather than deleted; use ps_group(op=delete) to delete a group and all its contents. Recoverable only via Edit > Undo.

NameTypeReqDescription
namestringOptional layer name. If supplied, recurses into groups and deletes the first layer matching this name. If omitted, deletes the currently active layer (backward-compatible).
NameTypeReqDescription
contextobject
deletedboolean
layerNamestring

No examples provided.

ps_detect ~375

The cheap, narrow read: labeled bounding boxes only — faces and/or COCO-80 objects (person, dog, car, chair, sofa, …) in DOCUMENT-pixel space. LOCAL on-device computer vision; the image is never sent anywhere. Use this for real coordinates before a spatially-targeted edit when boxes are all you need — far more reliable than estimating positions from a preview. For the full scene model (regions, horizon, tonal zones, composition, and a menu of selectable named regions), use ps_read_scene instead. `target` selects faces / objects / both. Read-only: renders a throwaway duplicate, never modifies the working document. Boxes are [x1, y1, x2, y2]. Pass `annotate:true` for an annotated preview JPEG (faces cyan, objects magenta) when you need to visually confirm a surprising result.

NameTypeReqDescription
annotatebooleanAlso return an annotated preview JPEG with the detected boxes drawn (faces cyan, objects magenta). Default false: the labeled boxes returned by this call are already complete on their own — ask for t…
face_thresholdnumberMinimum face confidence (0–1).
max_dimensionnumberLong-edge pixels of the JPEG the detectors run on. Smaller is faster; the models downscale internally so 1024 is plenty. Returned coordinates are always in full document pixels regardless.
max_objectsnumberCap on returned objects, highest-confidence first.
object_thresholdnumberMinimum object confidence (0–1).
targetstringWhat to detect: 'faces' (forward-facing faces), 'objects' (COCO-80 classes: person, dog, car, chair, …), or 'both'.
NameTypeReqDescription
backendsobject
contextobject
facesarray
imageobject
objectsarray

No examples provided.

ps_document ~257

See and steer WHICH documents are open, without touching their content. op=list answers 'what is open, which one is active, and does it have unsaved changes' — and it is the one document tool that works when nothing is open at all, so it is the recovery read after a 'No document is open' failure. op=activate switches the active document by name or id, which is how you fix having edited the wrong one. Read-only with respect to pixels; use ps_open_document to load a file and ps_close_document to close one.

NameTypeReqDescription
idintegerTarget an open document by its Photoshop document id. Unambiguous — prefer this when names collide.
namestringTarget an open document by its exact Photoshop name, INCLUDING the extension as shown in the tab (e.g. 'portrait.jpg', not 'portrait'). If two open documents share a name the call fails rather than g…
opstringyeslist: every open document (index, id, name, path, saved, active, dimensions) — safe to call when NOTHING is open, which is the point. activate: make one of them the active document, by name or id.
NameTypeReqDescription
activatedboolean
contextobject
countnumber
documentsarray
idnumber
namestring
opstringyes

No examples provided.

ps_duplicate_layer ~66

Duplicate the active layer. The new layer becomes active. Returns context so the caller sees the new active layer. Not idempotent (each call creates another copy).

NameTypeReqDescription
new_namestringOptional name for the duplicated layer. If omitted, Photoshop assigns "<name> copy".
NameTypeReqDescription
contextobject
newNamestring
originalNamestring
parent_patharray|nullThe containing-group name chain (outermost first), empty array at the document root. layer.duplicate() is parent-preserving by DOM semantics, so this always matches the original layer's placement.

No examples provided.

ps_export ~347

Export the active document to a flattened image file — JPEG or PNG, chosen via `format`. Operates on a duplicate, so the working document is unchanged. Optionally downscales so the long edge equals long_edge_px. JPEG: quality 0-100 (Save-As scale), optional sRGB convert + profile embed. PNG: transparent background (alpha preserved) or flattened onto white, compression 0-9.

NameTypeReqDescription
compressionintegerPNG compression level 0-9. Lower = larger file, faster. Default 6.
convert_to_srgbbooleanConvert to sRGB before export. Default true.
embed_color_profilebooleanEmbed color profile in the exported file. Default true.
formatstringyesOutput image format. jpeg: quality 0-100, optional convert_to_srgb + embed_color_profile. png: transparent_background (alpha) or flattened-on-white, compression 0-9. Both take output_path (required)…
long_edge_pxintegerResize so the longest edge equals this value. Omit for full resolution. Downscale only.
output_pathstringyesAbsolute output path including filename.
qualityintegerJPEG quality 0-100 (the Photoshop 'Save As' / JPEG-dialog scale humans and the UI use). 100 = maximum. Mapped internally to Photoshop's 0-12 JPEGSaveOptions scripting scale (e.g. 90→11, 100→12).
transparent_backgroundbooleanIf true, preserves transparency. If false, flattens onto white. Default false.
NameTypeReqDescription
contextobject
exported_tostring
height_pxnumber
qualitynumber
quality_ps_scalenumber
successbooleanyes
transparentboolean
width_pxnumber

No examples provided.

ps_fill_layer ~90

Fill the active layer (or the current selection within it) with a solid RGB color. Idempotent for the same color. Throws on fully-locked or text layers — rasterize text first if needed.

NameTypeReqDescription
blueintegeryesBlue component (0-255)
greenintegeryesGreen component (0-255)
redintegeryesRed component (0-255)
NameTypeReqDescription
colorobject
filledboolean
layerNamestring

No examples provided.

ps_filter ~3,493

Apply a Photoshop filter (op=apply, the default) to a DUPLICATE of the active layer by default — the original is preserved, undo by deleting the copy. Pass apply_to_active_layer:true to bake into the original instead. Choose the filter with `type` (see the `type` field for its params); pass as_smart_filter:true on a Smart Object to apply it as a re-editable SMART FILTER instead of rasterizing. This same tool also reads and manages that re-editable Smart Filter stack: op=list (every filter's index/name/type/enabled/opacity/blend), op=set_visibility (toggle one off/on), op=set_blend (restyle opacity/blend_mode), op=remove (delete one). Management ops need a 1-based `index` from op=list first — index 1 is the first-applied filter, at the bottom of the stack. Covers blur, sharpen, noise, high_pass, pixelate, distort, displace, and oil_paint.

NameTypeReqDescription
amountnumberFilter strength. Range depends on type — sharpen 1–500, noise 0.1–400, radial_blur 1–100, distort/ripple −999–999.
amplitude_maxintegerwave only: maximum amplitude (1-999).
amplitude_minintegerwave only: minimum amplitude (1-998; must be <= amplitude_max).
anglenumberAngle in degrees. Used by motion_blur (−360–360) and distort/twirl (−999–999).
angle_1integercolor_halftone only: screen angle for channel 1 in degrees. PS default 108.
angle_2integercolor_halftone only: screen angle for channel 2. PS default 162.
angle_3integercolor_halftone only: screen angle for channel 3. PS default 90.
angle_4integercolor_halftone only: screen angle for channel 4. PS default 45.
apply_to_active_layerbooleanIf false (default), the filter is applied to a duplicate of the active layer named "<OpName> (<Original Name>)" — the original is preserved and the LLM can undo simply by deleting the copy. If true,…
as_smart_filterbooleanIf true, apply the filter as a re-editable SMART FILTER riding the Smart Object instead of baking it into pixels — nothing is rasterized, and the filter can later be toggled, re-blended or removed in…
blend_modestringset_blend only: how the filter result composites against the unfiltered layer. Same names as ps_set_layer. Omit to leave the current mode untouched.
blue_preserve_detailsnumberPer-channel: blue channel preserve-details percentage.
blue_strengthnumberPer-channel: blue channel noise-reduction strength. Usually the noisiest channel in low-light photos.
bristle_detailnumberBristle detail (0-10).
brush_scalenumberBrush scale (0.1-2).
cell_sizeintegerCell size in pixels — used by mosaic (2-300, PS default 10), crystallize (3-300), and pointillize (3-300, PS default 5). Ignored by color_halftone/facet/fragment.
center_placementobjectGrounded alternative to center_x/center_y: NAME the blur center (a `placement` resolving to a POINT — an object centroid, an extremum, a grid intersection). The resolved document-pixel point is norma…
center_xnumberHorizontal blur center, normalized 0-1 (0.5 = middle). Resolution-independent.
center_ynumberVertical blur center, normalized 0-1 (0.5 = middle). Resolution-independent.
cleanlinessnumberStroke cleanliness / smoothness (0-10).
color_noisenumberColor (chroma) noise reduction (0-100). PS default 45. Hits the colorful speckle noise typical of high-ISO photos.
conversionstringpolar only: rect_to_polar wraps the image into a circle; polar_to_rect unwraps it.
depth_sourcestringDepth map source for selective focus. "none" = uniform blur across the whole layer. "transparency" = use the layer alpha channel as depth (foreground sharper). "layerMask" = use the layer mask. PS de…
displacement_mapstringHow the map fits the layer: stretch_to_fit (resize the map) or tile (repeat it).
distributionstringNoise distribution type. Default: UNIFORM.
edgestringtrace_contour only: trace the lower or upper edge of the level. PS default lower.
enabledbooleanset_visibility only: true shows the filter, false hides it. The filter stays in the stack either way and keeps all its settings.
fiber_strengthintegerfibers only: fiber strength / definition (1-64). PS default 4.
focal_distancenumberFocal-plane depth value (0-255), only meaningful when depth_source != none. Pixels at this depth stay sharp; pixels farther from it blur progressively.
generatorsintegerwave only: number of wave generators (1-999).
green_preserve_detailsnumberPer-channel: green channel preserve-details percentage.
green_strengthnumberPer-channel: green channel noise-reduction strength.
heightintegeremboss only: relief height in pixels (1-100). PS default 3.
highlight_fadenumberHighlights tab: amount of sharpening to fade in highlight regions (0-100). PS default 0.
highlight_radiusnumberHighlights tab: local-contrast radius in pixels (1-100). PS default 30.
highlight_tonal_widthnumberHighlights tab: tonal width (0-100). PS default 50.
horizontalintegeroffset only: horizontal shift in pixels (positive = right).
horizontal_scaleintegerHorizontal displacement scale (-999 to 999). PS default 10.
indexinteger1-based index of the filter to act on, as reported by op=list. 1 is the FIRST-APPLIED filter (bottom of the Smart Filters stack in the Layers panel). Required for every op except 'list'.
invert_depthbooleanInvert the depth map. PS default false.
iris_blade_curvaturenumberIris blade curvature (0-100). 0 = polygonal bokeh, 100 = perfectly circular. PS default 0.
iris_rotationnumberIris rotation in degrees (0-360). Rotates the iris-shape pattern. PS default 0.
iris_shapestringAperture iris shape — affects the look of out-of-focus highlights (bokeh). PS default hexagon. Triangle = 3 blades, octagon = 8 blades. Real lenses with fewer blades produce more polygonal bokeh.
levelintegertrace_contour only: brightness level the contour traces (0-255). PS default 128.
light_directionintegerLighting angle in degrees (-180 to 180).
lighting_onbooleanWhether the lighting/shine relief is applied.
map_pathstringAbsolute path to the displacement-map .psd file (required). The map's brightness drives the per-pixel warp — mid-gray = no shift, lighter/darker push in opposite directions.
max_radiusintegercolor_halftone only: maximum dot radius in pixels (4-127). PS default 8.
methodstringspin = rotational blur around the center (turntable motion); zoom = radial streaks toward/from the center (the classic "god rays" / speed-zoom look).
modestringsurface_blur = blur while preserving edges above a threshold (skin-smoothing; radius + threshold); box_blur = fast square-kernel blur (radius); average = fill the layer with its single average color…
monochromaticbooleanApply monochromatic noise. Default: false.
motion_anglenumberMotion blur angle in degrees (-360 to 360). Only meaningful when remove_mode=motionBlur.
noise_amountnumberNoise added to the blurred result (0-100). PS default 0. Lens Blur can produce un-naturally clean blur regions; a small noise amount (5-15) keeps the texture believable.
noise_distributionstringNoise distribution type. PS default uniform.
noise_monochromaticbooleanMonochromatic noise (luminance-only). PS default true.
noise_reductionnumberNoise reduction during sharpening (0-100). PS default 10. Prevents sharpening from amplifying existing noise. For low-light photos, raise this (25-50).
numberintegertiles only: number of tiles across (1-99). PS default 10.
offsetintegertiles only: maximum tile offset percent (1-99). PS default 10.
opstringapply (default): apply a NEW filter — set `type` (+ its own params). list: read every re-editable Smart Filter on the active Smart Object (index, name, type, enabled, opacity, blend mode). set_visibi…
opacitynumberset_blend only: filter opacity 0-100. Omit to leave the current opacity untouched.
per_channelbooleanEnable per-channel advanced mode. If true, the per-channel strength/preserve_details params (red_*, green_*, blue_*) override the global strength/preserve_details for each RGB channel — useful when n…
preservestringmaximum/minimum only: edge-preservation shape. PS default roundness.
preserve_detailsnumberPreserve details percentage (0-100). PS default 50. Higher protects edges; lower lets the smoother kick in further.
qualitystringRender quality. best is smoothest but slowest.
radiusnumberRadius/distance in px. Range depends on type — gaussian_blur 0.1–250, motion_blur 1–999, lens_blur 0–100, smart_sharpen 0.1–64, high_pass 0.1–1000.
random_seedintegerwave only: random seed for the wave pattern (change for a different pattern).
red_preserve_detailsnumberPer-channel: red channel preserve-details percentage (0-100). Only used when per_channel=true.
red_strengthnumberPer-channel: red channel noise-reduction strength (0-10). Only used when per_channel=true.
remove_jpeg_artifactbooleanRemove JPEG compression artifacts (the 8x8 block boundaries and ringing). PS default false.
remove_modestringBlur model to remove. gaussianBlur (default) is the general-purpose modern Unsharp Mask replacement. lensBlur removes lens-style softness with better edge handling. motionBlur removes directional mot…
ridgesintegerzigzag only: number of concentric ridges (0-20). PS default 5.
scale_horizontalintegerwave only: horizontal scale percent (1-100).
scale_verticalintegerwave only: vertical scale percent (1-100).
seedintegerfibers only: randomize seed — change for a different fiber pattern. PS default 12345.
shadow_fadenumberShadows tab: amount of sharpening to fade in shadow regions (0-100). 0 = sharpen shadows fully, 100 = no shadow sharpening. Useful for preventing shadow-noise amplification. PS default 0.
shadow_radiusnumberShadows tab: local-contrast radius in pixels (1-100). PS default 30. Defines the neighborhood used to classify pixels as shadows.
shadow_tonal_widthnumberShadows tab: tonal width — how broadly "shadows" is defined (0-100). PS default 50.
sharpen_detailsnumberSharpening to apply after noise reduction (0-100). PS default 25. Compensates for the softening that noise reduction causes.
shinenumberSpecular shine (0-10).
sizestringripple only: ripple wavelength size.
specular_brightnessnumberSpecular highlight brightness boost (0-255). PS default 0. Lift highlights to enhance bokeh "balls" — values around 50-100 produce visible specular highlights, higher = more dramatic.
specular_thresholdnumberSpecular highlight threshold (0-255). PS default 255 (no specular boost applies). Lower the threshold to let more pixels be treated as specular highlights for the brightness boost. Typical photograph…
strengthnumberLuminance noise reduction strength (0-10). PS default 5. Higher = more aggressive noise reduction but more detail loss.
stylizationnumberBrush-stroke stylization (0.1-10).
thresholdintegersurface_blur only: tonal threshold (0-255) — edges differing by more than this are preserved. PS default 20.
typestringWhich filter to apply. Required when op=apply (the default); ignored otherwise. Each type uses its own parameters: gaussian_blur(radius); motion_blur(angle, radius); lens_blur(radius, iris_shape, …);…
undefined_areasstringHow to fill areas pushed outside the layer.
varianceintegerfibers only: color variance / streak length (1-64). PS default 16.
verticalintegeroffset only: vertical shift in pixels (positive = down).
vertical_scaleintegerVertical displacement scale (-999 to 999). PS default 10.
wave_typestringwave only: waveform shape.
wavelength_maxintegerwave only: maximum wavelength (1-999).
wavelength_minintegerwave only: minimum wavelength (1-998; must be <= wavelength_max).
wind_directionstringwind only: streak direction. PS default left.
wind_methodstringwind only: streak intensity/style. PS default wind.
NameTypeReqDescription
appliedboolean
blend_modestring
contextobject
countnumber
enabledboolean
filterstring
filter_namestring
filter_typestring
filtersarray
indexnumber
is_smart_objectboolean
layer_namestring
opacitynumber
original_layer_namestring
remaining_countnumber
removedboolean
removed_filter_namestring
removed_filter_typestring
requested_enabledboolean
target_layer_namestring
target_was_copyboolean
visibility_setboolean

No examples provided.

ps_get_histogram ~410

Whole-image (or per-channel) histogram — the quantitative answer to questions get_preview can't reliably answer by eye. Returns 256 bin counts plus mean / stdev / median. Cheap (~50ms), read-only. **Reach for this when**: (a) clipping detection — bins 0 and 255 carry the count of crushed shadows / blown highlights; you can't see clipping reliably in a downsampled JPEG preview; (b) exposure verification after a levels/curves/exposure adjustment — confirm the histogram actually shifted; (c) "is this image neutral-gray?" — compare R / G / B channel means; (d) confirming a destructive op did anything (two identical histograms = no-op regardless of the tool's success message). Composite reads the visible flattened image (any color mode). Per-channel reads require the document have that channel.

NameTypeReqDescription
channelstringWhich channel to read. "composite" (default) is the visible flattened image; if the active layer is an adjustment/fill/shape layer the tool transparently switches to a pixel layer to read it. "red"/"…
NameTypeReqDescription
bin_countnumber
binsarray
channelstring
contextobject
meannumber
mediannumber
stdevnumber
total_pixelsnumber

No examples provided.

ps_get_layer_bounds_diff ~253

Numeric verification: compute the per-edge pixel deltas between a layer's actual bounds and a target rectangle. Returns left/top/right/bottom deltas (actual − target), scale ratio (actual_size / target_size), centroid offset, and a one-word verdict ("aligned", "shifted right", "layer too small", etc.). Use this AFTER place_image / scale_layer / move_layer to confirm the operation produced the intended result — far more reliable than eyeballing a preview for fine alignment. Read-only. Layers nested in groups are found by name recursively.

NameTypeReqDescription
layerstringyesName of the layer to measure. Reads boundsNoEffects (raw pixel bounds without layer-style expansion). The active doc's layer tree is searched recursively (so layers nested in groups are findable by n…
target_bottomnumberyesTarget rectangle bottom edge.
target_leftnumberyesTarget rectangle left edge in document pixels.
target_rightnumberyesTarget rectangle right edge.
target_topnumberyesTarget rectangle top edge.
tolerance_pxnumberTolerance in pixels for the verdict — within this delta on every edge, the verdict is "aligned". Default 10.
NameTypeReqDescription
actual_boundsobject
centroid_offset_xnumber
centroid_offset_ynumber
contextobject
deltasobject
scale_ratio_xnumber
scale_ratio_ynumber
target_boundsobject
verdictstring
within_toleranceboolean

No examples provided.

ps_get_preview ~575

Render the active Photoshop document as a flattened, downscaled image and return it inline so the calling AI can see the current visual state. Use this to verify edits visually, judge whether adjustments went too far or not far enough, and decide what to do next. Read-only with respect to the working document (renders a duplicate that is closed immediately). The optional `annotations` array draws overlays in document-space coordinates: `rectangle` / `guide` / `point` / `selection` for spatial verification, and `grid` / `composition` for coordinate readout and compositional evaluation (added 2026-06-09 — grid styles `every` / `thirds` / `quarters` / `phi`, composition styles `diagonals` / `triangles` / `fibonacci_grid` / `golden_spiral`). Use spatial annotations to verify ("did the placed image land inside the frame interior?") — pass both target and actual bounds in different colors. Use grid / composition annotations to EVALUATE composition (balance, thirds, leading lines, focal-point placement) — not to read a coordinate for a tool call. To place or select precisely, do NOT read a pixel off a grid (unreliable) — NAME the intent to the on-device perception tools instead: `ps_detect` (COCO objects → real document-pixel boxes), `ps_select_by_reference` (a named target → a real selection, not a guessed rectangle), plus any spatial-grounding locator / selection tools present in `tools/list`. Without annotations, behaves identically to a plain preview.

NameTypeReqDescription
annotationsarrayOptional list of visual annotations to draw onto the preview before rendering — rectangles (by explicit bounds OR by layer name), guides (horizontal / vertical reference lines), point markers, and th…
max_dimensionintegerCap on the long edge in pixels. Defaults to 1024, which is plenty for tone/color/composition judgment and roughly halves the base64 payload vs the older 1500 default. Bump higher only when reading fi…
qualityintegerJPEG quality 1-12. Default: 6 (visibly clean for verification at the default 1024px max-dim; halves payload vs the older quality=8 default). Bump to 8-10 only when the preview is the deliverable, not…
NameTypeReqDescription
annotation_countnumber
bytesnumber
contextobject
dimensionsstring
formatstring
mime_typestring

No examples provided.

ps_get_selection_preview ~234

Render an inline JPEG so the agent can visually verify what is currently selected: by default a red-wash OVERLAY (50% red over the selected area, Quick Mask-style — most intuitive); pass `image:'mask'` for a B/W MASK (black = selected, white = not) instead, or `image:'both'` for both. selection_info is always returned regardless of `image`. Heavier than the selection_info bundle alone (~2-4s) — call this when the stats look off or before committing a mask. Does NOT modify the source document.

NameTypeReqDescription
imagestringWhich rendered image(s) to return inline. 'overlay' (default): a 50% red wash over the selected area (Quick Mask-style — most intuitive). 'mask': a B/W mask (black=selected, white=not) instead. 'both…
max_dimensionintegerLong-edge pixel cap for the returned images. Default 800.
NameTypeReqDescription
mask_bytesnumber
max_dimensionnumber
overlay_bytesnumber
renderedboolean
selection_infoobjectRich post-op stats. Use these to verify the selection actually grabbed what was intended before committing it to a mask. `has_selection:false` short-circuits the rest of the fields (they will be abse…

No examples provided.

Common questions

What is the io.github.editmamei/editmamei MCP server?

io.github.editmamei/editmamei is an MCP server listed in the public MCP registry as io.github.editmamei/editmamei. Photoshop MCP server: natural-language AI photo editing in desktop Photoshop. AI orchestration. This page covers its npm package (editmamei).

Is the io.github.editmamei/editmamei MCP server safe to use?

io.github.editmamei/editmamei scores 88 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.editmamei/editmamei MCP server expose?

io.github.editmamei/editmamei exposes 62 tools: ps_ping, ps_list_capabilities, ps_create_document, ps_document, ps_close_document, and 57 more. Their descriptions and schemas cost roughly 28,680 tokens of context every time the server is loaded.

Is the io.github.editmamei/editmamei MCP server still maintained?

io.github.editmamei/editmamei is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.editmamei/editmamei MCP server under?

io.github.editmamei/editmamei declares the FSL-1.1-MIT licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.