Fun · live filter

한국어

Break the obscenity filter

Obscenity is an open-source profanity filter. It does not list every variant by hand. It rewrites the text with transformers (leetspeak, lookalike Unicode, collapsed repeats), then checks a word list. Try to break it.

What it is

Not an ML model. “Transformer” here means text rewrites: lowercase, confusable characters, leet decoding, skip junk symbols, collapse duplicated letters. The English preset comes with a blacklist and a recommended set of those rewrites.

The challenge

Write something a person would reject, but the filter calls clean. Or trip a false positive on clean text. Leetspeak and fancy Unicode usually fail. Inventiveness sometimes works.

Default transformers

  • ASCII lowercaseNormalize case before matching.
  • ConfusablesMap lookalike Unicode back to Latin letters.
  • LeetspeakDecode 0→o, 1→i, @$→a/s, and the usual set.
  • Collapse duplicatesTurns stretched letters (f***kk-style runs) back down.
  • Skip non-alphabeticIgnore symbols stuck between letters.

Warm-ups

These usually get caught. Start here, then invent your own. English word list only.

Results appear as you type.

Uses the npm package obscenity (English preset). A heuristic, not a moderation policy. obscenity on npm·All Fun experiments

Break the obscenity filter