Text Repeater
Repeat anything up to 10,000 times — words, emoji, Arabic, Hindi. The result builds as you type, and tells you when it has outgrown the box you are pasting it into.
What breaks when you repeat non-Latin text
Repeating a string looks like the simplest operation in software, and it is — right up until the string is not English. Every text repeater online handles Latin letters correctly and then quietly mangles everything else. Here is what actually goes wrong, and what this page does instead.
| Input | The common failure | Here |
|---|---|---|
| Emoji | A family emoji like 👨👩👧 is several emoji joined by invisible zero-width joiners. Tools that count with JavaScript’s .length report it as 8 characters, so a 100× repeat is reported at 800 instead of 100. | Counted as grapheme clusters — what a reader sees is what gets counted. |
| Arabic | Arabic letters change shape depending on their neighbours. Repeating أحبك inline with no separator can visually join the end of one copy to the start of the next, producing letterforms that were never typed. | New line is the default separator precisely because it keeps each copy a separate word. Inline is still available when you want it. |
| Hindi and other Indic scripts | Matras are combining marks. Splitting or counting them as standalone characters inflates every total and can strand a vowel sign at a boundary. | Grapheme counting keeps each syllable whole. |
| Any script beyond the basic plane | Mathematical, historic and emoji characters take two UTF-16 units each, so character counts come out roughly double. | The counts on both panes are cluster counts, so they match what the destination field will measure. |
The number that actually stops you: the field limit
Repeating text is easy. Knowing whether the result can be pasted anywhere useful is the part every other tool leaves you to discover by failure. Ten copies of a short phrase clears every limit; a thousand copies clears almost none. The panel beside the output answers that before you copy, not after.
| Destination | Ceiling | Roughly how many copies of a 12-character phrase |
|---|---|---|
| X / Twitter post | 280 characters on the free tier | about 21 |
| Instagram caption | 2,200 characters | about 169 |
| LinkedIn post | 3,000 characters | about 230 |
| TikTok caption | 4,000 characters | about 307 |
| WhatsApp message | 65,536 characters | about 5,000 |
Those counts assume a new line between copies, which costs one character each. Switch the separator to none and you fit slightly more; switch to a numbered list and you fit noticeably fewer, since every line carries its own index.
Separators are not decoration — they change the result
The gap between copies is the setting people skip, and it decides whether the output is usable. Five options, and each exists for a different job:
New line keeps every copy on its own row. It is the safest default in any script, and the only one that reliably prevents Arabic and Indic letterforms from joining across the boundary. It costs one character per copy.
Space produces a running block of text that wraps naturally — what you want for a chat message rather than a list.
Comma gives you a delimited series you can paste into a spreadsheet cell or a form field that expects comma-separated values.
Nothing at all concatenates the copies with no gap. This is the one to use for test strings and padding, and the one to avoid for real words — with no separator, the last letter of one copy and the first of the next are treated as neighbours by the text shaper, which changes how connected scripts render.
Numbered list prefixes each copy with its index. Useful for building numbered templates, and the only option where the output grows faster than the input, because the numbers themselves take space — a thousand copies adds roughly four thousand characters of numbering alone.
A word about where this gets used
Most people arrive here for one of four reasons, and it is worth being honest about which ones work.
Emphasis in a message — repeating a word or an emoji for effect in a chat. This works, and it is the most common use by a wide margin.
Filler and test data — developers and designers padding a layout to see how it behaves with long content. The no-separator mode exists for this.
Templates — generating a numbered list, a repeated line for a form, or a block to edit down afterwards. The numbered mode covers it.
Flooding a chat — this is the one that does not work. Messaging platforms rate-limit repeated identical content, and pasting thousands of copies into a group typically gets the message collapsed, the send throttled, or the account temporarily restricted. The tool will happily generate 10,000 copies; the platform on the other end is the constraint, and no generator changes that.
About this repeater
Everything happens in your browser. The text is never uploaded and never stored, which matters more here than it might seem — people paste drafts, names and private messages into repeaters without thinking about it. Closing the tab is the entire deletion process.
The cap is 10,000 copies. That is not a licensing limit, it is a rendering one: past roughly ten thousand repetitions of a short phrase, the browser is holding a string long enough that scrolling the output box becomes visibly slow on a phone, and no destination field accepts anything near it anyway. If you genuinely need more, repeat the result a second time.
One deliberate omission: there is no “download as image” button. Repeated text is text — its value is that it can be pasted, and an image cannot be. Tools that add the button are optimising for a feature list rather than for what anyone does with the output.