Social Media Caption Formatter: Character Counter, Line Breaks and Thread Splitter
Free caption formatter for Instagram, TikTok, LinkedIn, X and more. Exact character counts, the “…more” cutoff, line breaks that stick, hashtag cleanup and a thread splitter.
What it does
Paste or write a caption and this tool checks it against Instagram, TikTok, LinkedIn, X, Threads, Bluesky, Facebook and YouTube descriptions at the same time. For each platform you see the exact character count against the limit, a phone-style preview that shows where the “…more” fold falls, and warnings for the things that quietly hurt a post: too many hashtags, duplicate tags, clickable-link surprises, and emoji-heavy text.
It also fixes the annoying parts of caption writing. It keeps your paragraph breaks alive on apps that squash blank lines, turns plain dashes into emoji bullets, tidies hashtags, styles words in bold or italic Unicode (the same lettering as our fancy and bold text generator), and splits a long post into a numbered thread for X, Threads or Bluesky.
How it works
Counting that matches what people see. Characters are counted as visible symbols, not raw code units, so a family emoji or a flag counts as one, the way the platforms show it. X uses its own weighted rule: a link always costs 23, and emoji and most non-Latin characters cost 2 each. The tool applies that rule, so an emoji-heavy tweet does not surprise you at the last second.
Line breaks that survive. Instagram, TikTok and many scheduling apps trim or merge empty lines, which flattens your spacing. The fix is an invisible character placed on each blank line so the app sees “content” there. You can choose Braille blank, Hangul filler, zero-width space or non-breaking space, or let the tool pick what suits each platform. Platforms change how they treat these characters, so post a test to a private account before you rely on one.
The “…more” fold. Feeds cut long captions after roughly the first 100 to 210 characters, depending on the app and whether you are on mobile. The preview shows what sits above the fold and dims the hidden part, so you can rewrite your hook line while it still matters. These cutoffs are approximate and platforms adjust them.
Threads split at natural breaks. The splitter cuts at paragraphs first, then lines, then sentences, then words, and never in the middle of a link. It reserves room for “1/N” numbering and re-counts until the numbers fit, even when a thread passes nine posts.
Hashtags handled as text. Tags are found in any script (#café and #日本語 work), links with #section in them are ignored, and C# is not mistaken for a tag. Bold or italic styling skips hashtags, @mentions and links, because a styled hashtag stops working.
How to use it
- Paste your caption into the editor (or press Example to see how it behaves). Tidy-on-paste removes zero-width junk, odd spaces and Windows line endings as you paste; for a heavier scrub of a long draft, run it through the Text Cleanup Toolkit first.
- Pick a platform chip under the editor. Watch the counter, the warnings and the phone preview.
- Use the toolbar: convert
-lists to emoji bullets, drop in a divider, decorate a line, add an emoji, or style a selected word. - In the sidebar, choose your line-break method and where hashtags should go: left in place, moved to the end, or split into a separate “first comment”.
- Open All platforms to compare every app side by side and copy the version for each one.
- Open Thread splitter for anything over the X limit, then copy posts one at a time.
- Press Copy caption (or Copy first comment) and paste it into the app.
Save your usual calls to action, disclosures and sign-offs as snippets so you can drop them in with one click. Your draft and snippets are remembered in this browser only.
Supported platforms and limits
| Platform | Limit used | Fold (approx.) |
|---|---|---|
| 2,200 characters, 30 hashtags | about 125 characters | |
| TikTok | 2,200 characters | about 100 characters |
| 3,000 characters | about 210 desktop, 140 mobile | |
| X | 280 (weighted) | no fold |
| Threads | 500, one topic tag | no fold |
| Bluesky | 300 | no fold |
| 63,206 | about 477 desktop, 125 mobile | |
| YouTube description | 5,000 | about 157 |
Every limit can be overridden in the sidebar, because platforms change them.
Privacy
Everything runs in your browser. Your captions are never uploaded, and the tool needs no account. It works offline after the page has loaded.
FAQ
Why do my blank lines disappear on Instagram?
Some apps and scheduling tools trim empty lines. Filling each blank line with an invisible character makes the app treat it as content. Choose the Braille blank option, or leave the setting on Automatic, then test on a private account.
Do invisible characters hurt accessibility or reach?
They add nothing visible, and most screen readers skip them, but a few may pause. Use them only where you need them. The tool leaves platforms that keep blank lines natively, such as LinkedIn and X, with plain blank lines by default.
Is bold or italic text safe to use in captions?
It is Unicode lookalike lettering, not real formatting. Screen readers often read it letter by letter or skip it, and it is not searchable. The tool warns you when a caption contains styled text, and it never styles your hashtags or links.
How is the X character count different?
X counts every link as 23 characters and gives emoji and most non-Latin characters a weight of 2. This tool applies the same weighting, so 140 emoji fill a post even though they look short.
How many hashtags should I use?
Instagram allows 30, but current advice is far fewer, and other platforms work best with one to five. The Hashtags tab lists every tag, flags duplicates and digit-only tags, and can convert #my_tag to #MyTag, which screen readers read properly. If the repetition is in the wording rather than the tags, the Duplicate Word Finder will catch it.
Does the “…more” preview match exactly?
It is a close guide, not a guarantee. Apps change where they cut, and the cutoff also depends on the device and how many line breaks you use.
Registration note (plain text, not for the page)
- Suggested id:
caption-formatter(matches the existing backlog entry) - Display name: Social Caption Formatter
- Category: Social & Creator
- Tier: as in the existing backlog entry
- Blurb: Check a caption against Instagram, TikTok, LinkedIn, X and more: counts, “…more” fold, invisible line breaks, hashtag cleanup and a thread splitter.
- Send-to target: yes,
handoffShapes: ['text']. The tool reads an incoming text handoff on load and can send its output as text. - Sends to other tools:
TK.createSendToButtonis wired for shapetext, and it sits inside a collapsed “Send to another tool” section. - Interlinking: three in-body links are already written into the copy (bold-text-gen, text-cleanup, dup-word-finder). All three are shipped (script tag present) and their registry
url:values were used. - Shared helper I wished existed: a shared grapheme-safe
TK.graphemes()/ character counter in core.js. Several tools (listing-formatter, this one) each carry their own copy. - Persistence note (Section 2a): this tool accepts no files, only pasted text, so it stores the draft and snippets in
TK.settingsrather thanTK.filePersist.