Combining-diacritic stacking, with random pools
Unicode combining marks attach to the previous character and are drawn relative to its glyph. There are three rendering zones: above (combining marks like U+0300, U+0301, the accent block at U+030x), middle (overlay marks like U+0334, U+0335, U+0336 used by strikethrough), and below (subscript marks at U+031x and U+032x). Stacking many marks at once produces the chaotic, dripping Zalgo effect.
This tool maintains three pools of combining marks (above, middle, below). For each input character it picks a random count of marks from each zone and appends them after the character. The total number of marks per character is controlled by the Intensity preset: light (1 above, 0 middle, 1 below), medium (3, 1, 3), or heavy (6, 3, 6). Custom mode draws a random integer between Min and Max for each zone independently.
The output is real Unicode characters, no styling, so it pastes anywhere. Heavy intensity can produce strings 20-30x longer than the input in code-unit count and may cause line-spacing issues in fixed-height layouts. Some apps (older Slack, certain mobile Twitter clients) cap how many combining marks they will render; the rest are dropped silently.
How to use zalgo glitch text generator
- 1Paste or type your text into the input panel on the left.
- 2Pick an Intensity: light, medium, heavy, or custom.
- 3For custom mode, set Min and Max counts (each 0-50).
- 4Toggle Above, Middle, Below off to skip marks in that zone.
- 5Set Mode to
Partialfor a smaller diacritic pool, or Skip Spaces on to leave whitespace untouched. Click Copy when done.
Keyboard shortcuts
Drive TextResult without touching the mouse.
| Shortcut | Action |
|---|---|
| Ctrl F | Open the find & replace panel inside the input Plus |
| Ctrl Z | Undo the last input change |
| Ctrl Shift Z | Redo |
| Ctrl Shift Enter | Toggle fullscreen focus on the editor Plus |
| Esc | Close find & replace, or exit fullscreen |
| Ctrl K | Open the command palette to jump to any tool Plus |
| Ctrl S | Save current workflow draft Plus |
| Ctrl P | Run a saved workflow Plus |
What this tool actually does
Three intensity presets plus custom
Light stacks 1 above, 0 middle, 1 below per character. Medium stacks 3, 1, 3. Heavy stacks 6, 3, 6. Custom uses your Min and Max values to draw a random count per character per zone.
Zone toggles cut by direction
Turn off Above, Middle, or Below to suppress marks in that rendering zone. Useful for producing line-break-friendly variants: above-only zalgo does not push down on the line below, below-only does not encroach on the line above.
Two diacritic pool sizes
The Mode dropdown picks the size of the random pool. Full uses the full Unicode combining-mark catalogue per zone (dozens of marks). Partial uses a smaller hand-picked subset (about 6 marks above, 2 middle, 6 below) for a less chaotic look while still recognisably "zalgo".
Random per character
Counts and mark choices are randomised per character, so two consecutive identical letters render with different mark stacks. The same input run twice produces different output. There is no seed control; output is non-deterministic by design.
Skip Spaces optional
By default, marks are stacked on every input character including spaces, which can produce a connected dripping effect across word boundaries. Turn on Skip Spaces to leave whitespace bare and break the effect at word breaks.
Worked example
Medium intensity, all three zones on, full pool. The exact mark choices and counts vary on each run because the pool draw is random. Heavy intensity adds many more marks above and below, producing a dripping look.
hello world
h̷̢̛͝e̴͒͠l̶͛̕l̸̔͝o̴͐͝ ̷̡̛w̸̽͠o̴̧͝r̶̾͠l̷͊͝d̸̛͝
Settings reference
| Setting | Effect on output |
|---|---|
Intensity = Light |
About 1 mark above and 1 below per character. Subtle glitch. |
Intensity = Medium (default) |
About 3 above, 1 middle, 3 below per character. Recognisable zalgo without overflow. |
Intensity = Heavy |
About 6 above, 3 middle, 6 below per character. Dripping, line-overflowing effect. |
Intensity = Custom |
Uses Min and Max for the per-zone random count. |
| Min / Max | Integer 0-50. Random count per character is drawn uniformly between Min and Max. Active only in custom mode. |
| Above / Middle / Below toggles | Off = no marks placed in that zone. Use Above-only to keep zalgo from intruding on the line below. |
Mode = Full |
Random pick from the full Unicode combining-mark pool per zone (dozens of marks). |
Mode = Partial |
Random pick from a smaller hand-picked subset for a tighter, less chaotic glitch. |
| Skip Spaces = on | Whitespace passes through bare. Marks attach only to non-whitespace characters. |
| Output is non-deterministic | Each run produces different mark choices and counts. No seed control. |