Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Manage your self-hosted Immich photo library through conversation — natural language search, geographic album curation, duplicate detection, library health audits, and interactive HTML galleries. Install: claude plugin install immich-photo-manager
.claude/skills/davepoon-immich-photo-manager/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | -50% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-02 | ✓→✗ | ▼ Worse | -67% | 0% |
| case-08 | ✓→✗ | ▼ Worse | 24% | 0% |
| case-10 | ✓→✗ | ▼ Worse | -7% | 0% |
> MCP server and Claude Code plugin for intelligent photo management with self-hosted Immich.
When your Immich library has grown past what you can manage by hand, this plugin gives Claude direct access to your instance through 94 MCP tools and 13 skills. Search with natural language or by the text inside a photo, create geographic albums from GPS data, find duplicates across import sources, manage people and faces, repair metadata, cut frames out of videos, export an album as a PDF photobook, and browse results in interactive HTML galleries. The plugin runs on your machine and talks only to your Immich; originals never leave your server.
Every release runs live against real Immich 2.7.5 and 3.1.0 in Docker before it is tagged (all tools over MCP, state re-read after each write); the kit is in the repository under tests/live/. Works with Claude Code, Claude Desktop, LM Studio and any MCP client. Requires Immich 1.90+, an API key and Python 3.10+.
bashgit clone https://github.com/drolosoft/immich-photo-manager.git cd immich-photo-manager pip3 install -r src/requirements.txt claude plugin marketplace add ./ claude plugin install immich-photo-manager
Then run /setup-immich-photo-manager inside Claude Code, or say "Update my Immich credentials to https://photos.example.com with API key <key>". The same server is available as uvx immich-photo-manager for other MCP clients and as a Docker image (ghcr.io/drolosoft/immich-photo-manager, MCP over HTTP on port 8626).
"How healthy is my photo library?"
"Show me my photos from Italy"
"Find the photo with the train ticket"
"Create albums for everywhere I've traveled"
"Find duplicates in my library and keep the best of each group"
"Make me a PDF of the Sintra album"
/cleanup: scan for screenshots and junk
/my-travels: discover all travel destinationsphoto-search, photo-cleanup, duplicate-report, auto-album-curator, album-manager, album-report, travel-map, metadata-fixer, storage-optimizer, library-health-report, people-report, rotate-photos, timeline-gaps.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-12 | pass→pass | 23,657 | 13,429 | -43% | 1 | 1 | 0% | 3,176 | 2,338 | -26% | 0 | 0 | — |
case-19 | fail→fail | 18,205 | 11,650 | -36% | 1 | 1 | 0% | 2,021 | 2,056 | +2% | 0 | 0 | — |
case-01 | fail→fail | 23,738 | 19,719 | -17% | 1 | 1 | 0% | 3,232 | 2,285 | -29% | 0 | 0 | — |
case-02 | pass→fail | 26,211 | 17,483 | -33% | 1 | 1 | 0% | 3,811 | 1,249 | -67% | 0 | 0 | — |
case-03 | fail→pass | 30,390 | 12,104 | -60% | 1 | 1 | 0% | 4,179 | 2,070 | -50% | 0 | 0 | — |
case-04 | pass→pass | 26,376 | 26,415 | +0% | 1 | 1 | 0% | 3,432 | 4,735 | +38% | 0 | 0 | — |
case-05 | pass→pass | 18,318 | 12,016 | -34% | 1 | 1 | 0% | 2,093 | 1,931 | -8% | 0 | 0 | — |
case-06 | pass→pass | 22,009 | 23,640 | +7% | 1 | 1 | 0% | 3,091 | 4,122 | +33% | 0 | 0 | — |
case-07 | pass→pass | 18,123 | 8,329 | -54% | 1 | 1 | 0% | 1,896 | 2,315 | +22% | 0 | 0 | — |
case-08 | pass→fail | 15,633 | 12,051 | -23% | 1 | 1 | 0% | 1,707 | 2,122 | +24% | 0 | 0 | — |
case-09 | pass→pass | 24,766 | 14,310 | -42% | 1 | 1 | 0% | 3,341 | 2,539 | -24% | 0 | 0 | — |
case-10 | pass→fail | 19,101 | 14,255 | -25% | 1 | 1 | 0% | 2,642 | 2,462 | -7% | 0 | 0 | — |
case-11 | pass→fail | 17,715 | 12,270 | -31% | 1 | 1 | 0% | 1,962 | 2,212 | +13% | 0 | 0 | — |
case-13 | fail→fail | 22,464 | 9,493 | -58% | 1 | 1 | 0% | 2,951 | 1,789 | -39% | 0 | 0 | — |
case-14 | pass→pass | 21,973 | 14,602 | -34% | 1 | 1 | 0% | 2,966 | 2,552 | -14% | 0 | 0 | — |
case-15 | pass→pass | 20,576 | 10,935 | -47% | 1 | 1 | 0% | 2,265 | 1,918 | -15% | 0 | 0 | — |
case-16 | pass→pass | 20,195 | 15,071 | -25% | 1 | 1 | 0% | 2,185 | 2,407 | +10% | 0 | 0 | — |
case-17 | pass→pass | 14,929 | 9,489 | -36% | 1 | 1 | 0% | 1,498 | 1,637 | +9% | 0 | 0 | — |
case-18 | fail→pass | 19,451 | 20,937 | +8% | 1 | 1 | 0% | 2,147 | 3,178 | +48% | 0 | 0 | — |
case-20 | pass→pass | 21,424 | 12,652 | -41% | 1 | 1 | 0% | 2,299 | 2,130 | -7% | 0 | 0 | — |
case-21 | pass→pass | 16,373 | 15,231 | -7% | 1 | 1 | 0% | 2,098 | 2,670 | +27% | 0 | 0 | — |
case-22 | pass→pass | 21,247 | 13,552 | -36% | 1 | 1 | 0% | 2,375 | 2,203 | -7% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of -20 percentage points is the difference between those two pass rates over the 21 comparable cases. 4 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/9/2026 | +18% |
Other measured skills in the registry, with their headline benchmark lift.