Inspiration

A wedding shoot lands as a few thousand near-identical frames, and someone spends an evening deleting most of them. The archive already lives on a NAS that can search faces, EXIF and text, but the culling still happens on a laptop, so the files get pulled off the NAS and pushed back. That felt backwards. The machine holding the photos should do the boring part.

What it does

One folder in, one reviewable sheet out. Selects Engine scores frames against a rubric the photographer can edit, picks one winner per burst, collapses duplicates, and tags keep, maybe or reject. Albums come after, one per look, once the sheet is approved.

How I built it

Markdown only: a SKILL.md and four references, no scripts or dependencies. The Skill orchestrates three registered experts and never calls a CLI itself. Reads run first, every write waits for approval. Scoring uses the device's vision-vlm at low temperature, one frame at a time, so images never leave the NAS.

Challenges

The capability catalog set the shape. There is no tag-based conditional album, so I moved the decision into tags and gave albums the job they can actually do — group by lens and capture window. Shipping a limit I can defend beat shipping a claim that breaks on real hardware.

The second challenge was making a model's judgement auditable. A score alone is useless to a photographer, so every score carries a reason and the sheet invites correction; the rubric lives beside the Skill so it can be argued with.

Third was cost. Vision calls scale with frame count, so a run is capped at 120 analysed frames and the sheet reports what was listed, scored and skipped. Hiding that would have been dishonest.

What I learned

A Skill is a contract, not a prompt. Writing the failure states before the happy path changed the design: empty folders, unreadable files and a missing brief all had to be answerable before the workflow made sense. And capability limits are a better brief than an open canvas — most of the good decisions here came from something I could not do.

Built With

  • create-album-condition
  • markdown
  • nas-agents
  • orchestration
  • save-text
  • scan-dedupe
  • search-picture
  • skill
  • ugreen-ai-nas
  • uliya-skill-standard
  • vision-vlm
Share this project:

Updates

Submission history