A Windows desktop app that turns files, folders, URLs, and pasted text into clean Markdown — no terminal required.
Omnivert is a friendly graphical wrapper around the Microsoft MarkItDown conversion engine. Point it at almost any document and it gives you back Markdown that's ready to paste into notes, docs, or a large language model.
It runs entirely on your machine. Conversions happen locally, and optional cloud features (image captioning, Azure Document Intelligence) are off until you add your own keys.
- Many input types — PDF, Word (DOCX), PowerPoint (PPTX), Excel (XLSX/XLS), images, audio, HTML, CSV, JSON, XML, EPUB, ZIP archives, and more.
- Four ways to convert — drop in files, point at a whole folder (optionally recursive), paste a URL, or paste raw text.
- Batch conversion — convert many files at once and download everything as a single
.mdor a.zip. - Live preview — see rendered Markdown and the raw source side by side, copy with one click, or save to disk.
- Optional AI image captions — bring your own Claude or Azure key to describe images inside documents.
- Light / dark / system themes and keyboard shortcuts (Ctrl+Enter to convert).
- Self-updating — the app checks GitHub for new releases and can update itself.
- Private by default — runs locally; no telemetry, no account required.
- Download the latest
Omnivert-Setup-*.exefrom the Releases page. - Run the installer. It installs per-user and does not require administrator rights.
- Launch Omnivert from the Start menu.
Omnivert installers are not yet code-signed, so Windows SmartScreen may warn you the first time you run the installer. The download is safe — to proceed:
- On the blue SmartScreen dialog, click More info.
- Click Run anyway.
To independently verify your download, each release publishes a SHA256SUMS file. Compare
it against your downloaded installer:
Get-FileHash .\Omnivert-Setup-<version>.exe -Algorithm SHA256The printed hash should match the matching line in SHA256SUMS. Code signing is a planned
follow-up — see SECURITY.md.
- Open Omnivert.
- Choose a tab — Files, Folder, URL, or Text.
- Add your input (drag-and-drop files, pick a folder, paste a URL or text).
- Click Convert (or press Ctrl+Enter).
- Preview the Markdown, then Copy or Save / Download.
Settings (including any API keys) are stored outside the app at:
%LOCALAPPDATA%\Omnivert\settings.json
That file may contain secrets. It is stored in plaintext on your machine — don't share it or paste it into support logs. See SECURITY.md for details.
Omnivert checks its GitHub Releases for newer versions, both at launch and periodically
while running. Installed Windows builds update by downloading and running the next
Setup.exe.
The conversion engine is bundled into each Omnivert release. A GitHub workflow watches PyPI for new MarkItDown versions, validates them, and rolls them into a new Omnivert release once the safety checks pass.
Omnivert is a FastAPI backend + React/Vite/TypeScript/Tailwind frontend, shipped as a native window via pywebview and packaged for Windows with PyInstaller + Inno Setup.
This repo expects a Python virtual environment at ..\.venv\ (the local working setup) or
any environment with the package installed via python -m pip install -e .. Run commands
from this directory unless noted.
build.bat # npm install + build -> frontend/dist -> copy into the package web/
run.bat # launch the desktop windowFor the split dev loop (hot-reloading frontend + backend):
$env:PYTHONPATH="$PWD\src"
..\.venv\Scripts\python.exe -m uvicorn omnivert.main:app --app-dir src --port 8765
npm run dev --prefix frontend # proxies /api -> 127.0.0.1:8765The backend package lives under src/omnivert; run it with python -m omnivert or the
omnivert console script.
See CLAUDE.md for the architecture map and CONTRIBUTING.md for how to set up, build, and submit changes.
# Python compile/import checks
..\.venv\Scripts\python.exe -m compileall src
$env:PYTHONPATH="$PWD\src"; ..\.venv\Scripts\python.exe -c "import omnivert.main; import omnivert.launcher"
# Representative conversions (also the CI engine-bump gate)
$env:PYTHONPATH="$PWD\src"; ..\.venv\Scripts\python.exe tests\engine_smoke.py
# Frontend
npm run lint --prefix frontend
npm run build --prefix frontend
# Copy built UI into the Python package
..\.venv\Scripts\python.exe scripts\copy_web_assets.py
# Wheel check
$env:PIP_CACHE_DIR="$PWD\.pip-cache"
..\.venv\Scripts\python.exe -m pip wheel --no-deps --no-build-isolation . -w dist\wheel-checkTo smoke-test the API locally:
$env:PYTHONPATH="$PWD\src"
..\.venv\Scripts\python.exe -m uvicorn omnivert.main:app --app-dir src --host 127.0.0.1 --port 8765Then call GET http://127.0.0.1:8765/api/health and a conversion endpoint such as
POST /api/convert/text.
npm ci --prefix frontend
npm run build --prefix frontend
python scripts\copy_web_assets.py
python -m pip install -e ".[build]"
pyinstaller packaging\app.spec --noconfirm --clean
& "${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe" /DMyAppVersion="0.1.1" packaging\installer.issThe installer is written to dist/installer/. Release automation is documented in
RELEASING.md.
- If the desktop window shows a build notice or a blank page, run
build.batsofrontend/distis rebuilt and copied intosrc/omnivert/web. - Non-WAV audio conversion needs
ffmpegonPATH. Without it, the engine emits a non-fatal warning and audio conversion can be limited. - The
markitdown[all]extra is intentionally not used here because the YouTube extra has Python-version caveats. YouTube URL support may still work if a compatibleyoutube-transcript-apiis present in the environment. - Claude image captions and Azure Document Intelligence/Content Understanding require valid keys in Settings. The API redacts stored secrets on read.
Omnivert's document conversion is powered by Microsoft MarkItDown (MIT License, Copyright (c) Microsoft Corporation). Omnivert bundles and runs MarkItDown but is an independent project and is not affiliated with, endorsed by, or sponsored by Microsoft.
Full third-party license texts are in THIRD_PARTY_NOTICES.md.
Omnivert's own code is licensed under the Apache License 2.0 — see LICENSE
and NOTICE. Bundled third-party software retains its own license; see
THIRD_PARTY_NOTICES.md.
