@mpstats-io/photo-editor

@mpstats-io/photo-editor — AI coding skill

View in AI SkillSafe app
0 downloads
0 stars
0 demos
SKILL.md
namephoto-editor
descriptionMPSTATS Photo Editor API. Use when generating product photos, photoshoots, infographics, recolors, in-action scenes, background removal/replacement, upscaling, prompt-based image edits for marketplace sellers (Wildberries, Ozon, YM).
licenseMIT

MPSTATS Photo Editor

Internal MPSTATS service for AI-generated visuals for marketplace product cards: background removal/replacement, upscaling, recolor, "product in action", prompt-edit, photoshoots, infographics.

All requests go through the ready-made scripts in scripts/ (Bash tool, do not rewrite the code). Endpoints are asynchronous: each script handles submit → polling → saving files. Images are base64-encoded inside the scripts.

Two modes of operation

Choose deliberately — it changes all downstream behavior.

A. Technical operations (single-step)remove-background, upscale, replace-background, in-action, recolor, freeform. Run the script → get the result → deliver. No research/brief. Use when a concrete action is requested ("remove the background", "upscale", "recolor to blue").

B. Design tasks (multi-stage)infographics and photoshoot. Full design work: think like a marketplace designer. Use when the request is about buyer value ("make an infographic", "refresh the card", "I need a photoshoot"). Use the stage guides in references/ — these are thinking guides, not checklists:

Stage File When
1. Research references/01-research.md Default for mode B unless the user chose "no research".
2. Brief references/02-brief.md Always before generating in mode B. Also covers all prompt-craft: prompt structure, slide series, length limit, content-filter.
3. Generate references/03-generate.md Always. Before running, ask: "the full batch right away, or a test frame first?".
4. Deliver references/04-deliver.md Mandatory, read BEFORE showing the result. Show every frame via Read with an anchor caption, not a list of paths.

Mode B start — mandatory question

When a task is identified as mode B, the first thing to do is ask a single question:

Run full research (competitor analysis, reviews, visual benchmark) or generate right away from your prompt / description?

Possible answers and what to do:

User answer Action
"with research" / "full analysis" / silence (no explicit refusal) Run Stage 1 → 2 → 3 → 4 in full
"no research" / "generate right away" / "from my prompt" Skip Stage 1, go straight to Stage 2 (brief from the user's description) → 3 → 4. State explicitly: "Skipping research — quality may be lower, but it's faster."
User provides a ready prompt in the message Clarify: use it as-is or run it through the brief (length check, block structure, product lock)?

Exception: if the user already explicitly stated "no analysis" / "no research" in the first message — don't ask, go straight to Stage 2.

Config

Credentials in config/.env (gitignored): PHOTO_EDITOR_TOKEN (header X-Mpstats-TOKEN) and optional PHOTO_EDITOR_BASE_URL (default https://mpstats.io/api/big_data/proxy). Setup and variables: config/README.md.

If the token is missing (or it is your_token_here), the agent must ask:

I need an MPSTATS API token (X-Mpstats-TOKEN) for Photo Editor — get it from your MPSTATS account → API and send it over, I'll write it into config/.env.

Output location

Do NOT put results in the skill folder — the skill is code, output is data. Default ~/.claude/output/photo-editor/<event_id>/, override via PHOTO_EDITOR_OUTPUT_DIR.

For mode B, after generation copy the files into a clean per-SKU folder with meaningful names (slide_1_hero.png, etc.) — event_id contains :, which breaks image rendering in some UI clients, and per-SKU is easier for the user to navigate.

Multi-angle input: wb:<sku>

In infographics.sh and photoshoot.sh the first argument can be wb:<sku> or wb:<wb-url> instead of a file path. The skill downloads all product photos from the WB CDN (wb-fetch-photos.sh, cached in ~/.claude/cache/photo-editor/wb-photos/<sku>/): the first → main_image, the rest → reference_images (max 5, the API won't accept more).

infographics.sh generate wb:164419278 "$PROMPT" 5

For multi-angle input, in the product-lock instruction write "preserve product identity", NOT "preserve same orientation" — otherwise the model copies the first photo's angle onto every slide. More on the prompt — references/02-brief.md.

Infographics: a series of N slides

infographics.sh generate <img> "<prompt>" <count> creates a series of count slides (1..6) in a single call. Flow: test (a trial frame) → approve → generate <N>; or auto (test + generate at once).

Minimum output is 4 frames. The endpoint always returns max(4, image_count) images — requesting count=1..3 still yields 4. Photoshoot has no such limit.

The prompt sets the high-level direction + frame themes, not the layout of each slide — otherwise you get a 2×3 collage on a single canvas. Prompt-craft details — references/02-brief.md.

Models

Mask Tier Default Aspect ratios Available for
model_1 Standard ✅ all except infographics 1:1, 3:4, 4:3, 2:3, 3:2 all endpoints
model_2 PRO ✅ infographics 1:1, 3:4, 4:3, 2:3, 3:2 all endpoints
model_3 PRO 1:1, 3:4, 4:3, 2:3, 3:2 all endpoints
model_4 PRO 1:1, 3:4, 4:3, 2:3, 3:2 all endpoints
model_5 PRO 1:1, 3:4, 4:3 freeform, photoshoot

The backend does not accept model=auto — the skill resolves it to model_1 (Standard). For infographics the default is hard-wired to model_2 (PRO) — best Cyrillic quality. Specify an explicit model only if you have a hypothesis why.

Scripts

Script When to use
remove-background.sh <img> Remove the background
upscale.sh <img> Increase resolution
replace-background.sh <img> <template_key> Place the product on a stock background
in-action.sh <img> <template_key> Product in a ready usage scene
recolor.sh <img> <#hex> Recolor the product
freeform.sh <img> "<prompt>" [model] [ar] [refs] Freeform edit (single-step)
photoshoot.sh auto <img> "<prompt>" <count> Photoshoot (test → generate in one command)
photoshoot.sh test | generate When you need to approve the test frame separately
infographics.sh auto <img> "<prompt>" <count> Infographics (test → generate)
infographics.sh test | generate Same as photoshoot
templates.sh backgrounds [key] List template_key for replace-background
templates.sh in-action [key] List template_key for in-action
wb-fetch-photos.sh <sku-or-url> [max=8] Download WB product photos. Called automatically on wb:<sku> input
health.sh Check the service
run.sh <endpoint> <body_json> Universal submit + poll
poll.sh <event_id> Wait for a ready event_id

Decision Guide

  • "clean up the background" → A, remove-background.sh
  • "make it bigger/sharper" → A, upscale.sh
  • "change the background to a studio/marble" → A, templates.sh backgroundsreplace-background.sh
  • "show the product in use" → A, templates.sh in-actionin-action.sh
  • "recolor to #hex" → A, recolor.sh
  • "fix the lighting / remove the glare / add a shadow" → A, freeform.sh
  • "make an infographic / photoshoot", "refresh product card X" → B, start with references/01-research.md

Errors

msg What to do
process_completed Done, files saved
process_completed + output.image: [] Content-filter → rephrase the prompt (references/02-brief.md)
process_error Read error.message, show it to the user
process_timeout The server didn't finish in time; reduce count or change the model
Prompt size exceeds maximum allowed length Most often the cause is line breaks (\n) in the prompt, not an actual limit overflow. Pass the prompt as a single line. If the error persists after that — shorten the prompt: references/02-brief.md → Technical limits.
AUTH_ERROR Invalid credentials — see the Config section
Local poll timeout The script stopped polling; the event_id remains — poll.sh <event_id>

Embed badges

Add these to your README to show the skill's verification status.

SkillSafe verified badge
Verified badge
[![SkillSafe verified badge](https://api.skillsafe.ai/v1/badge/@mpstats-io/photo-editor/verified)](https://skillsafe.ai/skill/@mpstats-io/photo-editor/)
Installs badge
Installs badge
[![Installs badge](https://api.skillsafe.ai/v1/badge/@mpstats-io/photo-editor/installs)](https://skillsafe.ai/skill/@mpstats-io/photo-editor/)
Scan badge
Scan badge
[![Scan badge](https://api.skillsafe.ai/v1/badge/@mpstats-io/photo-editor/scan)](https://skillsafe.ai/skill/@mpstats-io/photo-editor/)
Eval pass rate badge
Eval pass rate
[![Eval pass rate badge](https://api.skillsafe.ai/v1/badge/@mpstats-io/photo-editor/eval)](https://skillsafe.ai/skill/@mpstats-io/photo-editor/)