gitmyhub

ConvertX

TypeScript ★ 17k updated 1mo ago

💾 Self-hosted online file converter. Supports 1000+ formats ⚙️

Self-hosted web app that converts files between over a thousand formats, images, documents, videos, and 3D assets, by wrapping tools like FFmpeg, LibreOffice, and ImageMagick behind one drag-and-drop interface.

TypeScriptBunElysiaDockerFFmpegLibreOfficesetup: easycomplexity 3/5

ConvertX is a self-hosted online file converter that you run yourself instead of relying on a third-party website. The point is that you keep your files on your own machine while still getting the convenience of a drag-and-drop converter web page. According to the project it can handle over a thousand different file formats and can also process several files at once.

Under the hood, ConvertX is not one giant converter but a wrapper around a long list of well-known open source tools. For images it uses ImageMagick, GraphicsMagick, Vips, libheif, libjxl, resvg and Inkscape; for documents it uses LibreOffice, Pandoc, Calibre and Markitdown; for video it uses FFmpeg; for 3D assets it uses Assimp. The web service hands your file to the right tool and gives you back the converted result through one consistent interface.

The intended way to run it is through Docker. You start a single container, mount a data folder so converted files persist, set a secret used to sign the login token, and then open it in your browser to create the first account. The README warns you to create that first account immediately because anyone who hits an unconfigured instance can register it. Extra environment variables let you enable open registration, allow plain HTTP for local use, auto-delete files after a set number of hours, or pass custom arguments to FFmpeg.

You'd reach for ConvertX when you want a private, always-available conversion service for your team or yourself without sending sensitive documents through a public converter site. The project is written in TypeScript and built on the Bun runtime with the Elysia web framework, and is distributed as a Docker image.

Where it fits