Bulk-caption videos, render in the cloud, post to TikTok.
Restoring session…
✓ 100% TikTok compliant
Your ads, uploaded automatically.
TT Caption Tool takes care of the busywork between a finished creative and a live
campaign. Build your captions, render in the cloud, and let us handle the upload,
so you can spend your time on the ideas that actually perform.
Upload ads automatically
Queue your creatives once and they're delivered to your accounts for you. No manual re-uploading, no copy-pasting.
100% TikTok compliant
Everything we do is built to work within TikTok's platform and advertising policies.
Bulk captioning
Pair every video with every hook, or match them one-to-one. Native-looking captions, rendered in seconds.
Cloud rendering
Renders run on our servers, not your laptop. Close the tab and your batch keeps going.
AI hook writing
Generate fresh hook variations from your best performers, then pick the ones worth testing.
One shared library
Every source clip, image, and finished render lives in one place your whole team can reach.
How it works
From raw clip to live ad in three steps.
1
Bring your creative
Upload videos, paste links, or pull from your library. Add your hooks, or let AI draft a few.
2
Caption and render
Choose a look, preview it on the phone frame, and render the whole batch in the cloud.
3
Upload automatically
Send finished ads to your connected accounts on a schedule you control, and track every post.
Use cases
Built for teams that test a lot of creative.
Performance marketers
Turn one winning video into dozens of hook tests without opening an editor.
Agencies
Run creative for several clients from one workspace, with each brand's accounts kept separate.
E-commerce brands
Keep a steady stream of fresh product ads going without adding headcount.
UGC studios
Caption and deliver creator footage at volume, in a consistent house style.
Case studies
What a week on TT Caption Tool looks like.
Illustrative examples of how teams put the workflow to use.
Skincare brand
One product video, forty hooks
Challenge: A small in-house team had one strong product demo and no time to cut variations by hand.
Approach: They generated hook ideas from past winners, rendered every video × caption pair in a single batch, and queued uploads across the week.
Outcome: Testing moved from a few variations a month to a fresh set every week, with the editor freed up for new shoots.
Growth agency
Six clients, one workspace
Challenge: Account managers were exporting, captioning, and uploading by hand for every client.
Approach: Each client got its own sources, caption style, and connected accounts, with renders and uploads running in the cloud overnight.
Outcome: Creative delivery became a morning review instead of an afternoon of busywork.
UGC studio
Consistent captions at volume
Challenge: Creator footage came in from many people, and every caption looked a little different.
Approach: The studio saved one caption look as its default and applied it to every batch automatically.
Outcome: Every delivery matches the brand guide, without anyone hand-checking fonts and positions.
FAQ
Questions, answered.
Is TT Caption Tool TikTok compliant?
Yes. The tool is built to work within TikTok's platform and advertising policies. You stay responsible for the content of your ads and for following the policies of every platform you post to.
How do automatic uploads work?
Connect your accounts once in Settings. Finished renders can then be uploaded on a schedule you set, with a delay between posts and a full history of what went out.
Do I need to install anything?
No. Everything runs in your browser and in our cloud. Sign in with Google and you're ready to go.
How long are my files kept?
Finished renders stay in your cloud library for 14 days, then they're cleaned up automatically. Download anything you want to keep.
Who can see my content?
Only you and the people you give access to. We don't sell your data. See our Privacy Policy for details.
How do I get access?
Sign in with Google to request an account. New accounts are reviewed by an admin, and you'll get in as soon as you're approved.
Ready to ship more creative?
Sign in with Google to request access.
Tt
You’re under review
Thanks for signing up. An admin will approve your account shortly.
This page updates on its own once you’re approved.
Create
FFmpeg was not found on the server. Rendering is unavailable until it is fixed.
STAGE
0 / 0
Add a video and a caption to preview
0:000:000:00
ClipEnd caption
STORYBOARD
CAPTIONS
One caption per line for the whole job.
0 videos × 0 captions = 0 videos
RENDERS
Finished renders, stored in your cloud library. Files older than
14 days are cleaned up automatically — download what you want to keep.
MORE
Trace
ICP → angle → ad → Spark
Spark codes
Copy the post text, post it, then paste the Spark code back. Launch stays off.
Worker …Mercury …
Profile
Status
Health
Revenue
Spend
CPC
CPM
Results
Loading Business Centers…
Appearance
Link downloads
If TikTok / YouTube / Pinterest block downloads from the server, upload a
cookies.txt exported from your browser — it is used only for your link downloads.
AI providers
Storage & limits
Facebook Ads
Connect with Facebook Login for Business. Ads are created paused
in Ads Manager — you turn them on after review.
Setup notes
Skip Settings → Advanced → Domain Manager and skip
App domains for local use (Meta rejects localhost / 127.0.0.1 there).
Skip App authentication → Authorize callback URL.
In Settings → Basic add a Website platform with Site URL
https://localhost:8765/.
Then open Facebook Login for Business → Settings, turn on
Client OAuth Login and Web OAuth Login, and add
https://localhost:8765/api/oauth/callback
Facebook Login is blocked in AdsPower and other antidetect browsers
(Google sign-in does not help). Connect once in normal Chrome with the
same Google account, or paste an EAA… token from
Graph API Explorer.
If you need a different Facebook user, add them as Tester/Developer under
Meta App Roles — Development mode only allows people with a role.
Server is missing META_APP_ID / META_APP_SECRET
in .env (local) or Wrangler secrets (deploy). Also set
META_REDIRECT_URI to
https://localhost:8765/api/oauth/callback.
Restart the Python server after saving.
Defaults
TikTok accounts
Refresh Cookies (AdsPower) opens AdsPower on TikTok login on the computer running the
AdsPower worker. Sign in there and the cookies are saved to the account (new account, or use
Refresh via AdsPower on an existing one).
Selected accounts upload in per-video round-robin.
DuoPlus Spark phones
Spark codes are fetched on the DuoPlus cloud phone that is signed into the same TikTok account.
Load your phones and link each one to its account. Round-robin uploads then fetch each video's
Spark on the phone linked to the account that posted it.
Already have cookies?
Paste a sessionid, a Network Cookie header, curl, or cookies.txt.
Import verifies the session with TikTok.
Loading Business Center settings…
Business Center billing
Choose the Business Centers per profile and additional Ads Manager accounts per BC. VAT and the
primary card apply to every new BC. Add-balance defaults to $10.
Mercury daily cap is $50 until you raise it.
AdsPower host
Named browser host (this PC, VPS, Mac). Active host URL + API key
drive the embedded provision worker. Stopgap until a 24/7 AdsPower VPS.
No AdsPower host saved yet.
Includes the seed account. Up to 21 ad accounts can be created per BC.
Includes the first Business Center. Each extra one is created on the same profile after setup, without another payment.
White-hat Reach
Spark paste used only for the white-hat Reach campaign (not DuoPlus
offer packs on the BCs sheet). The Reach warm-up runs on the seed account.
Timezone follows billing geo (Stockholm for SE). Real ads stay blocked
until white-hat shows Scheduled.
Sales campaign defaults
Defaults only — Load sparks, chat, or a per-run payload can override
bid, budget, landing URL, CTAs, and sparks. Instant Page Sales ads,
one Spark per ad (max 10). Publish stays off until
PROVISION_SALES_PUBLISH=1.
Pick an offer URL, or leave blank to use the offer chosen at load time.
Primary card
Cardholder is the name saved on the card, not the BC slug. Pick a saved card or create one.
Billing address rotation
Warm-up cycles Stockholm streets/postals. Pin one address to reuse it, or add a custom row to the pool.
Webshare proxies
Residential (geo) and data center proxies. Refresh each pool from Webshare separately; “Request new IPs” spends an on-demand refresh on the residential plan when available.
Upload settings
Studio drives the TikTok Studio UI in a browser. HTTP posts via TikTok’s web upload
endpoints (faster; needs complete cookies from Remote browser). Login is the same for both.
Appended after the template. Separate with spaces or commas.
Controls TikTok Studio's Music copyright check and Content check lite on upload.
MCP (Claude / OpenClaw)
Long-lived API key for the key-gated HTTP surface at
/mcp (no chat thread; subset of tools). In-app Chat
uses the agent loop with thread plans and confirm cards. The
Worker MCP proxy adds session, confirm, and
get_spark_job. Trusted keys skip confirm cards.
Copy the key once when created.
Test upload
Runs one probe with the same short vertical video, but a new title and
description every time (different from each other) so you can confirm
TikTok got the update. Uses your current upload engine and the first selected
account. HTTP tests post as private when possible. Settings are
locked while the test runs.
Upload already rendered
Pick videos in the Renders sheet on the Create page and press
Upload selected to TikTok.
TikTok upload
Users
Approve new accounts and set access to Create-only or full. Expand a row to see their videos, TikTok links, and Spark codes.
Loading…
Render
Offers & hooks
Offers
Add affiliate offers and paste winner hooks under each one.
Generation learns from winners and liked results.
Winner hooks
Select an offer to manage winner hooks.
Generate new hooks
Generation history
Thread videos
Add videos for this chat thread. End-caption settings apply to the selected row.
Drop video files hereTap to add videosor click to browsemp4, mov, webm, mkv
End-of-video caption (selected)
Select a video above to edit its end caption.
Every video you’ve uploaded or downloaded (Pinterest, TikTok, YouTube). Click to add or remove from this job. ✕ permanently deletes.
Thread images
Upload stills for photo carousels, or search Pinterest images. Selected images attach to this chat.
Drop image files hereTap to add imagesor click to browse (jpg, png, webp)jpg, png, webp
Every still you’ve uploaded or saved from Pinterest / chat. Click to attach or remove. ✕ permanently deletes.
Video library
Pick captions
Choose which hooks to keep in this chat’s plan, or have a model pick favorites. Skip if you do not want this.
AI favorites
Multiple models
Choose which models run your prompt. Mix providers freely — replies show in rows, and caption picks keep each model’s label on the Plan.
#
Media
Caption
Rendered
TikTok
Spark
Model / source
Rendered outputs
Crop video
Drag to place a 9:16 crop kept for every render of this video. Move the box or resize with handles — aspect ratio stays locked.
Sign in with this Chrome
TikTok opens in a new tab in this browser. Sign in there like normal,
then paste cookies below. This page cannot read TikTok cookies itself.
For HTTP API (fast) upload: paste the entire Cookie header
(not just sessionid). You need tt-target-idc and friends.
Sessionid-only works for Studio, but HTTP will show “incomplete cookies.”
Sign in on the TikTok tab if needed (skip if you already see For You).
Recommended for HTTP (full cookies): on the TikTok tab press
F12 → Network → reload the page → click the first
www.tiktok.com document → Headers →
Request Headers → Cookie → copy the
whole long line (starts with several name=value; pairs)
→ paste it in the box below. “Copy as cURL” also works.
Studio-only shortcut: Application → Cookies →
sessionid → copy Value. (Not enough for HTTP.)
Or use Use remote browser — that saves a full TikTok cookie dump
automatically (best if Network feels fiddly).
Scan the QR, then tap Confirm on your phone. The checkmark only means
the code was read. If a Chrome window opened on this PC, scan that window —
not this preview (it is delayed and will get stuck).
Starting remote browser…
Upload to Facebook Ads
Ads are created paused. Connect Facebook in Settings first.
Upload to TikTok
Loading accounts…
Uploading…
Uploads keep running if you close this tab — reopen the app to see progress.
Upload finished
Warm up profiles
Auto login + white-hat. Accounts per Business Center follows the setting you chose.
Geo required
The Hoot Business Center must use this same geo.
Proxy geo
Which geo's proxy pool these Business Centers use. Can differ from the BC geo.
1 profile → 1 Business Center → 1 ad account
Load in AdsPower profile
Choose an AdsPower profile that is not in this BC sheet yet.
Load sparks
Sales launch is disabled until the TikTok API is wired. This button will not open Ads Manager.
Pick which ad account receives the sparks.
Offer
Optional. Selecting an offer sets the website URL.
Defaults to Settings / offer URL when blank. Override per load.
Mark suspended
Screenshot
Workflow failed
Backend console error
No screenshot was captured for this failure.
The AdsPower browser was left where it stopped. Continue picks up from that step.
Business Center disapproved
Deactivate closes every ad account, then the Business Center, so the Hoot refund can finish. Proxy is already burned.