Nothing leaves your device

Your documents never leave this tab

Sign, compress, convert, redact and scan — 59 tools that run on your device. No account, no server, nothing uploaded. Further down, one of them runs on a real file and counts every byte that leaves your machine.

Passport photoIllustration
35 × 45 mm600 dpiPlain background

Crops to the size a consulate asks for, at the resolution they print at.

Open Passport photo

Every engine below runs inside your browser — none of them is a service we send your file to

pdf-libbuilds and edits PDFspdf.jsrenders every pageGhostscriptcompresses and repairsTesseractreads scanned textONNX Runtimeruns the modelsTransformers.jssummarises and translatesSQLiteis your Libraryfflatemakes the zipsdocxwrites Word filesSheetJSwrites spreadsheetsjsQRscans the codes
59
Tools
0 bytes
Uploaded
0
Accounts needed
100%
On device

Nothing is sent anywhere

No cloud, no API, no analytics, no error reporter — not to us and not to anyone else. Turn your wifi off once the page has loaded and every tool still works.

There is nothing to sign up for

No account, no email, no cookie banner, because there is nothing to put in one. Files you choose to keep live in this browser and are yours to clear.

Even the AI runs here

Summaries, translation and background removal come from models that download once and then run on your machine. Your document is never the thing being uploaded.

Do more than one thing at a time

A single tool is a single tool. What people actually do is a sequence — read the scan, compress it, take the metadata off, file it — and doing that by hand four times a week is the part worth removing.

Pipelines

Chain the tools together

A template is a list of steps — scan, read the text, compress, strip the metadata — that runs top to bottom on whatever you hand it. Save one, and the whole sequence becomes one click.

Browse the templates
Read the text
Compress
Strip metadata

Automations

Or let them run themselves

Point a rule at a trigger instead of a button. Every PDF you save gets compressed; anything with 'contract' in the name loses its metadata; a folder tidies itself once a day.

See the scheduling
Every PDF I save
  • Compress to 500 KB
  • Strip the metadata
  • File it in Contracts

The Library

Locked with a passphrase you keep

Everything you save lives in this browser. Set a passphrase and the rows and the file bytes are encrypted at rest with a key that exists only in memory — which also means we cannot help you recover it.

Open the Library

Sharing

Send a workflow, not a document

A template exports as a short code with no file in it — just the steps. Paste one and it is checked against the tools that actually exist before anything runs.

See how sharing works
pw1_c2NhbitvY3IrY29tcHJlc3M
  • 3 steps
  • 0 documents
  • Checked against the real tools

Set it up once. Then it is one press.

Here is one running. Not a recording of one — press the button and a real PDF is built in this tab, the three steps run on it, and the card that comes back reports what actually happened, including how many bytes left your machine.

The template

Draft for review

Watermark it, number the pages, strip the metadata.

  1. 1WatermarkStamps text across every page
  2. 2Add page numbersNumbers each page in a corner
  3. 3Strip metadataRemoves author, producer and the XMP block
All templates

Press run, and this fills in.

A real PDF is built in this tab, the three steps run on it, and everything you see afterwards — including the bytes uploaded — is measured.

Automations

Rules that run the tools for you

Compress every PDF you save. Strip the metadata off anything with 'contract' in the name. Tidy a folder once a day. The steps are the same tools you would have clicked, running in the same worker, with nobody clicking.

See how the scheduling works

What it cannot do

A browser cannot run cron — a closed tab does not execute code. So rules catch up instead: one that came due while you were away runs the next time you open the app, once, not once per missed day.

Library

Keep what you want, lock it if you like

Save results into folders, reopen them in another tool, and keep a history of what was run. It is SQLite in a worker with the file bytes in your browser's own filesystem — the same storage a photo app would use.

Open the Library

What it cannot do

Set a passphrase and the rows and bytes are encrypted at rest with a key held only in memory. Forget it and there is no recovery, because there is no one to recover it from. The page says so before you set one.

Quill Intelligence

Describe the job, watch it run

Ask for “split this into pages and compress each one” and it assembles the steps from the same registry the sidebar is built from, then runs them here. Every action it takes is one you could have taken by hand.

Open Quill

What it cannot do

The model runs on your device or in your browser's own built-in AI. Your document is never the thing being sent — the only download is the model's weights, once, and only if you open a tool that needs them.

Primary benefits

What you get for giving up the server

Losing the backend costs a few things and buys rather more. Here is the trade, in full.

Nothing waits on a network

The file is already where the work happens, so there is no upload and no queue.

  • A 40 MB merge starts instantly
  • No size cap beyond your own memory
  • No tier, because there is no meter

Private by construction

Not a policy we follow — a transfer that does not exist, enforced by your own browser.

  • No account, so nothing to breach
  • A CSP naming every host we may contact
  • Measured on the front page, not asserted

It still works with the wifi off

A service worker keeps the whole app in your browser's cache after the first visit.

  • Every tool runs offline
  • Reloads come from your disk
  • Add it to a home screen if you want an icon

Real engines, not approximations

The same libraries a desktop tool would use, compiled to WebAssembly and run here.

  • Ghostscript for compression and repair
  • Tesseract for reading scans
  • pdf.js and pdf-lib for everything else

A Library instead of an account

Folders, history and results in this browser's own storage, under a passphrase if you want one.

  • SQLite in a worker, files in the origin's filesystem
  • AES-GCM at rest with a key held only in memory
  • Nothing syncs, so nothing leaks

It can do the work without you

Templates chain the tools; rules run them on a trigger or a schedule.

  • Eighteen ready-made workflows
  • Share one as a code with no document in it
  • Catch-up scheduling, because a browser has no cron

59 tools, none of them a round trip

Documents and photographs, from a two-second merge to a passport photo at 600 dpi. Every one of them runs in a worker on this device.

Photos & images

Passport Photo

Crop a photo to Nepali PP, passport or visa size at print resolution, and lay out a sheet to print and cut.

Picture
ID Card

Lay out a staff or student card at exact ID-1 (85.6×54 mm) size, front and back, and export it print-ready.

Picture
Visiting Card

Design a business card at any standard size and export a print-ready PDF with bleed and crop marks.

Picture
QR Codes

Make a QR for a link, wifi network or contact card, or read one out of a picture.

Picture
Crop Image

Trim a photo to any ratio with a draggable crop box.

Picture
Rotate Image

Turn a photo in 90° steps or mirror it, then save it back out.

Picture
Resize Image

Set exact pixel dimensions or scale by a percentage, with proportions locked.

Picture
Compress Image

Shrink a photo to fit an upload limit, lowering quality only as far as it has to.

Picture
Convert Image

Change an image's format on this device, with a white ground when dropping transparency.

Picture
Remove Background

Cut the subject out of a photo with an on-device model.

Picture
Blur Faces

Blur, pixelate or black out any part of a picture, with an on-device face finder to propose the areas.

Picture
Upscale Image

Enlarge a picture with a super-resolution model that downloads once and runs on this device.

Picture
Photo Editor

Add text, shapes and stickers to a photo and tune its colour, all on this device.

Picture
Meme Generator

Caption a picture top and bottom in the classic style.

Picture
Watermark Image

Stamp text across a photo, once or tiled over the whole frame, on this device.

Picture
Face Proportions

Put five markers on a face and measure its proportions against φ and against the values that scored best when they were tested.

Picture
Enhance Photo

Measures the darkest and brightest tones in your photo and stretches them back to the ends of the range.

Picture
Photo Filters

Tune brightness, contrast and colour, or apply black & white, sepia and document looks.

Picture
Retouch Photo

Brush over a blemish, a stray hair or a speck of dust and the surrounding skin grows back over it.

Picture

The evidence

Don't believe us. Here is the browser's own record.

Every privacy promise on the internet is worth what you can verify of it, and no more. What follows is not a screenshot and not an illustration — it is performance.getEntriesByType("resource"), the log your browser keeps of every request this page made, plus a count of the bytes leaving through the only four APIs that can carry any.

Measured live in this tab

0 Bytes

uploaded from this page, since it loaded

Online
0
Requests seen
0
Left this site
0
Carried a body

Try it against a real operation

Builds a PDF and stamps it, then reports what crossed the network.

performance.getEntriesByType("resource")
RequestStarted bySentReceived

Reading the browser's record…

If this stays empty, your browser has not exposed Resource Timing to the page. Your own devtools still will.

This counts what this page does. Code in a worker has its own network stack and would not appear here — that gap is closed by the Content-Security-Policy below, which your browser applies to workers too, and by your own devtools, which see every context. This is the quick check, not the last word, and the last word was never going to be something we wrote.

Those /_next/ requests are not your file

They are the program arriving. Any page that does something has to load its own JavaScript and styles; this one also loads the PDF and image engines that do the work, plus a few HEAD requests when you hover a link, fetching the next page before you click it. Every one of them is a GET or a HEAD to this same site — the two verbs that can only ask for something. Neither carries a body, which is why the Sent column beside them reads zero and is measured rather than asserted.

Why measuring the body is the whole trick

A document can only leave a web page through four doors: fetch, XMLHttpRequest, sendBeacon and a WebSocket. All four are wrapped before the app starts and every byte handed to them is counted. An upload we could not measure would be reported as unknown, not as zero — the flattering rounding is the one thing a proof like this must never do.

The two exceptions, stated plainly

Open a tool that needs an AI model and its weights download once from huggingface.co, then stay cached. If your browser ships its own built-in model, it may fetch that instead. Both are downloads to you; neither carries your document, and neither happens unless you open one of those tools. When it does, it will appear in the panel as a cross-origin row, because it is one.

And it is enforced, not promised

Every page here ships a Content-Security-Policy naming the only hosts this site may talk to at all — in workers too, which is the gap the counter above cannot see. If we tried to send your file somewhere, your browser would refuse to make the request.connect-src 'self' blob: https://huggingface.co https://*.huggingface.co https://hf.co https://*.hf.co

Five checks, about a minute each

This is the part of the page where a product normally shows you strangers saying nice things about it. On this particular claim a stranger's opinion is not evidence. These are, and none of them requires trusting us.

Watch the network panel

F12, the Network tab, then sign the document above. No request appears, because none is made.

20 seconds

Pull the wifi out

Load the page, go offline, then merge, compress, sign, redact — anything. It all still works, because it always ran here.

1 minute

Read the response headers

The Content-Security-Policy names every host this site may contact. Your browser enforces it whatever we intended.

30 seconds

Look in Application → Storage

Anything you saved to the Library is there, on your disk, under your control, and Clear site data really does clear it.

30 seconds

Filter the whole session by POST

Tick Preserve log, use the app for as long as you like, then filter by method:POST. The list stays empty.

as long as you like

The difference is architectural, not editorial

Nothing below is an accusation about anyone. If a site does the work on a server then your file has to get to that server, and everything in the right-hand column follows from that one fact.

 On this siteA tool that uploads
Where your file is processedThis tabTheir servers
Copies of it on someone else's diskNoneAt least one, for a while
Needs an accountNoUsually
Works with no internetYes, after the first loadNo
Size and page limitsWhatever your machine can holdSet by your plan
What happens on a breachThere is nothing of yours to leakDepends on their retention

Questions

The questions people actually ask

Including the ones with an answer we would rather not have to give.

If nothing is uploaded, what are all those requests in my network tab?

The program arriving. A page that does something has to load its own JavaScript, styles and — here — the PDF and image engines that do the work. Every one is a GET or a HEAD to this same site: the two verbs that cannot carry a body, so there is nowhere in one for a document to be. The panel above lists them as the browser recorded them, with the number of bytes each one sent.

Can you get rid of those too?

Not entirely — the code has to reach you once. After that a service worker keeps the app in your browser's cache and serves it from there, which is why the site keeps working with the network off. That is a better test than any sentence on this page: load it, disconnect, keep using it.

What about the AI features?

They are the one exception and they are opt-in by opening the tool. If your browser has a built-in on-device model it is used. Otherwise the model's weights download once from huggingface.co and are cached. That is a download to you; your document is not part of it, and nothing happens at all unless you open Summarise, Translate or a tool that removes backgrounds.

Where do my files actually live?

In this browser, on this device, only if you press Save to Library. Bytes go in the origin's private filesystem and metadata into a local SQLite database. Clearing site data removes both. Nothing syncs anywhere, which also means a file saved on your laptop is not on your phone.

Is it as good as the server version?

For the work here, generally better: there is no upload wait, no queue and no size cap beyond your own memory. The real engines are compiled to WebAssembly, so compression is Ghostscript and OCR is Tesseract, not approximations of them. A very large file is limited by your machine rather than by a plan.

What is the catch?

Three, stated plainly. Browser storage can be cleared by you or evicted by the browser, so download anything you must keep. The first visit downloads more than a thin client would, because the engines come with it. And AI models are large, so the first run of those tools takes a while on a slow connection.

Your device. Your files. Your privacy.

Nothing to sign up for and no server to trust. Keep what you want in the Library, lock it with a passphrase, and clear all of it whenever you like.