explaingit

c4illin/convertx

16,794TypeScriptAudience · generalComplexity · 3/5Setup · easy

TLDR

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.

Mindmap

mindmap
  root((ConvertX))
    What it does
      File conversion
      1000 plus formats
      Batch processing
    Conversion engines
      FFmpeg for video
      LibreOffice for docs
      ImageMagick for images
      Pandoc and Calibre
    Tech stack
      TypeScript Bun
      Elysia framework
      Docker container
    Use cases
      Private converter
      Team file service
      Sensitive documents
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Run a private file conversion service in Docker to avoid uploading sensitive documents to public converter websites

USE CASE 2

Convert batches of images, PDFs, videos, or 3D files through a drag-and-drop web UI supporting 1000+ formats

USE CASE 3

Set up ConvertX for a team with auto-delete of converted files after a configurable number of hours

USE CASE 4

Pass custom FFmpeg arguments for video conversion jobs through environment variable configuration

Tech stack

TypeScriptBunElysiaDockerFFmpegLibreOffice

Getting it running

Difficulty · easy Time to first run · 30min

Requires Docker, the first user must register immediately after startup or any visitor can claim the admin account.

In plain English

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.

Copy-paste prompts

Prompt 1
I want to run ConvertX in Docker on my home server. Write me a docker-compose.yml that mounts a data volume, sets a JWT secret, and exposes the service on port 3000.
Prompt 2
I have ConvertX running but want converted files auto-deleted after 24 hours. Which environment variable controls this and how do I set it in my Docker run command?
Prompt 3
Using ConvertX, what is the best workflow for batch-converting 200 HEIC photos from my iPhone to JPEG? Walk me through the steps in the web UI.
Prompt 4
I want anyone on my local network to use ConvertX without logging in. Which environment variable enables open registration and should I also enable plain HTTP for a local-only setup?
Open on GitHub → Explain another repo

← c4illin on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.