🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

TikTok Content Pipeline

by @matttandy855

Automates TikTok carousel content creation, smart scheduling, publishing via Postiz API, and analytics-driven optimization for niche accounts.

Versionv1.0.4
Downloads884
Installs1
TERMINAL
clawhub install tiktok-content-pipeline

πŸ“– About This Skill

TikTok Content Pipeline β€” OpenClaw Skill

Automated TikTok carousel content generation, publishing, scheduling, and analytics-driven optimization for any niche.

Overview

This skill provides a complete content pipeline for TikTok accounts. It handles:

  • Content Generation β€” AI-generated carousel slides with hooks, CTAs, and keyword overlays
  • Smart Scheduling β€” Research-backed posting times with account-age-aware frequency
  • Publishing β€” Post to TikTok via Postiz API (supports drafts, scheduled posts, multi-platform)
  • Analytics & Optimization β€” Track performance, diagnose issues, auto-implement improvements
  • Required Credentials

    | Credential | Purpose | How to Obtain | |---|---|---| | Postiz API Key | Publishing & analytics via Postiz CLI | Sign up at postiz.com β†’ Settings β†’ API Keys | | TikTok Integration ID | Links your TikTok account to Postiz | Postiz dashboard β†’ Integrations β†’ Add TikTok |

    Credential Storage (Important)

    Recommended: Set POSTIZ_API_KEY as an environment variable (e.g. in ~/.zshrc or ~/.bashrc) rather than storing it in config files. The pipeline checks for this env var first.

    Alternative: Store in accounts//config.json under postiz.apiKey. If using this approach, ensure the file is not committed to version control (add to .gitignore).

    The Integration ID is account-specific and stored in per-account config.json.

    Security Notes

  • This skill executes the postiz CLI via shell commands. All arguments are escaped to prevent injection.
  • The skill writes files only within its own accounts/ and output/ directories.
  • auto-improve mode can modify account configs and auto-post β€” test on a throwback account first.
  • Run npm audit after installing dependencies to check for known vulnerabilities.
  • Quick Setup

    1. Set your Postiz API key: export POSTIZ_API_KEY="your-key-here" 2. Copy config.example.json to accounts//config.json 3. Fill in your TikTok integration ID 4. Create or adapt a template in templates/ for your niche 5. Run: node cli.js create --template

    See SETUP.md for the full setup guide.


    How to Use This Skill

    1. Create a New Account

    node cli.js create my-brand --template example-nostalgia
    

    This copies the template into accounts/my-brand/ and sets createdAt to now.

    2. Configure the Account

    Edit accounts/my-brand/config.json:

    {
      "account": { "name": "my-brand", "handle": "@mybrand", "niche": "your-niche", "createdAt": "2026-01-15T00:00:00Z" },
      "postiz": { "apiKey": "YOUR_KEY", "integrationId": "YOUR_TIKTOK_ID" },
      "posting": { "timezone": "Europe/London" }
    }
    

    Or use the CLI:

    node cli.js config my-brand --handle @mybrand --integration-id YOUR_ID --api-key YOUR_KEY
    

    3. Generate Content

    node cli.js generate my-brand --type showcase
    node cli.js generate my-brand --type showcase --post  # Generate and post as draft
    

    The generator uses the template's generator.js to create carousel slides, applies hooks from config, adds keyword overlays for TikTok SEO, and outputs to accounts/my-brand/output/.

    4. Check the Posting Schedule

    node cli.js schedule my-brand          # This week's schedule
    node cli.js schedule my-brand --next   # Next optimal posting slot
    

    The scheduler automatically adjusts frequency based on account age:

  • Days 0-24: Daily posting (building momentum)
  • Days 25-30: Taper from 7 β†’ 4 posts/week
  • Day 31+: 3-4 posts/week on optimal days
  • 5. Run Analytics

    node cli.js analytics my-brand --days 7
    node cli.js analytics my-brand --days 7 --auto-improve  # Auto-implement fixes
    


    Research-Backed Viral Mechanics

    These findings are baked into the framework's scheduling, optimization, and content scoring:

    Algorithm Priority Signals

    1. Watch time & completion rate β€” most critical signal. 80%+ completion = 5x reach. 2. First 3-second hook β€” determines whether content gets distributed at all. 3. Shares β€” strongest engagement signal for virality. 4. Saves β€” growing importance. 15%+ save-to-view = high-value content. 5. Comment engagement β€” quality conversations > generic comments.

    Posting Strategy

  • 3-4 posts/week is optimal for established accounts (NOT 3/day β€” that hurts reach)
  • Best days: Wednesday, Tuesday, Thursday
  • Best times: Tue 5pm, Wed 2-5pm, Thu 3-5pm
  • New accounts: Post daily for first 30 days to build momentum
  • Max 1 post/day for established accounts (2/day max for new accounts)
  • Carousel Advantages

  • 3x more saves than standard video
  • 40% longer dwell time when users engage
  • Lower production barrier β€” slides are easier to produce than video
  • 5-7 slides optimal for maintaining attention
  • First slide is everything β€” must hook immediately
  • Hook Patterns That Work

    | Type | Example | Avg Engagement | |------|---------|---------------| | Contradiction | "Everyone thinks X, but actually..." | 9%+ | | Challenge | "If you used X, you had no skill πŸ˜‚" | 11%+ | | Gatekeeping | "Only real ones remember..." | 8%+ | | POV | "POV: You just discovered..." | 7%+ | | Nostalgia | "Remember this? πŸ”₯" | 6%+ | | Question | "Would you do this? Yes or no πŸ‘‡" | 8%+ |

    Content Scoring

    The ViralOptimizer scores content before posting (0-100):
  • Hook quality (40% weight) β€” length, power words, emoji, question format
  • Structure (30% weight) β€” slide count, audio, format
  • Engagement potential (30% weight) β€” CTA presence, opinion-split, hashtag count
  • Verdicts:

  • 80+ = πŸ”₯ HIGH VIRAL POTENTIAL β€” Post immediately
  • 65+ = βœ… GOOD β€” Ready to post
  • 50+ = ⚠️ DECENT β€” Consider optimizing
  • 35+ = πŸ”§ NEEDS WORK β€” Apply suggestions
  • <35 = ❌ LOW POTENTIAL β€” Rethink approach

  • Diagnostic Matrix

    When analyzing post performance, use this matrix to decide what to fix:

    | Views | Engagement | Diagnosis | Action | |-------|-----------|-----------|--------| | High (>1000) | High (>5%) | SCALE | Create 3 variations of this content. Test same hook with different visuals. | | High (>1000) | Low (<3%) | FIX CTA | Hook is working β€” add stronger call-to-action. Add opinion-split or challenge. | | Low (<500) | High saves (>10%) | FIX HOOK | Content converts β€” needs better opening hook. Test trending audio. Stronger first-slide text. | | Low (<500) | Low (<3%) | FULL RESET | Try radically different format. Research top creators in niche. Test different posting time. |

    Key Thresholds

    | Metric | Target | Viral | Poor | |--------|--------|-------|------| | Completion rate | 80% | 90% | 40% | | Save-to-view ratio | 15% | 25% | 3% | | Share rate | 8% | 15% | 2% | | Comment rate | 5% | 10% | 1% | | Profile visit rate | 12% | 20% | 3% | | Follower conversion | 8% | 15% | 2% |


    Creating a Custom Template

    Templates define the content types, hooks, hashtags, and generation logic for a niche.

    Template Structure

    templates/your-niche/
    β”œβ”€β”€ config.json      # Content types, hooks, hashtags, settings
    β”œβ”€β”€ generator.js     # Content generation logic (extends ContentGenerator)
    └── README.md        # Template documentation
    

    config.json Required Fields

    {
      "account": { "template": "your-niche", "niche": "Your Niche" },
      "content": {
        "types": {
          "your-content-type": { "description": "...", "slides": 6 }
        },
        "hashtagSets": {
          "default": ["#yourniche", "#fyp"]
        }
      },
      "hooks": {
        "your-content-type": ["Hook text 1", "Hook with {placeholder} 2"]
      },
      "posting": { "timezone": "Europe/London" }
    }
    

    generator.js Pattern

    const ContentGenerator = require('../../core/ContentGenerator');

    class YourNicheGenerator extends ContentGenerator { getSupportedTypes() { return Object.keys(this.config.content.types); }

    async _generateContent(contentType, options, outputDir) { this._ensureOutputDir(outputDir); const hook = this.getSlide1Hook(contentType, options); // Generate slides using sharp/canvas/ImageMagick // Return { slides: [...paths], hook: hook.text, caption: '...' } } }

    module.exports = YourNicheGenerator;


    Architecture

    tiktok-content-pipeline/
    β”œβ”€β”€ cli.js                    # Universal CLI
    β”œβ”€β”€ core/
    β”‚   β”œβ”€β”€ ContentGenerator.js   # Abstract base for content generation
    β”‚   β”œβ”€β”€ Publisher.js          # Postiz API integration
    β”‚   β”œβ”€β”€ PostingScheduler.js   # Smart scheduling engine
    β”‚   β”œβ”€β”€ ViralOptimizer.js     # Content scoring & optimization
    β”‚   └── AnalyticsEngine.js    # Performance tracking & insights
    β”œβ”€β”€ accounts/                 # Per-account configs & output (created at runtime)
    └── templates/                # Niche templates
        └── example-nostalgia/    # Example template to fork
    

    Core Components

  • ContentGenerator β€” Abstract base class. Subclass it per niche. Handles hooks, question hooks, keyword overlays, placeholder replacement.
  • Publisher β€” Posts to TikTok (and other platforms) via Postiz CLI. Handles media upload, scheduling, draft mode, and post metadata saving.
  • PostingScheduler β€” Account-age-aware scheduling. Knows optimal days/times from research. Supports weekly schedule generation and overdue detection.
  • ViralOptimizer β€” Pre-post content scoring. Post-performance diagnostic matrix. Hook pattern library with engagement-weighted selection.
  • AnalyticsEngine β€” Pulls metrics from Postiz API. Generates reports with alerts, opportunities, and auto-implementable actions.