FacePalm Lab tools are built to be fast, private and easy to understand. This page explains the method behind every tool that is live today, and it grows as new tools launch.
Our general approach
- On device first. Whenever possible, a tool runs in your browser. Your text and photos are processed on your own phone or computer.
- No accounts. We do not ask for a name, email or login, so there is nothing to link your results to you.
- Load only when needed. Heavier code, such as a vision model, downloads only after you start using a tool, which keeps pages fast.
- Honest limits. Each tool page includes a section on accuracy and limits, and this page explains the method in more depth.
Text tools
Our text tools include the glitch, zalgo, cursed, creepy, upside down, strikethrough, small, fancy, cursive, bold, aesthetic, Discord and Instagram font generators, and the invisible text generator. They all share one small engine written in TypeScript that runs entirely in your browser. No text is ever sent to a server.
Unicode font styles
Bold, italic, script, gothic, double struck, monospace, bubble and square styles are not real fonts. They are separate characters in the Unicode standard, mostly from a block called Mathematical Alphanumeric Symbols. The engine keeps a map from each plain letter to its styled twin and swaps them one by one. Where Unicode filled a gap with a letter from another block, such as the script capital B, the engine uses that letter so the style stays complete. This one map powers the fancy text, bold, cursive, aesthetic, Discord and Instagram font tools.
Combining mark effects
Glitch, zalgo, cursed and creepy text use combining marks. These are characters that attach to the letter in front of them. The engine sorts the marks into three groups, those drawn above a letter, through it and below it.
| Style | Marks above | Marks through | Marks below | Extra |
|---|---|---|---|---|
| Glitch | Up to 1 | Up to 2 | Up to 1 | About 70 percent of letters |
| Zalgo | Up to 10 | Up to 2 | Up to 10 | Every letter |
| Cursed | Up to 4 | Up to 1 | Up to 4 | Some letters swapped for lookalikes |
| Creepy | Up to 1 | None | Up to 8 | About 90 percent of letters |
The numbers above apply at full intensity. The intensity slider scales them down. A seeded random generator picks the marks, so the same text and settings always give the same result until you press Shuffle.
Upside down, mirror and strikethrough text
Upside down text swaps each character for a rotated lookalike, then reverses the order so it reads correctly when the screen is turned around. Strikethrough and underline styles add one line mark after every character, which joins into a continuous line.
Small text
Small caps, superscript and subscript use letters from phonetic and modifier blocks of Unicode. Not every letter has a small version, so the engine leaves a letter as it is when no match exists.
Invisible text
The invisible text generator copies blank characters such as the Hangul filler and the braille blank. These look empty but are not removed like ordinary spaces, which is why they work for blank names and spacing.
Grapheme safety
The engine walks through text one grapheme at a time. A grapheme is what you see as a single character, even when it is made of several code points, like an emoji with a skin tone. This means styles never split an emoji or a letter that already has an accent.
Testing
Each transform has automated tests for empty input, emoji, family emoji, surrogate pairs, and reserved gaps in the Unicode font blocks. Copy buttons are tested on desktop and mobile browsers.
Measured numbers
These figures come straight from the engine that runs our text tools. We measured them in October 2026 and update them whenever a method changes.
How many marks the engine can use
The combining mark engine draws from 102 marks in the Combining Diacritical Marks block of Unicode. 53 sit above a letter, 5 cut through it and 44 hang below it. Glitch text uses a few of them, zalgo text uses the most.
How much longer each style makes your text
Combining marks are separate characters, so styled text is longer than it looks. We ran each style 200 times with different random seeds on the sentence The quick brown fox jumps over the lazy dog, then counted Unicode characters for every visible character, spaces included.
| Style | Default setting | Full intensity |
|---|---|---|
| Glitch | 1.9 characters | 2.2 characters |
| Cursed | 2.7 characters | 4.1 characters |
| Creepy | 2.5 characters | 4.0 characters |
| Zalgo | 6.3 characters | 10.0 characters |
So a 10 letter name in zalgo at full intensity uses about 100 characters. That is why zalgo fills short limits, such as usernames and nicknames, so quickly, and why a lower intensity is the better choice for names.
Strikethrough, slashed and underline styles add one line mark after every character, so they always double the length. Small caps, upside down text and the wide vaporwave style keep the same count. Most bold, italic, script and gothic letters come from a part of Unicode outside the basic range, so some apps and older systems count each of those letters as two characters.
Letter coverage of each style
Not every style has a full alphabet, because Unicode only encodes some letters in each style.
| Style | Capitals | Small letters | Digits |
|---|---|---|---|
| Bold, bold sans, double struck, typewriter, bubble | 26 of 26 | 26 of 26 | 10 of 10 |
| Italic, cursive script, gothic | 26 of 26 | 26 of 26 | None |
| Squares and black squares | 26 of 26 | Shown as capitals | None |
| Small caps | Shown as small caps | 25 of 26, no x | None |
| Superscript | 19 of 26 | 25 of 26, no q | 10 of 10 |
| Subscript | None | 17 of 26 | 10 of 10 |
Where a style has no version of a letter, the engine keeps the plain letter so your words stay readable. Where a style has no capitals, it uses the small version of the letter instead.
Privacy by design
The text you type stays in your browser. We do not record the text you type. Read the privacy policy and biometric notice for how we handle data.
Corrections
If you spot an error in a method or a result, please tell us through the contact page. We update this page whenever a method changes.