{
  "schemaVersion": "1.0",
  "item": {
    "slug": "tarot-content",
    "name": "Tarot Content",
    "source": "tencent",
    "type": "skill",
    "category": "内容创作",
    "sourceUrl": "https://clawhub.ai/alexyuui/tarot-content",
    "canonicalUrl": "https://clawhub.ai/alexyuui/tarot-content",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/tarot-content",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=tarot-content",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/tarot-cards.md",
      "scripts/ephemeris_helper.py"
    ],
    "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/tarot-content"
    },
    "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/tarot-content",
    "agentPageUrl": "https://openagent3.xyz/skills/tarot-content/agent",
    "manifestUrl": "https://openagent3.xyz/skills/tarot-content/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/tarot-content/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": "Tarot Content Generator",
        "body": "Create professional tarot × astrology content for social media at scale."
      },
      {
        "title": "Capabilities",
        "body": "Weekly 12-Sign Readings — Scripted horoscope videos with tarot card pulls\nEvent-Driven Specials — Content for major transits (retrogrades, eclipses, conjunctions)\nTarot Spreads — Custom spread designs with interpretation frameworks\nVideo Scripts — TTS-ready scripts with screen text cues\nCover Art — Pillow-generated thumbnails optimized for mobile\nContent Calendar — Automated scheduling based on astrological events"
      },
      {
        "title": "Weekly 12-Sign Reading",
        "body": "Generate a weekly tarot reading for all 12 signs.\nDate range: {start} to {end}\nStyle: conversational, no jargon\nFormat: video script with screen text cues\n\nThe agent will:\n\nPull real ephemeris data (planetary positions, aspects)\nMap transits to each sign's house system\nPull tarot cards (Challenge / Guidance / Blessing spread)\nWrite scripts in a natural, engaging voice"
      },
      {
        "title": "Event-Driven Special",
        "body": "Create a special video about {transit/event}.\nExample: Saturn conjunct Neptune in Aries\nInclude: what it means, historical context, 12-sign breakdown"
      },
      {
        "title": "The 3-Card Spread (Challenge / Guidance / Blessing)",
        "body": "A proven framework for weekly readings:\n\nPositionMeaningToneChallengeWhat to watch out forHonest, not scaryGuidanceWhat to focus onActionable adviceBlessingWhat's comingHopeful, encouraging"
      },
      {
        "title": "Script Structure (per sign, 60-90 seconds)",
        "body": "1. Opening hook (5s) — \"Hey {Sign}, this week is about...\"\n2. Transit context (10s) — What planets are doing in their house\n3. Card 1: Challenge (15s) — The obstacle + real-life scenario\n4. Card 2: Guidance (15s) — Practical advice\n5. Card 3: Blessing (10s) — The reward / positive outcome\n6. CTA (5s) — \"Follow for your sign's weekly reading\""
      },
      {
        "title": "Writing Style Guidelines",
        "body": "Say it like a friend, not a fortune teller — \"You might feel stuck\" not \"The cards reveal stagnation\"\nUse scenarios — \"That coworker drama? Time to set boundaries\" not \"Conflict in relationships\"\nNumbers in words — \"twenty twenty-six\" not \"2026\" (TTS-friendly)\nAvoid fear-mongering — Even tough cards get a constructive spin\nNo clichés — Ban \"the universe has a plan\", \"trust the process\", \"everything happens for a reason\""
      },
      {
        "title": "Using pyswisseph (recommended)",
        "body": "import swisseph as swe\nfrom datetime import datetime\n\ndef get_planet_position(planet_id, dt):\n    \"\"\"Get planet longitude in zodiac.\"\"\"\n    jd = swe.julday(dt.year, dt.month, dt.day, dt.hour + dt.minute/60)\n    pos = swe.calc_ut(jd, planet_id)[0]\n    longitude = pos[0]\n    sign_num = int(longitude / 30)\n    degree = longitude % 30\n    signs = ['Aries','Taurus','Gemini','Cancer','Leo','Virgo',\n             'Libra','Scorpio','Sagittarius','Capricorn','Aquarius','Pisces']\n    return signs[sign_num], degree\n\n# Planet IDs: SUN=0, MOON=1, MERCURY=2, VENUS=3, MARS=4,\n#             JUPITER=5, SATURN=6, URANUS=7, NEPTUNE=8, PLUTO=9"
      },
      {
        "title": "Install",
        "body": "pip install pyswisseph"
      },
      {
        "title": "Pillow-based covers (no AI text artifacts)",
        "body": "from PIL import Image, ImageDraw, ImageFont\nimport os\n\ndef generate_cover(sign, hook_text, date_range, colors, output_path):\n    \"\"\"Generate a 1080x1920 Shorts cover.\"\"\"\n    W, H = 1080, 1920\n    img = Image.new('RGB', (W, H))\n    draw = ImageDraw.Draw(img)\n\n    # Gradient background\n    for y in range(H):\n        r = int(colors[0][0] + (colors[1][0]-colors[0][0]) * y/H)\n        g = int(colors[0][1] + (colors[1][1]-colors[0][1]) * y/H)\n        b = int(colors[0][2] + (colors[1][2]-colors[0][2]) * y/H)\n        draw.line([(0,y),(W,y)], fill=(r,g,b))\n\n    # Load fonts (adjust paths for your system)\n    font_lg = ImageFont.truetype(\"/System/Library/Fonts/Helvetica.ttc\", 120)\n    font_md = ImageFont.truetype(\"/System/Library/Fonts/Helvetica.ttc\", 56)\n    font_sm = ImageFont.truetype(\"/System/Library/Fonts/Helvetica.ttc\", 40)\n\n    # Sign name (large, centered)\n    draw.text((W//2, H*0.35), sign.upper(), font=font_lg, fill='white', anchor='mm')\n\n    # Date range\n    draw.text((W//2, H*0.48), date_range, font=font_md, fill=(255,215,0), anchor='mm')\n\n    # Hook text\n    draw.text((W//2, H*0.62), hook_text, font=font_md, fill='white', anchor='mm')\n\n    # Brand\n    draw.text((W//2, H*0.78), \"WEEKLY TAROT\", font=font_sm, fill=(200,200,200), anchor='mm')\n\n    img.save(output_path, quality=95)\n\n# Color schemes per sign\nSIGN_COLORS = {\n    'aries':       [(220,50,30),  (120,20,60)],\n    'taurus':      [(30,120,50),  (15,60,30)],\n    'gemini':      [(230,200,40), (180,120,20)],\n    'cancer':      [(150,180,220),(60,80,140)],\n    'leo':         [(240,170,30), (200,100,10)],\n    'virgo':       [(80,140,80),  (40,80,50)],\n    'libra':       [(200,160,200),(120,80,150)],\n    'scorpio':     [(140,20,40),  (60,10,40)],\n    'sagittarius': [(160,80,180), (100,40,120)],\n    'capricorn':   [(80,60,50),   (30,25,20)],\n    'aquarius':    [(40,100,220), (20,50,140)],\n    'pisces':      [(160,130,200),(80,60,130)],\n}"
      },
      {
        "title": "Cover Rules",
        "body": "⚠️ Never use Unicode zodiac symbols (♈♉ etc.) — most fonts render them as ☒\nUse English sign names in large text instead\nText must be readable at thumbnail size (phone screen)\nKeep important elements away from bottom 15% (YouTube UI overlay)"
      },
      {
        "title": "Weekly Cycle",
        "body": "DayContentPlatformMon12 sign readings (video)YouTube Shorts, TikTokWedMid-week energy checkInstagram ReelFriWeekend tarot pullTikTok, Shorts"
      },
      {
        "title": "Event-Driven (auto-detect from ephemeris)",
        "body": "Mercury Retrograde → \"Survival guide\" series\nFull/New Moon → Moon ritual + tarot spread\nEclipse season → \"Eclipse portal\" specials\nMajor conjunctions → Deep-dive explainer + 12-sign impact"
      },
      {
        "title": "Sensitive Content Notes",
        "body": "Platform content policies vary. Avoid:\n\nHealth/medical claims (\"this card says you'll recover\")\nFinancial advice (\"invest now, Jupiter says so\")\nFear-inducing predictions (\"danger ahead\", \"death card means...\")\nAlways frame readings as reflection tools, not predictions"
      }
    ],
    "body": "Tarot Content Generator\n\nCreate professional tarot × astrology content for social media at scale.\n\nCapabilities\nWeekly 12-Sign Readings — Scripted horoscope videos with tarot card pulls\nEvent-Driven Specials — Content for major transits (retrogrades, eclipses, conjunctions)\nTarot Spreads — Custom spread designs with interpretation frameworks\nVideo Scripts — TTS-ready scripts with screen text cues\nCover Art — Pillow-generated thumbnails optimized for mobile\nContent Calendar — Automated scheduling based on astrological events\nQuick Start\nWeekly 12-Sign Reading\nGenerate a weekly tarot reading for all 12 signs.\nDate range: {start} to {end}\nStyle: conversational, no jargon\nFormat: video script with screen text cues\n\n\nThe agent will:\n\nPull real ephemeris data (planetary positions, aspects)\nMap transits to each sign's house system\nPull tarot cards (Challenge / Guidance / Blessing spread)\nWrite scripts in a natural, engaging voice\nEvent-Driven Special\nCreate a special video about {transit/event}.\nExample: Saturn conjunct Neptune in Aries\nInclude: what it means, historical context, 12-sign breakdown\n\nContent Framework\nThe 3-Card Spread (Challenge / Guidance / Blessing)\n\nA proven framework for weekly readings:\n\nPosition\tMeaning\tTone\nChallenge\tWhat to watch out for\tHonest, not scary\nGuidance\tWhat to focus on\tActionable advice\nBlessing\tWhat's coming\tHopeful, encouraging\nScript Structure (per sign, 60-90 seconds)\n1. Opening hook (5s) — \"Hey {Sign}, this week is about...\"\n2. Transit context (10s) — What planets are doing in their house\n3. Card 1: Challenge (15s) — The obstacle + real-life scenario\n4. Card 2: Guidance (15s) — Practical advice\n5. Card 3: Blessing (10s) — The reward / positive outcome\n6. CTA (5s) — \"Follow for your sign's weekly reading\"\n\nWriting Style Guidelines\nSay it like a friend, not a fortune teller — \"You might feel stuck\" not \"The cards reveal stagnation\"\nUse scenarios — \"That coworker drama? Time to set boundaries\" not \"Conflict in relationships\"\nNumbers in words — \"twenty twenty-six\" not \"2026\" (TTS-friendly)\nAvoid fear-mongering — Even tough cards get a constructive spin\nNo clichés — Ban \"the universe has a plan\", \"trust the process\", \"everything happens for a reason\"\nEphemeris Data\nUsing pyswisseph (recommended)\nimport swisseph as swe\nfrom datetime import datetime\n\ndef get_planet_position(planet_id, dt):\n    \"\"\"Get planet longitude in zodiac.\"\"\"\n    jd = swe.julday(dt.year, dt.month, dt.day, dt.hour + dt.minute/60)\n    pos = swe.calc_ut(jd, planet_id)[0]\n    longitude = pos[0]\n    sign_num = int(longitude / 30)\n    degree = longitude % 30\n    signs = ['Aries','Taurus','Gemini','Cancer','Leo','Virgo',\n             'Libra','Scorpio','Sagittarius','Capricorn','Aquarius','Pisces']\n    return signs[sign_num], degree\n\n# Planet IDs: SUN=0, MOON=1, MERCURY=2, VENUS=3, MARS=4,\n#             JUPITER=5, SATURN=6, URANUS=7, NEPTUNE=8, PLUTO=9\n\nInstall\npip install pyswisseph\n\nCover Art Generation\nPillow-based covers (no AI text artifacts)\nfrom PIL import Image, ImageDraw, ImageFont\nimport os\n\ndef generate_cover(sign, hook_text, date_range, colors, output_path):\n    \"\"\"Generate a 1080x1920 Shorts cover.\"\"\"\n    W, H = 1080, 1920\n    img = Image.new('RGB', (W, H))\n    draw = ImageDraw.Draw(img)\n\n    # Gradient background\n    for y in range(H):\n        r = int(colors[0][0] + (colors[1][0]-colors[0][0]) * y/H)\n        g = int(colors[0][1] + (colors[1][1]-colors[0][1]) * y/H)\n        b = int(colors[0][2] + (colors[1][2]-colors[0][2]) * y/H)\n        draw.line([(0,y),(W,y)], fill=(r,g,b))\n\n    # Load fonts (adjust paths for your system)\n    font_lg = ImageFont.truetype(\"/System/Library/Fonts/Helvetica.ttc\", 120)\n    font_md = ImageFont.truetype(\"/System/Library/Fonts/Helvetica.ttc\", 56)\n    font_sm = ImageFont.truetype(\"/System/Library/Fonts/Helvetica.ttc\", 40)\n\n    # Sign name (large, centered)\n    draw.text((W//2, H*0.35), sign.upper(), font=font_lg, fill='white', anchor='mm')\n\n    # Date range\n    draw.text((W//2, H*0.48), date_range, font=font_md, fill=(255,215,0), anchor='mm')\n\n    # Hook text\n    draw.text((W//2, H*0.62), hook_text, font=font_md, fill='white', anchor='mm')\n\n    # Brand\n    draw.text((W//2, H*0.78), \"WEEKLY TAROT\", font=font_sm, fill=(200,200,200), anchor='mm')\n\n    img.save(output_path, quality=95)\n\n# Color schemes per sign\nSIGN_COLORS = {\n    'aries':       [(220,50,30),  (120,20,60)],\n    'taurus':      [(30,120,50),  (15,60,30)],\n    'gemini':      [(230,200,40), (180,120,20)],\n    'cancer':      [(150,180,220),(60,80,140)],\n    'leo':         [(240,170,30), (200,100,10)],\n    'virgo':       [(80,140,80),  (40,80,50)],\n    'libra':       [(200,160,200),(120,80,150)],\n    'scorpio':     [(140,20,40),  (60,10,40)],\n    'sagittarius': [(160,80,180), (100,40,120)],\n    'capricorn':   [(80,60,50),   (30,25,20)],\n    'aquarius':    [(40,100,220), (20,50,140)],\n    'pisces':      [(160,130,200),(80,60,130)],\n}\n\nCover Rules\n⚠️ Never use Unicode zodiac symbols (♈♉ etc.) — most fonts render them as ☒\nUse English sign names in large text instead\nText must be readable at thumbnail size (phone screen)\nKeep important elements away from bottom 15% (YouTube UI overlay)\nContent Calendar\nWeekly Cycle\nDay\tContent\tPlatform\nMon\t12 sign readings (video)\tYouTube Shorts, TikTok\nWed\tMid-week energy check\tInstagram Reel\nFri\tWeekend tarot pull\tTikTok, Shorts\nEvent-Driven (auto-detect from ephemeris)\nMercury Retrograde → \"Survival guide\" series\nFull/New Moon → Moon ritual + tarot spread\nEclipse season → \"Eclipse portal\" specials\nMajor conjunctions → Deep-dive explainer + 12-sign impact\nSensitive Content Notes\n\nPlatform content policies vary. Avoid:\n\nHealth/medical claims (\"this card says you'll recover\")\nFinancial advice (\"invest now, Jupiter says so\")\nFear-inducing predictions (\"danger ahead\", \"death card means...\")\nAlways frame readings as reflection tools, not predictions"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/alexyuui/tarot-content",
    "publisherUrl": "https://clawhub.ai/alexyuui/tarot-content",
    "owner": "alexyuui",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/tarot-content",
    "downloadUrl": "https://openagent3.xyz/downloads/tarot-content",
    "agentUrl": "https://openagent3.xyz/skills/tarot-content/agent",
    "manifestUrl": "https://openagent3.xyz/skills/tarot-content/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/tarot-content/agent.md"
  }
}