Inspiration
AI drafts are everywhere now, and they all sound the same: "In today's fast-paced world", "it's important to note", "a rich tapestry". Most "humanizer" tools are paid black boxes that send your text to a server and give you no idea what they changed. I wanted one that is free, shows every edit, and can run entirely on your own computer.
What it does
- Finds the tells. About 80 English rules catch stock openers, filler, hype words, the "isn't just X, it's Y" construction, em dashes and chatbot sign-offs. There are starter lists for German, Spanish, French and Portuguese.
- Rewrites the text with a language model, either Qwen3 4B running in the browser on WebGPU or your own API key (Gemini has a free tier).
- Shows every change. Removed words are struck through and added words underlined. Click any sentence to see why it changed, accept it, restore the original or type your own.
- Checks for AI. An open AI-text detector runs in the browser, scores the text, colours each part green, yellow or red, and highlights the sentences pushing the score up. One click rewrites just those.
Nothing leaves your browser unless you choose to use an API key. There are no accounts, no analytics and no server.
How I built it
- App: Svelte 5, TypeScript and Vite, deployed as a static site on GitHub Pages with a strict Content Security Policy.
- Protecting facts: before the model sees a sentence, numbers, names, links and quotes are swapped for tokens like
[[3]]. Every rewrite is then validated: tokens intact, no new numbers or names, same language, sensible length, and a meaning check with a multilingual sentence-embedding model (MiniLM, via Transformers.js). Anything that fails gets retried or keeps your original. - On-device rewriting: WebLLM runs Qwen3 4B, 1.7B or 0.6B depending on the graphics card. Rewriting a whole paragraph at once moved detector scores far more than going sentence by sentence, so the app does that and then maps the new sentences back onto the old ones for review.
- The AI check: I took desklib's open detector (DeBERTa-v3-large, MIT licence) and made it fit in a browser. Plain int8 quantization wrecked it: its scores correlated with the original at only 0.64. So I stored only the weights as int8 and kept the maths in fp32. That took it from 1.7 GB to 438 MB with scores within 0.13 logits of the original. I published it as
YatoVoid/forsakeai-detector. - Finding the culprit sentences: detectors can't judge a single sentence; there's too little text. So the app scores a page-sized window, removes each sentence in turn, and flags the ones whose removal drops the score most.
- Rewriting flagged sentences: the model writes six versions of each one, and the detector scores each version in place and keeps the most human one. On a stock AI essay this took the score from 99% to 55% in two rounds.
Challenges
- Two models, one 6 GB graphics card. The rewrite model and the detector don't fit at the same time, so they take turns: generate all the versions first, unload, load the detector, score.
- Pause and resume broke on real hardware. After a long pause, resuming failed with "model not loaded". The cause was that WebLLM only accepts a new request after the previous reply has been read to the end, and pausing stopped reading partway through.
- Small models drift. They slip into French mid-paragraph, turn questions into statements and add a full stop after a quote that already ends in one. Each of these became a validation check with a test.
- Detectors disagree. On marketing copy, desklib still says 100% AI after a full rewrite, while a commercial detector rated the same text 8%. The app labels its score as one open detector's opinion, not proof.
What I learned
- Detectors read pages, not sentences, and the structure of a text gives it away as much as the words.
- A full rewrite of the same article scored 97% on one run and 31% on the next, so checking afterwards matters as much as rewriting.
- Measuring beats guessing. I tested every prompt and model change against a detector and an embedding meaning check before shipping it.
Results
| 370-word article written by Gemini | 77.5% AI | 21% | 5.1% | | Sample ad in the app | 90% AI | 68% | 8% |
These scores come from a commercial detector, rewriting on device. No tool can promise how a detector will score your text, so read the result before you use it.
What's next
- Native-speaker review of the German, Spanish, French and Portuguese rules.
- Better handling of marketing copy, where the open detector and commercial ones disagree most.
Built With
- github
- hugging-face
- indexeddb
- onnx
- onnxruntime
- playwright
- python
- pytorch
- qwen
- svelte
- transformers.js
- typescript
- vite
- vitest
- web-workers
- webgpu
- webllm


Log in or sign up for Devpost to join the conversation.