How to Automate TikTok Slideshow Content Creation with Claude Opus 4.7 (Step-by-Step Playbook)
Most e-commerce brands are running TikTok the wrong way. They hire an influencer for a flat fee, cross their fingers, and watch the post die in 48 hours. They run Meta ads at $6 CPM and wonder why their CAC is through the roof. They treat content like a transaction instead of a system.
There is a different approach β one that compounds rather than decays, scales without proportionally scaling your budget, and consistently produces content that doesn't look like marketing because it isn't marketing. It's distribution disguised as content.
That approach is TikTok slideshows. And most brands still aren't taking them seriously β which is exactly why they work.
This is the full strategy, step by step. By the end, you'll have a clear picture of how to find a format, build the creative, post it at scale, and turn it into a repeatable system that drives real revenue.
β¦
THE FULL PIPELINE
What You're Building
Before diving in, here's what the complete workflow looks like end-to-end. Each step feeds the next:
[TikTok Scroll] β find viral formats in your niche
β
[SnapTik Download] β save the slideshows for analysis
β
[Claude β Hook Extraction] β reverse-engineer what made it work + generate variations
β
[Pinterest] β source images at zero cost
β
[Node.js Canvas Script] β generate all PNG slides programmatically
β
[Postiz Agent CLI] β schedule as drafts
β
[TikTok App] β open draft at peak time, tap Post manually
Stack cost: ~$0/month. Once set up, 30 posts/week in under 2 hours.
β¦
PART ONE
Why Slideshows Beat Every Other Format Right Now
TikTok is actively pushing slideshow content harder than most video formats β it's a platform incentive. They want creators using the format, so the algorithm rewards it. But the behavioral reason matters more: the swipe mechanic keeps viewers inside your content instead of passively watching it. Someone swiping through six slides is not scrolling past you. They're moving through your product story at their own pace.
That shift in control changes how they receive your product. It stops feeling like an ad. It feels like stumbling onto something useful.
Beyond the algorithm advantage, slideshows are dramatically cheaper and faster to produce than video. No shooting, no editing timeline, no voiceover. Just images and text. That means you can post at a volume that's completely unrealistic with video β and volume is what the algorithm rewards above almost everything else.
One more thing that most founders miss: you don't need to generate images with AI at all. Pinterest is an endless, free library of high-quality images across every aesthetic imaginable. It's the sourcing method almost nobody is talking about, and it completely removes the image generation bottleneck.
β¦
PART TWO
Step 1 β Find What's Already Working
Don't try to invent a format. The algorithm has already told you what your audience wants to watch. Your job is to find it.
Open TikTok. Search keywords in your niche β the problem your product solves, the lifestyle adjacent to your customer, the product category. Filter by Most Liked or Most Recent. Look specifically for slideshows. When you find something performing well, favorite it. This trains your For You page to show you more of the same. Within a few days your entire feed becomes a curated research feed in your niche.
A format is worth replicating when it passes all four of these:
When you find one that passes, download it. Use SnapTik or SSSTik β paste the TikTok link, download the version without a watermark, save locally. You'll use it in the next step.
β¦
PART THREE
Step 2 β Extract the Hook With Claude
This is the step most people skip. Instead of guessing what made a slideshow work, you reverse-engineer it using Claude β feeding in the actual content and asking it to break down the structure.
Upload the downloaded slideshow images directly to Claude and run this prompt:
PROMPT
Analyze this TikTok slideshow and:
1. Identify the main hook used in the first slide
(text overlay, headline, visual framing)
2. Explain why this hook works
(curiosity / pain point / surprise / relatability)
3. Break down the hook structure
(number + outcome, negative framing, identity targeting, etc.)
4. Write 5 similar hook variations for the niche [YOUR NICHE]
- Each hook under 10 words
- Format: a question OR a strong statement
- Avoid openers like "Did you know"
Output as a numbered list, one hook per line.
If you only have the text from the slides (no images), use this version instead:
PROMPT (TEXT ONLY)
Here is the content of a viral TikTok slideshow in the niche [NICHE]:
[PASTE CONTENT HERE]
- Identify the core hook from the first slide
- Write 7 hook variations for a similar slideshow
- Each hook must trigger one of 3 emotions:
curiosity / FOMO / empathy
- Max 8 words per hook
- Include a short explanation of why each hook works
Save every output. Build a hook library in Notion or Google Sheets. Over time you'll accumulate a database of proven angles β and creative ideation gets faster every cycle.
Also Pull Your Pinterest Search Terms
While you still have the slideshow in Claude, run this bonus prompt to get your image sourcing terms for Step 3:
PROMPT
Based on this slideshow:
1. Describe the color palette, lighting, and overall aesthetic
(dark/moody, bright/clean, luxury, minimal, etc.)
2. What kind of images would work as slideshow backgrounds
for the hooks you just wrote?
3. Give me 5 specific Pinterest search queries to find those images
- Format: short keyword phrases, 2-4 words each
- Optimized for Pinterest search, not Google
Copy these directly into Pinterest in the next step. No guessing what to look for.
β¦
PART FOUR
Step 3 β Source Images From Pinterest (Cost: $0)
This is the sourcing method almost no one uses, and it's the biggest unlock in the whole pipeline. Pinterest has millions of high-quality, aesthetically curated images across every niche and visual style imaginable. No AI generation required. No licensing headaches for organic social use. Just search and save.
What to Look For
Use the exact Pinterest search queries Claude generated for you. Paste them directly. When evaluating images, you're looking for:
How to Download
For manual sourcing: install the PinDown Chrome extension, or click the image to full size, right-click, open in new tab, then save. For batch downloading, use this simple Python script:
PYTHON β PINTEREST_DOWNLOADER.PY
import requests
from pathlib import Path
def download_image(url, filename, folder="pinterest_images"):
Path(folder).mkdir(exist_ok=True)
r = requests.get(url, stream=True)
if r.status_code == 200:
with open(f"{folder}/{filename}.jpg", "wb") as f:
for chunk in r.iter_content(1024):
f.write(chunk)
# Paste your Pinterest image URLs here
urls = [
"https://i.pinimg.com/originals/...",
"https://i.pinimg.com/originals/...",
]
for i, url in enumerate(urls):
download_image(url, f"image_{i+1:03d}")
Organize your images by niche folder: pinterest_images/finance/, pinterest_images/fitness/, etc. This keeps the generation script clean.
β¦
PART FIVE
Step 4 β Generate the Slides Programmatically
This is where the pipeline becomes genuinely scalable. Instead of designing in Canva slide by slide, you define your content in a config file and a Node.js script generates all your 1080Γ1920 PNG slides automatically. Change the config, re-run the script, get new slides. No design software open.
Setup
TERMINAL
mkdir tiktok-slide-gen && cd tiktok-slide-gen
npm init -y
npm install @napi-rs/canvas sharp
The Slide Config
Drive all your content from a JSON file so your team can update hooks and images without touching code:
SLIDES-CONFIG.JSON
[
{
"imagePath": "./pinterest_images/finance/image_001.jpg",
"lines": [
{ "text": "I saved $5k in 6 months", "size": 88, "weight": "bold", "y": 860 },
{ "text": "doing this one thing", "size": 72, "weight": "normal", "y": 970 }
]
},
{
"imagePath": "./pinterest_images/finance/image_002.jpg",
"lines": [
{ "text": "Most people spend before they save.", "size": 64, "weight": "bold", "y": 880 },
{ "text": "Here's why that's a trap.", "size": 56, "weight": "normal", "y": 970 }
]
},
{
"imagePath": "./pinterest_images/finance/image_006.jpg",
"lines": [
{ "text": "Save this post π", "size": 80, "weight": "bold", "y": 860 },
{ "text": "Follow for more tips every week", "size": 52, "weight": "normal", "y": 970 }
]
}
]
Structure every slideshow the same way: Hook β Problem/Setup β Points 1-3 β CTA. Six slides, every time.
The Generation Script
GENERATE-SLIDES.JS
import { createCanvas, loadImage, GlobalFonts } from '@napi-rs/canvas'
import { writeFileSync, mkdirSync, readFileSync } from 'fs'
import { join } from 'path'
const OUTPUT_DIR = './output'
const W = 1080, H = 1920
const OVERLAY = 'rgba(0,0,0,0.52)'
// Optional: register a custom font
// GlobalFonts.registerFromPath('./fonts/Montserrat-Black.ttf', 'Montserrat')
const slides = JSON.parse(readFileSync('./slides-config.json', 'utf-8'))
function wrapText(ctx, text, maxWidth) {
const words = text.split(' '), lines = []
let current = ''
for (const word of words) {
const test = current ? `${current} ${word}` : word
if (ctx.measureText(test).width > maxWidth && current) {
lines.push(current); current = word
} else { current = test }
}
if (current) lines.push(current)
return lines
}
async function generateSlide(slide, index) {
const canvas = createCanvas(W, H)
const ctx = canvas.getContext('2d')
// Background image β cover fit
const img = await loadImage(slide.imagePath)
const scale = Math.max(W / img.width, H / img.height)
ctx.drawImage(img, (W - img.width*scale)/2, (H - img.height*scale)/2,
img.width*scale, img.height*scale)
// Dark overlay
ctx.fillStyle = OVERLAY
ctx.fillRect(0, 0, W, H)
// Text layers
for (const line of slide.lines) {
ctx.font = `${line.weight} ${line.size}px sans-serif`
ctx.fillStyle = '#ffffff'
ctx.textAlign = 'center'
ctx.textBaseline = 'middle'
ctx.shadowColor = 'rgba(0,0,0,0.75)'
ctx.shadowBlur = 12; ctx.shadowOffsetY = 4
const wrapped = wrapText(ctx, line.text, W - 160)
wrapped.forEach((l, i) =>
ctx.fillText(l, W/2, line.y + i * line.size * 1.2))
}
mkdirSync(OUTPUT_DIR, { recursive: true })
const out = join(OUTPUT_DIR, `slide_${String(index+1).padStart(2,'0')}.png`)
writeFileSync(out, canvas.toBuffer('image/png'))
console.log(`β ${out}`)
}
async function main() {
for (let i = 0; i < slides.length; i++) await generateSlide(slides[i], i)
console.log(`\nDone β ${OUTPUT_DIR}/`)
}
main().catch(console.error)
TERMINAL
node generate-slides.js
β output/slide_01.png
β output/slide_02.png
β output/slide_03.png
β output/slide_04.png
β output/slide_05.png
β output/slide_06.png
Done β output/
Post-Production: The Details That Separate 10K Views From 1M Views
These two minutes of work consistently make the difference between content that gets pushed and content that gets buried:
β¦
PART SIX
Step 5 β Schedule With Postiz Agent CLI
With your slides ready, Postiz handles the distribution calendar. It's free when self-hosted and unlimited β no artificial posting caps like Buffer or Later.
TERMINAL
Install globally
npm install -g postiz
# Set your API key (get it from app.postiz.com β Settings β API Keys)
export POSTIZ_API_KEY=your_api_key_here
# Verify connected accounts
postiz integrations:list
Connect your TikTok account at app.postiz.com β Integrations β Add Channel β TikTok. Once connected, integrations:list will return your TikTok integration ID β you'll need that for every post command.
Batch-Schedule a Full Week
Define your week's content in a JSON file, then run one command to schedule everything:
SCHEDULE.JSON
[
{
"slides": ["./output/mon_01.png", "./output/mon_02.png", "./output/mon_03.png",
"./output/mon_04.png", "./output/mon_05.png", "./output/mon_06.png"],
"caption": "I saved $5k in 6 months doing this π° #personalfinance",
"scheduledAt": "2025-04-21T09:00:00Z"
},
{
"slides": ["./output/tue_01.png", "./output/tue_02.png", "./output/tue_03.png",
"./output/tue_04.png", "./output/tue_05.png", "./output/tue_06.png"],
"caption": "Stop putting money in these 3 things π« #moneytips",
"scheduledAt": "2025-04-22T09:00:00Z"
}
]
BATCH-SCHEDULE.JS
import { execSync } from 'child_process'
import { readFileSync } from 'fs'
const INTEGRATION_ID = process.env.TIKTOK_INTEGRATION_ID
const schedule = JSON.parse(readFileSync('./schedule.json', 'utf-8'))
for (const post of schedule) {
const slideFlags = post.slides.map(slide => {
const result = JSON.parse(execSync(`postiz upload ${slide}`).toString())
return `-m "${result.path}"`
}).join(' ')
execSync(
`postiz posts:create -c "${post.caption}" ${slideFlags} -s "${post.scheduledAt}" -i "${INTEGRATION_ID}"`,
{ stdio: 'inherit' }
)
console.log(`β Scheduled: ${post.slides.length} slides at ${post.scheduledAt}`)
}
TERMINAL
TIKTOK_INTEGRATION_ID=clx9abc123 node batch-schedule.js
β Scheduled: 6 slides at 2025-04-21T09:00:00Z
β Scheduled: 6 slides at 2025-04-22T09:00:00Z
...
One command. Entire week scheduled.
β¦
PART SEVEN
Step 6 β Post From Drafts, Not the API Directly
This is the most overlooked part of any TikTok automation setup, and skipping it is what kills accounts that are otherwise doing everything right.
When you auto-publish via API on a scheduled timer, TikTok sees a server IP initiating the post, consistent robotic intervals, and no human interaction before it goes live. On new accounts or at high volume, this pattern gets flagged β reduced reach, shadow restrictions, or full account flags.
"The actual publish action needs to come from your phone. Everything else can be automated. This one step stays human."
The fix is simple. Instead of auto-publishing, push to Drafts and publish manually from the app:
1
Set Postiz to Notify mode instead of Direct Post. It manages your editorial calendar and sends a push notification at the scheduled time.
2
When the notification arrives, open TikTok on your phone. The draft is waiting.
3
Review it, tap Post. From TikTok's perspective: a human published from a real device on a real network. No server fingerprint on the actual publish action.
To push to TikTok's native Drafts inbox (so the post appears in your TikTok app directly), use content_posting_method: "UPLOAD" in your Postiz settings:
POSTIZ β PUSH TO TIKTOK DRAFTS INBOX
postiz posts:create \
-c "Your caption #fyp" \
-m "$VIDEO_URL" \
-s "2025-04-21T09:00:00Z" \
-p tiktok \
--settings '{
"privacy_level": "SELF_ONLY",
"content_posting_method": "UPLOAD"
}' \
-i "your-tiktok-integration-id"
This is the hybrid that keeps your account healthy at scale: fully automated content production and scheduling, with the final publish step remaining human.
β¦
PART EIGHT
The Strategy Layer: Making It Actually Convert
All of the above is infrastructure. The creative strategy is what determines whether it drives revenue or just views.
Product Integration Is Everything
There are only two ways a format fails: it goes viral but nobody converts, or it converts but nobody watches. The whole game is finding the balance.
Your product needs to live inside the content, not on top of it. A product bolted onto a trending format feels like an ad β the viewer watches, enjoys the content, and scrolls on without ever connecting it to your brand. Millions of views, zero sales.
The target is a slideshow where the content is genuinely useful or interesting, and your product shows up as the natural next step. The viewer swipes to the last slide thinking: where do I get that? β not why am I being sold to?
Write Copy That Sounds Human
The biggest tell in AI-generated slideshow content isn't the visuals. It's the text. Default AI copy sounds like a marketer: "Discover the transformative power of..." Nobody on TikTok talks like that.
The fix: feed Claude real comments pulled from viral videos in your niche. Tell it to write like someone who just discovered the product and is genuinely surprised. Add negative constraints: no words like game-changing, revolutionary, or must-have. The negative constraints matter as much as the positive direction.
Track Revenue Per Million Views
Views without conversion data mean nothing. Before scaling any format, calculate what one million views is actually worth in revenue. If the unit economics work, scale. If they don't β if views are there but purchases aren't β the integration is wrong, not the format. Fix how the product enters the content and test again.
$0.34EFFECTIVE CPM β WELL-RUN SLIDESHOW CAMPAIGNS
$4β8AVERAGE META ADS CPM β CONSUMER APPS
20ΓCOST ADVANTAGE OVER TRADITIONAL PAID SOCIAL
β¦
THE SUMMARY
The Full Playbook at a Glance
COMPLETE STEP-BY-STEP
β Find the format. Scroll your niche, favorite viral slideshows, download with SnapTik.
β Extract the hook. Upload to Claude, reverse-engineer the structure, generate 5β7 variations.
β Pull Pinterest search terms. Ask Claude to generate 5 specific image queries while you have the slideshow loaded.
β Source images from Pinterest. Zero cost, unlimited aesthetic variety, no generation required.
β Generate slides with Node.js Canvas. Define content in slides-config.json, run the script, get production-ready PNGs.
β Post-process the output. Film grain in CapCut, 1080p export, compress through Telegram.
β Schedule with Postiz CLI. Define your week in schedule.json, run batch-schedule.js, everything queued in one command.
β Post from Drafts, not the API. Use Notify mode. Publish manually from your phone at peak time.
β Track revenue per million views. When unit economics work, scale. When they don't, fix the integration.
The brands still running flat-fee influencer deals are doing the math wrong. One post, one shot, paid whether it performs or not. The brands that crack performance-based, systematic distribution early build a data and volume advantage that's nearly impossible for competitors to close.
Slideshows are the entry point. Once you understand the underlying loop β find what's working, replicate with precision, produce at volume, measure relentlessly β you can run it on any format.
That's not a content strategy. That's a distribution machine.
Free game to scale your Ecom brand with Ai & human UGC: whop.com/frydberg
