itinerary-carousel-post
Create and publish an Instagram carousel post from a tabiji.ai itinerary. Given an itinerary URL, finds Instagram-worthy photos for the destination + top attractions, applies text overlays, and publishes as a carousel. Use when asked to create an Instagram post, carousel, or social content for a tabiji destination or itinerary.
Install via CLI (Recommended)
clawhub install openclaw/skills/skills/psyduckler/itinerary-carousel-postCreate Instagram Carousel Post
End-to-end pipeline: itinerary URL → photo sourcing → text overlays → Instagram carousel publish.
Parameters
- itinerary_url (required): tabiji.ai itinerary URL (e.g.
https://tabiji.ai/i/thaw-dome/) - destination (required): City/region name (e.g. "Kuala Lumpur")
- attractions (required): List of 5 attraction names + short descriptions
- caption (optional): Custom caption. If omitted, generate one with destination name, attraction list, CTA to link in bio, and relevant hashtags.
Pipeline (3 chained sub-agents recommended)
Split into 3 sub-agents for reliability. Each writes outputs to /tmp/ig-carousel/.
Sub-agent 1: Photo Finding
Use the instagram-photo-find skill workflow for each subject (1 destination + 5 attractions = 6 total).
For each subject:
web_search:site:instagram.com/p/ "{subject}" photo(10 results)- Download top 5 candidates:
curl -s -L -o /tmp/ig-carousel/raw-{slug}-{n}.jpg "https://www.instagram.com/p/{shortcode}/media/?size=l" - Vision-score each with: "Rate 1-10 as hero destination photo for {subject}. Description + score only."
- Keep best per subject →
/tmp/ig-carousel/{slug}-best.jpg
Output: 6 best images + JSON manifest at /tmp/ig-carousel/manifest.json:
[{"slug": "kuala-lumpur", "subject": "Kuala Lumpur", "score": 7, "path": "/tmp/ig-carousel/kuala-lumpur-best.jpg", "source": "instagram.com/p/XXX/"}]
Sub-agent 2: Text Overlays
Read manifest from sub-agent 1. Run overlay script for each image.
Slide 1 (cover) — clean style:
python3 skills/instagram-photo-text-overlay/scripts/overlay.py \
--input /tmp/ig-carousel/{dest-slug}-best.jpg \
--output /tmp/ig-carousel/slide-1.jpg \
--title "{N} Day {DESTINATION} Itinerary Highlights" \
--style clean --watermark "tabiji.ai"
Slides 2–6 — quote style per attraction with insider tip:
python3 skills/instagram-photo-text-overlay/scripts/overlay.py \
--input /tmp/ig-carousel/{slug}-best.jpg \
--output /tmp/ig-carousel/slide-{N}.jpg \
--title "{ATTRACTION}" \
--quote "{Specific insider tip about THIS attraction — must directly reference the place in the title, not a generic travel tip}" \
--author "tabiji.ai" \
--style quote --watermark "tabiji.ai"
Output: 6 overlay images at /tmp/ig-carousel/slide-{1-6}.jpg
Sub-agent 3: Publish to Instagram
-
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. -
Create carousel item containers (one per slide):
curl -s -X POST "https://graph.facebook.com/v21.0/${IG_USER}/media" \
-d "image_url=${PUBLIC_URL}" \
-d "is_carousel_item=true" \
-d "access_token=${IG_TOKEN}"
Metadata
Not sure this is the right skill?
Describe what you want to build — we'll match you to the best skill from 16,000+ options.
Find the right skillPaste this into your clawhub.json to enable this plugin.
{
"plugins": {
"official-psyduckler-itinerary-carousel-post": {
"enabled": true,
"auto_update": true
}
}
}Related Skills
aeo-content-free
Create or refresh AEO-optimized content that gets cited by AI assistants (Gemini, ChatGPT, Perplexity) using only free tools. Two modes: CREATE new content targeting a specific prompt, or REFRESH existing content to improve AI citation-worthiness. Researches what AI models currently cite, builds a competitive brief, and produces citation-worthy content. Use when a user wants to: write content optimized for AI citations, create articles that show up in AI answers, refresh/update existing content for better AI visibility, build authority content for answer engines, or produce AEO content without paid tools. No API keys required — uses web_fetch, web_search (free tier), and LLM reasoning only. Pairs with aeo-prompt-research-free (which identifies WHAT to write about; this skill handles HOW to write or refresh it).
lead-scorer
Score leads 0-100 by analyzing a domain's website, DNS, sitemap, and social presence. Uses customizable JSON scoring profiles so users can define what signals matter for their brand. Use when qualifying leads, prioritizing outreach lists, or evaluating potential partners. Supports single domains, multiple domains, and CSV batch mode.
reddit-quote-topaz
Create an Instagram carousel from a popular-picks list with Reddit quotes + Topaz 2x upscaling. Cover = "clean" style ("Top CATEGORY in Destination"), attraction slides = "quote" style with Reddit quotes + subreddit attribution. All photos Topaz-enhanced before overlay. Trigger phrase "reddit-quote-topaz". Use when Bernard says "reddit-quote-topaz" or wants a Topaz-enhanced Reddit-quote carousel.
instagram-photo-text-overlay
Overlay text on photos for Instagram posts. Generates portrait (4:5) images with gradient overlays, titles, and optional numbered lists. Use when creating Instagram content that needs text on top of a photo — destination itineraries, top-5 lists, travel highlights, or any branded social image with text overlay.
email-verifier
Verify email address deliverability via SMTP without sending mail. Checks MX records, performs RCPT TO verification, and detects catch-all domains. Use when validating email lists, checking if an email address exists before sending, cleaning lead lists, or verifying contact information. Supports single emails, batch verification, and CSV input.