Inspiration
Moving photos onto a NAS is the moment a library breaks. Someone copies 12 years of phone backups; the next day Photos shows 4,000 pictures on the copy day and the same beach photo three times. Nobody dares delete anything, because one of those folders might be the real backup.
What it does
Unshuffle is a post-import checkup. It finds files Photos places on the copy day and works out their real dates (EXIF, video metadata, Takeout sidecars, file names). It finds byte-identical copies and separates stray re-imports from deliberate backup folders, which it keeps whole. Every group gets one plain sentence of explanation. Only the groups you approve are fixed, in small batches, with the original values saved first, so everything can be undone. Nothing is deleted: extra copies move to a review folder.
How we built it
Unshuffle is a Markdown-only Uliya Skill. Uliya groups and explains; the built-in file-agent, photo-agent and knowledge-agent do the real NAS work through actions in the official capability catalog (meta, search-picture, find, stat, sha256sum, mediainfo, scan-dedupe, chtimes, cpmv, save-text). Exact decisions come from metadata and hashes, not from the model. Before any batch, one test file is fixed and checked in Photos.
Challenges
Photos may not re-sort after a modification time changes, approvals may be per file, and the local model has a small context. The Skill checks the first on a single test file, batches changes, and asks experts to return only counts and exceptions.
What's next
Validate on a real iDX6011 Pro: which date Photos uses, approval granularity, and scale with a few thousand synthetic test photos.
Disclosure
The package contains only Markdown files and no third-party components. Claude Code (Anthropic Claude) helped research UGREEN capabilities, draft the Skill Markdown and this text from my design decisions, and run the official static checker.
Built With
- claude
- markdown
- ugreen
Log in or sign up for Devpost to join the conversation.