Skip to content
ModernOps888Public

About

Make AI-generated text sound like a real person wrote it. Zero-dependency, privacy-first text humanisation tool.

Resources

Stars

5 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Humaniser

Humaniser

Make AI-generated text sound like a real person wrote it.
A zero-dependency, privacy-first web app that detects robotic AI writing patterns and rewrites them into plainer, more natural prose.

Release v1.2.0 Tests 18/18 Passed Zero Dependencies 6 Voice Modes API Optional MIT License Live Workbench Enterprise Audits

🌐 Live Interactive Workbench (Free, Zero Sign-Up): The Quick Fix engine in this repo is a vanilla-JS port of the engine behind infinitytechstack.uk/humaniser β†’ (same six voice modes, chat-wrapper / em-dash / watermark cleaner, variation reroll and "Highlight changes" view).

πŸ›‘οΈ Enterprise AI Production Audits & Systems Advisory: Deploying LLM-driven content pipelines, autonomous agents, or customer-facing AI where synthetic phrasing, hallucinations, or prompt leakage compromise your brand? We deliver fixed-scope, 3-day enterprise AI audits (Β£4,500 with runnable remediation PRs) and principal systems advisory (Β£650–£7,500). Explore Packages & Book a Call β†’


Why Humaniser?

AI writing tools all tend to sound the same: "In today's fast-paced world, it is crucial to leverage cutting-edge technology..."

Paste any text and Humaniser highlights the AI-style patterns it finds, gives the text a 0–100 score, and rewrites it with a deterministic, rule-based engine that runs entirely in your browser.

No account. No server. Quick Fix makes no network requests. Text only leaves your browser if you opt into Deep Rewrite with your own API key.


Features

πŸ” Detection (js/detector.js β†’ analyse())

Check What it flags Data
Vocabulary AI-overused words (delve, crucial, leverage, landscape) 217 words (AI_WORDS)
Phrases ClichΓ© AI phrases ("It is worth noting that") 104 patterns (AI_PHRASES)
Transitions Sentences opening with However, Moreover, Furthermore… 25 words (TRANSITION_WORDS)
Contractions Uncontracted forms ("do not", "it is") 45 pairs (CONTRACTION_MAP)
Hedging Qualifying filler ("It is important to note that") 22 patterns (HEDGING_PHRASES)
Fillers Redundant sentence starters ("That being said,") 20 patterns (FILLER_STARTERS)
Repetitive starters 3+ sentences starting with the same word β€”
Uniformity Sentence-length coefficient of variation < 0.3 (4+ sentences) β€”
Passive voice Passive constructions in more than 30% of sentences β€”
Em-dashes More than 2 dashes per 500 words β€”

⚑ Quick Fix β€” deterministic rewrite, no API (js/workbench.js β†’ transformHumaniser())

Ported from the live workbench. Stages run in this order:

  1. Watermark cleaner β€” strips zero-width characters (U+200B, U+200C, U+200D, U+FEFF, U+2060), turns non-breaking spaces into spaces and curly quotes into straight quotes.
  2. Code & URL protection β€” fenced code blocks, inline code and http(s):// URLs are swapped out for placeholders and restored byte-for-byte at the end (protectBlocks() / restoreBlocks()).
  3. Chat-wrapper stripper (toggle) β€” removes "Certainly! Here is…:" preambles and "Let me know if you'd like…" sign-offs; in Chat, Casual and Email modes it also rewrites - **Point:** text bullets as - Point β€” text.
  4. Template rewrites β€” "It's not just about X, it's about Y", "Not only does X…, but it also…", "Whether you're a X or a Y,".
  5. Transition orchestrator β€” replaces Furthermore / Moreover / However / Therefore / In conclusion… with a voice-specific pool, before word-level swaps so they never collide.
  6. Phrase replacements β€” 93 multi-word phrases, matched with punctuation-safe boundaries (buildPhraseRegex()).
  7. Vocabulary replacements β€” 308 AI words; the Depth setting picks which severities are replaced (Light β‰₯ 4, Balanced β‰₯ 3, Deep: all).
  8. Anti-repetition ledger β€” every choice in stages 4–7 goes through pickUniqueAlternative(), which tracks used alternatives across the whole document so the same replacement isn't reused while unused options remain.
  9. Em-dash normaliser (toggle) β€” β€”, – and -- become commas, alternating with - (Chat/Casual) or ; (other modes).
  10. Cadence splitter (Balanced/Deep only) β€” splits ", thereby …ing", ", ensuring that", ", which in turn" clauses and breaks sentences of 24+ words at ", and" / ", while", working paragraph by paragraph so \n\n breaks are preserved; also drops a paragraph opener that repeats an earlier paragraph's opener.
  11. Contractions (toggle) β€” inserts contractions; Academic mode never inserts them and expands n't forms instead.
  12. a/an self-healer β€” fixEnglishArticlesAndGrammar() fixes articles by sound (an hour, a unique, a user, a one-time, a URL, an LLM, an API) and removes doubled words left by adjacent swaps ("to to").

Note

The port fixes a few bugs found in the site source while porting (listed at the top of js/workbench.js), e.g. template rewrites leaking a literal $3 into the output and "a URL" being turned into "an URL".

πŸŽ›οΈ Workbench controls (index.html, app.js)

  • Six voice modes (table below) and a Depth selector (Light Polish / Balanced / Deep).
  • Toggles: strip chat intros & sign-offs, fix em-dashes, natural contractions.
  • Auto-humanise as you type β€” re-runs Quick Fix ~350 ms after you stop typing or change an option.
  • ↻ Variation β€” cycles four alternative phrasings (variationSeed 0–3).
  • Highlight changes β€” marks every term Quick Fix inserted in the output panel (highlightChangedTerms()). This highlights inserted terms; it is not a line-by-line diff.
  • Metrics line under the output β€” AI-risk %, burstiness CV and dash/watermark counts, before β†’ after (analyzeAIProbabilities(), the live site's scorer).

🎨 Six Voice Modes (VOICE_MODES in js/workbench.js)

All six share the same pipeline; they differ in the rules below (checked by tests/regression.mjs, which asserts every pair of modes gives different output).

Voice Mode Transition pool Em-dash replacement Bold-bullet cleanup Contractions
Chat / Everyday chat (Beyond that, Plus, On top of that…) , / - yes inserted
Casual & Natural casual (Plus, Still, At the end of the day…) , / - yes inserted
Email & Outreach email (Along with that, That said…) , / ; yes inserted
Executive & Pitch executive (Equally important, Bottom line:…) , / ; no inserted
Academic & Formal academic (In parallel, Accordingly, In sum…) , / ; no expanded (do not, cannot)
Technical & Direct technical (Separately, Summary:…) , / ; no inserted

Each mode also starts the alternative rotation at a different offset, and long-sentence connectors differ (Plus / At the same time for Chat & Casual, Meanwhile / In parallel for the others).

✨ Deep Rewrite β€” bring your own key (js/humaniser.js β†’ deepRewrite())

Provider Model ID (DEEP_REWRITE_MODELS)
OpenAI gpt-4o-mini
Google Gemini gemini-2.5-flash
Anthropic claude-haiku-5-5
DeepSeek deepseek-chat

Requests go straight from your browser to the provider (Anthropic calls send the anthropic-dangerous-direct-browser-access header that browser access requires). Your key is stored in localStorage only.

πŸ“Š Dashboard (js/gauge.js, js/highlighter.js, app.js)

  • Animated SVG gauge β€” colour-coded score from 0 (AI) to 100 (human)
  • Live stats β€” word count, sentences, reading level, passive voice %
  • Pattern highlighting β€” detected spans are colour-coded by category behind the input text
  • Category legend β€” count of vocabulary, phrase, structure, tone, flow and hedging findings

πŸ• History (js/history.js)

  • Last 20 Quick Fix / Deep Rewrite runs saved in localStorage
  • Shows before β†’ after score for each entry
  • Click an entry to restore its input and output

Quick Start

git clone https://github.com/ModernOps888/humaniser.git
cd humaniser
python -m http.server 3000   # or: npx serve . -l 3000 / php -S localhost:3000

Then open http://localhost:3000. There's no build step and no npm install: it's HTML, CSS and ES modules. (ES modules need a server; opening index.html via file:// won't work.)

Tests

node tests/regression.mjs

Zero-dependency (node:assert). It covers: no (that is / (which is artefacts or leaked $1–$9 on the sample corpus in every mode Γ— depth Γ— variation; \n\n paragraph preservation; a/an cases; zero-width character stripping; every voice mode producing non-empty, mutually different output; fenced code, inline code and URLs passing through byte-identical; and README/code agreement on model IDs and voice modes.


How It Works

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Presentation   index.html Β· index.css Β· app.js           β”‚
β”‚                js/gauge.js Β· js/highlighter.js           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Logic          js/detector.js   analyse() β†’ score/patternsβ”‚
β”‚                js/workbench.js  transformHumaniser(),     β”‚
β”‚                                 analyzeAIProbabilities()  β”‚
β”‚                js/humaniser.js  quickFix(), deepRewrite() β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Data           js/patterns.js       detector tables       β”‚
β”‚                js/workbench-data.js Quick Fix tables      β”‚
β”‚                js/history.js        localStorage history  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Scoring (analyse() in js/detector.js)

  • Starts at 100
  • Each detected pattern subtracts severity Γ— category_weight
  • Diminishing returns within a category (100%, 80%, 60% … floor 20%)
  • Bonuses: +5 if contraction rate > 50%, +5 if sentence-length CV > 0.4
Category Weight
Vocabulary 1.5Γ—
AI Phrases 2.5Γ—
Structure 2.0Γ—
Tone 1.0Γ—
Flow 1.5Γ—
Hedging 1.5Γ—

Important

The score is Humaniser's own heuristic. It is not an external AI detector, and a high score doesn't mean third-party detectors will pass the text.


Example

Input: the three-paragraph sample corpus in tests/regression.mjs. Output from Quick Fix, Chat / Everyday, Balanced, Variation v1:

In today's technological field, artificial intelligence has emerged as a truly revolutionary force that's at core reshaping how organizations operate. Make sure to understand that applying these new innovations requires a thorough and end-to-end approach. The frictionless integration of machine learning into existing workflows highlights the creative spirit that drives modern enterprises forward.

Along with that, note that the many-sided nature of this life-changing technology shows the need for careful planning and reliable system. Stakeholders must manage the detailed challenges that arise when embarking on such never before seen endeavors. The key role of data can't be overstated, it's the basis upon which all meaningful insights are built.

On top of that, organizations that make use of the full potential of artificial intelligence are poised to gain a significant competitive advantage. This pioneering pattern shift has the potential to remake everything from customer engagement to operational efficiency. Taken together, you should build a culture of continuous learning and adaptability to help thrive in this ever-changing space of technological advancement. Without a doubt, the future belongs to those who embrace innovation completely.

analyse() score: 11 β†’ 75. It's rule-based, so expect rough spots: here "paradigm shift" became "pattern shift", "robust infrastructure" became "reliable system", and an em-dash became a comma splice. Read the output before you use it.


File Structure

humaniser/
β”œβ”€β”€ index.html            # App shell: dashboard, options strip, editor panels, modals
β”œβ”€β”€ index.css             # Design system: light/dark themes, responsive layout
β”œβ”€β”€ app.js                # Controller: events, state, Quick Fix / Deep Rewrite orchestration
β”œβ”€β”€ js/
β”‚   β”œβ”€β”€ workbench.js      # Quick Fix engine (port of the live workbench) + site scorer
β”‚   β”œβ”€β”€ workbench-data.js # 308 AI words, 93 phrases, contraction maps (from the site)
β”‚   β”œβ”€β”€ humaniser.js      # quickFix() wrapper + deepRewrite() providers
β”‚   β”œβ”€β”€ detector.js       # analyse(): 10 checks, weighted score
β”‚   β”œβ”€β”€ patterns.js       # Detector tables (words, phrases, transitions, hedges, fillers)
β”‚   β”œβ”€β”€ history.js        # localStorage history (20 entries)
β”‚   β”œβ”€β”€ gauge.js          # Animated SVG score gauge
β”‚   └── highlighter.js    # Category-coloured highlighting of detected patterns
β”œβ”€β”€ tests/
β”‚   └── regression.mjs    # node tests/regression.mjs
β”œβ”€β”€ logo.jpg
β”œβ”€β”€ LICENSE
└── README.md

Keyboard Shortcuts

Shortcut Action
Ctrl + Enter Analyse
Ctrl + Shift + Enter Quick Fix
Escape Close modals/panels

Browser Support

Needs ES modules, top-level await and RegExp lookbehind: Chrome/Edge 89+, Firefox 89+, Safari 16.4+.


Privacy

  • No analytics, no cookies. The page does load web fonts from Google Fonts.
  • Quick Fix and Analyse run 100% client-side and make no network requests.
  • API keys are stored in your browser's localStorage and only sent to the provider you choose.
  • Deep Rewrite sends your text to OpenAI, Google, Anthropic or DeepSeek only when you click it, using your key.

Contributing

Contributions are welcome! Some ideas:

  • Add patterns to js/workbench-data.js (Quick Fix) or js/patterns.js (detector)
  • Add cases to tests/regression.mjs
  • Add browser extension support
  • Add more LLM providers to Deep Rewrite

License

MIT β€” do whatever you want with it.


Humaniser β€” Your text, your voice.
Built with vanilla HTML, CSS, and JavaScript. No frameworks. No build tools.

About

Make AI-generated text sound like a real person wrote it. Zero-dependency, privacy-first text humanisation tool.

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages