Skip to content

About

NullifyPDF is a professional tool for forensic PDF anonymization. Designed for absolute privacy, it operates entirely locally using artificial intelligence to identify and permanently destroy sensitive data without ever uploading files to the cloud.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

259 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

NullifyPDF - Privacy Edition

GitHub Release GitHub Release (beta) GitHub Actions Workflow Status GitHub License Python Version

NullifyPDF Logo

NullifyPDF is a local-first PDF privacy tool. It helps detect personal data, redact it irreversibly, or replace it with reversible placeholders before a PDF is shared with third parties or uploaded to AI systems.

Tip

First time using NullifyPDF? Start with our User Guide โ€” takes 5 minutes.


๐Ÿ“‹ Quick Overview

NullifyPDF goes beyond simple text covering. It uses Natural Language Processing (NLP) engines to identify entities like names, addresses, email addresses, IBANs, and credit card numbers. At export, the user chooses irreversible anonymization or reversible pseudonymization with an encrypted restore map.

๐ŸŽฏ Feature โœจ Benefit
๐Ÿง  Auto-detection Automatic detection tuned for Italian documents
๐Ÿ” Local-first No cloud uploads during PDF processing
โšก Responsive UI Background scanning with live preview
๐Ÿ›ก๏ธ Privacy Export Irreversible redaction or reversible placeholders

โœจ Key Features

  • ๐Ÿง  Automatic Redaction โ€” Automatic detection of PII in Italian documents: names, locations, emails, phones, IBANs, credit cards, crypto addresses, Italian fiscal codes and IDs. A dialog lets you choose which data types to scan for, and matching is whole-word so ordinary text is not caught
  • ๐Ÿ”„ Update Check โ€” Optional, user-triggered check for new releases (stable builds see stable only, beta builds see both) showing the release notes and a one-click download into your Downloads folder; can be enabled at every start from the Info dialog (off by default)
  • ๐Ÿ—„๏ธ Fluid UI & Thread-Safe โ€” PySide6 modern dark-mode interface with zero UI freezing. Text extraction in worker thread with QMutex serialization
  • ๐Ÿ“– Persistent Dictionaries โ€” Blocklist and Allowlist synchronized to disk (~/.nullifypdf) with O(1) fast-path matching
  • ๐Ÿ›ก๏ธ Privacy Export Modes โ€” Choose irreversible removal or reversible pseudonymization with a separately encrypted restore map; the exported file is sanitised (annotations, attachments, scripts, metadata, hidden text) and verified
  • ๐Ÿ“– Built-in guide and tooltips โ€” Press F1 for an Italian guide to every function; every control shows a description on hover
  • ๐Ÿ” Review of uncertain hits โ€” Detections without enough evidence are suggested for review instead of being applied or lost silently
  • ๐Ÿ‡ฎ๐Ÿ‡น Italian name recognition on demand โ€” the spaCy Italian model (CC BY-NC-SA 3.0, non-commercial) is not in the installer: the first Auto Redact shows its licence, asks for consent and downloads it (SHA-256 verified). Declining keeps rules and dictionaries only
  • ๐Ÿง  Optional local models โ€” Three reviewed ONNX PII models (MiniLMv2 EN/IT, PiiScan, OpenMed Italian FastClinical) can be downloaded by the user from pinned Hugging Face revisions; files are SHA-256 verified, the download progress is shown inside the button, and models only add review suggestions
  • ๐Ÿ“„ Word import โ€” DOCX paragraphs and tables can be imported locally into the analysis workflow; legacy binary DOC files are not supported
  • ๐Ÿ”Ž OCR Support โ€” Bundled EN/IT Tesseract language data for scanned PDFs
  • ๐Ÿ–ผ๏ธ Blindfold Mode โ€” One-click image/logo censoring with professional placeholder: [ IMAGE REMOVED ]
  • ๐Ÿ“ฆ Native Cross-Platform โ€” Automated build scripts generate Windows .exe, macOS ZIP bundles, and Linux .deb/.rpm packages
  • ๐ŸŽฏ Drag & Drop Support โ€” Native file drag-and-drop on main window
  • ๐Ÿ“Š Logging & Diagnostics โ€” Local file-based logging (~/.nullifypdf/logs/) with debug mode for advanced troubleshooting

โš ๏ธ Tool Limitations

To keep NullifyPDF lightweight, 100% offline, and secure, be aware of these technical limits:

โŒ Limitation ๐Ÿ’ก Workaround
Handwritten Text NLP models cannot analyze non-digitized handwriting.
Password-Protected PDFs Encrypted documents are blocked at load. Decrypt before importing.
Legacy Word DOC files Only modern .docx files are supported; save legacy files as DOCX before importing.
Digital Signatures Invalidated Privacy export changes the PDF; cryptographic signatures (PAdES, notarized) become invalid.

Warning

Digital signatures will be invalidated after redaction. Save unredacted originals separately for formal records.


๐Ÿš€ Getting Started

๐Ÿ“‹ System Requirements

โœ… Python 3.13 (required for PyMuPDF wheel compatibility)
โœ… 2 GB disk space (dependencies + Italian model)
โœ… 4 GB RAM minimum (8 GB recommended for large PDFs)

Operating System Support:

  • โœ… Windows 10/11
  • โœ… macOS 11+
  • โœ… Linux: Ubuntu 24.04 / 26.04 and Debian 13 (.deb), RHEL / Rocky / Alma 9-10 and current Fedora (.rpm). The packages are built against glibc 2.34, so Ubuntu 22.04 and Debian 12 also run them, but these are no longer tested

โš™๏ธ Installation

๐Ÿ‘ค End Users โ€” Use Pre-Built Executable

Download the latest pre-compiled executable from Releases:

  • Windows: NullifyPDF_vX.Y.Z_Windows.exe
  • macOS: NullifyPDF_vX.Y.Z_macOS.zip
  • Ubuntu / Debian: NullifyPDF_vX.Y.Z_Ubuntu.deb
  • Fedora / RHEL: NullifyPDF_vX.Y.Z_Fedora.rpm

No installation needed on Windows/macOS - just run or unzip. Linux users can install the .deb or .rpm package.

๐Ÿ‘จโ€๐Ÿ’ป Developers โ€” Install from Source
  1. Clone the repository

    git clone https://github.com/overwrite00/NullifyPDF.git
    cd NullifyPDF
  2. Verify Python 3.13

    # Windows
    py -3.13 --version
    
    # macOS/Linux
    python3.13 --version
  3. Run automated setup (recommended)

    python setup_env.py

    This script automatically:

    • Creates isolated virtual environment (.venv)
    • Installs all dependencies
    • Installs the Italian spaCy model for development (the installer downloads it on demand)
  4. Activate environment & launch

    # Windows (PowerShell)
    .\.venv\Scripts\Activate.ps1
    python NullifyPDF.py
    
    # macOS/Linux (Bash)
    source .venv/bin/activate
    python3.13 NullifyPDF.py

๐Ÿค– Automation Scripts

The repository includes cross-platform Python scripts for developers:

๐Ÿ”ง setup_env.py โ€” Environment Setup

Configures development environment with Python 3.13, virtual environment, and NLP models.

python setup_env.py

What it does:

  • Detects OS (Windows/macOS/Linux)
  • Creates .venv with Python 3.13
  • Installs requirements.txt dependencies
  • Installs the Italian spaCy model for development (the installer does not bundle it)

Automatic OS detection:

  • Windows: Uses py -3.13 launcher
  • macOS/Linux: Uses python3.13 directly
๐Ÿ—๏ธ build_local.py โ€” Build Executable

Compiles standalone executable with PyInstaller.

python build_local.py

Features:

  • Cleans temporary directories
  • Auto-detects your OS
  • Reads version dynamically from code
  • Generates named executables such as NullifyPDF_vX.Y.Z_Windows.exe
  • Bundles EN/IT OCR data (downloaded automatically if missing)

Linux bonus: On Ubuntu/Fedora, automatically builds .deb and .rpm packages in dist/

โœ“ Running Tests

Verify core behavior with smoke tests:

# Activate venv first
source .venv/bin/activate  # or .venv\Scripts\Activate.ps1 on Windows

pytest tests/ -v

Test coverage:

  • Detection pipeline: word index, rectangle geometry, scoring, partial-match policy, Italian lexicon
  • Redaction engine, export sanitiser and export verification (survivor and leak checks)
  • Privacy placeholders, encrypted restore maps (Argon2id envelope, recovery key) and reconstruction
  • Encrypted dictionaries with expiry and the secure key store
  • Offscreen GUI flows (review, export, reconstruction, guide and tooltips, model dialog, Info window)
  • Local model catalog, on-demand Italian model download, DOCX import, update check
  • Licence consistency and build configuration

๐Ÿ“š Documentation

๐Ÿ“„ Document ๐Ÿ“– Purpose
USER_GUIDE.md Step-by-step usage instructions
CONTRIBUTING.md How to contribute code & report issues
ARCHITECTURE.md System design & technical overview
DEVELOPMENT.md Local dev setup, testing & builds
OCR_SETUP.md OCR data setup and build notes
TROUBLESHOOTING.md Common issues & solutions
CHANGELOG.md Release history & updates
SECURITY.md Security model & responsible disclosure
THIRD_PARTY_NOTICES.md Licences of data and components
LICENSE AGPL-3.0-or-later licence text

๐Ÿ”’ Security & Privacy

โœ… 100% Local Processing โ€” All analysis happens on your machine
โœ… No Cloud Uploads โ€” PDF content never leaves your computer; the only network access is the optional update check and the model downloads you approve
โœ… Open Source โ€” Full code transparency
โœ… No Telemetry โ€” Zero user tracking

Important

Irreversible removal cannot be undone from the exported PDF, and it does not by itself guarantee anonymisation: indirect identifiers can remain. A pseudonymized PDF and its restore map are personal data. Always keep backups of original documents. Pseudonymization requires the encrypted restore map and its password.

See SECURITY.md for responsible disclosure and privacy details.


๐Ÿ› ๏ธ Tech Stack

Technology Purpose
Python 3.13 Core language (required for PyMuPDF compatibility)
PySide6 (Qt6) Modern dark-mode GUI with multi-threading
PyMuPDF (fitz) High-performance PDF manipulation
Microsoft Presidio PII (Personally Identifiable Information) detection
spaCy NLP for entity recognition (Italian model, downloaded on demand)
ONNX Runtime CPU inference for the optional local PII models
cryptography Encrypted pseudonymization restore maps

๐Ÿ“ License

GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later)

Copyright (c) 2026 Graziano Mariella

NullifyPDF is free of charge and is not sold by its author. It is AGPL-licensed because it uses PyMuPDF, which is available under the AGPL-3.0 or a commercial licence from Artifex. Anyone who distributes the program, modified or not, must give the recipients the source code under the same licence. Releases up to v2.4.0-beta.4 were published under the MIT licence.

The Italian name-recognition model (spaCy it_core_news_md, CC BY-NC-SA 3.0, non-commercial) is not part of the installer: the program offers to download it, shows its licence and asks for consent first. Licences of all third-party components are listed in THIRD_PARTY_NOTICES.md.

Notice. NullifyPDF is free software, distributed under the AGPL-3.0-or-later. Every component and model it uses remains under its own licence, listed below with a link to the official text; using the program means respecting those conditions. The Italian spaCy model is for non-commercial use only and is downloaded only after your consent.

Component Licence Used for
NullifyPDF AGPL-3.0-or-later this program
PyMuPDF / MuPDF AGPL-3.0 or commercial (Artifex) PDF reading and redaction
PySide6 / Qt LGPL-3.0 graphical interface
Presidio MIT personal-data detection
spaCy MIT language processing
spaCy it_core_news_md CC BY-NC-SA 3.0 (non-commercial use only) Italian model, downloaded after consent
MiniLMv2 EN/IT NER (optional download) MIT optional local model by Alberto Schiabel (jkomyno)
PiiScan (optional download) Apache-2.0 (training data: Ai4Privacy OpenPII, CC BY 4.0) optional local model
OpenMed PII Italian FastClinical Small (optional download) Apache-2.0 optional local model
MiniLMv2 EN/IT NER (optional download) MIT optional local model by Alberto Schiabel (jkomyno)
PiiScan (optional download) Apache-2.0 (training data: Ai4Privacy OpenPII, CC BY 4.0) optional local model
OpenMed PII Italian FastClinical Small (optional download) Apache-2.0 optional local model
onnxruntime MIT running local models
tokenizers Apache-2.0 tokenizing for local models
cryptography Apache-2.0 or BSD-3-Clause encryption
keyring MIT key storage (Linux/macOS)
tldextract BSD-3-Clause URL recognition
NumPy BSD-3-Clause numerical computing
Tesseract OCR Apache-2.0 OCR of scanned documents
tessdata_fast (eng, ita) Apache-2.0 OCR language data
ISTAT, elenco dei comuni CC BY 4.0 place names
Wikidata CC0 1.0 given names and surnames

See LICENSE for the full text.


๐Ÿค Contributing

Want to help improve NullifyPDF? See CONTRIBUTING.md for guidelines.


Last updated: 2026-11-11
User Guide โ†’

About

NullifyPDF is a professional tool for forensic PDF anonymization. Designed for absolute privacy, it operates entirely locally using artificial intelligence to identify and permanently destroy sensitive data without ever uploading files to the cloud.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages