Redactyl is a desktop app for finding and removing sensitive information from documents before sharing them. It runs locally, lets you review each finding, and saves a separate sanitised copy. Document processing does not use a cloud service, an AI model or an API key.
Status: alpha. Run it from source using the instructions below. There is no published
redactyl-app package on PyPI or downloadable GitHub release yet. Native app testing has been
done on macOS; clean-machine installation and broader platform testing are still outstanding.
A successful check does not guarantee a document is safe to share. Redactyl can miss sensitive content. Review the findings and the finished document yourself, especially images and scanned pages.
Redactyl uses text patterns, checksum checks and words or phrases you supply. Built-in detection covers:
- Email addresses, Australian phone numbers, credit-card number patterns, IPv4 addresses and web URLs.
- Australian TFNs, ABNs, ACNs and Medicare numbers, with checksum checks and an identifying label nearby.
- Some credential formats, including API keys, AWS access-key IDs, JWTs, private-key blocks and database connection strings.
It does not automatically recognise every person's name, street address, account number or secret. Add the specific names, identifiers and phrases you need removed as private terms. Keyword matching ignores letter case and uses word boundaries; spelling variations need separate terms.
For each finding, you can remove it, replace it with a data type or numbered label, partially mask it, or keep it. Partial masking deliberately leaves some characters visible. False positives are possible, including valid-looking numbers that are not sensitive.
| Files | What to expect |
|---|---|
| Uses text extraction and OCR. Output is rebuilt as page images: the original text layer, links and attachments are not retained. Text is no longer selectable or searchable, and image quality and file size can change. | |
| DOCX and XLSX | Processes document text or workbook cells and supported embedded images. Formatting and document features can change. The built-in viewer shows embedded images, not the full Word or Excel layout. |
| PNG, JPEG, TIFF and WebP | Uses OCR to locate text. Only static, single-frame images are accepted; multi-page TIFFs and animated images are rejected. |
| TXT, Markdown, CSV and JSON | Requires UTF-8 text. JSON keys and values are scanned; duplicate keys and replacements that create duplicate keys are blocked. |
PDFs, standalone images and Office files with supported embedded images require a visual-review confirmation. Tesseract is required for PDFs and image processing, including embedded Office images.
You need Git, uv, Python 3.12 or newer, and Tesseract. The commands below select Python 3.12.
On macOS, with Homebrew installed:
brew install uv tesseract
git clone https://github.com/MBemera/redactyl.git
cd redactyl
uv sync --locked --python 3.12
uv run --locked redactyl-desktopAfter setup, run uv run --locked redactyl-desktop from the checkout to open it again. On macOS,
start.command is also a launcher you can double-click in Finder.
On Debian or Ubuntu, install Tesseract with sudo apt-get install tesseract-ocr and install uv
using its instructions above. A graphical desktop and Qt's system libraries are also needed;
Linux desktop installation has not yet been validated on a clean machine.
Setup downloads dependencies. Once installed, document processing runs locally. Tesseract must be
on PATH, or REDACTYL_TESSERACT_CMD must point to its absolute executable path.
- Choose Add documents or Add folder, or drag files into the window.
- Enter any private words or phrases, then choose Scan files.
- Review each finding under What to do. Use Keep — not sensitive for false positives. Open Show document to inspect PDF pages, images or the Office embedded-image gallery. Check every relevant page or image before confirming visual review.
- Choose Create safe copy for this file, or Create safe copies for all files. These are the app's button labels; “safe” means the copy passed Redactyl's checks, not a privacy guarantee.
- Read the verification result and warnings, inspect the output, then choose Save this copy or Save all safe copies. Open saved Office files in Word or Excel to check the full document.
Use Rescan selected after adding a missing private term. Changing a review choice requires creating a new copy; it does not update files you have already exported.
If nothing is detected, or every finding is kept, Redactyl does not create a copy. No findings means the detectors found nothing; it does not establish that the original is safe to share.
Before enabling save, Redactyl checks the output for selected values that remain, reruns its detectors, and checks whether the format adapter reports complete coverage. It also checks that the output has not changed since verification. Values you chose to keep are allowed to remain.
Those checks depend on the same parsers, OCR and detection rules used during scanning. They cannot prove that undetected content is absent. Visual review is your confirmation, not an independent automated check. Photos, signatures, handwriting and identifying context can remain even when text checks pass.
Office processing removes some unsupported content, such as unreadable media, custom XML and active content, with warnings. Inspect those warnings and the exported document: support for a file extension does not mean every feature inside it is preserved or fully understood.
Accessibility is still incomplete. The review-action dropdown has a known macOS accessibility limitation, and full VoiceOver and keyboard-only workflows have not been verified.
Redactyl processes working copies and saves separate outputs. It stores source copies, findings and generated files in the operating system's local application-data directory. These files are not encrypted by Redactyl; owner-only permissions are applied where supported. Software running as your user can still read them.
Remove selected removes that job's working files. New session clears retained jobs and unsaved outputs after confirmation. Normal desktop shutdown attempts to remove the current session's jobs, but crashes or cleanup failures can leave files behind. Original documents and exported copies are not removed by session cleanup. Deletion is not secure erasure and does not remove backups.
Redactyl does not upload documents. Cloud-sync software and backups can still copy files from folders you use, including your chosen output folder.
Run commands from the checkout with uv run --locked. For example:
uv run --locked redactyl scan report.pdf --keyword "Project Falcon"
uv run --locked redactyl clean report.pdf --keyword "Project Falcon" --confirm-visual-review
uv run --locked redactyl verify /path/to/output.pdf --term "Project Falcon"scan prints findings as JSON, including detected values. clean applies the default actions and
prints a report containing the working output path and verification.passed; it does not export
beside the source. A failed verification also makes clean exit non-zero.
Both commands retain local job files. Treat their reports and terminal output as sensitive.
verify checks readable content using the supplied terms and built-in detectors, and exits non-zero
if it finds matches or incomplete inspection coverage. It does not reproduce the full sanitisation
workflow or establish that visual review happened.
To save a batch of outputs:
uv run --locked redactyl batch ./documents \
--recursive \
--output-dir ./sanitised \
--keyword "Project Falcon" \
--workers 2 \
--summary-onlyFor files requiring visual review, add --confirm-visual-review only after reviewing every relevant
source page or image. Otherwise those files are blocked. Batch processing uses default actions;
use the desktop app when you need to choose what happens to each finding.
Each file gets its own result. Only copies that pass verification are exported. The command exits
non-zero if any file fails, is blocked or has no findings. Existing outputs are given numbered
alternatives rather than overwritten. CLI batch filenames retain the original stem, such as
report.sanitised.pdf, so check filenames before sharing. Batch job files are removed after each result.
Set these environment variables before starting Redactyl:
| Variable | Default | Purpose |
|---|---|---|
REDACTYL_DATA_DIR |
OS application-data directory for Redactyl | Location of working copies and reports. |
REDACTYL_TESSERACT_CMD |
tesseract on PATH |
Absolute path to a different Tesseract executable. |
REDACTYL_WORKERS |
2 |
Document workers, from 1 to 8. CLI --workers overrides this. |
REDACTYL_MAX_FILE_MB |
100 |
Maximum input size in MiB. |
REDACTYL_MAX_BATCH_FILES |
1000 |
Maximum files per batch, from 1 to 100,000. |
REDACTYL_MAX_FINDINGS |
50000 |
Maximum findings per document, from 1 to 1,000,000. |
REDACTYL_OCR_TIMEOUT_SECONDS |
60 |
Timeout per OCR call, from 1 to 300 seconds. |
PDFs are limited to 500 pages. Rendering and image-size limits also apply. More workers can increase memory use substantially with PDFs and images; start with the default.
The app uses Python, PySide6, pypdfium2, pikepdf and Tesseract. To run the standard checks:
uv sync --locked --extra test --python 3.12
uv run --locked ruff check src tests scripts
uv run --locked ruff format --check src tests scripts
QT_QPA_PLATFORM=offscreen uv run --locked pytest --cov=redactyl --cov-report=term-missing
uv run --locked pip-audit --skip-editableSecurity issues should be reported using the private process in SECURITY.md. Do not attach real sensitive documents to a public issue.
Redactyl's source code is licensed under the MIT License. Dependencies retain their own licences; see THIRD_PARTY_NOTICES.md and LICENSES before redistributing Redactyl. Release validation generates a CycloneDX software bill of materials and a licence-file collection for the resolved runtime environment, with missing files listed in its manifest. Bundled desktop releases need the additional notices described above. Project artwork and screenshots are documented in ASSET_PROVENANCE.md.



