StreamHub — connecting your social accounts
🍼 ELI5
Most platforms here work like Discord: paste in a link/key once, and StreamHub can post for you from then on. A few (Facebook, Instagram, X, etc.) use a proper login screen instead, same as connecting any app to your social accounts.
This guide is for StreamHub users. If you are building or deploying your own StreamHub instance and need to register developer apps and set up API keys, see the operator setup guide (docs/streamhub-platform-setup.md in the project repository) instead.
Editions
| Edition | Platforms you can connect |
|---|---|
| StreamHub (Demo) | Discord only |
| StreamHub Pro | Discord, Facebook, Instagram, YouTube, X (Twitter), TikTok, BlueSky |
Discord
Discord does not use a login flow. Instead, you paste an incoming webhook URL directly:
- In Discord, open Server Settings → Integrations → Webhooks → New Webhook (or a channel's Edit Channel → Integrations → Webhooks). You need the Manage Webhooks permission.
- Choose the channel, set a name and avatar, and click Copy Webhook URL.
- In StreamHub → Connections → Discord, paste the URL and give it a name, then click Add webhook.
One webhook = one channel. Add multiple webhooks to post to multiple channels.
The webhook URL is a posting secret — anyone with it can post to the channel. You can delete a webhook in Discord's settings to revoke it permanently.
What you can post to Discord
Text messages, an embedded image (by URL), or an uploaded file (image or video).
Facebook (Pro)
Posts photos and videos to a Facebook Page you manage.
Connecting
- Open Connections → Facebook and click Connect with Facebook.
- Your browser opens Facebook's authorization screen. Log in with the account that manages the Page you want to post to, then approve the requested permissions.
- If that account manages more than one Page, StreamHub shows a list to choose from instead of guessing — click the one you want to post to.
- StreamHub stores the connection. The Connections page shows the name of the Page it will post to.
What you can post to Facebook
Text, an attached image or video (local file), or an embedded image URL.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| "META_APP_ID env var is not set" | The operator hasn't configured Meta credentials | Ask the app operator to follow the Meta app setup in streamhub-platform-setup.md |
| No Pages listed after login | Your account doesn't manage any Pages | Create a Facebook Page at facebook.com/pages/create first |
| "Meta App Review required" | The Meta app is still in development mode | The operator needs to add you as a tester, or submit the app for review |
Instagram (Pro)
Posts photos and Reels to an Instagram Business or Creator account linked to a Facebook Page.
Requirements
- A Facebook Page you manage with an Instagram Business or Creator account connected to it (set up at Facebook → Settings → Linked Accounts, or via Instagram → Edit Profile → Switch to Professional Account).
Connecting
- Open Connections → Instagram and click Connect with Instagram.
- Log in with the Facebook account that manages the linked Page.
- If that account has more than one Instagram account linked (across different Pages), StreamHub shows a list of
@usernames to choose from instead of guessing.
What you can post to Instagram
Photos and videos — but Instagram posts require a publicly hosted media URL, not a local file. In the Post composer, select an Instagram destination and you will see a "Media URL" field instead of a file picker. Paste any URL pointing to an image or video accessible on the internet. For video posts, the video must meet Instagram's Reels requirements (vertical or square, up to 15 minutes for Reels).
Want your posts on Threads too?
StreamHub doesn't have a separate Threads connection. Instagram has a built-in "auto-share to Threads" setting — turn it on in the Instagram app under Settings → Sharing to other apps → Threads and anything StreamHub posts to Instagram cross-posts to Threads automatically, with nothing to configure here.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| "No Instagram Business/Creator account is linked to any Page you manage" | No linked IG account | Connect an Instagram Business/Creator account to your Facebook Page first |
| Post fails with a container error | Media URL is not publicly reachable | Make sure the URL returns the file without redirects or authentication |
YouTube (Pro)
Uploads full-length videos and Shorts to your YouTube channel.
Connecting
- Open Connections → YouTube and click Connect with YouTube.
- Your browser opens Google's consent screen. Sign in with the Google account that owns your channel and approve the requested permissions.
- The Connections page shows your channel name once connected.
What you can post to YouTube
Video files (mp4, mov, webm) picked from your local drive. You also provide:
- Title (required)
- Description (optional — goes in the description field of the upload)
- Upload as Short — when checked, StreamHub adds
#Shortsto the description. YouTube auto-detects Shorts based on aspect ratio (vertical/square) and duration (≤3 minutes). Make sure your video is already in the correct format; StreamHub does not re-encode files.
What "Upload as Shorts" does and doesn't do
StreamHub adds #Shorts to the description, which is the signal YouTube's own documentation recommends. Whether the video actually appears on the Shorts shelf depends entirely on the video's aspect ratio and length — YouTube makes that determination, not StreamHub. A landscape video uploaded with the Shorts checkbox checked will upload successfully but will not appear as a Short.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| "No YouTube channel found for this account" | The Google account has no channel | Create a YouTube channel at youtube.com first |
| Upload stalls or times out | Large file + slow connection | Try a shorter or lower-resolution version of the video first |
| Video appears on Shorts shelf unexpectedly | Video is vertical and under 3 minutes | Expected — YouTube's detection is based on the video's content, not just the checkbox |
X / Twitter (Pro)
Posts tweets with optional image or video attachment.
This platform only appears if the operator has configured a Twitter developer app. If you do not see an X section in Connections, the feature is not configured in your build.
Connecting
- Open Connections → X and click Connect with X.
- Your browser opens X's authorization screen. Log in with your X account and approve.
What you can post to X
Text, and optionally one attached image or video. Standard X character limits apply (280 characters for free accounts, up to 25,000 for X Premium).
TikTok (Pro)
Posts videos to TikTok, via the operator's hosted relay (see streamhub-platform-setup.md for how this works under the hood).
Connecting
- Open Connections → TikTok and click Connect with TikTok.
- Your browser opens TikTok's authorization screen. Log in and approve.
- The Connections page shows your TikTok display name once connected.
Posting to TikTok
Once connected, TikTok appears as a destination on the Post page like any other platform:
- Add TikTok — <your name> as a destination.
- Click Select video file… and choose a video — TikTok posts are video-only, so this is required before you can post.
- Write a caption in the shared message box (optional) and click Post.
StreamHub sends TikTok posts as a direct post with privacy set to Only me — the safest setting for an app that's still going through TikTok's audit. There's no in-app control yet for choosing a different privacy level or for sending a post to your TikTok inbox as a draft instead.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| "TIKTOK_CLIENT_KEY env var is not set" | The operator hasn't configured TikTok credentials | Ask the app operator to follow the TikTok setup in streamhub-platform-setup.md |
| Post fails right after clicking Post | Your account isn't a tester on an audited app yet, so TikTok rejects the direct-post call | Ask the operator to add your account as a tester on their TikTok app, then try again |
| "TikTok OAuth timed out after 5 minutes" | Browser login wasn't completed in time | Try connecting again — the relay holds the authorization result for 24h even if the app gives up waiting sooner |
Discord — StreamSync integration
StreamHub can also expose a local WebSocket server that StreamSync connects to, so a StreamSync trigger can fire a post through StreamHub's destinations. See Connecting to StreamSync for how to wire that up.