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.6.0.tar.gz (69.1 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.6.0-py3-none-any.whl (73.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for aifingerprint-1.6.0.tar.gz
Algorithm Hash digest
SHA256 3c2cc37df14ac2c6d3261f8823796a0056d7ebc61d6ac21134923b0bf4058bc5
MD5 4412cb8a2d5a07062a9996f39307b4cf
BLAKE2b-256 98657a3c9a8456efefa415f188d5440238485f965dd4bb3385f1e2e20c26fa1e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aifingerprint-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 73.4 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.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 72240d6a52dee7598b8033fe3bad63016df833ea74f3757cdd947b90ea632ba6
MD5 7a5498696cd4662d187a4d5413f58657
BLAKE2b-256 1e3e3487bfb76d3aa5136c07ae8287cd2019394d4e92040f54172856eae8cde1

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