# Text Rewriter > Rewrite a piece of text for a different reader, and see exactly what changed. > A register and style rewriter with a word-level diff and a fact-preservation > check that both run in the browser, free, with or without a paid rewrite. URL: https://text-rewriter.skillsafe.ai/ API: https://text-rewriter.skillsafe.ai/api.html Tokens: https://text-rewriter.skillsafe.ai/tokens.html Platform: SkillSafe (https://skillsafe.ai/) ## What it does You paste text, say who has to read it now, and set six dials. It returns the rewritten text plus an account of every edit: which axis the edit served, the verbatim before and after spans, and why that edit helps this particular reader. The dials: - formality much_plainer | plainer | keep | more_formal | much_more_formal - technicality explain_for_lay | less_jargon | keep | more_technical - length much_shorter | shorter | keep | longer - warmth warmer | keep | cooler - voice prefer_active | keep | prefer_passive - convention keep | british | american ## What makes it different A rewriter that hands back only new text cannot be audited. You would have to read both versions line by line to know whether it tightened your argument or quietly dropped a qualifier. So two things run client-side, free, before and after any paid rewrite: 1. A register measurement of the source: reading grade, mean sentence length, passive constructions, nominalisations, institutional set phrases, hedges and spelling convention - each shown with the phrases it scored on, so a wrong call is visible and dismissible. 2. A fact-preservation check between source and rewrite, covering numbers, dates, clock times, named people and organisations, acronyms, conditional qualifiers, obligation strength, and the polarity of every negative statement. The check works on ANY two pieces of text. You can paste an original and a colleague's rewrite, or output from another tool, and get the same audit without signing in and without spending anything. ## How the negation check works This is the part worth knowing about, because a dropped "not" reads perfectly and means the opposite. Negation is checked as the POLARITY OF A PROPOSITION, not as the presence of the word "not". Each clause is scored by counting flips: an explicit cue ("not", "never", "cannot") and an inherently negative word ("prohibited", "rejected", "unable", "ineligible") each count as one. That handles the cases a naive checker gets wrong: - "was not approved" and "was rejected" are both negative, so the swap passes - "not unreasonable" resolving to "reasonable" passes, because litotes is detected as a cancelling pair rather than as a lost negation - "must not exceed 500" becoming "must exceed 500" is caught Polarity flipping is NOT on its own treated as an error, and that decision is what makes the check usable. Rendering a negation as an equivalent positive is one of the best moves available to a plain-English rewrite: "will not charge a fee" becoming "is free", "cannot be lodged after 21 September" becoming "the deadline is 21 September". What distinguishes those from a genuine dropped "not" is whether the PREDICATE survived. In a faithful rewrite the negated verb is replaced along with the negation; in a real inversion it is still sitting there. So an inversion is only reported when the word the negation governed is still present in the now-positive clause. Sentences are aligned between the two versions first, in order, allowing merges and splits. Alignment answers "is this content still here"; parity answers "is it still negative". Keeping those two questions apart is what lets a total reword pass while an inversion is caught. ## Measured performance The figures below come from a HELD-OUT corpus the checker was never tuned against, and they are the honest numbers rather than the flattering ones. Two adversarial corpora were built by separate agents that never saw the implementation. The checker was developed and debugged against the first, then scored once against the second. Only the second is reported here, because a score on the corpus you fixed against measures nothing - a sibling tool in this fleet measured 0.0% bypass on its own corpus and 62.1% on an independent one. Held-out corpus: 80 source/rewrite pairs over 14 documents. 35 carry planted defects (60 in total); 45 are correct-but-hard rewrites written specifically to trip a naive checker - litotes removal, negation carried by an inherently negative word, acronym expansion, numerals spelled out, dates reformatted, obligations preserved without a modal. - 44 of 60 planted defects detected (73.3%) - 11 of 19 planted negation defects detected (57.9%) - 16 of 45 correct rewrites raise a false critical finding (35.6%) By defect class, on the held-out set: number changes 10/10, number drops 2/2, fabricated numbers 1/1, unit changes 2/2, date changes 5/5, dropped names 2/2, fabricated names 1/1, dropped negations 5/6, inverted negations 4/8, shifted negation scope 2/5, dropped conditions 4/6. ### What it misses, specifically **An inversion that paraphrased the verb along with the negation.** The check only claims a reversal when the word the negation governed is still present in the now-positive clause. "Must not exceed 500" becoming "must exceed 500" keeps "exceed" and is caught. "Applicants must not have received a payment" becoming "you can apply if you have had a payment" replaced "received" with "had" and is not. That is the single largest gap and it accounts for most of the missed negation defects. This is a deliberate trade. The looser version of the rule raised a critical finding on 87% of correct rewrites, because rendering a negation as an equivalent positive - "will not charge a fee" becoming "is free" - is one of the best moves available to a plain-English rewrite and is indistinguishable from a lost negation without knowing that "free" and "charge" are opposites. A checker that fires on nearly every good rewrite gets ignored, and an ignored checker catches nothing at all. Also missed: negation scope shifts where the "not" survives but attaches elsewhere; derived arithmetic in a rewrite ("the remaining 32" computed from 41 minus 9); and acronym contractions that are not initialisms (Office of Gas and Electricity Markets becoming Ofgem). Numbers, dates, times and named parties are the reliable part of the check. Negation is the hardest part and is reported as such. ## Scope, and a deliberate limit Text Rewriter moves text along axes a style guide would recognise: formality, technicality, length, warmth, active or passive voice, reading age, and British versus American convention. It does NOT rewrite text as an ethnic or racial dialect, a national accent, or a non-native speaker's English. That is a design decision, not a missing feature. Such a request produces a performance of a group of people assembled from stereotype - caricature rather than a change of register - and unlike shortening a sentence there is no version of it that is merely useful. The boundary is enforced in the browser before any credit moves, and stated in the interface. Two distinctions the tool gets right rather than refusing broadly: - British and American English ARE in scope. They are orthographic and lexical conventions, not accents. - A dialect discussed or quoted INSIDE your source text is ordinary material to make plainer, shorter or more formal. Quotations are never altered. ## Output contract One JSON object: title, audience_read, source_register (summary + evidenced markers), rewrite, moves (id, axis, kind, before, after, why), preserved, judgement_calls, not_done, residual_risk. `before` and `after` are verbatim spans, findable by plain string search in the source and in the rewrite respectively. ## Pricing The rewrite runs on a metered model (gpt-terra) and costs credits. The register measurement, the word-level diff, the fact check and the bundled examples all run in your browser and cost nothing. Three worked examples ship with saved model output, so you can read a complete rewrite and its fact check without an account. ## Source Derived from the boredhumans language-rewriting concept. Built as a SkillSafe app; the register analysis, diff and reconciliation are original to this app.