Last updated: 29 September 2026.
The short answer
Every tool on this site processes your file inside your own browser. Filewhisk has no server that could receive a file: the site is a set of static pages and scripts served from Cloudflare, with no server-side code behind them, so there is no upload endpoint for a file to be sent to. The file is read into your browser's memory and the result is built on your device. The few things that are kept, all of them in your own browser, are listed under what stays in your browser.
That is a claim you should not have to take on trust, so this page lists what the page itself downloads, what our analytics can and cannot see, how we tested the offline behaviour, and how you can check all of it yourself in under a minute.
What the page downloads
A tool page makes three kinds of requests. None of them carries your file.
- The tool itself. The HTML, stylesheet and scripts, all from
filewhisk.com. The libraries that do the heavy work, such as pdf.js, pdf-lib, qpdf, SheetJS and gifsicle, are stored on our own domain rather than loaded from a third-party CDN. - A processing engine, for some tools. About a third of the tools need a large library, such as a PDF renderer or an AVIF encoder, that would slow every page down if it arrived with the HTML. Those engines are fetched in the background once the page has finished loading. The table below names the engine for each tool.
- Google Analytics and Google AdSense. Analytics counts visits and tool use (details in the next section). The AdSense script is Google's advertising code and makes its own requests to Google. The footer also shows three small badge images from the directories that list the site.
What analytics can see
When you use a tool, the page sends Google Analytics a short event. Its entire content is listed here:
| Event | Fields sent |
|---|---|
| File selected | Tool name, number of files, extension of the first file (for example pdf), number of files the tool refused, and whether you picked, dropped or pasted |
| Download | Tool name, extension of the downloaded file, and whether it came from a link or a button |
| Copy | Tool name |
| Error | Tool name and one of three categories: protected, wrong_type or failed |
Never sent: file names, file contents, passwords, text you type, or the status messages the tools show, because those can contain a file name. Error events are reduced to a category before they leave the page. The privacy policy covers cookies and advertising.
Does it keep working with the internet off?
Yes, once the page has loaded. A service worker keeps a copy of each page and its scripts, and the background fetch described above stores the processing engine the same way. After that, the tool no longer needs the network at all.
How we tested it (29 September 2026). Each tool below was opened in Chrome in a fresh profile, from a local copy of the site served by our own test server. Once the page and its engine had loaded, we shut the server down and only then gave the tool a file:
- The file: a photo with GPS data, a PDF, an encrypted PDF, a GIF, an MP4, a CSV or an XLSX, depending on the tool.
- The pass condition: the tool had to produce its result, whether a download, a report or a hash.
- The control: in every run, a request for a file the page had never downloaded failed. That proves the network really was gone.
We shut the server down instead of using Chrome's built-in "offline" switch, because that switch does not stop requests made by the service worker. With the switch alone, the control request still succeeded, so the switch cannot prove a tool is working offline.
Tools tested this way: remove EXIF data, view image metadata, hash generator, text diff, protect PDF, unlock PDF, sign PDF, JPG to AVIF, compress GIF, compress video, CSV to Excel, Excel to CSV, PDF to JPG, and add watermark to PDF (with non-Latin text). All fourteen produced their result with the server off. Together they cover every engine in the table except jsQR, which the QR code generator only uses to read its own code back as a check; it is fetched the same way but was not part of this test. Tools that fetch nothing extra work offline for a simpler reason: everything they use arrives with the page.
What went wrong first. The first run of this test failed for protect PDF, unlock PDF and sign PDF: they only downloaded their engine when a file was dropped, so with the connection gone there was nothing to run. The background fetch was added the same day. We mention it because it is the kind of gap a "no upload" claim can hide.
Exceptions, stated plainly
- Data Saver and slow connections. If your browser has Data Saver on, or the connection reports as 2G, the background fetch is skipped. A tool that needs an engine then downloads it when you drop a file, so it needs a connection at that moment. Your file still stays on your device.
- Some PDFs ask for one more file. The PDF renderer fetches an extra font or decoder for a few documents: ones that use standard fonts without embedding them, some Asian-language text, and JPEG 2000 images. Offline, such a page can preview with a substitute font, or with that image missing. This affects the preview and PDF to JPG output, not the tools that edit the PDF itself.
- The map link. When a photo contains GPS coordinates, the image metadata viewer shows a "See this location on a map" link to OpenStreetMap. Nothing is sent unless you click it. If you do, the coordinates, and only the coordinates, are sent to OpenStreetMap as part of the address.
What stays in your browser
Nothing is sent anywhere, but three things are kept in your own browser's storage. You can remove them at any time by clearing this site's data in your browser settings.
- Settings. Many tools remember your last choice, such as the target size, output format or ink colour, so you don't have to set it again. These are preferences, not file contents.
- The invoice draft. The invoice generator keeps your unfinished invoice, including the details you typed, so a reload doesn't lose it. Clearing the form removes it.
- "Next step" hand-offs. When you send a result straight to another tool with a "Next step" button, the file is stored in the browser's IndexedDB so the next page can open it. That page deletes it as soon as it reads it. If the next page never opens, the file stays until the next hand-off replaces it, and it is ignored once it is more than ten minutes old.
Check it yourself
- The offline test. Open any tool and wait a few seconds after the page finishes loading. Turn off Wi-Fi (or unplug the cable), then drop a file in. The tool works.
- The network log. Press F12 (on a Mac, Option + Command + I), open the
Network tab, and use a tool. The requests you see are our own static files and
Google's analytics and ad requests. None of them sends anything close to the size of
your file. Type
method:POSTinto the filter box: nothing goes tofilewhisk.com, because there is nothing on our side to receive it.
Every tool
This table is generated from the site's own configuration when the site is built, so a new tool appears here the day it is published.
| Tool | Where the file is processed | Extra engine fetched after the page opens |
|---|---|---|
| Add Border to Image | Your browser | Nothing — everything arrives with the page |
| Add Page Numbers to PDF | Your browser | pdf.js (PDF renderer), 1.8 MB; fontkit + Roboto (only for text outside Latin-1), 1.1 MB |
| Add Watermark to Image | Your browser | Nothing — everything arrives with the page |
| Add Watermark to PDF | Your browser | pdf.js (PDF renderer), 1.8 MB; fontkit + Roboto (only for text outside Latin-1), 1.1 MB |
| Android App Icon Generator | Your browser | Nothing — everything arrives with the page |
| App Icon Generator | Your browser | Nothing — everything arrives with the page |
| App Store Screenshot Generator | Your browser | Nothing — everything arrives with the page |
| ASCII Art Generator | Your browser | three FIGlet fonts (text banners), 0.1 MB |
| Barcode Generator | Your browser | Nothing — everything arrives with the page |
| Base64 Encoder and Decoder | Your browser | Nothing — everything arrives with the page |
| Case Converter | Your browser | Nothing — everything arrives with the page |
| Circle Crop Image | Your browser | Nothing — everything arrives with the page |
| Color Picker From Image | Your browser | Nothing — everything arrives with the page |
| Combine Images | Your browser | Nothing — everything arrives with the page |
| Compress GIF | Your browser | gifsicle, WebAssembly, 0.3 MB |
| Compress Image for Discord | Your browser | Nothing — everything arrives with the page |
| Compress Image for WhatsApp | Your browser | Nothing — everything arrives with the page |
| Compress Image to 100KB | Your browser | Nothing — everything arrives with the page |
| Compress Image to 1MB | Your browser | Nothing — everything arrives with the page |
| Compress Image to 200KB | Your browser | Nothing — everything arrives with the page |
| Compress Image to 20KB | Your browser | Nothing — everything arrives with the page |
| Compress Image to 500KB | Your browser | Nothing — everything arrives with the page |
| Compress Image to 50KB | Your browser | Nothing — everything arrives with the page |
| Compress Image to Target Size | Your browser | Nothing — everything arrives with the page |
| Compress PDF | Your browser | pdf.js (PDF renderer), 1.8 MB |
| Compress Video | Your browser | Mediabunny (video muxer), 0.7 MB |
| Convert Image Format | Your browser | AVIF encoder, WebAssembly, 3.5 MB |
| Create ZIP File | Your browser | Nothing — everything arrives with the page |
| Crop Image | Your browser | Nothing — everything arrives with the page |
| CSV to Excel | Your browser | SheetJS (spreadsheet writer), 0.3 MB |
| CSV to JSON | Your browser | Nothing — everything arrives with the page |
| CSV to XML | Your browser | Nothing — everything arrives with the page |
| Delete PDF Pages | Your browser | pdf.js (PDF renderer), 1.8 MB |
| Excel to CSV | Your browser | SheetJS (spreadsheet reader), 1.0 MB |
| Excel to JSON | Your browser | SheetJS (spreadsheet reader), 1.0 MB |
| Extract Audio from Video | Your browser | Nothing — everything arrives with the page |
| Extract Images from PDF | Your browser | pdf.js (PDF renderer), 1.8 MB |
| Extract Text from PDF | Your browser | pdf.js (PDF renderer), 1.8 MB |
| Facebook Cover Photo Size | Your browser | Nothing — everything arrives with the page |
| Favicon Generator | Your browser | Nothing — everything arrives with the page |
| Fill PDF Form | Your browser | pdf.js (PDF renderer), 1.8 MB; fontkit + Roboto (only for text outside Latin-1), 1.1 MB |
| GIF to JPG | Your browser | Nothing — everything arrives with the page |
| GIF to PNG | Your browser | Nothing — everything arrives with the page |
| Hash Generator | Your browser | Nothing — everything arrives with the page |
| HEIC to JPG | Your browser | Nothing — everything arrives with the page |
| Image to Base64 | Your browser | Nothing — everything arrives with the page |
| Indian Passport Photo Maker | Your browser | Nothing — everything arrives with the page |
| Instagram Post Size | Your browser | Nothing — everything arrives with the page |
| Invoice Generator | Your browser | pdf.js (PDF renderer), 1.8 MB; fontkit + Roboto (only for text outside Latin-1), 1.1 MB |
| JPG to AVIF | Your browser | AVIF encoder, WebAssembly, 3.5 MB |
| JPG to PDF | Your browser | Nothing — everything arrives with the page |
| JPG to WebP | Your browser | Nothing — everything arrives with the page |
| JSON Formatter and Validator | Your browser | Nothing — everything arrives with the page |
| JSON to CSV | Your browser | Nothing — everything arrives with the page |
| JSON to XML | Your browser | Nothing — everything arrives with the page |
| Meme Maker | Your browser | Nothing — everything arrives with the page |
| Merge PDF | Your browser | Nothing — everything arrives with the page |
| Mute Video | Your browser | Mediabunny (video muxer), 0.7 MB |
| Passport Photo Maker | Your browser | Nothing — everything arrives with the page |
| PDF to Grayscale | Your browser | pdf.js (PDF renderer), 1.8 MB |
| PDF to JPG | Your browser | pdf.js (PDF renderer), 1.8 MB |
| Pixelate Image | Your browser | Nothing — everything arrives with the page |
| PNG to AVIF | Your browser | AVIF encoder, WebAssembly, 3.5 MB |
| PNG to JPG | Your browser | AVIF encoder, WebAssembly, 3.5 MB |
| PNG to WebP | Your browser | Nothing — everything arrives with the page |
| Protect PDF | Your browser | pdf.js (PDF renderer), 1.8 MB; qpdf, compiled to WebAssembly (PDF encryption), 1.4 MB |
| QR Code Generator | Your browser | jsQR (reads the code back to check it), 0.3 MB |
| Remove EXIF Data | Your browser | Nothing — everything arrives with the page |
| Reorder PDF Pages | Your browser | pdf.js (PDF renderer), 1.8 MB |
| Resize Image | Your browser | Nothing — everything arrives with the page |
| Resize Image for LinkedIn | Your browser | Nothing — everything arrives with the page |
| Rotate Image | Your browser | Nothing — everything arrives with the page |
| Rotate PDF | Your browser | pdf.js (PDF renderer), 1.8 MB |
| Schengen Visa Photo Maker | Your browser | Nothing — everything arrives with the page |
| Sign PDF | Your browser | pdf.js (PDF renderer), 1.8 MB; six handwriting fonts, 0.5 MB |
| Signature Generator | Your browser | six handwriting fonts, 0.5 MB |
| Social Media Image Resizer | Your browser | Nothing — everything arrives with the page |
| Split CSV | Your browser | Nothing — everything arrives with the page |
| Split Image Into Grid | Your browser | Nothing — everything arrives with the page |
| Split PDF | Your browser | pdf.js (PDF renderer), 1.8 MB |
| SVG to PNG | Your browser | Nothing — everything arrives with the page |
| Text Diff | Your browser | Nothing — everything arrives with the page |
| TIFF to JPG | Your browser | Nothing — everything arrives with the page |
| TIFF to PNG | Your browser | Nothing — everything arrives with the page |
| Trim Video | Your browser | Mediabunny (video muxer), 0.7 MB |
| Twitter Header Size | Your browser | Nothing — everything arrives with the page |
| UK Passport Photo Maker | Your browser | Nothing — everything arrives with the page |
| Unix Timestamp Converter | Your browser | Nothing — everything arrives with the page |
| Unlock PDF | Your browser | qpdf, compiled to WebAssembly (PDF encryption), 1.4 MB |
| US Passport Photo Maker | Your browser | Nothing — everything arrives with the page |
| Video to Frames | Your browser | Nothing — everything arrives with the page |
| Video to GIF | Your browser | gifsicle, WebAssembly, 0.3 MB |
| View Image Metadata | Your browser | Nothing — everything arrives with the page |
| WebP to AVIF | Your browser | AVIF encoder, WebAssembly, 3.5 MB |
| WebP to JPG | Your browser | Nothing — everything arrives with the page |
| WebP to PNG | Your browser | Nothing — everything arrives with the page |
| Word Counter | Your browser | Nothing — everything arrives with the page |
| XML to CSV | Your browser | Nothing — everything arrives with the page |
| XML to JSON | Your browser | Nothing — everything arrives with the page |
| YouTube Thumbnail Size | Your browser | Nothing — everything arrives with the page |
Found something that doesn't match?
If any request, any tool or any sentence on this page doesn't match what you see, write to hello@filewhisk.com. We will correct the tool or the page, and say here what changed.