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) 58% 97%
Human samples (avg) 18% 97%
Separation 40 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.1.0.tar.gz (66.8 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.1.0-py3-none-any.whl (70.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for aifingerprint-1.1.0.tar.gz
Algorithm Hash digest
SHA256 d7970622756c01efb1faec023f5cbd3c739bf1bd6edbc5a2361e5fdafdf5ad72
MD5 66d287d0b281ad9078b3c11c530db086
BLAKE2b-256 5c2eb3d815d753f641cc95e325a6189549bffb6ce717dcd6846e196cba877773

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aifingerprint-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 70.9 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bcd8805206581420ef86fb3eea63d350832d26c803c10bce3a83c3915ad9ea0a
MD5 267ceaf6bb631724176bc03d2d6ab50e
BLAKE2b-256 54959d1f0b60142d1d75429a3d5e38e554943f134d8012c9bb1a4251b672be7f

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