Text Repeater
Repeat any text 1 to 10,000 times with custom separator: newline, space, comma, pipe, or your own. Free for stress tests, ASCII art, and chat effects.
Text Repeater - Repeat Text Multiple Times Online
Text Repeater is a single-purpose string-multiplier built on JavaScript's String.prototype.repeat() and Array.fill().join() — the same primitives a developer would use in code. You provide an input string (any length up to typical browser textarea limits, around 1 MB), a repeat count (1 to 10,000), and an optional separator. The tool builds the output by joining the input copies with the separator: no separator concatenates them like 'abcabcabc', newline gives stacked lines, comma gives CSV-style 'abc,abc,abc', and custom lets you type any string including escape sequences (\t for tab, \n for newline, or even multi-character separators like ' >> ' or '---'). The 10,000 cap is enforced to keep browsers responsive: at that limit, a 1 KB input produces a 10 MB output which is the practical browser/textarea handling limit before paste lag becomes noticeable. The output character counter shows the exact final length so you can pre-empt SMS or Twitter character limits. Real legitimate uses (which our docs emphasise over the spam framing): generating fixture test data for backend stress tests, populating mock CSV files for ETL pipeline validation, building visual ASCII art separator lines ('═' × 80), creating large multiline test payloads for input-validation security checks, generating long-form chat-effect messages for game-streaming overlays, and producing repeated padding for fixed-width terminal layouts.
What real engineering use cases exist beyond the 'spam friends' framing?
Several. QA engineers use it to build large payload strings for load-testing form fields, API endpoints, and database VARCHAR columns to find off-by-one truncation bugs. Frontend developers paste long repeated content to stress-test CSS overflow, text-wrap, and pagination logic. Security testers generate boundary-condition strings (e.g., 4096+ char payloads to test buffer-handling). Data engineers use it for mock-data CSV generation when seeding test databases. Game streamers produce repeating ASCII separator bars for OBS overlays. Translators copy-paste a repeated marker like '||TRANSLATE_HERE||' to identify untranslated zones in long documents.
How does it compare to writing a one-liner like 'abc'.repeat(100)?
Functionally identical for simple cases — the tool literally calls String.prototype.repeat() under the hood. The UI advantages are: visual separator picker (you do not have to remember array.fill+join syntax for separators), a character counter so you preview output size before generating, input validation to prevent runaway numbers (e.g., accidentally typing 10000000 and crashing your tab), and one-click copy/clear so you do not switch context to a console. For a quick 'abc'×3, the console is faster. For 10,000 reps with a custom separator that you want to paste somewhere, the UI saves clicks.
What happens with multi-line input — does each line get repeated separately or the whole block?
The whole block is treated as a single string and repeated as a unit. So input 'line1\nline2' repeated 3 times with newline separator gives 'line1\nline2\nline1\nline2\nline1\nline2' (three copies of the two-line block, joined by newlines between each pair, which means within the output you cannot tell where one repetition ends and the next begins). If you want each line repeated N times in place (line1×3, line2×3), do not use Text Repeater — copy each line into a Text Splitter, repeat individually, and paste back. Or write a small loop in your editor.

Why is the maximum capped at 10,000 repetitions?
Three reasons. First, output size: even a 100-char input × 10,000 reps = 1 MB, which is around the textarea performance ceiling in Chrome/Firefox before paste/copy lag becomes noticeable. Second, browser stability: very large strings (>100 MB) can crash the tab or trigger out-of-memory in lower-RAM devices. Third, user safety: an accidental typo like '100000' instead of '100' would generate a 100 MB output and lock the UI. The 10,000 cap is a comfortable practical limit. For larger outputs use a one-liner script: `'text'.repeat(50000)` in browser console or `print('text' * 50000)` in Python.
How do I get a separator that includes both a newline and a divider line (like '---' on its own line)?
Use Custom separator and type '\n---\n' literally — the tool interprets the escape sequences. So input 'Section' with separator '\n---\n' repeated 3 times produces:\nSection\n---\nSection\n---\nSection. Useful for generating markdown-style document scaffolds, EXIF metadata blocks, or boilerplate-separated test fixtures. Custom separator can be up to 256 characters and can include any printable chars plus the standard escapes (\n, \t, \r, \u00A0).
Does it really produce identical bytes — what about trailing newline or separator after the last copy?
No trailing separator. Output is built via Array.fill(input, count).join(separator), so the separator appears exactly count-1 times — between copies but not at the start or end. So 'a' repeated 3 times with separator ',' gives 'a,a,a' (no trailing comma), not 'a,a,a,'. This matches the join() behavior you would get in code. If you do want a trailing copy of the separator (e.g., for CSV row terminators), append it manually after copying, or use input '<text><separator>' and repeat with No Separator option.
Should I worry about platform spam filters when posting repeated text?
Yes. WhatsApp, Facebook Messenger, Discord, Slack, and most social platforms detect repeated identical content and either rate-limit, hide, or ban the account responsible. The 'spam your friends' use case is a meme but a real account risk — repeated identical messages trigger anti-flood algorithms that have improved a lot since 2020. Legitimate engineering use cases (test data, ASCII art) are fine in private contexts (your own browser, your own dev environment). Public spam can get you suspended. Use the tool responsibly; the WuTools team blocks no use case but we encourage you to think about consent and platform rules.
