OpenClaw AI agent skill for automated TikTok and Instagram carousel growth. Analyzes any website URL to extract brand, competitors, value proposition, then g...
Analyze any website and generate a 6-slide carousel for TikTok/Instagram with visual coherence. Posts directly to your feed (no drafts) with auto trending music. Both APIs (Gemini + upload-post.com) have free plans — no credit card needed to start.
The key to growth is consistency + learning. This skill is designed to run every day, fully autonomous. The agent executes the entire pipeline without asking for confirmation — from research to publishing — and only notifies you at the end with the published TikTok and Instagram URLs.
Day 1: Post → Analyze → Learn
Day 2: Post (improved) → Analyze → Learn
Day 3: Post (better) → Analyze → Learn
...
Day 30: You have 30 data points and a refined strategy
The skill maintains a learnings.json that accumulates insights across all posts:
This is not a one-shot tool. It's a growth engine.
If your TikTok or Instagram accounts are brand new, don't post carousels on day one. Both platforms throttle reach on fresh accounts that jump straight into publishing content.
Platforms flag accounts that go from zero activity to automated posting. A warmed-up account gets 5-10x more initial reach than a cold one. This step is boring but it's the difference between 500 views and 50,000 views on your first carousel.
If your accounts are already active and established, skip this and go straight to Quick Start.
The agent should run the full pipeline automatically. Do not ask for confirmation between steps.
# 0. FIRST: Check analytics from previous posts + learn
# (Skip this only on the very first run when there are no posts yet)
UPLOADPOST_TOKEN="your-token" bash {baseDir}/scripts/check-analytics.sh 7
node {baseDir}/scripts/learn-from-analytics.js
# 1. Full business research
node {baseDir}/scripts/analyze-web.js https://your-website.com
# 2. Read learnings.json and use best hooks/times/styles for this carousel
# → Pick a hook style from bestHooks (or try a variation)
# → Use recommended posting time
# → Apply any insights from recommendations
# 3. Generate slides with visual coherence
GEMINI_API_KEY="your-key" bash {baseDir}/scripts/generate-slides.sh
# 4. Review slides with vision → auto-fix any broken ones
# Agent uses its image-to-text model to verify each slide
# If any slide has issues (cut text, bad quality, wrong spelling):
# → Regenerate ONLY that slide automatically
# → Re-verify until all 6 slides pass
# 5. Publish to TikTok + Instagram
UPLOADPOST_TOKEN="your-token" bash {baseDir}/scripts/publish-carousel.sh
The agent only notifies the user at the very end, with the published TikTok and Instagram post URLs. Everything else runs autonomously.
The learnings.json file grows smarter with every post. Before generating slides, the agent reads it and applies:
This means carousel #30 will have dramatically better prompts than carousel #1.
Agent Execution Schedule: The agent shouldn't just run at a random time. It should read learnings.json, look at the bestTimes array, and automatically adjust its own cron/automation schedule so that tomorrow's execution happens right at the optimal publishing time.
First runs (no data yet): The first few times there won't be analytics data — that's fine. The agent uses the default hooks from analyze-web.js and the generic recommendations. After 5-10 posts, learnings.json will have enough data to start making meaningful recommendations. The more you post, the smarter it gets.
Uses gemini-3.1-flash-image-preview to generate slides.
{baseDir}/scripts/generate_image.pyanalyze-web.js)Performs COMPLETE business investigation:
Output: /tmp/carousel/analysis.json
generate-slides.sh)Generates 6 slides with visual coherence using image-to-image:
| Slide | Type | Content |
|---|---|---|
| 1 | HOOK | Question/problem that hooks. Establishes ALL visual style. |
| 2 | Problem | Agitate the pain. "You upload to TikTok... then Instagram..." |
| 3 | Agitation | Competition advancing. Urgency. |
| 4 | Solution | Present the product with its value proposition. |
| 5 | Feature | Main benefit. |
| 6 | CTA | "Link in bio 👆" + call to action. |
Each slide has:
Output:
/tmp/carousel/slide-{1-6}.jpg/tmp/carousel/caption.txtAfter generating, the agent MUST review each slide using its vision/image-to-text model. This step is fully automatic — do not ask the user to review.
For each slide, verify:
If any slide fails: Regenerate ONLY that specific slide automatically. Use the same input image that was used when originally generating it:
slide-1.jpg as --input-image (the original reference)Re-verify after regenerating. Repeat until all 6 slides pass. Do not ask the user — fix it automatically.
publish-carousel.sh)Publishes the carousel directly to the TikTok and Instagram feed using Upload-Post API.
UPLOADPOST_TOKEN="your-token" bash {baseDir}/scripts/publish-carousel.sh
Endpoint: POST /api/upload_photos
Parameters sent:
platform[]=tiktok + platform[]=instagramauto_add_music=true - Adds music on TikTok automaticallytiktok_title - Short title (max 90 chars) + hashtagstitle - Full caption for Instagramprivacy_level=PUBLIC_TO_EVERYONEmedia_type=IMAGE - Photo carousel on Instagramasync_upload=true - Process in backgroundphotos[] - The 6 slides JPG⚠️ IMPORTANT Instagram: After publishing, user must go to Instagram and add viral music manually:
Output: Saves request_id in post-info.json for tracking.
check-analytics.sh)Gets TikTok and Instagram analytics to see what works.
UPLOADPOST_TOKEN="your-token" bash {baseDir}/scripts/check-analytics.sh 7
Endpoints used:
Profile analytics:
GET /api/analytics/{user}?platforms=tiktok
→ Followers, likes, comments, shares, impressions
Total impressions:
GET /api/uploadposts/total-impressions/{user}?platform=tiktok&breakdown=true
→ Total views per day
Per-post analytics:
GET /api/uploadposts/post-analytics/{request_id}
→ Views, likes, comments for the specific carousel (TikTok + Instagram)
Docs: https://docs.upload-post.com/api/get-analytics
learn-from-analytics.js)Analyzes data and saves learnings for future carousels. This must run at the START of every daily loop, not just at the end.
node {baseDir}/scripts/learn-from-analytics.js
Generates/updates:
learnings.json - Accumulated knowledge baseThe agent must read learnings.json before generating each new carousel and use the insights to pick better hooks, avoid underperforming styles, and schedule at optimal times.
This is the exact sequence the agent runs every day, fully autonomous:
# STEP 0: Learn from previous posts (skip on first run)
UPLOADPOST_TOKEN="..." UPLOADPOST_USER="myuser" bash {baseDir}/scripts/check-analytics.sh 7
node {baseDir}/scripts/learn-from-analytics.js
# → Agent reads learnings.json and picks the best hook style
# → CRITICAL: Agent checks bestTimes and schedules ITS OWN NEXT EXECUTION for that exact hour tomorrow
# STEP 1: Research business
node {baseDir}/scripts/analyze-web.js https://my-product.com
# STEP 2: Generate slides (using insights from learnings)
GEMINI_API_KEY="..." bash {baseDir}/scripts/generate-slides.sh
# STEP 3: Review with vision → auto-fix broken slides
# Agent checks each slide, regenerates any that fail
# STEP 4: Publish
UPLOADPOST_TOKEN="..." UPLOADPOST_USER="myuser" bash {baseDir}/scripts/publish-carousel.sh
# → Notify user ONLY here, with TikTok + Instagram URLs
{baseDir}/
├── SKILL.md # This documentation
└── scripts/
├── analyze-web.js # Full business research
├── generate-slides.sh # Generate 6 slides with coherence
├── generate_image.py # Gemini 3.1 flash image
├── review-slides.js # Prepare slides for review
├── publish-carousel.sh # Publish via Upload-Post API
├── check-analytics.sh # Get analytics (TikTok + Instagram)
├── learn-from-analytics.js # Learn from data
└── search-competitors.js # Optional external search
| Variable | Description |
|---|---|
GEMINI_API_KEY | Google API key for image generation |
UPLOADPOST_TOKEN | Upload-Post token for publishing and analytics |
UPLOADPOST_USER | Upload-Post username (required) |
| Niche | Hook Example |
|---|---|
| Social Media Tools | "Still posting to social media ONE BY ONE? 😩" |
| SaaS General | "Still doing this MANUALLY?" |
| Ecommerce | "The product TikTok won't stop recommending" |
| App | "The app I wish I'd discovered sooner" |
| Developer Tools | "The API that's going to change your code" |
| Viraloop | Other skills | |
|---|---|---|
| Publishing | Direct to feed | Drafts only |
| Music | Auto trending music | Manual |
| Platforms | TikTok + Instagram | Single platform |
| Research | Auto URL analysis | Manual description |
| Image coherence | Image-to-image reference | Independent slides |
| Image gen | Gemini (free tier) | Paid providers |
| Posting | upload-post.com (free, no CC) | Paid or self-hosted |
| Text overlay | AI-native (Gemini renders) | External scripts |
| Prompts | Structured templates | Free-form |
| Setup | 3 env vars | Complex multi-tool setup |
auto_add_music on TikTok improves engagementZIP package — ready to use