Runs on your machine from its package; the steps are below.

Not assessed yet.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y stayput-mcp
MCP client config
{
"mcpServers": {
"stayput": {
"command": "npx",
"args": [
"-y",
"stayput-mcp"
]
}
}
}Your files stay put.
Free, open-source tools for images, PDFs, video and audio that run entirely in your browser.
Nothing is uploaded, there are no accounts or file size caps beyond what your device can hold, and it works offline.
Open stayput.dev · Tools · Verify the claim · How it works · MCP server · Privacy
Convert HEIC photos from an iPhone, merge, split, sign and compress PDFs, shrink images and strip GPS and EXIF data. Every tool is a static page and a bit of JavaScript and WebAssembly that does the work in your tab. There is no server that could receive your files.
That is the whole pitch, and you can check it in three ways:

| Images | PDFs |
|---|---|
| HEIC to JPG or PNG (batch, keep or drop EXIF) | Merge PDF |
| Convert images (PNG, JPG, WebP, AVIF, JPEG XL, HEIC, SVG in; JPG, PNG, WebP out) | Split PDF / extract pages |
| Compress and resize images (plus Compress PNG, transparency kept, and Compress GIF) | Compress PDF (lossless cleanup, image recompression, or flatten) |
| Remove EXIF and GPS data (lossless, no re-encode) | Rotate PDF pages |
| Crop image (ratios, exact pixels, circle) | Images to PDF |
| EXIF viewer (location, camera, date and every field) | PDF to images (PNG, JPG or one multi-page TIFF) |
| Video to GIF (MP4, MOV, WebM; trim, size, frame rate) | Reorder and delete pages |
| Blur or pixelate image (faces, plates, text; blur, pixelate or black box) | Sign PDF (draw or type, place on any page) |
| Rotate or flip image (quarter turns, mirror, batch) | Add page numbers |
| Video or audio to MP3 (MP4, MOV, M4A, WAV; or to WAV) | PDF to Word or text (paragraphs and headings, not layout) |
| Image to text (OCR) (photos, screenshots, scans; copy or .txt) | Unlock PDF (remove a password you know, or print/copy restrictions) |
| Color picker from image (HEX, RGB, HSL; main-colour palette) | Password protect PDF (AES-256) |
| GIF to MP4 (animated GIF to video, up to 90% smaller) | Extract images from PDF (every picture at its stored size) |
| Compress video (MP4, MOV, WebM; fit 10 MB for Discord or 25 MB for email) | |
| Video to MP4 (MOV, MKV, WebM; H.264 copied with no quality loss) | |
| Trim video (cut a clip without re-encoding) | |
| Mute video (remove the sound, picture copied untouched) | |
| Resize video (1080p, 720p, custom size) | |
| Rotate video (90°, 180°, flip) | |
| Crop video (any box, 9:16, 1:1) | |
| Change video speed (0.25× to 8×, pitch kept) | |
| Merge videos (join clips into one MP4) | |
| Add audio to video (music or voice-over, picture copied untouched) | |
| Reverse video (play a clip backwards) | |
| Video to JPG (save frames as JPG or PNG) | |
| Trim audio (cut MP3, WAV, M4A with a waveform) | |
| Screen recorder (screen, window or tab, with sound and microphone) | |
| Collage maker (grids, side by side, stitched screenshots) | |
| Split image (Instagram grids and carousels) | |
| Add text to image (captions, memes, watermarks) | |
| AI image upscaler (2×, 3× or 4× with Real-ESRGAN, on the device) | |
| Remove object from photo (paint over it, MI-GAN fills it in on the device) | |
| Adjust photo (brightness, contrast, saturation, warmth, sharpen, invert) | |
| Emote resizer (Twitch emotes and sub badges, Discord emoji and stickers, Slack emoji) | |
| Pixel art converter (auto or retro palettes, dithering, grid) | |
| Photo to sketch (pencil, charcoal, coloured pencil) | |
| Add border to image (border colour and width, rounded corners) | |
| Compress audio (smaller MP3 or OGG, or fit a size limit) | |
| Volume booster (louder, quieter or normalized audio and video) | |
| Pitch and speed changer (change key by semitones, speed up or slow down) | |
| Audio converter (MP3, WAV, FLAC, M4A, OGG) | |
| QR code generator (link, Wi-Fi, contact, email, phone; PNG or SVG) | |
| Voice recorder (microphone to MP3, WAV or M4A) | |
| Merge audio (join MP3, WAV, M4A with silence or crossfades) | |
| Metronome (any time signature, subdivisions, tap tempo) | |
| GIF maker (animated GIF from photos or screenshots; timing, size, loop, there-and-back) | |
| Image to SVG (trace PNG or JPG into vector shapes; black and white, logo or detailed) | |
| Transcribe audio to text (Whisper on your device; text, SRT or WebVTT; 16+ languages) | |
| Add subtitles to video (captions from the speech or your SRT, burned into the picture) | |
| Vocal remover (karaoke instrumental or acapella, AI model on your device) | |
| Video background remover (blur, colour or a picture behind the person) | |
| OCR PDF (make a scanned PDF searchable) | |
| Document scanner (phone photos of paper to a clean PDF) | |
| EPUB to PDF (DRM-free ebooks to a paginated PDF) | |
| PDF to EPUB (reflowable ebook from a PDF's text) | |
| Open ZIP, RAR and 7z (extract archives; password-protected ZIPs open with the password) | |
| Create ZIP (files or folders, optional AES-256 password) | |
| Remove silence (shorten pauses, trim quiet ends) | |
| Remove background noise (hiss, hum, fans and traffic out of voice recordings and videos) | |
| Blur faces in video (automatic, frame by frame; blur, pixelate, box or emoji) | |
| Resize PDF pages (A4, Letter, Legal, A3, A5, Tabloid; content scaled to fit, text stays text) | |
| Flatten PDF (form fields, comments, stamps and signatures into the page; text stays selectable) | |
| Fill PDF form (type into fillable fields, tick boxes, optional flatten) | |
| Online tuner (guitar, bass, ukulele, violin, chromatic; reference notes) | |
| Mic test (level meter, verdict, record and play back) | |
| Webcam test (preview, real resolution and frame rate, snapshot) | |
| Audio to video (MP3 plus a cover picture to MP4; 16:9, square, 9:16) |
Plus dedicated pages for the jobs people search for: image conversions such as HEIC to PNG, PNG to JPG, WebP to PNG, AVIF to JPG and JXL to PNG; tool presets such as JPG to PDF, PDF to JPG, Combine PDF, Resize image, Crop to circle and Remove location from photos; and guides that answer the question behind the tool ("is it safe to merge PDFs online?", "how do I remove location data from photos?").
Stayput also ships as a local Model Context Protocol server, stayput-mcp, so an LLM client can call the same PDF and photo tools as tool calls, still with no network access and no uploads:
{ "mcpServers": { "stayput": { "command": "npx", "args": ["-y", "stayput-mcp"] } } }
See mcp/README.md for the full tool list, or stayput.dev/mcp.
The site is a static Astro build: one page per tool, a shared tool shell, and a TypeScript module per tool that does the work in the tab. The MCP server (above) is the one part of this repo that does run as a local process; everything else described below is the browser-only website.
/vendor/ (copied out of node_modules at build time by scripts/vendor.mjs). The request fetches only the decoder; no image data is sent.src/lib/pdftext.ts rebuilds lines, paragraphs and headings and src/lib/docx.ts writes a minimal Office Open XML document with fflate. Text and structure only, no layout./Encrypt and, when found, runs qpdf compiled to WebAssembly (@neslinesli93/qpdf-wasm, served from /vendor/ and loaded only when needed) to strip the encryption in the tab. Files with a user password prompt for it once; outputs are written without encryption. See src/lib/unlock.ts./vendor/ like the HEIC decoder. Tool pages that accept these formats ask the service worker to cache the decoders they may need (only JXL/AVIF decoders the browser lacks) and mark <html data-decoders="cached"> when they are in, so they work offline after one visit; the service worker does not precache them for every visitor because together they are about 6 MB. See src/lib/vendor.ts.src/lib/exif.ts. It deletes only the metadata segments and writes the untouched image data back, so the pixels are identical and the file only gets smaller. It also extracts EXIF from HEIC containers so "keep metadata" works on HEIC conversions.src/lib/tiff.ts), bundled and loaded only when a TIFF is dropped, since only Safari decodes TIFF natively. Images to PDF turns every page of a multi-page TIFF into a PDF page.src/pages/sw.js.ts) caches every tool page, and scripts/postbuild.mjs writes the list of hashed assets and fonts into it so all tool code (including the on-demand pdf-lib and pdf.js chunks) is cached on the first visit. Pages are network-first so deploys show up immediately; assets are cache-first because their names are content-hashed, and assets from earlier deploys are pruned on activation.connect-src is limited the same way, so even a bug could not send a file elsewhere.src/lib/analytics.ts, and tests/analytics.spec.ts fails if an event gains a property that is not listed or names a file.There is no backend and no cookies. See /privacy for the full statement.
Requirements: Node 22+.
npm install
npm run dev # http://localhost:4321
npm run build # static output in dist/
npm run check-links # fail on any broken internal link in dist/ (--external also checks outbound links)
node scripts/serve.mjs # serve dist/ locally with clean URLs and the production headers
npm run check # Astro and TypeScript checks
End-to-end tests drive every tool in headless Chromium with generated fixtures (JPEG with EXIF and GPS, PNG, WebP, HEIC, multi-page PDFs, plus static encrypted and offset-box PDFs under tests/fixtures/static), then check the downloaded outputs. One test also asserts the privacy claim directly: after files are added, no request leaves the page except the stubbed analytics call. The local server (scripts/serve.mjs) applies the site's production headers, so tests run under the production Content-Security-Policy and a violation shows up as a console error.
pip install pillow pillow-heif # once, for fixture generation
python3 tests/fixtures/make-fixtures.py && node tests/fixtures/make-pdf.mjs
npx playwright install chromium # once
npm run build && npm test
Set PLAYWRIGHT_CHROMIUM_PATH=/path/to/chrome to use a preinstalled browser.
public/og.png and public/og/<slug>.png are rendered from the page copy by node scripts/make-og.mjs (headless Chromium). Re-run it after changing a tool's heading or tagline and commit the result.
src/data/tools.ts (slug, SEO copy, steps, FAQ) and a paragraph to src/data/engine.ts saying what actually runs in the tab. These feed the home page, footer, sitemap, service worker, structured data and social image.src/pages/tools/<slug>.astro using ToolLayout and put the option controls in the options slot.src/tools/<slug>.ts, call createShell({ process }) from src/lib/shell.ts, and return the output files.tests/tools.spec.ts, then run node scripts/make-og.mjs.A format-pair landing page ("WebP to PNG") is just an entry in src/data/pairs.ts; the page, its social image and its sitemap entry are generated. A preset landing page for any other tool ("JPG to PDF", "Combine PDF") is an entry in src/data/presets.ts naming the base tool and its option defaults; the base tool's option controls live in src/components/options/ so the tool page and its presets share one copy. A guide is an entry in src/data/guides.ts (sections, FAQ, the tools it points to); copy supports [text](https://github.com/keenanlk/stayput/blob/main/path) links and **bold**. Run node scripts/make-og.mjs after adding any of these.
See CONTRIBUTING.md for the ground rules, the main one being that no change may make a file leave the browser.
Stayput is free and will stay free. There are no ads, no accounts and no paid tier. If it saved you a subscription and you want to say thanks, the repository has a GitHub Sponsors link; sponsorship covers the domain and nothing else.
MIT. See LICENSE. Third-party libraries keep their own licenses: heic-to (LGPL-3.0, loaded as a separate module at runtime), qpdf (Apache-2.0, loaded as a separate module at runtime), @jsquash/jxl and @jsquash/avif (Apache-2.0, loaded as separate modules at runtime), pdf-lib (MIT), pdf.js (Apache-2.0), fflate (MIT), UTIF.js and pako (MIT), Astro (MIT). The Caveat font in public/fonts is under the SIL Open Font License 1.1 (see public/fonts/OFL-Caveat.txt).