frogConvert
What is it & how to use
frogConvert
(Backup domain: frogconvert.netlify.app) · GitHub
Truly universal online file converter, plus a built-in PDF editor and file compressor.
Turn your file into the prince it always was.
frogConvert runs entirely in your browser. Convert between 70+ file formats, compress images, audio, video and PDFs, and edit PDFs (merge, reorder, extract, watermark) - without uploading anything to a server. Also available as an MCP server and a local REST API, so agents and scripts can convert, compress and edit PDFs headlessly.
Quick start
- Just use it: frogconvert.xyz.
- Convert a file: docs/CONVERTER.md.
- Edit a PDF: docs/PDF_EDITOR.md.
- Make a file smaller: docs/COMPRESS.md.
- Run the MCP server or REST API: clone the repo, then
bun run mcporbun run api. See docs/INTEGRATIONS.md. - Self-host, Docker, desktop builds: docs/DEPLOYMENT.md.
Recent changes
See CHANGELOG.md for the full history.
Docs
| docs/CONVERTER.md | End-user guide: converting files |
| docs/PDF_EDITOR.md | End-user guide: editing PDFs |
| docs/COMPRESS.md | End-user guide: compressing files |
| docs/INTEGRATIONS.md | MCP and REST API reference |
| docs/DEPLOYMENT.md | Self-host, Docker, desktop, CLI |
| docs/ARCHITECTURE.md | Internal design and subsystems |
| docs/HANDLERS.md | Authoring a new format handler |
| docs/CONTRIBUTING.md | PR workflow, testing, style |
| AGENTS.md | Rules for AI pair-programming agents |
| SECURITY.md | Privacy posture and limits |
| CHANGELOG.md | Release history |
| COPYRIGHT | Copyright, attribution, and the GPLv3 election |
| SUBMODULES.md | Vendored submodules, pinned revisions, review dates |
| docs/ADDING_A_MODE.md | Playbook for shipping a new top-level surface |
Credits
The conversion pipeline (route finder, format handlers, Dijkstra routing) is forked from Convert to it! by p2r3 (original repo). Full credit for the core conversion engine goes to the original author. The fork reimagines the UI/UX with quality-of-life improvements.
What is frogConvert's own work. Two of the three surfaces did not exist upstream in any form and were built here from scratch:
- Compress (
/compress) - the surface, the compression engine in src/core/compression/, the Ghostscript-WASM integration, the mixed-batch orchestrator, the keep-threshold and the whole level model. - The PDF editor (
/pdf) - merge, organize, extract, watermark.
Along with the MCP server, the local REST API, the UI, the docs, the desktop/PWA packaging, and the test infrastructure (Vitest + Puppeteer, including the corpus suites).
What is inherited is the conversion pipeline and the handlers that existed at the fork point. Full copyright detail is in COPYRIGHT.
Bundled handlers
Several format handlers are third-party projects vendored as git submodules (see SUBMODULES.md for the pinned revisions):
| Project | Author | Used for |
|---|---|---|
| envelope, sppd | p2r3 | Envelope archives, Super Pixel Paint documents |
| qoi-fu, qoa-fu | Piotr Fusik | QOI images, QOA audio (MIT) |
| espeakng.js, image-to-txt | zipsegv | Text-to-speech, image-to-text |
| gimper, RPG-Maker-MV-Decrypter, terraria-world-file-ts | ConnorTippets | GIMP .xcf, RPG Maker assets, Terraria worlds |
The MIDI synthesis handler uses the TimGM6mb soundfont via FluidSynth; see src/handlers/midi/README.md for that credit in full.
Built on
frogConvert is mostly a careful shell around other people's engines. The heavy lifting is done by:
Ghostscript (PDF and PostScript, via @jspawn/ghostscript-wasm) · ImageMagick (magick-wasm) · FFmpeg (ffmpeg.wasm) · Pandoc · LibreOffice (when installed natively) · pdf-lib and pdf.js · SheetJS · 7-Zip (7z-wasm) · SQLite · Verovio and VexFlow (music engraving) · three.js (3D) · FluidSynth via js-synthesizer · eSpeak NG · Mermaid, marked and highlight.js (docs rendering).
Ghostscript is AGPLv3; its licence ships alongside the binary at /wasm/gs/LICENSE. Licences for the remaining dependencies are in their respective node_modules entries.
No warranty
frogConvert is a hobby project and is provided as is, with no warranty of any kind - including no guarantee of security, correctness, or that your files come out the other side intact. GPLv3 sections 15 to 17 are the operative terms. Keep your originals, and see SECURITY.md for the honest version of what this does and does not promise.
License
frogConvert is licensed under the GNU General Public License, version 3 or later (GPL-3.0-or-later). The full text is in LICENSE. The GPLv2 text inherited from the upstream project is retained verbatim in LICENSE.upstream-GPLv2. Copyright, attribution and the full reasoning are in COPYRIGHT.
Why GPLv3 when the upstream project shipped the GPLv2 text
The conversion pipeline is forked from Convert to it!.
Verified against that repository at commit 2fc7143, it ships the stock GPLv2
text with the "How to Apply These Terms" placeholders unfilled, has no License
section in its README, no license field in package.json, and no GPL headers
in any source file. Its README does mention a version once - contributor
guidance at line 33 telling format proposers to "make sure the license is
compatible with GPL-2.0" - which is a statement about acceptable dependencies,
not about the program's own licence version.
GPLv2 section 9 provides:
If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
frogConvert elects GPLv3 for this derivative work on the reading that the line above is dependency guidance rather than a version election. That is a judgement call rather than a certainty, and COPYRIGHT sets out the evidence so it can be challenged. The unambiguous fix is for upstream to state a version explicitly.
The election matters because GPLv3 section 13 permits combining a covered work
with AGPLv3 code, which is what allows the Ghostscript-based PDF compressor to
ship. That engine is part of Compress rather than an optional extra, so AGPLv3
section 13's network-interaction requirement applies to the combination - which
is why the hosted app offers its own source. That offer lives on the docs page
(reachable from the footer's view docs): a link to the repository, and a link
to the exact commit the running build came from, which is the revision the
source offer is actually about. The upstream Ghostscript LICENSE is shipped
alongside the binary at /wasm/gs/LICENSE.
Not legal advice.