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.
Install via CLI (Recommended)
clawhub install openclaw/skills/skills/psyduckler/instagram-photo-text-overlayInstagram Photo Text Overlay
Overlay text onto photos for Instagram-ready images. Two styles: list (title + numbered items) and clean (title only).
Quick Start
python3 scripts/overlay.py \
--input photo.jpg \
--output result.jpg \
--title "TAORMINA" \
--subtitle "3-Day Trip Itinerary" \
--items '["Teatro Greco|Ancient theatre with Etna views", "Isola Bella|Crystal-clear beach"]' \
--style list
Options
| Flag | Default | Description |
|---|---|---|
--input | (required) | Source photo path |
--output | (required) | Output image path |
--title | (required) | Main title (auto-uppercased) |
--subtitle | "3-Day Trip Itinerary" | Subtitle below title |
--items | [] | JSON array of "Name|Reason" strings (list style) |
--watermark | "tabiji.ai" | Top-left watermark (empty string to disable) |
--accent | 255,220,150 | Accent color for numbers/tags (R,G,B) |
--quote | "" | Quote text (for quote style) |
--style | list | list / clean / quote |
--quality | 95 | JPEG output quality |
Styles
- clean: Cover slide. Big title = destination + category + count (e.g. "7 unique cheap eats in barcelona spain"). Subtitle = credibility/source line (e.g. "Insider takes from r/barcelona"). Best as carousel first slide.
- list: Content slides. Title + subtitle + divider + numbered items with reasons. Best for top-5 / itinerary posts.
- quote: Title with accent bar on the left + blockquote text below. No subtitle or divider. Best for travel quotes, testimonials, or key takeaways.
Workflow
- Receive photo + destination/topic + list of items from user
- Run
scripts/overlay.pywith appropriate args - Output is auto-cropped to 4:5 portrait (Instagram optimal)
- Review output and adjust if needed (font sizes scale with image width)
Requirements
- Python 3 + Pillow (
pip install Pillow) - Works on macOS (Helvetica) and Linux (DejaVu/Liberation fallback)
Tips
- Items format:
"Name|Short reason"— the pipe separates bold name from description - For destinations, pull top picks from existing itineraries when available
- Gradient + white text ensures readability on any photo
- All font sizes are proportional to image width — works at any resolution
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-instagram-photo-text-overlay": {
"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.
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.
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.