Skip to content
FacePalm Lab

How Our Tools Work

Every FacePalm Lab tool explained. What it does, how it works, where it falls short and what happens to your data.

Last updated

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.

StyleMarks aboveMarks throughMarks belowExtra
GlitchUp to 1Up to 2Up to 1About 70 percent of letters
ZalgoUp to 10Up to 2Up to 10Every letter
CursedUp to 4Up to 1Up to 4Some letters swapped for lookalikes
CreepyUp to 1NoneUp to 8About 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.

StyleDefault settingFull intensity
Glitch1.9 characters2.2 characters
Cursed2.7 characters4.1 characters
Creepy2.5 characters4.0 characters
Zalgo6.3 characters10.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.

StyleCapitalsSmall lettersDigits
Bold, bold sans, double struck, typewriter, bubble26 of 2626 of 2610 of 10
Italic, cursive script, gothic26 of 2626 of 26None
Squares and black squares26 of 26Shown as capitalsNone
Small capsShown as small caps25 of 26, no xNone
Superscript19 of 2625 of 26, no q10 of 10
SubscriptNone17 of 2610 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.