u/Eravex

Image 1 — Vitriol - self-hosted file converter with a "Philosopher's Stone" mode that hides any file inside any other format (and you get the original back byte-perfect)
Image 2 — Vitriol - self-hosted file converter with a "Philosopher's Stone" mode that hides any file inside any other format (and you get the original back byte-perfect)
Image 3 — Vitriol - self-hosted file converter with a "Philosopher's Stone" mode that hides any file inside any other format (and you get the original back byte-perfect)
Image 4 — Vitriol - self-hosted file converter with a "Philosopher's Stone" mode that hides any file inside any other format (and you get the original back byte-perfect)
Image 5 — Vitriol - self-hosted file converter with a "Philosopher's Stone" mode that hides any file inside any other format (and you get the original back byte-perfect)
Image 6 — Vitriol - self-hosted file converter with a "Philosopher's Stone" mode that hides any file inside any other format (and you get the original back byte-perfect)

Vitriol - self-hosted file converter with a "Philosopher's Stone" mode that hides any file inside any other format (and you get the original back byte-perfect)

I've been building this for a while and finally have a hosted demo + docker-ready release worth showing.

Vitriol is a self-hosted file converter. The boring half is the standard story: drag-drop conversions across ~150+ formats (images, video, audio, documents, fonts, 3D models, etc.), multi-user with proper RBAC, REST API, Docker compose, retention policies. That part exists; it works; it's not what I want to show off.

The interesting half is a feature I call Philosopher's Stone mode. Turn it on, and any input can be encoded into any output format. PNG → WAV, PDF → PNG, video → spreadsheet. The output is a legitimate valid file in the target format (your media player will play the WAV, your image viewer will open the PNG), but the original source bytes are embedded inside it. Run the reverse conversion and you get the original back byte-for-byte. With round-trip verify on, the engine actually does the reverse and confirms before handing you the output.

Stone mode also has a self-compile target: pick .py or .exe and instead of getting a regular converted file, you get an executable that, when run, emits the original source file. Useful for sending "files" through systems that strip attachments. Security-wise it's gated two ways: the user role can't produce executables without an explicit per-user grant from an admin, and the engine itself blocks .py / .exe inputs from being self-compiled — closes off the "wrap arbitrary code as my code" path at the engine level, not just the role level. Every self-compile is audit-logged with the actor.

What else it does:

  • Multi-tenant: 5 built-in roles + custom-role overlays + per-user grants
  • SSO: Google, GitHub, multi-row OIDC (Authentik with auto-provisioning, Keycloak, Auth0, Okta, Entra)
  • Notification fan-out: Discord, Slack, ntfy, Gotify, Telegram, webhook, bash script, Bluesky
  • Storage: local default, opt-in S3-compatible (AWS / MinIO / B2 / R2) with gated activation
  • DB: SQLite default, swap-in Postgres / MySQL / MariaDB / MSSQL with UI-driven test → init → migrate → snapshot
  • Per-user/role file-size caps, retention policies, audit log, encrypted secrets at rest, weight-based conversion queue
  • UI Customizations: change logo, app title, title link URL, profile themes, custom support popups, custom reset/verify email templates

Check out the Site: https://vitriol.rocks

Try it live: https://app.vitriol.rocks - sign up, drag a file in, flip Stone mode on, convert.

Self-host: docker compose up - https://github.com/kl3mta3/Vitriol-Docker

Desktop version: same engine, no auth/server/multi-user, just a local app. Runs on Windows / Mac / Linux. https://github.com/kl3mta3/Vitriol

Honest disclosure: The hosted demo runs on a single VPS, it is intended to allow those interested to see what it's like before hosting, not provide a replacement to hosting it yourself, or the desktop App. Limits are deliberately tight on the demo so one user can't ruin it for everyone, self-host, or get the desktop version to lift them. AMA.

u/Eravex — 1 day ago