How kairothq/claude-photo-sorter works
Claude Photo Sorter is a local photo/video organizer. The main workflow starts in the dashboard, which calls a loopback-only Python API; the server coordinates scanning, duplicate detection, labeling, and copy-based output. Users can review and move items through the dashboard, which also supports category editing and a demo. The workflow’s core modules and both labelers are evidenced in the supplied source; several dashboard API interactions are only partly excerpted, so those links use the visible API references or README documentation.
Main entry points: server.py Local API server · app.js Sort dashboard · apply.py Build sorted copies · label_claude.py Claude labeler
Components 17
Dashboard
- Sort dashboard
dashboard/app.js
Local API
- Local API server
scripts/server.py
Sort processing
- Scan media
scripts/scan.py - Find duplicates
scripts/dupes.py - Contact sheets
scripts/sheets.py - Build sorted copies
scripts/apply.py - Paths and JSON
scripts/common.py - Demo generator
scripts/demo.py
Label providers
- Claude labeler
scripts/label_claude.py - Jev labeler
scripts/label_jev.py
Other components
- User
- Claude Code
- TypeSafe Jev
- Photo folder
- Sorted folders
- Local sort data
- Folder categories
categories.json
Connections 25
- User → Sort dashboard: chooses and starts
README.md - Sort dashboard → Local API server: calls local API
dashboard/app.js - Local API server → Scan media: dispatches scan
scripts/server.py - Local API server → Find duplicates: dispatches duplicates
scripts/server.py - Local API server → Claude labeler: dispatches labels
scripts/server.py - Local API server → Jev labeler: dispatches labels
scripts/server.py - Local API server → Build sorted copies: dispatches output
scripts/server.py - Scan media → Photo folder: reads originals
scripts/scan.py - Scan media → Local sort data: writes inventory previews
scripts/scan.py - Find duplicates → Local sort data: reads inventory previews; writes groups
scripts/dupes.py - Claude labeler → Contact sheets: runs when absent
scripts/label_claude.py - Contact sheets → Local sort data: reads previews inventory
scripts/sheets.py - Claude labeler → Claude Code: requests labels
scripts/label_claude.py - Claude labeler → Local sort data: reads sheets inventory; saves labels
scripts/label_claude.py - Jev labeler → TypeSafe Jev: sends previews
scripts/label_jev.py - Jev labeler → Local sort data: reads previews inventory; saves labels
scripts/label_jev.py - Build sorted copies → Local sort data: reads labels duplicates
scripts/apply.py - Build sorted copies → Folder categories: reads categories
scripts/apply.py - Build sorted copies → Sorted folders: copies files; writes reports
scripts/apply.py - Local API server → Folder categories: updates categories
scripts/server.py - Local API server → Local sort data: serves sort state
- Sort dashboard → Demo generator: supports demo mode
README.md - Demo generator → Local sort data: generates sample data
scripts/demo.py - Paths and JSON → Local sort data: defines storage paths
scripts/common.py - Sort dashboard → Sorted folders: browses and opens results
README.md