Skip to content

openquok-tiktok-slideshow

Lightweight creator pipeline — research any channel, lock a character profile plus reference images, generate portrait slides, overlay text, and post via openquok-core.

5 min read

Connect your agent today

Draft from chat, review in your calendar, and publish only what you approve.

Start for $0

Overview

openquok-tiktok-slideshow is a sibling skill for any niche or channel persona — not an App Store product funnel. The loop is:

Research channel → lock character → generate frames → text overlay → post via openquok.

It requires openquok-core and the global openquok CLI. Uploads and create go through core recipes (media Rule 2, TikTok photo carousel, preferred private draft).

PropertyValue
Skill nameopenquok-tiktok-slideshow
Requiresopenquok-core, Node 18+, canvas (overlays), image provider key
Sourceagent/skills/openquok-tiktok-slideshow/
PlaybookViral TikTok Carousel

Install (Copy required)

Scripts must land as real files:

npx skills add https://github.com/Ratimon/openquok-monorepo/tree/main/agent --skill openquok-tiktok-slideshow --copy -y

Interactive installs: Project scope + Copy. Hermes: copy the full skill folder (a URL install of SKILL.md alone omits scripts/ and references/).

Prerequisites

NeedNotes
openquok-core + global CLIAuth, upload, posts:create — see CLI getting started
Node.js 18+All scripts under scripts/
canvasNative deps for add-text-overlay.js — see below
Image providerPrefer OpenAI gpt-image-1.5 (not gpt-image-1); or Stability / Replicate / local images
TikTok (or other) integrationConnected in the workspace; UUID from openquok integrations:list
New or cold TikTok accountWarm up 7–14 days before heavy posting — warm-up guide
openquok --version
openquok auth:status

Install canvas (overlays)

From the skill install directory (or any Node project that can require(‘canvas’) for the overlay script):

npm install canvas
canvas needs platform-native libraries. Follow the upstream install guide for your OS: node-canvas compiling.

Pipeline

Account warmup (optional)

New or cold accounts: use the warm-up guide (device region, VPN consistency, normal browsing, first posts) before the generate → post pipeline below.

Channel intent

Define niche, audience pain, handle ideas, and platforms (TikTok and/or others). This is a creator/channel workspace — not an App Store or mobile-app profile.

Research any channel

Find peer accounts in the niche: hooks, formats, sounds, gaps. Save with scripts/competitor-research.jschannel-research.json. Guide in the skill: references/competitor-research.md.

Lock character

Fill character-profile.json from the neutral template (character-profile.template.json):

  • LOCKED — identity, face (including distinctive marks), body, signature accessory, conflict rule — immutable after approval
  • VARIATIONS — outfit, pose, expression, setting, visual style, framing — safe to change per post

Generate and save face_lock / body_lock under refs/. Never change locks after approval. Details: references/character-lock.md. Six-slide formula: references/slide-structure.md.

OpenQuok channel

  1. Confirm auth (openquok auth:status)
  2. openquok integrations:list → store UUID(s) on openquok.integrationId
  3. Prefer a private draft: privacyLevel SELF_ONLY, contentPostingMethod DIRECT_POST so a human can add trending audio before going public — same pattern as TikTok CLI examples

Scaffold + run scripts

node scripts/onboarding.js --init --dir tiktok-marketing/
node scripts/onboarding.js --validate --config tiktok-marketing/config.json

Then generate → overlay → post (below). Iterate a test set of six frames until the look is locked — do not post until you are happy.

Config shape

Workspace data lives outside the skill folder (for example tiktok-marketing/):

{
  "channel": {
    "name": "",
    "handle": "",
    "niche": "",
    "audience": "",
    "painPoint": "",
    "platforms": ["tiktok"]
  },
  "character": {
    "profilePath": "tiktok-marketing/character-profile.json",
    "referenceImages": {
      "faceLock": "tiktok-marketing/refs/face-lock.png",
      "bodyLock": "tiktok-marketing/refs/body-lock.png"
    }
  },
  "imageGen": {
    "provider": "openai",
    "apiKey": "",
    "model": "gpt-image-1.5"
  },
  "openquok": {
    "integrationId": "",
    "status": "scheduled",
    "privacyLevel": "SELF_ONLY",
    "contentPostingMethod": "DIRECT_POST",
    "scheduledAt": null,
    "title": ""
  },
  "posting": { "schedule": ["07:30", "16:30", "21:00"] },
  "research": "tiktok-marketing/channel-research.json",
  "strategy": "tiktok-marketing/strategy.json"
}

Core scripts

Generate slideshow images

node scripts/generate-slides.js 
  --config tiktok-marketing/config.json 
  --output tiktok-marketing/posts/YYYY-MM-DD-HHmm/ 
  --prompts prompts.json

When character.profilePath is set, the script prepends the LOCKED block and merges VARIATIONS. OpenAI attaches face/body lock images when those files exist. Portrait 1024x1536; set exec timeout ≥ 600s for six gpt-image-1.5 images.

Add text overlays

node scripts/add-text-overlay.js 
  --input tiktok-marketing/posts/YYYY-MM-DD-HHmm/ 
  --texts texts.json

Requires canvas. Six-slide formula: Hook → Problem → Discovery → Transform ×2 → CTA. No emoji in overlay text.

Post via openquok

node scripts/post-via-openquok.js 
  --config tiktok-marketing/config.json 
  --dir tiktok-marketing/posts/YYYY-MM-DD-HHmm/ 
  --caption "…" 
  --title "Short title"

Under the hood: openquok upload each slide → openquok posts:create --json TikTok photo carousel. Default privacy is SELF_ONLY.

Optional analytics after publish (via core, not this skill):

openquok analytics:platform <integration-uuid> --days 7

Quick reference

ScriptPurpose
scripts/onboarding.js--init / --validate workspace
scripts/competitor-research.jsChannel research JSON helpers
scripts/generate-slides.jsSix portrait frames from locked profile
scripts/add-text-overlay.jsCanvas text overlays
scripts/post-via-openquok.jsUpload + TikTok carousel create

Common mistakes

MistakeFix
Landscape 1536×1024Portrait 1024×1536
Symlink skill installReinstall with --copy
Raw local paths in posts:createAlways openquok upload first (core Rule 2)
Public direct post with no soundPrefer SELF_ONLY draft → add trending audio in-app
gpt-image-1Switch to gpt-image-1.5
Skipping warmup on a new accountWarm 7–14 days first — warm-up guide
Changing face/body after lockKeep LOCKED + ref images fixed; only edit VARIATIONS
Search documentation
Find a docs page
Discord Support