Each platform accepts different captions, media, and durations, and the composer enforces all of them so a post never bounces for a formatting reason. This page collects every limit in one place so you can plan content that clears them the first time.
YouTube
- Title: up to 100 characters; the characters
<and>are not allowed. - Description: up to 5,000 bytes — bytes, not characters. Emoji and non-Latin scripts use multiple bytes each, so they hit the limit sooner than plain text.
- Tags: up to 500 characters combined across all tags.
- Thumbnail: JPEG or PNG, up to 2 MB.
- Required settings: a visibility choice and a made-for-kids declaration on every video.
- Caption: up to 2,200 characters.
- Feed and carousel aspect ratio: between 4:5 (0.8) and 1.91:1.
- Feed image: up to 8 MB.
- Carousel: 2–10 items.
- Reels: 3–900 seconds.
- Story video: 3–60 seconds.
- A lone video always publishes as a Reel.
TikTok
- Caption: up to 2,200 characters, counted as code points.
- Photo posts: up to 35 images.
- Every publish requires a privacy selection and your consent — see publishing to TikTok for the full flow.
- Branded content cannot be posted as private.
X
- Text: 280 weighted characters — every URL counts as 23 regardless of its real length, and most emoji count as 2.
- Media: up to 4 images or 1 video per post.
- Image: up to 5 MB. GIF: up to 15 MB. Video: up to 512 MB and 140 seconds.
- Duplicate text is rejected by X — reposting identical copy fails, so vary the wording.
- Commentary: up to 3,000 characters.
- Media: 1 video or 1 image (JPG or PNG) per post.
- API budget: 150 requests per day per member, resetting at midnight UTC. Heavy posting and retries draw from the same budget.
What the composer checks before publish
While you draft, the composer validates against every limit above and flags problems in the live previews — an over-long caption, an oversized thumbnail, a video outside a platform's duration window. Drafts save leniently, so unfinished work is never blocked; the hard limits are enforced at publish, and a destination that fails validation won't be sent until it's fixed.