Visita Interiora Terrae Rectificando Invenies Occultum Lapidem
Visit the interior of the earth; by rectification you will find the hidden stone.
A self-contained, desktop file converter spanning ~150 formats across documents, data, images, audio, video, 3D models, archives, ebooks, subtitles, fonts, and X.509 crypto material — with optional Philosopher's Stone mode that hides any lossless file inside an ordinary-looking image, audio file, video, archive, or self-extracting script.
Drop files into Vitriol's playlist. Pick a target format. Click convert. Everything runs locally — no telemetry, no network calls during conversions, no third-party APIs.
Documents
md · html · docx · pdf · epub · odt · rtf · pptx · txt · rst · org · ipynb · tex · adoc · textile · muse · opml · djot · typst · fb2 · docbook · jats · mediawiki · dokuwiki · jira · man · beamer · revealjs · bibtex · csljson · …
Data
csv · tsv · xlsx · json · jsonl · yaml · toml · ini · env · xml · parquet · feather · orc · vcf
Images
png · jpg · webp · bmp · tiff · gif · ico · tga · apng · avif · heic · jxl · jp2 · qoi · icns · sgi · pfm · pnm · ppm · dds · xbm · svg · psd · eps · …
Audio & Video
mp3 · wav · flac · ogg · opus · m4a · aac · aiff · alac · ac3 · mp2 · oga · mka · mp4 · mkv · webm · avi · mov · wmv · flv · mpg · mpeg · m4v · 3gp · ts · asf · f4v · ogv
3D Models
glb · gltf · obj · stl · fbx · ply · dae · 3ds
Plus first-class support for archives (zip · 7z · tar · tar.gz · tar.bz2 · tar.xz · tar.zst), comic books (cbz · cb7 · cbr), subtitles (srt · vtt · ass · ssa · sub · mpl), fonts (otf · ttf · woff · woff2), and X.509 crypto material (pem · crt · cer · key · der). The wider markup/document family is powered by Pandoc, auto-fetched on first launch.
Source-available
Code-signed
AES-256 encrypted
Telemetry-free
Drop any lossless file in. Get back an output that looks like an ordinary image, audio file, video, archive, or self-extracting script — but contains the original bytes inside, recoverable byte-exact through Vitriol. Optional AES-256 password protection per file.
Three Stone-mode PNGs of three different sources, plus the same Chopin source
hidden again with the password Chopin. Same source, different password,
completely different image — the encryption is baked into the carrier itself.
Per-file optional password derived through PBKDF2-HMAC-SHA256. Without the right password, the file does not decode — and the wrong password produces silent garbage on image/audio/video/zip/3D outputs, so a probing attacker can't tell encryption was even used.
Optional safety toggle. When on, every Stone conversion is immediately reversed in a temp folder, and the output only commits if the reverse produces bytes matching the original. Catches end-to-end integrity issues before they reach disk.
Save a file as .png. Drop the result back in and save it as .wav. Then the .wav as .mkv. Each layer can carry its own password — recovering the original means unwrapping every layer in reverse order with the right password at each step.
Three source files and the Stone-mode .png, .wav, and
.mkv outputs Vitriol produces from them. Drop any of these
back into Vitriol to recover the original source byte-for-byte.
Self-extracting .py and .exe outputs work
differently — see the next section.
Inline players are 30-second previews of the Stone-mode .wav
output — generated music that's actually carrying the source file's
bytes inside it. The Chopin row has no preview because audio-to-audio
is a same-category conversion (no Stone hiding when both sides are
already audio).
A PDF of the poem — converted into image, audio, and video.
An m4a recording — Stone outputs include both no-password and password-protected image variants of the cross-category conversions. Password: Chopin
Stone-mode .py and .exe outputs are different
from the image / audio / video outputs above — they contain everything
needed to reconstruct the source without Vitriol installed.
Run the script, it rebuilds the original file next to itself.
.pyA standalone Python script. Anyone with Python installed can run it; no Vitriol needed. Cross-platform (Windows / macOS / Linux), small file size, easy to inspect — open it in any text editor to see the embedded payload as base64.
Run it:
python the_file.py
If password-protected, you'll be prompted on stdin. Five wrong attempts and the script self-deletes.
.exeA native Windows executable. Recipients don't need Python or Vitriol — just Windows. Double-click to run; the embedded payload extracts to the same folder as the executable.
Run it:
double-click on Windows
or: the_file.exe
Same password rules as .py. Windows may show a SmartScreen warning for unsigned executables — that's expected.
You can also drop a .py or .exe Stone output back
into Vitriol if you have it installed — both paths recover the same
original bytes — but the whole point of these formats is that you
don't have to. They're for sharing with people who won't be
installing Vitriol.
.pyRun with Python; rebuilds Sample Music Zip.zip in the same folder.
.pyRun with Python; rebuilds The Raven By Edgar Allan Poe.pdf in the same folder.
.py & .exeBoth rebuild Chopin - Nocturne Op. 9.m4a. You'll be prompted for a password — use Chopin. The .exe runs without Python; the .py needs it.
Both editions are digitally signed via Azure Trusted Signing. Right-click the downloaded file → Properties → Digital Signatures to verify the certificate.
Standard Windows install. Puts Vitriol under Program Files, registers a Start Menu entry, and gives you a normal Add/Remove Programs entry. One-click in-app updates from this point forward.
Extract anywhere — Desktop, USB stick, a tools folder. No installer, no admin rights. Inner Vitriol.exe carries the same signature as the installed edition.
Both downloads include FFmpeg, Assimp, DejaVu Sans, Cinzel, and an embedded Python runtime. No system Python install required. Nothing is downloaded at runtime except the optional once-per-day update check.
Same engine, multi-user web UI, accounts & roles, REST API, custom themes, OIDC SSO. One container, one volume, one command. Pick the path that fits.
Pulls the prebuilt image from GHCR, creates a persistent volume, starts the container.
curl -fsSL https://vitriol.rocks/install.sh | bash
Then open http://localhost:3825 — the first-run wizard creates your super admin in the browser.
Manual one-shot if you'd rather not pipe shell scripts. Same result.
docker run -d \ --name vitriol \ --restart unless-stopped \ -p 3825:3825 \ -v vitriol-data:/data \ ghcr.io/kl3mta3/vitriol-docker:latest
Deploys the compose file from this repo as a managed Coolify resource — automatic TLS, named volumes, healthchecks.
Deploy on CoolifyIn your Coolify dashboard: New Resource → Public Repository, paste the repo URL, pick Docker Compose. Domain + TLS handled by Coolify's Traefik.
Clone, customize, build. Useful if you want to fork or pre-bake config.
git clone https://github.com/kl3mta3/Vitriol-Docker cd Vitriol-Docker docker compose up -d --build
Persistent state (DB, secret key, uploads, outputs, certs) lives in the
vitriol-data named volume — survives restarts and image upgrades.
The first user to hit the URL creates the super admin in the browser; no env-var
gymnastics. Postgres / Neon supported via VITRIOL_DATABASE_URL.
Full setup & admin guide is on the API page and inside
the running app at /admin/server/guide.
Source-available under the Elastic License v2. Clone, run, audit. Vitriol's Stone mode uses standard cryptography (AES-256-CTR + PBKDF2-HMAC-SHA256) — you don't have to take our word for it.
git clone https://github.com/kl3mta3/Vitriol.git
cd Vitriol
python launcher.py
First launch installs the pip packages and downloads FFmpeg, Assimp, Pandoc, and bundled fonts to local folders. Subsequent launches are instant.