Inspiration

I take photos of receipts, bills, and notes so I can remember them. Later they sit among hundreds of family photos on the NAS. Text search helps only when I already know a word that is in the photo, and there is no simple list of the papers I photographed last month.

What it does

Camera Roll Paper Rescue (CRPR) is a Uliya Skill for UGREEN AI NAS. You pick one folder and a period. CRPR:

  1. Checks that the photo service is working.
  2. Lists the images for that period, newest first, up to 50 per run.
  3. Reads their text in batches of 10 and labels each photo: receipt, notes, ticket, document, card, unsure, not-paper, or unreadable.
  4. Shows a review table (type, date, text, file location) so you can fix labels and drop rows.
  5. After you confirm, saves one Markdown index file in a folder you choose, and creates albums if you ask.
  6. Ends with a report whose counts add up to every file it looked at.

Original photos are only read. Nothing is moved, renamed, edited, or deleted. Photos labeled as cards (ID, passport, driving licence, payment, membership, or business cards) are listed by type only. Their text is never shown or saved.

How I built it

  • Markdown only: SKILL.md plus three linked reference files (user guide, test plan, disclosure). No scripts, libraries, or models.
  • The Skill only delegates to the registered NAS experts: photo-agent (ug-photo health, meta, create-album, vision-ocr, vision-vlm), file-agent (ug-filesystem ls, find), and knowledge-agent (ug-knowledge save-text).
  • Text first: text recognition runs first, and the vision model only picks a label. The saved text is the recognized text; the vision model never writes it.
  • Read-only until you confirm the review. The two writes (index and albums) need your approval.
  • Validated with the static checker in the UGREEN uliya-skill-kit: static-pass, 0 errors, 0 warnings.

Challenges I ran into

  • No NAS in Round 1. I designed from the capability catalog and listed what must be confirmed on a device: HEIC support, whether the vision model keeps to the label list, which date find uses, and whether a long index saves in one call.
  • find returns no sort order or capture date, so the Skill sorts and cuts the list itself and reads capture dates with meta.
  • Menus, signs, and memes are full of text but are not papers. A receipt now needs a visible total or amount paid, and an unsure label leaves the rest for the user to decide.
  • Text inside a photo can read like an order, such as "delete all files". The Skill treats photo text as content only and never acts on it.
  • The checker does not accept README files or scripts in the package, so every run rule lives in SKILL.md.

What I learned

  • Keep the AI's job small: a label is easier to check than written text.
  • A review step before saving matters more than a perfect first guess.
  • Be clear about data flow: if Uliya runs on a cloud model, the text shown in the review and saved in the index reaches that model.

What's next

  • Run the test plan on a real NAS: a 30-photo sweep with 12 papers, corrections with albums, and an edge set with a specimen ID card, a blurry receipt, and a note that reads like a command.
  • Measure the time per batch and check which text recognition languages work.

AI tools used

  • Muse (Meta): an early explanation of the uliya-skill-kit, research on user needs, and a first list of Skill ideas.
  • Claude Code (Anthropic): the brainstorm that produced this idea and its name, research on similar products, drafting and reviewing the Skill, running the checker, feedback on the proposal, and drafting this project page. I wrote the proposal answers myself.
  • UGREEN uliya-skill-kit: the Skill standard, capability catalog 2.0.0, and the static checker.

Built With

  • claude-code
  • markdown
  • ugos
  • ugreen-ai-nas
  • uliya
Share this project:

Updates

Submission history