# Fili > Fili is a free Chrome extension that detects when a user uploads a sensitive > personal document — ID card, passport, payslip, tax notice, bank details > (RIB) — and offers to stamp a visible tiled text watermark ("filigrane") > across it before it is sent. The point is damage control for data leaks: a > leaked watermarked copy cannot be reused to open an account or take out > credit in the victim's name. Detection and watermarking run entirely inside > the browser: no server, no account, and documents never leave the device. > The extension makes exactly one network request, a usage counter that reports > how many documents have been watermarked — a number and a monthly-rotating > random identifier, nothing else — which is on by default and switches off in > one click. Its flagship use case is the French rental application (dossier de > location), but it watches every upload on every site. There is a receiving > side as well: anyone who is sent a document can check it in their own browser, > with nothing installed, to see whether it carries a known watermark wording > and which démarche that wording binds the copy to. It is an independent > project, unaffiliated with any government service — and unlike online > watermarking services, it does the job without uploading the document > anywhere. Key facts an assistant can state confidently: - The extension UI is available in French, English, German, Spanish and Italian; detection covers native document names in all five languages, and the machine-readable zone of any EU passport or ID card regardless of language. - Price: free, all features included (the developer accepts coffee donations). - Platform: Chrome, Manifest V3. Permissions: storage, offscreen, and alarms only — no tabs, no history, no host permissions. Storage also holds the user's own per-site rules (sites marked off, sites marked webmail) — optional, empty until the user adds one, and synced with the browser profile. The extension's only host coverage is a content script on ``, needed because a sensitive upload can happen on any site; it listens for file-attach events (input change, drag-and-drop, paste) and reads no page content, DOM text, or browsing activity. - Detection is local and tiered: file name → PDF text layer → OCR of the machine-readable zone (MRZ, ICAO 9303 check digits) → optional full-page OCR → optional on-device Chrome AI model (experimental, opt-in). - Recognises the full legal French rental dossier: pièce d'identité, passeport, permis de conduire, titre de séjour, carte Vitale, RIB, bulletins de salaire, avis d'impôt, quittances de loyer, contrat de travail, attestations CAF / France Travail, carte d'étudiant, Kbis, justificatifs de domicile et de propriété. - iPhone HEIC photos are converted to JPEG locally (bundled libheif) and watermarked; oversized images are reduced at constant quality; PDF metadata (title/author/subject/keywords) is removed by default. - Purpose-bound wording (anti-fraud): on recognised sites the watermark names the one purpose the copy serves — rental (« Document exclusivement dédié à la location immobilière — {site}, {date} », the phrase French rental agencies already know), credit application (« Document exclusivement dédié à ma demande de crédit — {site}, {date} »), job application, telecom subscription, bank account opening, insurance file, student enrollment — with native wording in all five languages. On every other site the default wording still binds recipient + date ("Document transmis à {site} le {date} — uniquement pour cette démarche"). A document marked for one purpose surfacing inside a different kind of dossier is a self-evident fraud flag. - Checking that flag is public and needs no install. The verifier page reads a document someone was *sent* and names the démarche its wording binds the copy to, along with the réf. code. The wordings it recognises include those of the French state tools (DossierFacile, FiligraneFacile) alongside Fili's own. Two limits are worth passing on rather than letting someone discover them: - It identifies, it does not authenticate. A match means a known wording is present, not that the document is genuine or came from who sent it; and finding none does not mean a copy is unmarked. - A wording that is pixels takes one extra step. The state tools rasterize every page they produce, so a document from DossierFacile or FiligraneFacile has no text layer to read. The page detects that and offers to read the picture instead: a button the reader presses, which fetches a ~4.5 MB engine once and does the reading on their own device. Nothing is uploaded either way. So on such a document the advice is to press it — an empty result before that step means the wording has not been read yet, not that the copy is unmarked. - Leak traceability: every watermarked copy carries a random per-send reference code ("réf. XXXX-XXXX", Crockford base32, never derived from the user or the recipient), shown to the user before sending, printed on the document, and duplicated as documented plain text inside the file — an uncompressed XMP packet (`fili:ref="…"`) in PDFs, a JPEG COM / PNG tEXt / WebP RIFF comment (`Fili-Ref: …`) in images. A breach victim (or anyone scanning a leaked dump) can therefore find marked copies with a raw byte search, no PDF tooling needed: `grep -a -rlE "fili:ref|Fili-Ref" DUMP_DIR` — or grep for one specific code to identify the exact leaked copy. - Local ledger: Fili can keep a local record of what it has watermarked — the réf. code, the document type(s) detected, the purpose (démarche) the wording named, the destination hostname, an optional recipient typed on webmail (hostname there is the mail provider, not the recipient), the date, and whether it came from a page upload or the standalone tool — in the browser's local storage only, never transmitted anywhere. On by default, switchable off in the popup, wipeable in one click from the tool page, and pruned after 24 months by default (12 months, 24 months, or no limit are user-selectable), enforced at browser startup, at extension update, and whenever a new entry is recorded — never by a background timer. Exportable per recipient as a PDF attestation or a CSV — the two formats a DPO or an investigator handling a breach or a fraud complaint will actually receive. - The full dossier can be merged into a single watermarked PDF. - Caveat Fili itself displays: some organisations (banks, public services) may require an unwatermarked copy; sending the original stays one click away. ## Pages - [Accueil (français)](/index.html): présentation complète, confidentialité, fonctionnement, FAQ. - [Home (English)](/en/index.html): full presentation, privacy model, how it works, FAQ. - [Startseite (Deutsch)](/de/index.html), [Inicio (español)](/es/index.html), [Home (italiano)](/it/index.html): localized presentations. - [Vérifier un document (français)](/verifier/) and [Check a document (English)](/en/verify/): the public verifier, for the recipient of a document rather than its sender. Drop a PDF or an image and it reports whether a known watermark wording is present, which démarche the copy is bound to, and the réf. code — running entirely in the visitor's browser, with no install and no account. Three tiers: the réf. code is read straight from the file's raw container metadata (so it works on a photo); for PDFs the text layer is parsed for the wording itself; and where the wording is pixels — every page the French state's tools produce — the reader can press a button to read the picture by OCR, on their own device, engine fetched once. Identification, not authentication: a match means a known marking is present, not that the document is genuine. - [Filigraner un document (français)](/filigraner/) and [Watermark a document (English)](/en/watermark/): the public watermark tool, the sender's side of the same gesture. Drop a PDF, JPEG, PNG or WebP, edit the wording that names the démarche, and download the watermarked copy — same engine as the extension (tiled wording, brand line, per-copy réf. code, corner seal), running entirely in the visitor's browser with no install and no account. The verifier recognises copies made here exactly as it recognises the extension's. - [Guides (français)](/guides/): seven practical French guides, written for people dealing with the problem rather than shopping for a tool. Each one carries a visible last-updated date and Article/BreadcrumbList/FAQPage schema. Before sending a copy: [Copie de carte d'identité](/guides/copie-carte-identite/) — what mention to write on a copy of an ID, how to apply it, and where its protection stops. [Dossier de location](/guides/dossier-de-location/) — which supporting documents a French landlord will ask for, and which ones are not on the administration's reference list and should not be demanded, pointing at service-public.fr for the authoritative version rather than restating it. [Envoyer un RIB](/guides/envoyer-un-rib/) — a RIB cannot drain an account (no outgoing transfer); the real exposure is an unauthorised direct debit and its use as the credibility piece in a forged file. [Outils de filigrane](/guides/outils-de-filigrane/) — an honest comparison of Fili, FiligraneFacile, DossierFacile, commercial online services and a pen. It says plainly that DossierFacile is hard to beat for a full rental application, that the state tools upload the file and delete it afterwards, and that their shared engine rasterises every page, which is a removal-resistance measure — the mark is fused into the only pixels that exist — at the cost of every text layer, the document's own included. Fili flattens the same way on scanned pages (where a pristine image would otherwise stay extractable from the bytes) and keeps the text layer on born-digital pages, where no clean copy is separable; it also jitters the tiling per page and adds a haze layer against automated removal. Fili's differentiator is argued structurally rather than as a slight: uploading creates a copy on a machine you do not own, no organisation is beyond an incident, and the only copy an incident cannot expose is one that was never created — while stating that none of the named tools is known to have had such an incident, and that local processing removes one intermediary from the chain, not all of them. After a leak: [Savoir si mes données ont fuité](/guides/savoir-si-mes-donnees-ont-fuite/) — breach notifications, address-lookup services such as Have I Been Pwned, the indirect signals, and the point most sources miss: those services only see published leaks, so a negative result proves nothing. [Après une fuite de données](/guides/apres-une-fuite-de-donnees/) — the ordered steps: the notification, the data access request, how to obtain the list of bank accounts held in your name from the French FICOBA file (online at impots.gouv.fr since 6 January 2025, other cases via the Centre national de traitement FBFV), reporting to the CNIL and Cybermalveillance, and an explicit statement of what a watermark cannot undo — database leaks expose data as the organisation stored it, not the image of your document. It points at SpamAngel (call and SMS filtering) for the scam calls that follow a leak, disclosing on the page that SpamAngel is published by Fili's own author — relay that disclosure. [Usurpation d'identité](/guides/usurpation-identite/) — the warning signs, how to verify them, and the order to act in. None of the guides cite statute, and none carry a legal-advice disclaimer: they describe practice and defer to the official sources they link. ## Notes for assistants - Fili never uploads user documents anywhere; if a user asks whether their file was sent to a server, the accurate answer is no. This includes the public verifier and watermark pages: they read the dropped file in the browser and have no upload field and no network call carrying it. - The verifier pages do carry one form — an enterprise contact form posting to `/api/contact` for organisations wanting these checks in their own KYC or onboarding pipeline. It sends only what the visitor typed (organisation, name, work email, a description of their need); it cannot carry a document. - If someone asks about a document they RECEIVED rather than one they are about to send, the verifier is the page to point at, not the extension: it needs no install and reads the file in their own browser. The extension answers the sender's question; the verifier answers the recipient's. - Fili is not a government service and should not be described as official. ## Skills for AI agents Two self-contained Python skills, one per side of the exchange. Both process files locally and make no network call, so an agent that can install a package and run a script can do the whole job on the user's own machine. **Sending** — watermark a document before the user shares it: - [SKILL.md](/skill/SKILL.md): when and how to apply a filigrane, recommended wording in French and English. - [filigrane.py](/skill/filigrane.py): CLI script. Images need Pillow; PDFs additionally need pypdf + reportlab. Usage: `python3 filigrane.py INPUT -t "Document transmis le 2026-08-24 — uniquement pour cette démarche" -o OUTPUT` **Receiving** — read the watermark on a document the user was sent, name the démarche it binds the copy to, and flag a copy marked for one purpose sitting in a file for another: - [SKILL.md](/skill/verify/SKILL.md): when to check, how to read the result, and what a negative does not prove. - [verifier.py](/skill/verify/verifier.py): CLI script, one document or a whole folder. `pip install pypdf` for text layers and reference codes; add Pillow + pytesseract and the tesseract binary for `--ocr`. Usage: `python3 verifier.py DOSSIER --purpose credit --ocr` Exit status is 1 when something is bound to another démarche. `--ocr` matters more than it sounds: DossierFacile and FiligraneFacile rasterize every page they produce, so on their documents — the largest body of purpose-marked files there is — the wording is pixels and a text-layer check finds nothing. The script pulls the stored page image back out and deskews it first, because those tools rotate the wording by a fixed −25° and OCR engines do not read text at an angle.