# Send Photos to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "photos",
    "name": "Photos",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/ivangdavila/photos",
    "canonicalUrl": "https://clawhub.ai/ivangdavila/photos",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/photos",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=photos",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "SKILL.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/photos"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/photos",
    "downloadUrl": "https://openagent3.xyz/downloads/photos",
    "agentUrl": "https://openagent3.xyz/skills/photos/agent",
    "manifestUrl": "https://openagent3.xyz/skills/photos/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/photos/agent.md"
  }
}
```
## Documentation

### Safety First

Never delete photos directly — move to .photo-trash/ folder with original path preserved in filename
Never overwrite originals — edits go to edited/ subfolder, originals stay untouched
Before bulk operations, create manifest: photos-pending.json with planned actions for user review
When user says "delete duplicates", move to trash and report count — let them empty trash manually

### Indexing Strategy

Create .photo-index/ in library root with one JSON sidecar per photo
Sidecar filename: {original-hash}.json — survives renames and moves
Index fields: hash, path, date_taken, camera, gps, description, tags, indexed_at
Run indexing incrementally — skip files with matching hash already indexed
Store description from vision analysis in sidecar, not in EXIF (non-destructive)

### Vision Analysis (Token-Efficient)

Don't analyze every photo upfront — index on-demand when user searches or asks
Cache vision results permanently in sidecar JSON — never re-analyze same photo
For bulk analysis, process in batches of 20 with progress updates
Use concise prompts: "Describe this photo in 2-3 sentences. List people, objects, location, activity."
Skip screenshots and memes (detect by aspect ratio + lack of EXIF) unless explicitly requested

### Duplicate Detection

Generate perceptual hash (pHash) alongside content hash — catches near-duplicates and resized copies
Group duplicates by pHash similarity, keep highest resolution as "original"
Report duplicates with thumbnails/paths, never auto-delete
Consider EXIF date — oldest is likely the original, newer copies are backups

### Search Patterns

By content: Search sidecar descriptions with simple text match first, vision re-analysis if no hits
By date: Parse EXIF DateTimeOriginal, fall back to file mtime
By location: Reverse geocode GPS once, store city/country in sidecar for text search
By person: If user identifies someone once ("that's Maria"), tag all similar faces in index

### EXIF Handling

Read: exiftool -json photo.jpg — returns all metadata as JSON
Write date: exiftool -DateTimeOriginal="2024:03:15 14:30:00" photo.jpg
Strip GPS before sharing: exiftool -gps:all= photo.jpg (operates on copy, not original)
Batch read: exiftool -json -r /photos/ — recursive, outputs array

### File Organization

Propose structure, don't impose: YYYY/MM/ or YYYY/MM-DD/ based on user preference
Rename pattern: YYYYMMDD_HHMMSS_originalname.ext — preserves original name, adds sortable prefix
Handle timezone: EXIF dates are local time — ask user's timezone once, store in .photo-index/config.json
HEIC to JPEG: sips -s format jpeg input.heic --out output.jpg (macOS) or heif-convert (Linux)

### NAS/Remote Libraries

For Synology/NAS: work with mounted paths, don't assume local speeds
Test connection before bulk operations: ls /Volumes/photos | head -1
For slow connections, build local index cache that syncs periodically
Respect @eaDir (Synology thumbnails) and .DS_Store — skip in indexing
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: ivangdavila
- Version: 1.0.0
## Source health
- Status: healthy
- Source download looks usable.
- Yavira can redirect you to the upstream package for this source.
- Health scope: source
- Reason: direct_download_ok
- Checked at: 2026-04-30T16:55:25.780Z
- Expires at: 2026-05-07T16:55:25.780Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/photos)
- [Send to Agent page](https://openagent3.xyz/skills/photos/agent)
- [JSON manifest](https://openagent3.xyz/skills/photos/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/photos/agent.md)
- [Download page](https://openagent3.xyz/downloads/photos)