Skip to main content

OpenStory

OpenStory is an open-source AI film studio for making five-minute films with consistent characters. It has Upload-Post built in: once your team adds an Upload-Post API key, a Publish to social… option appears in the Download menu and sends your rendered cut to every connected platform in one step.

Supported platforms: TikTok, Instagram, YouTube, Facebook, LinkedIn, X, Threads and Bluesky.

Setup​

  1. Create an Upload-Post account at app.upload-post.com. The free plan is enough to try it.
  2. Create a profile and connect your accounts on the Manage Users page. See Connecting accounts if a platform asks for extra steps.
  3. Copy your API key from the API Keys page.
  4. Add it to OpenStory under Settings → API Keys → Publishing. The key is stored for your team and validated when you save it.

Teams without a key see no publishing option at all, so nothing changes until you add one.

Publish a film​

  1. Render your film. The publish option is enabled once the current cut has a finished render.
  2. Open the Download menu (toolbar or theatre view) and choose Publish to social….
  3. Pick the Upload-Post profile. Only the platforms connected to that profile are listed.
  4. Write a caption and, optionally, a description. The caption limit adapts to the strictest platform you selected (for example 280 characters when X is included).
  5. Choose visibility: YouTube defaults to private; TikTok uses your account default unless you pick Only me.
  6. Review exactly what will be posted, then click Publish.

The dialog then follows each platform and shows a link to the post, skipped for a platform with no connected account, or the platform's error message.

How it behaves​

BehaviorDetails
No duplicatesEach publish has a deterministic request id sent as an idempotency key. Double clicks, retries and reopened dialogs resume the existing post instead of sending a new one.
Unconfirmed postsIf Upload-Post doesn't confirm a submission (timeout, dropped connection, 5xx), the dialog keeps checking the same request and never offers to publish again.
AI labelsOpenStory films are AI-generated, so posts are sent with is_ai_generated. See AI content labeling.
Async uploadOpenStory passes the render by URL with async_upload=true; Upload-Post fetches the MP4 itself. Track it in your upload history or with the status endpoint.

Self-hosting OpenStory​

Upload-Post downloads the render from its URL, so that URL must be reachable from the internet. On a self-hosted instance, serve renders from public storage or a CDN. A render that only exists on localhost is refused with a clear message before anything is sent.

Troubleshooting​

  • "Publish to social…" is missing: add the key under Settings → API Keys → Publishing, then reload.
  • The option is disabled: the current cut has no finished render yet.
  • A platform is not listed: connect it to the selected profile on Manage Users.
  • A platform failed: the error comes from the platform. Common cases are covered in Error handling.

Learn more​