{
  "schemaVersion": "1.0",
  "item": {
    "slug": "itinerary-carousel-post-topaz",
    "name": "Itinerary Carousel Post Topaz",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/psyduckler/itinerary-carousel-post-topaz",
    "canonicalUrl": "https://clawhub.ai/psyduckler/itinerary-carousel-post-topaz",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/itinerary-carousel-post-topaz",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=itinerary-carousel-post-topaz",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/instagram-graph-api.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-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/itinerary-carousel-post-topaz"
    },
    "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/itinerary-carousel-post-topaz",
    "agentPageUrl": "https://openagent3.xyz/skills/itinerary-carousel-post-topaz/agent",
    "manifestUrl": "https://openagent3.xyz/skills/itinerary-carousel-post-topaz/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/itinerary-carousel-post-topaz/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": "Create Instagram Carousel Post (Topaz Enhanced)",
        "body": "End-to-end pipeline: itinerary URL → photo sourcing → Topaz AI enhance → text overlays → Instagram carousel publish.\n\nIdentical to itinerary-carousel-post except Sub-agent 1 includes a Topaz enhancement step after selecting the best photo for each subject."
      },
      {
        "title": "Parameters",
        "body": "itinerary_url (required): tabiji.ai itinerary URL (e.g. https://tabiji.ai/i/thaw-dome/)\ndestination (required): City/region name (e.g. \"Kuala Lumpur\")\nattractions (required): List of 5 attraction names + short descriptions\ncaption (optional): Custom caption. If omitted, generate one with destination name, attraction list, CTA to link in bio, and relevant hashtags."
      },
      {
        "title": "Pipeline (3 chained sub-agents recommended)",
        "body": "Split into 3 sub-agents for reliability. Each writes outputs to /tmp/ig-carousel/."
      },
      {
        "title": "Sub-agent 1: Photo Finding + Topaz Enhancement",
        "body": "Use the instagram-photo-find skill workflow for each subject (1 destination + 5 attractions = 6 total).\n\nFor each subject:\n\nweb_search: site:instagram.com/p/ \"{subject}\" photo (10 results)\nDownload top 5 candidates: curl -s -L -o /tmp/ig-carousel/raw-{slug}-{n}.jpg \"https://www.instagram.com/p/{shortcode}/media/?size=l\"\nVision-score each with: \"Rate 1-10 as hero destination photo for {subject}. Description + score only.\"\nKeep best per subject → /tmp/ig-carousel/{slug}-best.jpg\n\n5. Topaz Enhance each best image:\n\nTOPAZ_API_KEY=$(security find-generic-password -s \"topaz-api-key\" -w)\n\ncurl --request POST \\\n  --url https://api.topazlabs.com/image/v1/enhance \\\n  --header \"X-API-Key: ${TOPAZ_API_KEY}\" \\\n  --header 'accept: image/jpeg' \\\n  --header 'content-type: multipart/form-data' \\\n  --form 'model=Low Resolution V2' \\\n  --form 'output_scale_factor=2' \\\n  --form 'output_format=jpeg' \\\n  --form \"image=@/tmp/ig-carousel/${slug}-best.jpg\" \\\n  --output \"/tmp/ig-carousel/${slug}-enhanced.jpg\"\n\nIf the sync endpoint times out or returns a process_id instead of image bytes, use the async flow:\n\n# Async: submit\nRESPONSE=$(curl -s --request POST \\\n  --url https://api.topazlabs.com/image/v1/enhance/async \\\n  --header \"X-API-Key: ${TOPAZ_API_KEY}\" \\\n  --header 'content-type: multipart/form-data' \\\n  --form 'model=Low Resolution V2' \\\n  --form 'output_scale_factor=2' \\\n  --form 'output_format=jpeg' \\\n  --form \"image=@/tmp/ig-carousel/${slug}-best.jpg\")\n\nPROCESS_ID=$(echo \"$RESPONSE\" | jq -r '.process_id')\n\n# Poll status until Completed\nwhile true; do\n  STATUS=$(curl -s --header \"X-API-Key: ${TOPAZ_API_KEY}\" \\\n    \"https://api.topazlabs.com/image/v1/status/${PROCESS_ID}\" | jq -r '.status')\n  [ \"$STATUS\" = \"Completed\" ] && break\n  sleep 3\ndone\n\n# Download result\ncurl -s --header \"X-API-Key: ${TOPAZ_API_KEY}\" \\\n  \"https://api.topazlabs.com/image/v1/download/${PROCESS_ID}\" \\\n  --output \"/tmp/ig-carousel/${slug}-enhanced.jpg\"\n\nModel choice: Low Resolution V2 — designed for web-sourced images (exactly our use case). Handles JPEG compression artifacts, low resolution, and general softness. Fast and cheap.\n\nParameters explained:\n\noutput_scale_factor=2 — doubles the input resolution (2x upscale). For typical IG-sourced images (~1080px), this produces ~2160px which gives the overlay step plenty of resolution to work with.\noutput_format=jpeg — keeps file size reasonable for IG's 8MB limit\n\nOutput: 6 enhanced images at /tmp/ig-carousel/{slug}-enhanced.jpg + JSON manifest at /tmp/ig-carousel/manifest.json:\n\n[{\"slug\": \"kuala-lumpur\", \"subject\": \"Kuala Lumpur\", \"score\": 7, \"path\": \"/tmp/ig-carousel/kuala-lumpur-enhanced.jpg\", \"original\": \"/tmp/ig-carousel/kuala-lumpur-best.jpg\", \"source\": \"instagram.com/p/XXX/\", \"topaz_enhanced\": true}]"
      },
      {
        "title": "Sub-agent 2: Text Overlays",
        "body": "Read manifest from sub-agent 1. Run overlay script for each enhanced image.\n\nSlide 1 (cover) — clean style:\n\npython3 skills/instagram-photo-text-overlay/scripts/overlay.py \\\n  --input /tmp/ig-carousel/{dest-slug}-enhanced.jpg \\\n  --output /tmp/ig-carousel/slide-1.jpg \\\n  --title \"{N} Day {DESTINATION} Itinerary Highlights\" \\\n  --style clean --watermark \"tabiji.ai\"\n\nSlides 2–6 — quote style per attraction with insider tip:\n\npython3 skills/instagram-photo-text-overlay/scripts/overlay.py \\\n  --input /tmp/ig-carousel/{slug}-enhanced.jpg \\\n  --output /tmp/ig-carousel/slide-{N}.jpg \\\n  --title \"{ATTRACTION}\" \\\n  --quote \"{Specific insider tip about THIS attraction — must directly reference the place in the title, not a generic travel tip}\" \\\n  --author \"tabiji.ai\" \\\n  --style quote --watermark \"tabiji.ai\"\n\nOutput: 6 overlay images at /tmp/ig-carousel/slide-{1-6}.jpg"
      },
      {
        "title": "Sub-agent 3: Publish to Instagram",
        "body": "Host images publicly — copy slides to tabiji repo (img/instagram/), git push, use raw GitHub URLs (https://raw.githubusercontent.com/psyduckler/tabiji/main/img/instagram/slide-{N}.jpg). Wait ~30s after push for GitHub CDN.\n\n\nCreate carousel item containers (one per slide):\n\ncurl -s -X POST \"https://graph.facebook.com/v21.0/${IG_USER}/media\" \\\n  -d \"image_url=${PUBLIC_URL}\" \\\n  -d \"is_carousel_item=true\" \\\n  -d \"access_token=${IG_TOKEN}\"\n\nCreate carousel container with all children + caption:\n\ncurl -s -X POST \"https://graph.facebook.com/v21.0/${IG_USER}/media\" \\\n  --data-urlencode \"caption=${CAPTION}\" \\\n  -d \"media_type=CAROUSEL\" \\\n  -d \"children=${CHILD_IDS}\" \\\n  -d \"access_token=${IG_TOKEN}\"\n\nPublish:\n\ncurl -s -X POST \"https://graph.facebook.com/v21.0/${IG_USER}/media_publish\" \\\n  -d \"creation_id=${CAROUSEL_ID}\" \\\n  -d \"access_token=${IG_TOKEN}\"\n\nGet permalink (or verify publish on rate-limit error):\n\nIf media_publish returns a POST_ID, get the permalink directly:\n\ncurl -s \"https://graph.facebook.com/v21.0/${POST_ID}?fields=permalink&access_token=${IG_TOKEN}\"\n\nIf media_publish returns error 2207051 (rate limit / action blocked): Instagram sometimes processes the request despite returning an error. Always verify by checking the account's recent media before declaring failure:\n\ncurl -s \"https://graph.facebook.com/v21.0/${IG_USER}/media?fields=id,timestamp,permalink&limit=1&access_token=${IG_TOKEN}\"\n\nIf the most recent post timestamp is within the last few minutes, the publish likely succeeded — grab that permalink.\n\nCleanup hosted images — after publish is confirmed, delete the images from the tabiji repo and push:\n\ncd /path/to/tabiji/repo\ngit rm img/instagram/slide-*.jpg\ngit commit -m \"cleanup: remove instagram carousel images after publish\"\ngit push\n\nAlso clean up local temp files:\n\nrm -rf /tmp/ig-carousel/\n\nOutput: Instagram post URL"
      },
      {
        "title": "Instagram API Auth",
        "body": "Keys from macOS Keychain:\n\ninstagram-access-token — Graph API token\ninstagram-account-id — IG user ID (17841449394591017)"
      },
      {
        "title": "Topaz API Auth",
        "body": "Key from macOS Keychain:\n\ntopaz-api-key — Topaz Labs API key"
      },
      {
        "title": "Caption Template",
        "body": "🇲🇾 {N} Nights in {Destination} — {Itinerary Subtitle}\n\n{One-line hook about the trip}\n\n📍 Swipe through our top 5 picks:\n1. {Attraction 1} — {one-line reason}\n2. {Attraction 2} — {one-line reason}\n3. {Attraction 3} — {one-line reason}\n4. {Attraction 4} — {one-line reason}\n5. {Attraction 5} — {one-line reason}\n\nFull free itinerary with tips, prices & Reddit recs 👉 {ITINERARY_URL}\n\n💬 {PROVOCATIVE_QUESTION — e.g. \"Is 5 nights enough for {Destination} or do you need more?\" or \"What's the one thing most tourists get wrong about {Destination}?\"}\n\n#{destination_hashtag} #{country} #travelitinerary #foodietravel #southeastasia #asiatravel #travelguide #tabiji"
      },
      {
        "title": "Tips",
        "body": "Raw GitHub URLs work for IG image_url; tabiji.ai Cloudflare CDN may trigger format validation errors.\nAdd sleep 1 between container creation calls to avoid rate limits.\nIf a subject yields low photo scores (<5), broaden search: try Unsplash/Flickr or more specific landmark names.\nIslamic/cultural museums tend to have fewer quality IG photos — try searching the museum's official IG handle.\nTopaz sync endpoint may return image bytes directly (check Content-Type header). If it returns JSON with process_id, switch to async flow.\nTopaz rate limits: If you get HTTP 429, use exponential backoff. Processing 6 images sequentially should be fine.\nKeep originals: The manifest stores both path (enhanced) and original so you can compare quality or fall back if Topaz fails on a specific image."
      }
    ],
    "body": "Create Instagram Carousel Post (Topaz Enhanced)\n\nEnd-to-end pipeline: itinerary URL → photo sourcing → Topaz AI enhance → text overlays → Instagram carousel publish.\n\nIdentical to itinerary-carousel-post except Sub-agent 1 includes a Topaz enhancement step after selecting the best photo for each subject.\n\nParameters\nitinerary_url (required): tabiji.ai itinerary URL (e.g. https://tabiji.ai/i/thaw-dome/)\ndestination (required): City/region name (e.g. \"Kuala Lumpur\")\nattractions (required): List of 5 attraction names + short descriptions\ncaption (optional): Custom caption. If omitted, generate one with destination name, attraction list, CTA to link in bio, and relevant hashtags.\nPipeline (3 chained sub-agents recommended)\n\nSplit into 3 sub-agents for reliability. Each writes outputs to /tmp/ig-carousel/.\n\nSub-agent 1: Photo Finding + Topaz Enhancement\n\nUse the instagram-photo-find skill workflow for each subject (1 destination + 5 attractions = 6 total).\n\nFor each subject:\n\nweb_search: site:instagram.com/p/ \"{subject}\" photo (10 results)\nDownload top 5 candidates: curl -s -L -o /tmp/ig-carousel/raw-{slug}-{n}.jpg \"https://www.instagram.com/p/{shortcode}/media/?size=l\"\nVision-score each with: \"Rate 1-10 as hero destination photo for {subject}. Description + score only.\"\nKeep best per subject → /tmp/ig-carousel/{slug}-best.jpg\n\n5. Topaz Enhance each best image:\n\nTOPAZ_API_KEY=$(security find-generic-password -s \"topaz-api-key\" -w)\n\ncurl --request POST \\\n  --url https://api.topazlabs.com/image/v1/enhance \\\n  --header \"X-API-Key: ${TOPAZ_API_KEY}\" \\\n  --header 'accept: image/jpeg' \\\n  --header 'content-type: multipart/form-data' \\\n  --form 'model=Low Resolution V2' \\\n  --form 'output_scale_factor=2' \\\n  --form 'output_format=jpeg' \\\n  --form \"image=@/tmp/ig-carousel/${slug}-best.jpg\" \\\n  --output \"/tmp/ig-carousel/${slug}-enhanced.jpg\"\n\n\nIf the sync endpoint times out or returns a process_id instead of image bytes, use the async flow:\n\n# Async: submit\nRESPONSE=$(curl -s --request POST \\\n  --url https://api.topazlabs.com/image/v1/enhance/async \\\n  --header \"X-API-Key: ${TOPAZ_API_KEY}\" \\\n  --header 'content-type: multipart/form-data' \\\n  --form 'model=Low Resolution V2' \\\n  --form 'output_scale_factor=2' \\\n  --form 'output_format=jpeg' \\\n  --form \"image=@/tmp/ig-carousel/${slug}-best.jpg\")\n\nPROCESS_ID=$(echo \"$RESPONSE\" | jq -r '.process_id')\n\n# Poll status until Completed\nwhile true; do\n  STATUS=$(curl -s --header \"X-API-Key: ${TOPAZ_API_KEY}\" \\\n    \"https://api.topazlabs.com/image/v1/status/${PROCESS_ID}\" | jq -r '.status')\n  [ \"$STATUS\" = \"Completed\" ] && break\n  sleep 3\ndone\n\n# Download result\ncurl -s --header \"X-API-Key: ${TOPAZ_API_KEY}\" \\\n  \"https://api.topazlabs.com/image/v1/download/${PROCESS_ID}\" \\\n  --output \"/tmp/ig-carousel/${slug}-enhanced.jpg\"\n\n\nModel choice: Low Resolution V2 — designed for web-sourced images (exactly our use case). Handles JPEG compression artifacts, low resolution, and general softness. Fast and cheap.\n\nParameters explained:\n\noutput_scale_factor=2 — doubles the input resolution (2x upscale). For typical IG-sourced images (~1080px), this produces ~2160px which gives the overlay step plenty of resolution to work with.\noutput_format=jpeg — keeps file size reasonable for IG's 8MB limit\n\nOutput: 6 enhanced images at /tmp/ig-carousel/{slug}-enhanced.jpg + JSON manifest at /tmp/ig-carousel/manifest.json:\n\n[{\"slug\": \"kuala-lumpur\", \"subject\": \"Kuala Lumpur\", \"score\": 7, \"path\": \"/tmp/ig-carousel/kuala-lumpur-enhanced.jpg\", \"original\": \"/tmp/ig-carousel/kuala-lumpur-best.jpg\", \"source\": \"instagram.com/p/XXX/\", \"topaz_enhanced\": true}]\n\nSub-agent 2: Text Overlays\n\nRead manifest from sub-agent 1. Run overlay script for each enhanced image.\n\nSlide 1 (cover) — clean style:\n\npython3 skills/instagram-photo-text-overlay/scripts/overlay.py \\\n  --input /tmp/ig-carousel/{dest-slug}-enhanced.jpg \\\n  --output /tmp/ig-carousel/slide-1.jpg \\\n  --title \"{N} Day {DESTINATION} Itinerary Highlights\" \\\n  --style clean --watermark \"tabiji.ai\"\n\n\nSlides 2–6 — quote style per attraction with insider tip:\n\npython3 skills/instagram-photo-text-overlay/scripts/overlay.py \\\n  --input /tmp/ig-carousel/{slug}-enhanced.jpg \\\n  --output /tmp/ig-carousel/slide-{N}.jpg \\\n  --title \"{ATTRACTION}\" \\\n  --quote \"{Specific insider tip about THIS attraction — must directly reference the place in the title, not a generic travel tip}\" \\\n  --author \"tabiji.ai\" \\\n  --style quote --watermark \"tabiji.ai\"\n\n\nOutput: 6 overlay images at /tmp/ig-carousel/slide-{1-6}.jpg\n\nSub-agent 3: Publish to Instagram\n\nHost images publicly — copy slides to tabiji repo (img/instagram/), git push, use raw GitHub URLs (https://raw.githubusercontent.com/psyduckler/tabiji/main/img/instagram/slide-{N}.jpg). Wait ~30s after push for GitHub CDN.\n\nCreate carousel item containers (one per slide):\n\ncurl -s -X POST \"https://graph.facebook.com/v21.0/${IG_USER}/media\" \\\n  -d \"image_url=${PUBLIC_URL}\" \\\n  -d \"is_carousel_item=true\" \\\n  -d \"access_token=${IG_TOKEN}\"\n\nCreate carousel container with all children + caption:\ncurl -s -X POST \"https://graph.facebook.com/v21.0/${IG_USER}/media\" \\\n  --data-urlencode \"caption=${CAPTION}\" \\\n  -d \"media_type=CAROUSEL\" \\\n  -d \"children=${CHILD_IDS}\" \\\n  -d \"access_token=${IG_TOKEN}\"\n\nPublish:\ncurl -s -X POST \"https://graph.facebook.com/v21.0/${IG_USER}/media_publish\" \\\n  -d \"creation_id=${CAROUSEL_ID}\" \\\n  -d \"access_token=${IG_TOKEN}\"\n\nGet permalink (or verify publish on rate-limit error):\n\nIf media_publish returns a POST_ID, get the permalink directly:\n\ncurl -s \"https://graph.facebook.com/v21.0/${POST_ID}?fields=permalink&access_token=${IG_TOKEN}\"\n\n\nIf media_publish returns error 2207051 (rate limit / action blocked): Instagram sometimes processes the request despite returning an error. Always verify by checking the account's recent media before declaring failure:\n\ncurl -s \"https://graph.facebook.com/v21.0/${IG_USER}/media?fields=id,timestamp,permalink&limit=1&access_token=${IG_TOKEN}\"\n\n\nIf the most recent post timestamp is within the last few minutes, the publish likely succeeded — grab that permalink.\n\nCleanup hosted images — after publish is confirmed, delete the images from the tabiji repo and push:\ncd /path/to/tabiji/repo\ngit rm img/instagram/slide-*.jpg\ngit commit -m \"cleanup: remove instagram carousel images after publish\"\ngit push\n\n\nAlso clean up local temp files:\n\nrm -rf /tmp/ig-carousel/\n\n\nOutput: Instagram post URL\n\nInstagram API Auth\n\nKeys from macOS Keychain:\n\ninstagram-access-token — Graph API token\ninstagram-account-id — IG user ID (17841449394591017)\nTopaz API Auth\n\nKey from macOS Keychain:\n\ntopaz-api-key — Topaz Labs API key\nCaption Template\n🇲🇾 {N} Nights in {Destination} — {Itinerary Subtitle}\n\n{One-line hook about the trip}\n\n📍 Swipe through our top 5 picks:\n1. {Attraction 1} — {one-line reason}\n2. {Attraction 2} — {one-line reason}\n3. {Attraction 3} — {one-line reason}\n4. {Attraction 4} — {one-line reason}\n5. {Attraction 5} — {one-line reason}\n\nFull free itinerary with tips, prices & Reddit recs 👉 {ITINERARY_URL}\n\n💬 {PROVOCATIVE_QUESTION — e.g. \"Is 5 nights enough for {Destination} or do you need more?\" or \"What's the one thing most tourists get wrong about {Destination}?\"}\n\n#{destination_hashtag} #{country} #travelitinerary #foodietravel #southeastasia #asiatravel #travelguide #tabiji\n\nTips\nRaw GitHub URLs work for IG image_url; tabiji.ai Cloudflare CDN may trigger format validation errors.\nAdd sleep 1 between container creation calls to avoid rate limits.\nIf a subject yields low photo scores (<5), broaden search: try Unsplash/Flickr or more specific landmark names.\nIslamic/cultural museums tend to have fewer quality IG photos — try searching the museum's official IG handle.\nTopaz sync endpoint may return image bytes directly (check Content-Type header). If it returns JSON with process_id, switch to async flow.\nTopaz rate limits: If you get HTTP 429, use exponential backoff. Processing 6 images sequentially should be fine.\nKeep originals: The manifest stores both path (enhanced) and original so you can compare quality or fall back if Topaz fails on a specific image."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/psyduckler/itinerary-carousel-post-topaz",
    "publisherUrl": "https://clawhub.ai/psyduckler/itinerary-carousel-post-topaz",
    "owner": "psyduckler",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/itinerary-carousel-post-topaz",
    "downloadUrl": "https://openagent3.xyz/downloads/itinerary-carousel-post-topaz",
    "agentUrl": "https://openagent3.xyz/skills/itinerary-carousel-post-topaz/agent",
    "manifestUrl": "https://openagent3.xyz/skills/itinerary-carousel-post-topaz/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/itinerary-carousel-post-topaz/agent.md"
  }
}