Zalgo Text Generator
Generate creepy Zalgo text using Unicode combining characters.
About this tool
Zalgo text is a quirky Unicode phenomenon that adds stacked diacritical marks above, below, and through the letters of normal text, creating a deliberately glitchy and creepy visual effect. This technique exploits Unicode combining characters in the range U+0300–U+036F, invisible marks that attach to preceding characters and extend the text boundaries in unpredictable ways. The aesthetic gained popularity through internet memes and horror-themed communities, where the chaotic appearance perfectly captured a sense of digital corruption or supernatural disturbance.
Using the Zalgo Text Generator is straightforward: simply type or paste your message into the input field, choose your desired intensity level (low for subtle marks, medium for classic creepy effect, or high for overwhelming chaos), select the direction of marks (above, below, or both), and click generate. The tool processes each character independently, adding random combinations of combining diacritics to create a unique result every time. You can then copy the generated text and paste it anywhere that accepts standard Unicode—social media posts, messaging apps, gaming chat rooms, or creative writing projects.
Keep in mind that while Zalgo text is technically valid Unicode and will display in most modern browsers and apps, some platforms restrict or filter combining characters for security or readability reasons, so the effect may not render perfectly everywhere. The fun of Zalgo text lies in its unpredictability and the shock value of watching clean, readable text transform into something delightfully unhinged. Whether you're decorating a spooky announcement, creating an inside joke, or just experimenting with Unicode's quirky capabilities, this tool gives you full creative control over the degree of visual chaos you want to unleash.
Frequently Asked Questions
Code Implementation
import random
COMBINING_UP = list(range(0x0300, 0x0316)) + list(range(0x033D, 0x0345)) + list(range(0x034A, 0x034D))
COMBINING_DOWN = list(range(0x0316, 0x0333)) + list(range(0x0339, 0x033D))
COMBINING_MID = list(range(0x0334, 0x0339)) + [0x0333]
def zalgo(text: str, intensity: int = 2, direction: str = 'both') -> str:
counts = {1: (1, 1, 1), 2: (3, 3, 2), 3: (8, 8, 5)}
up_n, down_n, mid_n = counts.get(intensity, (3, 3, 2))
result = []
for char in text:
result.append(char)
if direction in ('up', 'both'):
result.extend(chr(random.choice(COMBINING_UP)) for _ in range(random.randint(1, up_n)))
if direction in ('down', 'both'):
result.extend(chr(random.choice(COMBINING_DOWN)) for _ in range(random.randint(1, down_n)))
result.extend(chr(random.choice(COMBINING_MID)) for _ in range(random.randint(0, mid_n)))
return ''.join(result)
print(zalgo('Hello', intensity=2, direction='both'))
Comments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.