{
  "schemaVersion": "1.0",
  "item": {
    "slug": "unsplash",
    "name": "Unsplash",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Brokenwatch24/unsplash",
    "canonicalUrl": "https://clawhub.ai/Brokenwatch24/unsplash",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/unsplash",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=unsplash",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "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."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "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."
        },
        {
          "label": "Upgrade existing",
          "body": "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."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-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/unsplash"
    },
    "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."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/unsplash",
    "agentPageUrl": "https://openagent3.xyz/skills/unsplash/agent",
    "manifestUrl": "https://openagent3.xyz/skills/unsplash/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/unsplash/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "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."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "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."
      },
      {
        "label": "Upgrade existing",
        "body": "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."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Unsplash API",
        "body": "Search, browse, and download high-quality free photos from Unsplash's library of millions of images."
      },
      {
        "title": "Get your Access Key",
        "body": "Create account at https://unsplash.com/developers\nRegister a new application\nCopy your Access Key (starts with your app name)"
      },
      {
        "title": "Store credentials",
        "body": "mkdir -p ~/.config/unsplash\r\necho \"YOUR_ACCESS_KEY\" > ~/.config/unsplash/access_key\r\nchmod 600 ~/.config/unsplash/access_key\n\nOr set environment variable:\n\nexport UNSPLASH_ACCESS_KEY=\"your_access_key_here\""
      },
      {
        "title": "Rate Limits",
        "body": "Demo: 50 requests/hour\nProduction: 5,000 requests/hour (after app approval)\nOnly /v1/messages endpoints count; image URLs (images.unsplash.com) don't"
      },
      {
        "title": "Search Photos",
        "body": "curl \"https://api.unsplash.com/search/photos?query=nature&per_page=10\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\n\nParameters:\n\nquery: Search terms (required)\npage: Page number (default: 1)\nper_page: Results per page (default: 10, max: 30)\norder_by: relevant (default) or latest\ncolor: Filter by color (black_and_white, black, white, yellow, orange, red, purple, magenta, green, teal, blue)\norientation: landscape, portrait, or squarish"
      },
      {
        "title": "Get Random Photo",
        "body": "curl \"https://api.unsplash.com/photos/random?query=coffee&count=1\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\n\nParameters:\n\nquery: Limit to search term (optional)\ncount: Number of photos (1-30, default: 1)\norientation: Filter by orientation\ncollections: Filter by collection IDs (comma-separated)"
      },
      {
        "title": "Get Photo Details",
        "body": "curl \"https://api.unsplash.com/photos/PHOTO_ID\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\n\nReturns full photo metadata including EXIF, location, user info, and all image URLs."
      },
      {
        "title": "Track Download (Required!)",
        "body": "Important: You MUST trigger this endpoint when downloading a photo to comply with API guidelines.\n\ncurl \"https://api.unsplash.com/photos/PHOTO_ID/download\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\n\nThis increments the download counter. Response includes the download URL."
      },
      {
        "title": "List Editorial Feed",
        "body": "curl \"https://api.unsplash.com/photos?per_page=10\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\""
      },
      {
        "title": "Browse Collections",
        "body": "# List all collections\r\ncurl \"https://api.unsplash.com/collections?per_page=10\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\r\n\r\n# Get collection photos\r\ncurl \"https://api.unsplash.com/collections/COLLECTION_ID/photos\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\""
      },
      {
        "title": "User Photos",
        "body": "curl \"https://api.unsplash.com/users/USERNAME/photos?per_page=10\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\""
      },
      {
        "title": "Image URLs",
        "body": "Every photo response includes these URLs:\n\n{\r\n  \"urls\": {\r\n    \"raw\": \"https://images.unsplash.com/photo-xxx?ixid=xxx\",\r\n    \"full\": \"...?ixid=xxx&q=80&fm=jpg\",\r\n    \"regular\": \"...?ixid=xxx&w=1080&fit=max\",\r\n    \"small\": \"...?w=400&fit=max\",\r\n    \"thumb\": \"...?w=200&fit=max\"\r\n  }\r\n}"
      },
      {
        "title": "Dynamic Resizing",
        "body": "Add parameters to any image URL (keep the ixid parameter!):\n\nw=1500: Set width\nh=800: Set height\ndpr=2: Device pixel ratio\nq=75: Quality (1-100)\nfm=jpg: Format (jpg, png, webp, avif)\nfit=crop: Fit mode (crop, max, clip)\ncrop=entropy: Crop mode\n\nExample:\n\nhttps://images.unsplash.com/photo-xxx?ixid=xxx&w=1500&h=1000&fit=crop&q=85"
      },
      {
        "title": "BlurHash Placeholders",
        "body": "Each photo includes a blur_hash field - a compact string representation for showing blurred placeholders while images load.\n\n{\r\n  \"blur_hash\": \"LoC%a7IoIVxZ_NM|M{s:%hRjWAo0\"\r\n}"
      },
      {
        "title": "Photo Object (abbreviated)",
        "body": "{\r\n  \"id\": \"LBI7cgq3pbM\",\r\n  \"created_at\": \"2016-05-03T11:00:28-04:00\",\r\n  \"width\": 5245,\r\n  \"height\": 3497,\r\n  \"color\": \"#60544D\",\r\n  \"blur_hash\": \"LoC%a7IoIVxZ_NM|M{s:%hRjWAo0\",\r\n  \"description\": \"A man drinking coffee\",\r\n  \"urls\": { \"raw\": \"...\", \"full\": \"...\", \"regular\": \"...\" },\r\n  \"links\": {\r\n    \"download\": \"...\",\r\n    \"download_location\": \"https://api.unsplash.com/photos/xxx/download\"\r\n  },\r\n  \"user\": {\r\n    \"username\": \"johndoe\",\r\n    \"name\": \"John Doe\",\r\n    \"profile_image\": { \"small\": \"...\", \"medium\": \"...\", \"large\": \"...\" }\r\n  }\r\n}"
      },
      {
        "title": "Search Response",
        "body": "{\r\n  \"total\": 133,\r\n  \"total_pages\": 7,\r\n  \"results\": [ /* array of photo objects */ ]\r\n}"
      },
      {
        "title": "Attribution",
        "body": "Always attribute photos to their creators:\n\nPhoto by [Name] on Unsplash\n\nLink to photographer's Unsplash profile when possible."
      },
      {
        "title": "Download Tracking",
        "body": "Call /photos/:id/download before allowing users to download\nThis is required by Unsplash API Guidelines\nDon't use it for just displaying images (that's tracked automatically via hotlinking)"
      },
      {
        "title": "Hotlinking",
        "body": "You can hotlink images directly from images.unsplash.com\nThese don't count against rate limits\nViews are tracked automatically\nAlways keep the ixid parameter in URLs"
      },
      {
        "title": "Caching",
        "body": "Public endpoints (search, photos) are cacheable\nConsider caching search results client-side to reduce API calls"
      },
      {
        "title": "Quick Reference",
        "body": "# Store key\r\nexport UNSPLASH_ACCESS_KEY=\"your_key\"\r\n\r\n# Search\r\ncurl \"https://api.unsplash.com/search/photos?query=ocean&per_page=5\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\r\n\r\n# Random photo\r\ncurl \"https://api.unsplash.com/photos/random?query=mountains\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\r\n\r\n# Get photo\r\ncurl \"https://api.unsplash.com/photos/PHOTO_ID\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\r\n\r\n# Track download (required when downloading!)\r\ncurl \"https://api.unsplash.com/photos/PHOTO_ID/download\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\""
      },
      {
        "title": "Notes",
        "body": "Base URL: https://api.unsplash.com\nAll responses are JSON\nPagination via page and per_page parameters\nLink headers provide first/prev/next/last page URLs\nImage requests to images.unsplash.com don't count against rate limits\nKeep the ixid parameter when using/manipulating image URLs\nFor production use, apply for increased rate limits in your dashboard"
      },
      {
        "title": "Colors",
        "body": "black_and_white, black, white, yellow, orange, red, purple, magenta, green, teal, blue"
      },
      {
        "title": "Orientations",
        "body": "landscape, portrait, squarish"
      },
      {
        "title": "Sort Options",
        "body": "Photos: latest, oldest, popular\nSearch: relevant, latest"
      },
      {
        "title": "Error Handling",
        "body": "401 Unauthorized: Invalid or missing access key\n403 Forbidden: Rate limit exceeded or forbidden action\n404 Not Found: Photo/user/collection doesn't exist\n\nCheck X-Ratelimit-Remaining header to monitor your rate limit status."
      }
    ],
    "body": "Unsplash API\n\nSearch, browse, and download high-quality free photos from Unsplash's library of millions of images.\n\nSetup & Authentication\nGet your Access Key\nCreate account at https://unsplash.com/developers\nRegister a new application\nCopy your Access Key (starts with your app name)\nStore credentials\nmkdir -p ~/.config/unsplash\r\necho \"YOUR_ACCESS_KEY\" > ~/.config/unsplash/access_key\r\nchmod 600 ~/.config/unsplash/access_key\n\n\nOr set environment variable:\n\nexport UNSPLASH_ACCESS_KEY=\"your_access_key_here\"\n\nRate Limits\nDemo: 50 requests/hour\nProduction: 5,000 requests/hour (after app approval)\nOnly /v1/messages endpoints count; image URLs (images.unsplash.com) don't\nCommon Operations\nSearch Photos\ncurl \"https://api.unsplash.com/search/photos?query=nature&per_page=10\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\n\n\nParameters:\n\nquery: Search terms (required)\npage: Page number (default: 1)\nper_page: Results per page (default: 10, max: 30)\norder_by: relevant (default) or latest\ncolor: Filter by color (black_and_white, black, white, yellow, orange, red, purple, magenta, green, teal, blue)\norientation: landscape, portrait, or squarish\nGet Random Photo\ncurl \"https://api.unsplash.com/photos/random?query=coffee&count=1\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\n\n\nParameters:\n\nquery: Limit to search term (optional)\ncount: Number of photos (1-30, default: 1)\norientation: Filter by orientation\ncollections: Filter by collection IDs (comma-separated)\nGet Photo Details\ncurl \"https://api.unsplash.com/photos/PHOTO_ID\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\n\n\nReturns full photo metadata including EXIF, location, user info, and all image URLs.\n\nTrack Download (Required!)\n\nImportant: You MUST trigger this endpoint when downloading a photo to comply with API guidelines.\n\ncurl \"https://api.unsplash.com/photos/PHOTO_ID/download\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\n\n\nThis increments the download counter. Response includes the download URL.\n\nList Editorial Feed\ncurl \"https://api.unsplash.com/photos?per_page=10\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\n\nBrowse Collections\n# List all collections\r\ncurl \"https://api.unsplash.com/collections?per_page=10\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\r\n\r\n# Get collection photos\r\ncurl \"https://api.unsplash.com/collections/COLLECTION_ID/photos\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\n\nUser Photos\ncurl \"https://api.unsplash.com/users/USERNAME/photos?per_page=10\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\n\nWorking with Images\nImage URLs\n\nEvery photo response includes these URLs:\n\n{\r\n  \"urls\": {\r\n    \"raw\": \"https://images.unsplash.com/photo-xxx?ixid=xxx\",\r\n    \"full\": \"...?ixid=xxx&q=80&fm=jpg\",\r\n    \"regular\": \"...?ixid=xxx&w=1080&fit=max\",\r\n    \"small\": \"...?w=400&fit=max\",\r\n    \"thumb\": \"...?w=200&fit=max\"\r\n  }\r\n}\n\nDynamic Resizing\n\nAdd parameters to any image URL (keep the ixid parameter!):\n\nw=1500: Set width\nh=800: Set height\ndpr=2: Device pixel ratio\nq=75: Quality (1-100)\nfm=jpg: Format (jpg, png, webp, avif)\nfit=crop: Fit mode (crop, max, clip)\ncrop=entropy: Crop mode\n\nExample:\n\nhttps://images.unsplash.com/photo-xxx?ixid=xxx&w=1500&h=1000&fit=crop&q=85\n\nBlurHash Placeholders\n\nEach photo includes a blur_hash field - a compact string representation for showing blurred placeholders while images load.\n\n{\r\n  \"blur_hash\": \"LoC%a7IoIVxZ_NM|M{s:%hRjWAo0\"\r\n}\n\nResponse Structure\nPhoto Object (abbreviated)\n{\r\n  \"id\": \"LBI7cgq3pbM\",\r\n  \"created_at\": \"2016-05-03T11:00:28-04:00\",\r\n  \"width\": 5245,\r\n  \"height\": 3497,\r\n  \"color\": \"#60544D\",\r\n  \"blur_hash\": \"LoC%a7IoIVxZ_NM|M{s:%hRjWAo0\",\r\n  \"description\": \"A man drinking coffee\",\r\n  \"urls\": { \"raw\": \"...\", \"full\": \"...\", \"regular\": \"...\" },\r\n  \"links\": {\r\n    \"download\": \"...\",\r\n    \"download_location\": \"https://api.unsplash.com/photos/xxx/download\"\r\n  },\r\n  \"user\": {\r\n    \"username\": \"johndoe\",\r\n    \"name\": \"John Doe\",\r\n    \"profile_image\": { \"small\": \"...\", \"medium\": \"...\", \"large\": \"...\" }\r\n  }\r\n}\n\nSearch Response\n{\r\n  \"total\": 133,\r\n  \"total_pages\": 7,\r\n  \"results\": [ /* array of photo objects */ ]\r\n}\n\nBest Practices\nAttribution\n\nAlways attribute photos to their creators:\n\nPhoto by [Name] on Unsplash\n\n\nLink to photographer's Unsplash profile when possible.\n\nDownload Tracking\nCall /photos/:id/download before allowing users to download\nThis is required by Unsplash API Guidelines\nDon't use it for just displaying images (that's tracked automatically via hotlinking)\nHotlinking\nYou can hotlink images directly from images.unsplash.com\nThese don't count against rate limits\nViews are tracked automatically\nAlways keep the ixid parameter in URLs\nCaching\nPublic endpoints (search, photos) are cacheable\nConsider caching search results client-side to reduce API calls\nQuick Reference\n# Store key\r\nexport UNSPLASH_ACCESS_KEY=\"your_key\"\r\n\r\n# Search\r\ncurl \"https://api.unsplash.com/search/photos?query=ocean&per_page=5\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\r\n\r\n# Random photo\r\ncurl \"https://api.unsplash.com/photos/random?query=mountains\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\r\n\r\n# Get photo\r\ncurl \"https://api.unsplash.com/photos/PHOTO_ID\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\r\n\r\n# Track download (required when downloading!)\r\ncurl \"https://api.unsplash.com/photos/PHOTO_ID/download\" \\\r\n  -H \"Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}\"\n\nNotes\nBase URL: https://api.unsplash.com\nAll responses are JSON\nPagination via page and per_page parameters\nLink headers provide first/prev/next/last page URLs\nImage requests to images.unsplash.com don't count against rate limits\nKeep the ixid parameter when using/manipulating image URLs\nFor production use, apply for increased rate limits in your dashboard\nCommon Filters\nColors\n\nblack_and_white, black, white, yellow, orange, red, purple, magenta, green, teal, blue\n\nOrientations\n\nlandscape, portrait, squarish\n\nSort Options\nPhotos: latest, oldest, popular\nSearch: relevant, latest\nError Handling\n401 Unauthorized: Invalid or missing access key\n403 Forbidden: Rate limit exceeded or forbidden action\n404 Not Found: Photo/user/collection doesn't exist\n\nCheck X-Ratelimit-Remaining header to monitor your rate limit status."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Brokenwatch24/unsplash",
    "publisherUrl": "https://clawhub.ai/Brokenwatch24/unsplash",
    "owner": "Brokenwatch24",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/unsplash",
    "downloadUrl": "https://openagent3.xyz/downloads/unsplash",
    "agentUrl": "https://openagent3.xyz/skills/unsplash/agent",
    "manifestUrl": "https://openagent3.xyz/skills/unsplash/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/unsplash/agent.md"
  }
}