Most “fast and free” file converters on the web turn out to be anything but: ads everywhere, size caps, slow queues, and opaque handling of your data. VERT.sh takes the opposite route: an open-source converter with no file size limits that runs on your device via WebAssembly (WASM), and—when it comes to video—lets you use a self-hosted daemon so your media never has to leave your own machine. The project is licensed under AGPL-3.0, written in Svelte and TypeScript, and ships with a public instance at vert.sh plus an active GitHub repo.

The pitch is straightforward: privacy, speed, and control. Images, audio and documents are converted locally in your browser; for video, the team offers a pragmatic hybrid: by default the official instance uploads to a fast GPU server for one hour max, but you can run the video backend yourself—vertd—for a fully local pipeline.

* Local for images/audio/documents; video is local when you self-host vertd.


What VERT is—and who it’s for

VERT is a minimalist web interface that converts files without limits and without noise—no ads, no signup, no nagging. It uses WASM to execute conversion libraries directly in the browser for images, audio, and documents, and defers to a video daemonvertd—for heavy codecs and containers.

It’s useful to anyone, but it shines in three common scenarios:

  1. Privacy-conscious users who refuse to upload pictures, documents or audio to third-party services.
  2. Engineering teams that need a reproducible, versioned, self-hostable converter (Docker ready, AGPL license).
  3. Creatives and journalists juggling many formats—including camera RAW and structured docs—who want fast, predictable flows.

What it converts—and how

VERT lists 250+ supported formats. In broad strokes:

  • Images (local): PNG, JPEG/JPG, WebP, GIF, SVG, JXL, AVIF, HEIC/HEIF*, ICO, BMP… plus a long tail that includes camera RAWs (NEF, CR2, ARW, DNG, RW2, RAF, ORF, PEF, CR3, etc.) and pro formats like PSD, EPS, EXR.
  • Audio (local): MP3, WAV, FLAC, OGG/OGA/OPUS, AAC/ALAC/M4A, WMA, AMR, AC3, AIFF, and more.
  • Documents (local): DOCX, DOC, MD, HTML, RTF, CSV/TSV, JSON, RST, EPUB, ODT, DocBook.
  • Video (server or vertd): MKV, MP4, WEBM, AVI, WMV, MOV, GIF, TS/MTS/M2TS, MPG/MPEG, FLV/F4V, VOB, M4V, 3GP/3G2, MXF, OGV, RM/RMVB*, H.264, DIVX, SWF, AMV, ASF, NUT, and others.

* Some formats are marked with an asterisk in the project list; real-world support can depend on the exact codecs compiled for WASM or available to your video backend.

Under the hood, VERT relies on the time-tested trio—compiled or integrated for local execution:

  • ImageMagick for images.
  • FFmpeg for audio.
  • Pandoc for documents.

For video, there are two paths:

  • Official instance: uploads to a GPU server (RTX 4000 Ada). Files remain there for up to one hour if you don’t convert, or one hour after conversion / until you download—then they’re deleted automatically.
  • Self-host with vertd: a Rust wrapper around FFmpeg that runs on your machine or your own server. The VERT web UI talks to vertd over HTTP and uses the full capacity of your CPU/GPU. The default port is 24153 (http://localhost:24153).

Architecture and stack: Svelte + TypeScript + WASM

The frontend is built with Svelte and TypeScript, bundled with Vite, styled with Tailwind. Thanks to WebAssembly, the site runs native-grade libraries inside the browser sandbox—no plugins required. That removes upload/download latency and, crucially, reduces data exposure: your PNG or DOCX never leaves your device just to become a WebP or PDF.

For telemetry, the project uses Plausible (privacy-friendly, aggregated analytics) and the UI lets you opt out. Environment variables (.env) such as PUB_PLAUSIBLE_URL and PUB_HOSTNAME make it easy to integrate your own analytics—or none at all.


Self-hosting: from “clone & run” to production with Docker and NGINX

The repo provides a clean workflow.

Prerequisites

  • Bun (JS package manager/runtime).

Clone & install

git clone https://github.com/VERT-sh/VERT
cd VERT/
bun i
Code language: PHP (php)

Develop

bun dev
# UI at http://localhost:5173
Code language: PHP (php)

Production build

  1. Create a .env file with e.g.:
PUB_HOSTNAME=example.com
PUB_PLAUSIBLE_URL=https://plausible.example.com
PUB_ENV=production
PUB_VERTD_URL=https://vertd.vert.sh
Code language: JavaScript (javascript)
  1. Build:
bun run build
  1. Serve the build/ directory with NGINX or any static server.
    The repo includes a Dockerfile, docker-compose.yml, and sample NGINX config. For a mixed deployment (UI + your own vertd), expose 24153/TCP internally and point the UI to the daemon’s URL (e.g., http://vertd:24153) in Settings.

Fully local video with vertd

  • Download the vertd release for your platform.
  • Run it (defaults to port 24153).
  • In VERT → Settings, set Instance URL to http://localhost:24153 (or your server’s IP/port). From then on, video never leaves your device or network.

Performance & UX: why WASM matters

Converting in the browser avoids the two classic delays of cloud converters: uploading and downloading. For everyday work:

  • Images: batch PNG → WebP/AVIF or resize without sending anything anywhere.
  • Audio: transcode WAV → FLAC or MP3 in seconds with presets or manual parameters.
  • Documents: DOCX → PDF or EPUB via Pandoc, no sensitive content exposed.

WASM isn’t magic—it uses your CPU and memory—but that local cost is often far less than the time wasted waiting for a remote service to receive, process, and return your files. And if your machine is decent, you’ll feel the difference. For video, where compute costs spike, vertd offloads the heavy lifting to FFmpeg outside the browser and lets you use your full hardware.


License, community, maintenance

VERT is AGPL-3.0, which means networked derivatives must share improvements with the community. The repo shows active development across 2024–2025: CI workflows, docs/ for Docker and video, NGINX configs, localization, and multiple “quality of life” updates (caching workers, navigation fixes, etc.). There’s a public Discord and a live vert.sh instance for non-technical users, while Docker/NGINX examples let admins deploy in minutes.


Privacy: what touches the network and what doesn’t

  • Images, audio, documents: converted in your browser. No upload.
  • Video on the official instance: uploaded temporarily—kept up to one hour or until download, then deleted.
  • Video with self-hosted vertd: stays on your device or network.
  • Analytics: Plausible, anonymous/aggregated, with opt-out. Self-hosted deployments can point to their own Plausible or disable analytics entirely.

For enterprises and public bodies with strict data-sovereignty requirements, this architecture is a clear win over typical SaaS converters.


What VERT is not (by design)

VERT doesn’t pretend to be a full media editor or a distributed transcoding pipeline. It’s a converter with a clean UI and output parameters; it isn’t a DAM or post-production suite. It also doesn’t try to brute-force video inside the browser; instead, it offers vertd so you can do it right with FFmpeg where it belongs.


Real-world use cases

  • Press teams: quickly convert AVIF/WebP to JPEG for legacy sites; export DOC to PDF without sending documents offsite.
  • Developers: generate sprites, ICO/ICNS, or normalize logos to SVG/PNG without plugins.
  • Legal/finance: transform CSV/TSV/JSON and produce clean deliverables with Pandoc.
  • Video work: extract audio from MP4 or normalize clips to standard formats using vertd on a GPU/CPU node.

Why it matters in 2025

As the web hides behind paywalls and “black-box” SaaS, projects like VERT argue for tools you can run, audit, and trust. Not just philosophically—practically. You eliminate network bottlenecks and cut data-leak risk. The mix of WASM + FFmpeg/Pandoc/ImageMagick offers a pragmatic path: local when it makes sense, your own backend when muscle is required.


FAQ

How do I keep video 100% local with VERT?
Run vertd (the Rust FFmpeg wrapper) on your machine or a private server. In VERT’s Settings, set Instance URL to http://localhost:24153 (or your server address). From then on, video conversions don’t leave your device/network.

Which formats does VERT support for professional workflows (images, audio, documents, video)?
VERT lists 250+ formats. Common highlights: PNG, JPEG, WebP, AVIF, HEIC/HEIF, PSD, EXR, camera RAWs for images; MP3, WAV, FLAC, OGG/OPUS, AAC/ALAC for audio; DOCX, DOC, PDF (via Pandoc), RTF, CSV/TSV, EPUB, ODT for documents; and MP4, MKV, WEBM, MOV, AVI, WMV for video. The full list appears in the UI and README.

Is VERT suitable for enterprises with privacy/compliance requirements?
Yes. Images, audio, and documents are processed in-browser. For video, self-host vertd to keep everything on-prem or inside your cloud VPC. Analytics via Plausible is optional and anonymous; you can disable it entirely. The code is AGPL-3.0 and auditable.

How do I deploy VERT on a Linux server with Docker and NGINX?
Clone the repo, create .env with PUB_HOSTNAME, PUB_ENV, PUB_VERTD_URL, etc., run bun run build, and serve build/ with NGINX. Alternatively, use the included Dockerfile and docker-compose. If hosting vertd, expose 24153/TCP and point the UI to that URL in Settings.


In a market crowded with opaque converters, VERT.sh proves there’s a better way: fast, private, and yours. If you handle files daily and don’t want to negotiate with the cloud for every conversion, this is a breath of fresh air—with control exactly where it belongs: on your machine.

Scroll to Top