Install
$ agentstack add skill-mpstats-io-claude-code-skills-photo-editor ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
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](references/01-research.md) | Default for mode B unless the user chose "no research". | | 2. Brief | [references/02-brief.md](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](references/03-generate.md) | Always. Before running, ask: "the full batch right away, or a test frame first?". | | 4. Deliver | [references/04-deliver.md](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](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//, 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:
In infographics.sh and photoshoot.sh the first argument can be wb: or wb: 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//): 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 "" creates a series of count slides (1..6) in a single call. Flow: test (a trial frame) → approve → generate ; 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 | Remove the background | | upscale.sh | Increase resolution | | replace-background.sh | Place the product on a stock background | | in-action.sh | Product in a ready usage scene | | recolor.sh | Recolor the product | | freeform.sh "" [model] [ar] [refs] | Freeform edit (single-step) | | photoshoot.sh auto "" | Photoshoot (test → generate in one command) | | photoshoot.sh test \| generate | When you need to approve the test frame separately | | infographics.sh auto "" | 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 [max=8] | Download WB product photos. Called automatically on wb: input | | health.sh | Check the service | | run.sh | Universal submit + poll | | poll.sh | 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 backgrounds→replace-background.sh - "show the product in use" → A,
templates.sh in-action→in-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 |
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: mpstats-io
- Source: mpstats-io/claude-code-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.