How it all fits together
Two minutes of reading now saves you an hour of confusion later. Here's the whole system.
Connect your social accounts
One click each. You approve on Facebook's / Google's own screen — we never see your password.
Point us at your storage (optional)
Your videos stay in your account — your free tier, your files. We just need to read them at posting time. Or skip this and paste public links.
Fill your content library
Add each video once, with a sentence describing it. That description is what the AI writes captions from — the better it is, the better the captions.
Run Autopilot
Pick 7, 30, 180 days. We take unposted videos, write a different caption for every platform, and fill your calendar.
Connect your accounts
Dashboard → Connected accounts → pick a platform → approve. That's the whole thing.
What each platform needs from you
| Platform | Requirement |
|---|---|
| You must be an admin of a Page. Personal profiles can't be posted to via any official API — that's Meta's rule, not ours. | |
| Must be a Business or Creator account, and linked to a Facebook Page. Convert in the Instagram app: Settings → Account type. | |
| YouTube | Just your channel. Nothing to set up. |
| TikTok | Any account. Until TikTok approves our app, videos land in your Drafts — you tap Post once on your phone. |
Paste your own token
For when one-click isn't on yet — or when you'd rather use your own developer app.
Dashboard → Connected accounts → the platform card → Paste token.
Fill in the fields and hit Check & connect.
We call the platform right then to make sure the token works and can actually post — not just read. A bad token is rejected on the spot, with the platform's own error message. You'll never find out at 8pm because a post silently failed.
Where each value comes from
| Platform | What you need | Where |
|---|---|---|
| Page ID, Page Access Token | Graph API Explorer → pick your app → pick your Page → tick pages_manage_posts → Generate Token |
|
| IG Business Account ID, Page Access Token | Same token as Facebook. Get the ID from /me/accounts?fields=instagram_business_account |
|
| YouTube | Client ID, Client Secret, Refresh Token | Google Cloud Console → Credentials. Refresh token from OAuth Playground, scope youtube.upload |
| TikTok | Access Token, Refresh Token | TikTok for Developers → your app → scope video.publish |
Storage: which one to pick
Your videos live in your storage account, not ours. You keep your free tier and your files; we never charge you for space.
| Option | Free | Bandwidth cost | Verdict |
|---|---|---|---|
| Cloudflare R2 | 10 GB | Free | Best for video — start here |
| Amazon S3 | 5 GB | Billed per GB | Only if you're already on AWS |
| Google Drive | 15 GB | Free | Won't work for Facebook/Instagram — see below |
| Paste links | — | — | Simplest; no space tracking |
Cloudflare R2 — step by step
About 3 minutes. Free, no credit card for the free tier. You collect three values; we do everything else automatically.
Create a free account at dash.cloudflare.com/sign-up.
Copy your Account ID — it's the long string in your dashboard URL:
dash.cloudflare.com/<account-id>.
Go to R2 → Manage API Tokens → Create Account API token. Permission: Admin Read & Write.
It has to be Admin, not "Object" — we create the bucket for you, and only Admin can do that. Pick Object-level and the save will fail.
Copy the Access Key ID and Secret Access Key — the secret is shown once. Close the page without copying and you'll have to make a new token.
Paste the three values in Storage → Cloudflare R2 and hit save.
Just switched R2 on? Give it a couple of minutes. Cloudflare needs a moment to bring your account's storage endpoint online, and until it does the save fails with a connection error even though every value is correct.
On save we verify the key against Cloudflare (a bad key is rejected on the spot), create the bucket for you, and measure space already used so the full-storage warnings are accurate from day one. You never touch bucket settings.
Amazon S3 — step by step
Works fine. Just know what you're signing up for on the bill.
In the AWS console, open S3 → Create bucket. Note the region (e.g. us-east-1).
Allow public reads on the bucket so Facebook/Instagram can fetch the files.
Open IAM → Users → create a user → attach a policy limited to this bucket only.
Don't use your root key. If it ever leaks, you want the damage limited to one bucket.
Create an access key for that user, then paste the key, secret, bucket, and region into Storage → Amazon S3.
Google Drive
15 GB free and you probably already have it — but there's a catch worth knowing before you invest time.
Content library
Your pool of videos. Add each one once; Autopilot pulls from here.
Storage → Content library → Add video.
Fill in the title, the video URL, and — the important one — what's in it.
That description is the only thing the AI sees when writing your captions.
Weak: "my video" → you'll get generic captions.
Strong: "Cinematic AI flythrough of a neon Tokyo street at night, rain, slow synth, 12s, made with Kling" → captions that sound like you meant them.
How we avoid reposting the same thing
Every video is tagged Never posted or Posted N×. Autopilot always drains the never-posted pile first. Only when it's empty do we recycle — and then we take whatever has gone unposted the longest. You'll never get the same clip twice in one run.
Autopilot
Pick a duration, read what we suggest, approve. Nothing posts until you say so.
Pick how long you want covered: 1, 3, 7, 15, 30, 60, 90, or 180 days.
Set posts per day (1–5), tone, and which accounts.
The summary does the math for you: posts per day × days = videos needed. 3 a day for 30 days needs 90 videos. It compares that to your library and warns you before you run, so there are no surprises after the fact.
Hit Suggest my calendar.
We pick videos that have never been posted (oldest first), and the AI writes a caption for each one on each platform. Still nothing scheduled at this point.
Read the list. Untick anything you don't like, then Approve & schedule.
Only the ticked posts get scheduled — and they go out with the exact caption you just read. We don't re-write it behind your back.
Magic Post
For a single video, right now, without touching the library.
Describe the video in one sentence.
Pick accounts, tone, language.
Write & schedule everything. Every platform gets its own caption, at its own best time.
AI Studio — generate videos with Kling
Type an idea, get a finished video in your library a few minutes later — generated on your own Kling API package (klingai.com → Developer → API Keys; trial pack ≈ $9.80, then pay-as-you-go per second of video).
- In the dashboard open AI Studio and paste your Kling Access Key + Secret Key (we verify them live with Kling before saving; stored encrypted).
- Describe the video, pick 5s or 10s, pick the shape (9:16 for Shorts/Reels/TikTok), choose your R2/S3 storage as destination.
- Hit Generate and close the page if you like — when Kling finishes, we pull the file into your storage and add it to Content library automatically. Autopilot can post it on the next run.
Affiliate / product links
Add one link to a post (or to a whole Autopilot plan) and we place it the way each
platform actually allows: X and YouTube get it inside the post/description, Facebook feed
gets it in the caption, TikTok/Instagram get a "Link in bio" call-to-action. #ad
is added automatically to keep you FTC-compliant. Remember to put your link in your
TikTok/Instagram bio once.
Audience timezone
In Autopilot, set Audience location to where your viewers are. Posting from Vietnam to US customers? Pick "US East" and 8pm TikTok means 8pm New York time — conversion is automatic.
AI assistant access (MCP)
In Settings → AI assistant access, generate your private MCP connection URL and add it to Claude (Settings → Connectors → Add custom connector) or any MCP-capable AI. Then just say things like "add these three videos and schedule 30 days of posts" — the assistant previews the plan and only schedules after you approve. Treat the URL like a password; generating it again gives you a fresh one.
When things break
| What you see | What's actually going on |
|---|---|
| "Token expired — reconnect" | Facebook tokens die after ~60 days; it's Meta's rule. Click Connect again — 5 seconds, nothing is lost. |
| Post failed on Instagram | Almost always the video URL. It must be public and a direct file link. Paste it into a private window — if you don't get the raw video, Instagram won't either. |
| TikTok video sits in Drafts | Working as intended. Until TikTok approves our app, that's the only thing their API allows. Tap Post once on your phone. |
| "AI captions are switched off" | The AI key isn't configured on the server. Everything else works — schedule manually from Schedule post. |
| Autopilot: "Library is empty" | Add videos to your Content library first — Autopilot only posts what you've given it. |
| Storage says "Full" | Over 95% used. Run Check now under Clean-up suggestions — we'll show posted videos safe to delete (never ones still queued). |
| A post failed once, then worked | That's the retry doing its job. Network blips get retried 3 times (5, 15, 45 min apart). Only real errors — like a dead token — stop immediately. |