Ask about any trip, year, person or pet. Omokage joins the photos, recordings and documents on your UGREEN AI NAS into one story, with a source on every line, and keeps it as an album.

Omokage (面影) is Japanese for the image of something that stays in the mind.

Inspiration

A household NAS holds years of life. It sits in two places that never meet: the photo library, and folders of voice memos, tickets, bookings and letters.

Say you want to look back at one trip. Today you:

  1. search Photos for the dates or the place;
  2. dig through folders for a voice memo from that week;
  3. search again for the booking or the ticket, by a file name you no longer remember;
  4. join it all in your head.

Most people stop after step 1, so the recordings and papers are never opened again. UGREEN's brief for this track says it plainly: "most of that information remains scattered and underused."

What exists today stops short of this:

  • Photo apps build memories from photos and videos alone, and cite nothing. On Immich, a popular self-hosted photo app, the request for automatic memories has been open since 2023 with more than 230 upvotes.
  • Trip journals need the trip planned inside them. They don't read the tickets and bookings you already keep as files.
  • Cloud assistants have started to join personal sources, but only for data stored in their cloud.
  • On UGREEN AI NAS, the official photo skills search photos, create albums and build a timeline. Each works on the photo library alone.

Nothing joins the three kinds of content on the device where they already sit.

What it does

You ask one thing: "our Kyoto trip, December 2019", "2021", "Dad", "Milo".

  1. It answers from the photos first: how many there are, when, where, who was there, and what a few of them show.
  2. On a yes, it adds the words: exact quotes from recordings, documents and text in photos from that time.
  3. It shows the story. Every line names the file it came from. Whatever it could not find is listed, never filled in.
  4. It keeps what you choose, after one confirmation: an album of those photos, the story as a file, and a tag on the files it quoted.

If someone in the photos has no name yet, it asks you once who they are and remembers the answer.

This is the layout of a story. The data is invented: Round 1 needs no NAS, so the Skill has not run on one yet.

Kyoto, December 2019

  • 412 photos and 9 videos, 12 to 19 December 2019. (From the photos)
  • A train platform with snow on the roof; two people in winter coats carry bags. (Seen in a photo: IMG_2231.jpg)
  • "We finally made it. It is freezing and I love it." (Said in a recording: memo-2019-12-12.m4a, 00:14)
  • "Check-in 12 December 2019, 2 nights, 2 guests" (Written: booking-ryokan.pdf, page 1)

What I could not find

  • No recordings from 15 to 19 December.

How I built it

Omokage is a Uliya Skill: one SKILL.md and five reference files, Markdown only. It never touches a file itself. Its 20 delegate instructions each go to one of four UGREEN expert agents, and each real result is passed on to the next step.

  • photo-agent finds photos and videos by time, place, person or pet, counts who appears in them, describes a few with the vision model, reads text in photos and creates the album.
  • file-agent finds recordings and documents by date or name, and tags the ones the story quotes.
  • knowledge-agent transcribes recordings on the NAS and saves the story.
  • document-agent returns the exact passages about the subject.

Four rules hold it together:

  • A source on every line. A line with no source is not written.
  • Exact quotes. Never tidied, translated or attributed to a speaker.
  • Names only from the Photos app or from you. It never says who someone is from how they look.
  • Private papers stay closed. Files named like bank, tax, pay, health or identity papers are not sent for reading.

The tools run on the NAS. If you have turned on a cloud model, it receives the text, and the Skill says so before it reads recordings and documents.

The package passes the uliya-skill-kit 0.7.3 static checker with zero errors and zero warnings.

How it meets the judging criteria

  • User Value: one request, a first answer from the photos, then a story, an album, a saved file and a tag. See SKILL.md, Steps 1 to 7.
  • Innovation & Differentiation: three kinds of content joined on the device, with a source on every line. See references/story-format.md.
  • Technical Quality: four expert agents, every search capped, one confirmation before any change, all five delegation states handled. See SKILL.md, "Completion and failure", and references/capability-map.md.
  • AI NAS Fit & Validation: it uses the photo index, on-device transcription, the vision model and document reading on data already on the NAS. See references/data-and-boundaries.md.

Challenges

  • No device in Round 1. Every step is written from the capability catalog alone. The main path uses only documented search parameters, and what the catalog leaves open is listed as checks for the test day.
  • A Skill cannot write names into Photos. So Omokage keeps its own names file. Each save is a full snapshot, and a partial read is never saved over a complete one.
  • Large libraries. A trip can hold thousands of photos. No step lists every match: one search counts them, then the period is searched in at most 24 parts.
  • A first design I threw away. It opened by asking you to name the faces in your photos. That repeated in chat what the Photos app already does, and it needed setup before the first answer. Starting from a date needs none.

What I learned

  • Dates filter better than places. When a request has dates, the place becomes only the title, so photos with no location stay in.
  • The value of AI on a NAS is in the indexes it already has. Time, place, faces, pets and text in photos are already worked out on the device. The new part is joining them to the files next to them.
  • "Write only what was returned" changes the result. A gap becomes a line under "What I could not find", not a sentence that only sounds right.

What's next

If Omokage is a finalist, the test day on a real NAS checks three things on a synthetic archive:

  1. A dated trip: the counts, dates and quotes match the files, and the album holds those photos.
  2. Someone with no name in Photos: after naming, the story continues, and the name is remembered on the next run.
  3. A period with no photos: it is reported as not found, never filled in.

Known limits: the result is text, an album and a tag, not a video. Transcription covers Chinese, Japanese, English and German. Names live in Omokage's own file, not in the Photos people list.

Third-party components (none), the licence (MIT) and the AI tools used are listed in references/disclosures.md inside the package.

Built With

  • document-agent
  • file-agent
  • knowledge-agent
  • markdown
  • ocr
  • photo-agent
  • speech-to-text
  • ugos
  • ugreen-ai-nas
  • uliya
  • uliya-skill-kit
Share this project:

Updates

Submission history