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.3.0.tar.gz (67.5 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.3.0-py3-none-any.whl (71.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for aifingerprint-1.3.0.tar.gz
Algorithm Hash digest
SHA256 aaa9fed96ec1359548326ddd1d47ed8a87911e7aeeebd88f7ba8e13ff0c26d24
MD5 7f8072897232a0649abbb3613d633eac
BLAKE2b-256 f7fa10c2c9ad5bbdad411cd6c8318a6bc44ccdd45ee203df6b0cb88709c76a56

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aifingerprint-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 71.8 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.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e035530a0a04a929e2dca87ad2c7e558ccd9b85eadea95159b495af34bc660de
MD5 8649b267631cb1e5141a1e68fce8f86b
BLAKE2b-256 3d650440abc9e6bce64310dd2d9ffbf3d8612412490f04f5ebb99502ef22b0a6

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