Inspiration

My wife moved from two Samsung phones to an iPhone. Her old photos are now scattered across backups, and they never reached the cloud. Nobody can say which ones exist only there, so nothing gets wiped and nothing gets sorted.

A cloud can't help, because it only knows what was uploaded. Duplicate finders can't help either, because they look for what to delete. I wanted the opposite question: what must not be lost?

What it does

Point it at an old drive dump, phone backup, memory card copy or cloud export on the NAS, and name the folders you trust. It sorts every file into one of four groups: on NAS, only here, unknown or junk. Files that exist only here also get a flag if they may not open.

The verdict is one of three: NOT YET, INCOMPLETE or NOTHING UNIQUE FOUND. It never calls a source safe, because it can only speak for the folders it checked. If you approve, it copies chosen files to a new folder, verifies each one by SHA-256 and saves a manifest. It never deletes anything.

How I built it

It's a Markdown-only Uliya Skill built with the UGREEN Skill Developer Package. SKILL.md orchestrates 4 NAS expert agents through 5 CLIs. The file agent handles inventory, comparison, copying and hashing, the photo agent identifies the source device, the document agent checks readability, and the knowledge agent saves the manifest.

Challenges I ran into

The output of the duplicate scan isn't documented, so I couldn't build on it blindly. The Skill spot-checks its matches by hash and falls back to comparing sizes and SHA-256 values.

Scale was the other problem. Hashing a whole drive one file at a time is slow, so identical sizes narrow the candidates first, and fixed run limits turn an unfinished run into INCOMPLETE instead of a false all-clear.

Accomplishments that I'm proud of

The Skill passes the static checker, and its verdict can't claim more than it checked: any partial run blocks the cleanest verdict.

What I learned

The hard part wasn't finding files. It was deciding what the Skill is allowed to claim, and saying "unknown" honestly.

What's next

If selected as a finalist, I'll validate it on a real AI NAS with synthetic data: planted copies, unique files, corrupt files and a run over the limit. It has not run on a NAS yet.

Built With

  • markdown
  • ugos
  • ugreen-ai-nas
  • uliya
  • uliya-skill-kit
Share this project:

Updates

Submission history