Skip to main content

📷 PhotoS

Python Platform License Weights PyPI

CLI for AI agents, GUI for humans. PhotoS is a cross-platform batch photo toolbox: a full Tkinter GUI — v2.2 workspace with Library / Develop (live pipeline preview + histogram + edit tools beside it, copy/paste settings between photos, per-photo undo) / Export (photo queue + output settings + named export recipes) / 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 · 中文


🤖 Built for AI agents

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 — 30 core tools + plugin tools auto-registered (process / suggest / autopilot / index / find / 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.


✨ Features

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 (v2.4: per-photo adjustments injected)
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)
Param suggestions — ✅ Rule-based suggest: analyze stats → conservative fix params with reasons (zero models, offline)
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]); v2.3 wired into the engine slot (--auto-tone), MCP tools and REST routes auto-register on install; v2.4 Develop "AI tone" button writes the params into the per-photo overlay — tweakable, undoable; v2.4 local-adjustment vocabulary (model predicts subject/person/object mask adjustments through the mask pipeline) + aesthetic verifier (audit --aesthetic, SigLIP head / Qwen final review)
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); --score weighted quality ranking + --burst keep-best-per-burst
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 — ✅ 30 core tools (+plugin tools auto-register) for MCP clients (Claude Desktop / Claude Code / any MCP client)
Batch benchmark — ✅ Worker-scaling measurement
XMP sidecar export — ✅ xmp-export / batch --write-xmp: write PhotoS adjustments as LR-readable .xmp sidecars (crs field inverse mapping + radial/linear masks + rating/keywords) — open the original in Lightroom and continue editing (v2.5)
Unattended pipeline ✅ ✅ autopilot: watch a folder -> suggest/auto-tone -> audit gate -> route to passed/ or review/ with a JSONL trace; --write-xmp closes the data loop (human fixes in LR become residual training signal) (v2.5)
Semantic search / auto-tag — ✅ index builds an embedding index (SigLIP text+image with the plugin, built-in 84-dim histogram without); find by text or image; --tags auto-tags into EXIF/XMP keywords (v2.5)

¹ 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.


📦 Install

pip install photo-s-tools            # core — RAW decode (rawpy) built in
pip install "photo-s-tools[enhance]" # + opencv: face blur / HDR / denoise / straighten
pip install "photo-s-tools[tiff16]"  # + tifffile: 16-bit RAW → TIFF output
pip install "photo-s-tools[mcp]"     # + MCP server (Python 3.10+)

Zero-install (uvx): uvx --from photo-s-tools photo-s --help · uvx --from "photo-s-tools[mcp]" photo-s mcp

🚀 Quick start

photo-s batch 'RAW/*.ARW' --format jpeg -o out/ -q 90   # batch RAW → JPEG
photo-s batch 'RAW/*.ARW' -o out/ -q 95 --jpeg-subsampling 444 \
  --raw-demosaic amaze                                # max quality RAW → JPEG
photo-s batch 'RAW/*.ARW' -o out/ --preset lr-look     # LR-style grade out of the box
photo-s compress *.jpg --target-size 5MB -j 8           # auto-tune to ≤5MB
photo-s select ~/shoot/ -r --selects-dir picks --rejects-dir bin --dry-run
photo-s hash ~/deliver/ -o manifest.csv --verify manifest.csv

photo-s --help lists all 35 commands. Language: --language en|zh|auto.


🧭 Documentation

Doc Contents
docs/FEATURES.md Full inventory — 35 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)
docs/COMMERCIAL.md Commercial licensing: dual-license terms, boundary table & FAQ

Names: PyPI distribution photo-s-tools (the obvious photo-s is taken) · CLI command photo-s · Python package photo_s · brand PhotoS.


⚠️ Limitations

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.

  • On-device inference, no cloud. Denoise model weights (SCUNet) download to your machine on first use; nothing is uploaded.
  • Licensing (dual license). Official code and most official model weights (incl. the SCUNet checkpoint) are MIT — free for commercial use. One exception: the auto-tone plugin's model weights are CC-BY-NC 4.0 — free forever for personal and non-commercial use, commercial use requires a paid license (trained on the author's personal Lightroom edits): 1634103640@qq.com · dwphoto.top/message. See COMMERCIAL.md for a plain-language boundary table and FAQ (Chinese). Third-party plugins and models carry their own licenses; verify before redistribution.

📄 License

MIT

Release files for photo-s-tools 2.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for photo-s-tools 2.5.1
File Size Uploaded
photo_s_tools-2.5.1.tar.gz 605.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for photo-s-tools 2.5.1
File Interpreter ABI Platform
photo_s_tools-2.5.1-py3-none-any.whl Python 3 none any Details

Total release size: 1.0 MB

Release files / photo_s_tools-2.5.1.tar.gz

Download URL photo_s_tools-2.5.1.tar.gz
Size 605.9 kB
Tags Source
SHA-256 checksum
How to use checksums
1161924e3a904db70ca7d5502aae444fccb035fea2389780bb591ce457606d37
BLAKE2b-256 checksum
How to use checksums
b82792aae37485abb48fdbf8cafc60615d8c0649088f096a0f7f87e5ef15ec78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.

Transparency log

Release files / photo_s_tools-2.5.1-py3-none-any.whl

Download URL photo_s_tools-2.5.1-py3-none-any.whl
Size 433.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c424b9929cec287a9296ddf86273c56eca96aef5fc54c9cce9dae96aad66acde
BLAKE2b-256 checksum
How to use checksums
f8d906ea1e06c9a93d6c2118672301f976327293470cdb428878462cc24419c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.

Transparency log

Release history Release notifications | RSS feed

2.6.0

2 release files

2.5.2

2 release files

This release

2.5.1 This release

2 release files

2.5.0

2 release files

2.4.0

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.9.0

2 release files

1.8.0

2 release files

1.7.1

2 release files

1.7.0

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page