HumanizerBench is a monthly benchmark of AI humanizers. Every tool rewrites the same freshly generated texts, and every output is scored by five commercial AI detectors alongside meaning preservation and readability.
Every input, every humanized output, every detector verdict and the scoring code is published, so the rankings can be recomputed from scratch rather than taken on trust.
HumanizerBench is operated by WriteHuman, one of the tools measured here. WriteHuman gets the same prompts, the same scoring code and the same penalties as every other tool, and its raw runs are published alongside everyone else's.
Every tool receives the same 33 prompts, generated fresh for that cycle across categories such as academic essays, news articles, cover letters, marketing copy and discussion posts. Each output is submitted to five commercial detectors: GPTZero, Originality.ai, Copyleaks, Winston AI and ZeroGPT.
Four things are scored, and combined into a composite out of 100:
| Component | Weight | What it captures |
|---|---|---|
| Detector bypass | 42% | How often the five detectors call the output human |
| Meaning preservation | 32% | Whether the rewrite still says what the source said |
| Readability | 16% | Whether the prose survives the rewrite |
| Consistency | 10% | Whether performance holds across writing categories |
Penalties are deducted on top for quality failures: meaning drift, length inflation or deflation, refusals, or output returned unchanged.
The prompt set for each cycle is seeded from a random nonce that stays private while the cycle runs. Only sha256(nonce) is published when the cycle opens, in commit.json.
When the cycle closes, the nonce, the templates, the value banks and the selection algorithm are all published. Anyone can re-derive the prompt set and confirm it matches what the tools were actually given. Because the commitment is public before any tool runs, the prompts cannot be reselected afterwards to favour a particular result.
git clone https://github.com/HumanizerBench/humanizerbench
cd humanizerbench && npm install && npm run verify
This checks both halves: that the revealed nonce matches the published commitment and regenerates the prompt set, and that the frozen scoring.js plus the raw detector verdicts reproduce the published leaderboard.
Four configs, each carrying a cycle column so the cycles concatenate:
| Config | Rows | One row is |
|---|---|---|
leaderboard |
52 | a tool's scores for one cycle, with per-detector and per-category breakdowns |
tests |
1,677 | one tool's rewrite of one prompt, with the input and output text |
samples |
129 | one source text that every tool was given |
detector_scores |
8,341 | one detector's verdict on one output |
from datasets import load_dataset
lb = load_dataset("HumanizerBench/humanizerbench", split="train")
The untouched audit tree sits alongside the flat tables, one directory per cycle, including the frozen scoring.js that produced that cycle's leaderboard.
| Cycle | Tools | Prompts | Methodology |
|---|---|---|---|
| September 2026 | 14 | 33 | v1.2.0 |
| August 2026 | 12 | 33 | v1.2.0 |
| July 2026 | 13 | 33 | v1.2.0 |
| June 2026 | 13 | 30 | v1.0.0 |
New cycle on the first of each month. Methodology changes are versioned and recorded in CHANGES.md.