Skip to main content

Detect AI writing patterns — scores text 0-100 for AI fingerprints

Project description

aifingerprint

PyPI

Scores text 0–100 for AI writing fingerprints. Catches the stuff LLMs can't help doing — flat rhythm, hedge words, compression patterns, that weird punctuation sameness. No API keys, no model downloads, just stdlib Python.

Installation

pip install aifingerprint

Usage

# Analyze a file
aifingerprint input.txt

# Read from clipboard
aifingerprint --clipboard

# Read from stdin
echo "text to analyze" | aifingerprint

# Generate a markdown report
aifingerprint input.txt --report
aifingerprint input.txt --report output.md

Score interpretation

Score Label Meaning
0–20 CLEAN Looks human
21–40 MILD A few AI-ish traits, probably human
41–60 NOTICEABLE Smells like AI
61–80 OBVIOUS Yeah, that's AI
81–100 BLATANT Copy-pasted straight from ChatGPT

What it checks

Ten weighted checks, each scoring 0.0–1.0:

Check Weight What it measures
Compression 20% How much the text resembles known AI writing when compressed (uses LZMA, a zip-like algorithm — similar text compresses well together)
Sentence rhythm 15% Whether sentences are all roughly the same length (humans vary more)
Tone 15% Hedging, enthusiasm, formality, word length
Punctuation 12% Whether punctuation is suspiciously samey (humans use messier, more varied punctuation)
Connectives 10% Overuse of transition words like "however", "moreover", "furthermore"
Burstiness 8% Whether key words are spread too evenly (humans tend to clump related words together)
Vocabulary 8% Known AI-favorite words (delve, leverage, utilize...)
Structure 7% Cookie-cutter paragraph shapes, repetitive sentence patterns, five-paragraph essay format
Phrases 5% Cliches, hedges, stock openers and closers
Formatting 0% Em dashes, bold bullets, header density (disabled)

HTML reports

Generate a markdown report, then convert to styled HTML:

aifingerprint input.txt --report
python -m aifingerprint.html report.md

How it compares

We tested against RoBERTa (a machine-learning model OpenAI released in 2019 to detect AI writing, available as openai-community/roberta-base-openai-detector on HuggingFace) — the only other pip-installable detector that runs offline on prose. 27 samples, 8 AI-generated, 19 human-written:

aifingerprint RoBERTa
AI samples (avg) 53% 97%
Human samples (avg) 15% 97%
Separation 38 percentage points ~0 — labels everything as AI

RoBERTa was trained on GPT-2 output back in 2019. It thinks Paul Graham, Reddit posts, and Seth Godin are all 100% AI. Basically useless on anything written after 2022. aifingerprint uses pattern-matching rules instead of a trained model, so it doesn't go stale when the next GPT drops.

Other packages in this space:

Package Why it doesn't work
gptzero API wrapper — requires paid GPTZero API key
openai-detector Thin wrapper around the same broken RoBERTa model
sloppylint Detects AI patterns in code, not prose
finbert-ai-detector Fine-tuned for financial documents only
ai-slop-detector Browser-based, requires Gemma 270M model download
textstat Readability metrics (Flesch, SMOG, etc.) — doesn't attempt detection

No dependencies

Runs on Python 3.10+ using only the standard library.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aifingerprint-1.5.0.tar.gz (68.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aifingerprint-1.5.0-py3-none-any.whl (73.2 kB view details)

Uploaded Python 3

File details

Details for the file aifingerprint-1.5.0.tar.gz.

File metadata

  • Download URL: aifingerprint-1.5.0.tar.gz
  • Upload date:
  • Size: 68.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for aifingerprint-1.5.0.tar.gz
Algorithm Hash digest
SHA256 89f17c959d2ac7cce53ec216e6393239c0edbb7189216e1f3ad0383379575910
MD5 5e49c54f38d9475b4f1991ba8c9738a1
BLAKE2b-256 f9128e932db71dbcf0934bbef22a27ea0b9b7b67c7198dfcd4a905a426a1133d

See more details on using hashes here.

File details

Details for the file aifingerprint-1.5.0-py3-none-any.whl.

File metadata

  • Download URL: aifingerprint-1.5.0-py3-none-any.whl
  • Upload date:
  • Size: 73.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for aifingerprint-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 eda1c94782e1c9f43eae6b5f9498159927563e8142f09d4fd76f15175e141a78
MD5 29138844e1fd687e43a93ae023c3df55
BLAKE2b-256 20576c38e6f1f2677f1e2201088bd58e6c9159f62ce08be94629e8e4e73e050b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page