This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle
What I Built
I edit videos for clients. A lot of that work is screen recordings: someone walks through their CRM, their admin panel, their inbox. And every one of those recordings is full of other people's data. Customer names, emails, phone numbers, the card on file, the billing address.
Before a video can go public, someone has to hide all of that. Today that means scrubbing frame by frame and drawing rectangles by hand, or uploading the client's raw footage to an online "AI redaction" service. The second option has an obvious problem: to protect the data, you send the data to a stranger.
Redactator is a desktop app that does the boring part locally:
- Drop photos, PDFs and screen recordings. Several at once.
- Tick what to hide: names, faces, emails, phone numbers, addresses, birth dates, ID numbers, card and bank details, passwords and API keys, licence plates.
- Add anything only you know about. My car's plate,
9256YT, means nothing to a model, so there is a field for exact text. It still matches when OCR reads it as9256 YTor9256VT. - Say what must stay visible, like your own studio's name.
- Review every finding, untick what should stay, draw extra boxes by hand, and export clean copies.
The output is solid black boxes, never blur (blur can be reversed). PDFs get true redaction: the text under each box is deleted from the file, not just covered. Clickable mailto: links and document metadata go too. Videos are re-rendered with the boxes following the text while it scrolls.
Who would pay for it? Video editors and agencies who turn client screens into tutorials, support teams who send screenshots to vendors, and freelancers who reuse client work as portfolio samples. They redact every week, and they are exactly the people who shouldn't be uploading client files to a random website.
The business model is classic open source: the code is free (AGPL), and the paid product is convenience, a signed one-click installer for Mac and Windows with the models bundled, sold once. No server means no per-file cost, so a one-time price actually works.
Demo
Website: https://crjstobal.github.io/redactator/
The video is generated by a script in the repo: it drives the real interface with results from real runs of the engine on the sample files, and the narration is made with ElevenLabs.
Code
crjstobal
/
redactator
Black out private data in photos, PDFs and videos, entirely on your own computer. Gemma 4 + GLiNER2-PII + local OCR.
Redactator
Drop photos, PDFs or screen recordings, tick what to hide, get back clean copies with solid black boxes. Everything runs on your own computer: open-weight models (Gemma 4 and GLiNER2-PII) read the text, nothing is uploaded, and there is no per-file bill.
Made for freelancers and small teams who share client material all day: video editors cutting tutorials from a client's dashboard, support agents sending screenshots, consultants forwarding invoices.
Website and demo video: crjstobal.github.io/redactator
What it does
- Photos and screenshots: finds the private text and faces, paints opaque boxes (never blur, which can be reversed), and strips EXIF and GPS data.
-
PDFs: true redaction. The text under each box is deleted from the file, not just covered, so it cannot be copied or searched. Clickable
mailto:links under a box and document metadata are removed too. Scanned pages and screenshots pasted into a PDF are read with…
How I Built It
Redactator is Python, with a small HTML interface in a native window (pywebview). Everything that reads your files runs on your machine.
Reading the file. Text comes from RapidOCR (PaddleOCR models on ONNX Runtime), which returns a box for every word. PDFs use their own text layer through PyMuPDF, and fall back to OCR for scanned pages or screenshots pasted into the document. Faces come from OpenCV's YuNet, a 230 KB model.
Finding the private bits: three detectors, merged. This is the part I iterated on most.
- Fixed patterns for data with a known shape: emails, phone numbers, card numbers (with a Luhn check), IBANs, plates, API keys. No model, so never a miss.
- GLiNER2-PII, a 0.2B open model (Apache 2.0) trained only to find personal data, in 7 languages.
- Gemma 4 E4B through Ollama, for anything that needs judgement: full postal addresses, company names, or a description you type, like "my client's company".
I started with Gemma alone, and my first test leaked a name. Gemma read 25 lines of a fake CRM, found three customers and skipped the fourth, Maria Lopez Garcia, on every row. It turned out recall dropped when I sent long batches, so I cut them from 60 lines to 20. Then I stopped trusting any single model: GLiNER2-PII finds names with 99% confidence, Gemma handles nuance, and anything either of them recognises once is hidden everywhere it appears in the file.
A few problems worth sharing:
-
Ollama's structured output wasn't available for Gemma 4 in my version (
501: structured output is unavailable), so the JSON schema goes in the prompt and the reply is validated with Pydantic, with one retry. -
GLiNER over-predicts. It tagged the column header "Email" as an email address. Structured labels now have to look right: an email needs an
@, a phone number needs digits. - Overlapping findings can leak. If "Daniel Okafor, Brightlane Ltd." and "Daniel Okafor" are both found, unticking the long one used to reveal the name too, because only one box was stored. Now every finding keeps its own boxes, and there's a test for it.
- Videos are expensive, screen recordings mostly aren't. I sample four frames per second and skip any frame that barely changed, so a mostly static recording costs a handful of OCR passes. Between two samples, a frame gets the boxes of both, which covers text while it scrolls.
On my M1 Max, a screenshot takes about 12 seconds, a one-page PDF about 20, and a 6-second scrolling recording about 27.
Why Does Open Innovation Matter?
For this product, open isn't a nice-to-have. It's the whole point.
The privacy paradox only goes away locally. A redaction tool built on a cloud API asks you to upload the document you want to protect. With open-weight models running on your laptop, the promise "your file never leaves your computer" is literally true, and anyone can read the code to check it.
A specialised small model beat a general big one where it mattered. The most important job here is not missing a name. A 0.2B open model trained only on personal data was more reliable at that than a general LLM, and I could combine the two because both run locally with no extra cost per call.
The economics only work without a meter. Video editors redact every week. With a per-call API, every export costs money and the price has to be a subscription. With local models, processing is free, so I can sell a one-time installer and still give the full source away.
It works where the files are. On a train, in a client's locked-down network, on an air-gapped machine. Swap Gemma for a bigger model with one environment variable, or fine-tune the PII model for medical forms or legal discovery, without asking anyone.
Prize Categories
- Best Use of Gemma
- Best Use of ElevenLabs

Top comments (0)