Batch photo processing: compress, convert, EXIF, rename, dedup, cull, galleries
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
CLI for AI agents, GUI for humans. PhotoS is a cross-platform batch photo toolbox: a full Tkinter GUI β v2.0 workspace with Library / Develop (live pipeline preview + histogram + edit tools beside it) / Export (photo queue + output settings) / Tools modules β and a CLI / REST / MCP surface with one versioned JSON contract for AI agents.
π₯ GUI for humans Β· β¨οΈ CLI for AI agents Β·
pip install photo-s-tools
English Β· δΈζ
PhotoS is an AI-agent-ready image pipeline: four integration paths, one versioned
JSON contract (schema_version, additive-only β upgrades never break a consumer).
| Path | Entry point |
|---|---|
| MCP server β 25 tools (process / select / hdr / blurfaces / dedup / β¦) | claude mcp add photo-s -- photo-s mcp |
| Packaged SKILL.md β skill-capable agents, zero extras | cp -r skills/photo-s ~/.claude/skills/ |
| REST API β async tasks + SSE progress | photo-s serve --port 0 --token auto --ready-file x.json |
| Python library β no IPC overhead | from photo_s.engine import batch_process |
Every output carries schema_version; JSON keys are always English; per-file
errors never abort the batch; destructive actions require an explicit flag.
Full contract: docs/AGENT_API.md.
| Feature | GUI | CLI | Description |
|---|---|---|---|
| Batch compress | β | β | JPEG/WebP/HEIC/AVIF quality tuning, chroma subsampling (444/422/420) |
| Target size mode | β | β | Auto-tune quality to fit under a target file size |
| Format convert | β | β | JPEG / PNG / WebP / TIFF / BMP / HEIC / AVIF |
| RAW decode | β | β | 22+ camera RAW formats, built-in (rawpy/libraw); demosaic algorithm choice, color space (sRGB/AdobeRGB/ProPhotoRGB), 16-bit TIFF output, auto sRGB ICC tagging |
| Resize / Scale | β | β | Max dimensions, percentage, or longest-side cap |
| Visual preview | β | β | Live originalβprocessed preview rendered through the real pipeline |
| Tone & color | β | β | Brightness/contrast/saturation/gamma/sharpen, B&W, sepia |
| Export sharpen | β | β | LR-style output-stage USM, radius scales with output resolution |
| White balance | β | β | Kelvin temperature or gray-card sampling |
| WB tint axis | β | β | Green(-)/magenta(+) G-M axis |
| Point curves / levels | β | β | PCHIP point curves, manual black/white/gamma |
| 3-way color grading | β | β | Shadows/midtones/highlights hue + sat zones |
| HSL split | β | β | 8 color domains, hue/sat/lum shifts |
| Point color | β | β | Targeted hue/sat/lum around a sampled color + range |
| Local masks | β | β | Named linear/radial/color-range masks + v1.8 AI segmentation (subject/person/object:class), brush strokes (subtract mode), combos (A&B / A-B); 11 scalar + 5 string local adjustments under each |
| Lens correction | β | β | Manual distortion k1, vignette fix, CA fix (pure numpy); named user-maintained lens profiles |
| Perceptual analysis | β | β | Histograms / channel stats / WB lean / exposure / blur (analyze) |
| Vibrance / clarity / texture | β | β | Natural saturation, local contrast |
| Dehaze / vignette / grain | β | β | Dark-channel dehaze, radial vignette, film grain |
| Exposure | β | β | Stops adjustment or normalize-to-target auto exposure |
| Auto levels | β | β | 2% clip histogram stretch |
| Highlight recovery | β | β | LR-style: compress flat clipped highlights back to visible gradient |
| LOG recovery | β | β | SLOG3/CLOG3/LOGC3/DLOG/VLOG/HLG (1D LUT, no deps) |
| LUT grading | β | β | .cube trilinear (plugin adds tetrahedral + 5 film presets) |
| AI auto-tone | β | β ΒΉ | Plugin: CLIP+MLP predicts 9-field LR params + confidence, RAG boost, optional Qwen3-VL aesthetic score & advisor (photo-s-plugin-auto-tone[model]) |
| Denoise | β | β ΒΉ | NLM ([enhance] extra) |
| Auto-straighten | β | β ΒΉ | Level the horizon, confidence-gated ([enhance] extra) |
| HDR merge | β | β ΒΉ | Exposure fusion, handheld alignment ([enhance] extra) |
| Face blur | β | β ΒΉ | Blur or pixelate faces, Haar cascade ([enhance] extra) |
| Cutout | β | β | Background removal β alpha: AI segmentation (subject/person/object:class) or color key (color:R,G,B[tol,feather,invert] β white-bg text/logo); PNG/WebP/TIFF/AVIF/HEIC (JPEG errors per file) |
| Crop / Rotate / Flip / Pad | β | β | Unified aspect crop + arbitrary geometry |
| Print size | β | β | Center-crop + exact print pixels at a DPI |
| Smart rename | β | β | Date/camera/sequence templates |
| Auto folder organize | β | β | Date/camera subfolder creation |
| Watermark | β | β | Text + image overlay, 7 positions |
| Multi-size output | β | β | One input set, N labeled outputs |
| Metadata tagging | β | β | Rating/keywords/caption batch tag (UserComment) |
| Metadata filter | β | β | Find photos by rating/keywords |
| Metadata import | β | β | Batch write from spreadsheet |
| Culling | β | β | Exposure/sharpness filter (GUI keeps only matches, undoable) |
| Select (keeper) | β | β | Sort by rating β keep/reject thresholds (β₯4 keep, β€2 reject) |
| Burst keep-sharpest | β | β | Keep the sharpest of a burst |
| Checksum manifest | β | β | SHA-256 archive integrity + verify |
| HTML gallery | β | β | Self-contained index.html + thumbnails |
| Presets | β | β | Save/load named configs + built-in lr-look (LR-style grade: S-curve, vibrance, export sharpen) |
| Multi-profile batch | β | β | One input set, N output profiles |
| Parallel processing | β | β | Multi-threaded |
| JSON output | β | β | Machine-readable output for AI agents |
| Config file | β | β | TOML defaults |
| EXIF edit | β | β | Batch copyright/author/GPS |
| Preset apply | β | β | One-click apply a saved style |
| EXIF date shift | β | β | Timezone/camera clock fixes |
| Privacy scrub | β | β | Strip EXIF + ICC + GPS |
| Sync date | β | β | Output mtime β EXIF datetime |
| Folder watch | β | β | Auto-process new files ([watch] extra) |
| Auto-rotate | β | β | EXIF Orientation-based |
| Image dedup | β | β | Perceptual hash duplicate detection |
| Quality metrics | β | β | SSIM / blur score |
| CSV report | β | β | Per-file stats |
| Integrity check | β | β | Corrupt file scan |
| Contact sheet | β | β | Grid montage |
| Color management | β | β | sRGB / CMYK flatten |
| REST API | β | β | HTTP server for agents (async tasks + SSE progress) |
| Plugin system | β | β | Third-party plugin support |
| Official plugin manager | β | β | list/install/info/fetch + pip install |
| MCP server | β | β | 25 tools to MCP clients (Claude Desktop / Claude Code / any MCP client) |
| Batch benchmark | β | β | Worker-scaling measurement |
ΒΉ Denoise / auto-straighten / HDR / face blur need an optional dependency:
pip install photo-s-tools[enhance](opencv-python-headless). When missing, these features give a clear install hint and the rest keeps working.
Zero-install (uvx): uvx --from photo-s-tools photo-s --help Β·
uvx --from "photo-s-tools[mcp]" photo-s mcp
photo-s --help lists all 34 commands. Language: --language en|zh|auto.
| Doc | Contents |
|---|---|
docs/FEATURES.md | Full inventory β 34 CLI commands, engine pipeline |
docs/AGENT_API.md | Agent contract: JSON shapes, exit codes, REST, MCP |
docs/PLUGINS.md | Plugin system: SCUNet denoise, LUT, write your own |
docs/GUI_CHANGES.md | GUI behavior & interface contract |
docs/ROADMAP.md | Version roadmap (v1.6.0: Lightroom-direction grading) |
Names: PyPI distribution
photo-s-tools(the obviousphoto-sis taken) Β· CLI commandphoto-sΒ· Python packagephoto_sΒ· brand PhotoS.
PhotoS is a batch / delivery pipeline, not an interactive editor β no RAW-domain editing. Local editing is spec-driven: named masks (linear/radial/color/AI segmentation/brush strokes/combos) + local adjustments under masks, all as compact strings that serialize through CLI/REST/MCP/presets.
plugins/auto-tone/LICENSE-WEIGHTS.txt). Third-party
plugins and models carry their own licenses; verify before redistribution.MIT
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/photos)<a href="https://allmcps.com/mcp/photos"><img src="https://allmcps.com/api/badge/photos?style=directory" alt="PhotoS on AllMCPs" /></a>