Publish videos rendered with claude-code-video-toolkit to TikTok, Instagram (Reels or Stories), YouTube (incl. Shorts), LinkedIn, Facebook, X, Threads, Pinterest and Bluesky in one command, through the Upload-Post API.
It adds a /publish-social Claude Code command and a standalone tools/upload_post.py script. No per-platform developer apps or OAuth clients: you connect your accounts once in Upload-Post and use one API key.
From the root of your toolkit checkout:
git clone https://github.com/Upload-Post/claude-code-video-toolkit-upload-post.git /tmp/up-addon
cp /tmp/up-addon/tools/upload_post.py tools/
cp /tmp/up-addon/docs/upload-post.md docs/
cp /tmp/up-addon/.claude/commands/publish-social.md .claude/commands/
cat /tmp/up-addon/.env.example >> .env # then fill in the two valuesThe files are new, so nothing in the toolkit is overwritten. requests and python-dotenv are already toolkit dependencies.
- Create an account at upload-post.com.
- Create a profile and connect the social accounts you want to post to on Manage Users.
- Create an API key on the API Keys page.
- Put
UPLOAD_POST_API_KEYandUPLOAD_POST_USER(the profile name) in.env. - Check it without posting anything:
uv run tools/upload_post.py --video projects/NAME/out/video.mp4 --title "Test" \
--platforms tiktok,instagram,youtube --dry-run --json-outauthOk: true and an empty missingPlatforms means you're ready.
In Claude Code:
/publish-social my-project tiktok,instagram,youtube
Claude drafts the caption and description from project.json, shows them for your approval, runs a dry run, publishes, and writes the result back to the project.
Or call the script directly:
uv run tools/upload_post.py --video projects/NAME/out/short.mp4 \
--title "How RAG works in 45s #ai" \
--platforms tiktok,instagram,youtube --ai-generated --json-outFull options, scheduling and troubleshooting: docs/upload-post.md.
- Never posts twice. Each upload carries a request id sent as an idempotency key. After a timeout, a dropped connection or an unconfirmed result the script checks the same request instead of uploading again, and prints the
--statuscommand to follow it. - Dry run first.
--dry-runvalidates the key and the profile and lists which platforms are connected, without uploading. - Private by default on YouTube.
- Upload-Post: https://www.upload-post.com
- API docs: https://docs.upload-post.com
- claude-code-video-toolkit: https://github.com/digitalsamba/claude-code-video-toolkit
Upload-Post is a hosted third-party service; this add-on only talks to it when you run it with a key you created. MIT licensed.