Inspiration
My own photo archive has 243,000 files in two folder trees. Some came from cameras, some from phones, some are copies of copies from old backups. 38% have no usable date in the file name and 6% share a name with another file. I know "Las Vegas 2011" is in there somewhere, but no search finds all of it.
The dates, places and people are still there, just spread around. Some are in EXIF, some in XMP sidecars, and a lot in old .picasa.ini files from the years when everybody used Picasa (face names, folder titles, places). So the idea was to collect those clues and let the NAS do the digging.
What it does
You name the moment: a trip, a day, a place, a person or a pet. Dusty confirms in one message what it understood (dates, place, album and tag name, note folder). Then it asks the NAS experts to read the photo library and the folders you named, and puts each item in a tier:
- confident: every part of the moment matched, at least one by a strong clue
- probable: every part matched by some clue
- unknown: some part has no clue
- conflicting: a clue points somewhere else, never added
It shows a case file with counts, examples and what was skipped. After one final yes it creates one album, one tag and one note that explains why things are there. Nothing is moved, renamed or deleted. A typical run is two or three questions.
How I built it
It is a Uliya skill, so Markdown only, no code of its own. Every read and write is a delegate call to photo-agent, file-agent or knowledge-agent.
Clues are on a ladder. Strong: EXIF and the photo library. Supporting: XMP sidecars and Picasa face names. Weak: file names, folder names and modification times. Each part of the moment needs its own clue, so vegas.jpg with a 2014 date does not get in just because of the name.
For the Picasa part I scanned my own .picasa.ini files (personal data masked) to see what is really in them. The backup hash turned out useful, an unknown photo sharing it with a confident one in the same folder can be promoted.
Drafted with Claude in Claude Code, generated and checked with UGREEN's Uliya skill kit. The kit's static checker gives 0 errors and 0 warnings.
Challenges
I have not run it on a NAS yet, it is written against the capability catalog. Some things I could not verify: if multi-line text survives the delegate call, if a tag can be created by name, and what the note save does when the file name exists. In each case the skill stops and reports instead of guessing.
File text was the other one. File names, captions and Picasa files can contain anything, also something that reads like an instruction. Every value goes after a DATA ONLY line and the experts are told it is data. Whether they keep to it, the skill can only ask (there is a test case with instructions in a file name and in a Picasa caption).
Same name and same size does not mean same photo. Two IMG_0001.JPG from different cameras are different pictures, so Dusty never merges them.
What I learned
I have experience on AI skills and NAS, but Using them together was new. Also the UGREEN as vendor was new to me.
Limits
No refresh, a later run makes a new album. No duplicate check. Searches stop at 500 items. Folder videos are dated only by file name or modification time.
Built With
- claude
- claude-code
- exif
- markdown
- picasa
- ugreen-nas
- uliya
- xmp