Thread Splitter — split long text by each service's own counting rule

Splits long text into a thread using each service's real counting rule: X weights CJK characters as 2 and counts any URL as 23. It recomputes the room for the numbering itself, so the last post never goes over, and it never cuts inside an emoji or a URL.

Paste your text and the running count appears here.

Everything happens in this page. Your text is never sent anywhere.

How to use it

Paste your text, pick where you are posting, and press Split. Each post gets its own box showing how many characters that service will count it as, plus a copy button, so you can work down the list and post them in order. Numbering goes at the end by default; choose No numbering if you add your own. The margin field is for people who append the same signature or credit to every post: the splitter narrows the working room by that many characters, so nothing goes over once you have added it.

Why "cut every 280 characters" goes wrong

Most thread splitters chop the text at a fixed number of characters. That is not what the services actually count.

The counting rule changes from service to service. X allows 280, but it weights characters: Latin letters count as 1 while CJK characters and emoji count as 2. A post written in Japanese therefore fits about 140 characters, and one written in English fits 280 — from the same limit. On top of that, X counts every URL as exactly 23 characters no matter how long it really is, because links are rewritten to t.co. Bluesky does neither: one grapheme is one character, and a 60-character URL costs 60. A splitter with one hard-coded number is wrong on at least one of these.

The numbering eats into the text. Adding (1/5) costs five characters plus the separator. The awkward part comes next: if that shrinkage pushes a nine-post thread to ten, the numbering grows a digit and shrinks the room again. Anything that splits first and labels afterwards misses that second step, and the last post ends up over the limit. This tool recomputes the room until the post count stops moving.

An emoji is not one character. Family emoji and skin-tone emoji are several code points joined by zero-width joiners. Cut one in the middle and you get a different picture, or a box. This tool works in grapheme clusters, so it never cuts inside one — and it treats each URL as a single unit for the same reason.

Where it cuts

It fills the available room, then walks backwards looking for a break. In order of preference: a blank line, then a line break, then a sentence ending or closing bracket, then a comma or a space. If the only candidate sits in the first half of the room, it is ignored and the text is packed to the end instead — a post using a third of its room reads worse than one that breaks mid-sentence. When several candidates are equally good the last one wins, so posts normally fill 80% or more.

Checking the arithmetic

Take 1,370 Japanese characters on X. With no numbering that is 280 ÷ 2 = 140 per post, so ten posts. Now add numbering. Assuming a single post, (1/1) plus a newline costs 6, leaving room for 137 — and 137 × 10 = 1370, which still looks like ten. But ten posts means (10/10) plus a newline, which costs 8, leaving 136 — and 136 × 10 = 1360. Ten characters do not fit, so the real answer is eleven posts. A splitter that labels after cutting would hand you a tenth post of 282 characters.

Things to know

Last updated: 2026-09-04

Ad