Skip to main content
Cirax

PyPI Platform No network MIT License CI

The universal converter for people who read the privacy policy.
Don't upload. Convert.


Cirax turns your Linux machine into a conversion hub. One command reaches every format — not because Cirax reimplements codecs, but because it routes between the best engines ever written (FFmpeg, libvips, ImageMagick, LibreOffice, Pandoc, Calibre, 7-Zip, qpdf…) and chains them automatically. Files never leave your disk. Ever.

The Problem

  1. Every online converter is a data breach waiting to happen. Your contracts, IDs, medical scans and family photos, uploaded to an anonymous ad-riddled server.
  2. Local tools are islands. ffmpeg alone has a 40-page manual; LibreOffice won't talk to ImageMagick; your HEIC stays HEIC.
  3. Format-pair explosions. 109 formats × 109 formats = 11,881 possible converters. Nobody writes those.

The Product

$ # what used to require three websites and a leap of faith:
$ cirax convert report.docx preview.png
● converting report.docx: application/vnd...document → image/png
  (libreoffice → pdftoppm, lossy)

$ # speech to subtitles, offline:
$ cirax convert talk.mp3 talk.srt

$ # AI-grade OCR — a 1.3B-parameter vision model, fully local:
$ cirax convert scan.png text.txt

Core Features

  • Chain router — a Dijkstra search over a 109-format graph picks the best chain of engines for any pair, ranked by fidelity (lossless beats lossy) and tagged before it runs.
  • 58 engines, one grammar — a declarative YAML registry wraps each engine; adding a format is a stanza, not a pull request.
  • Sandboxed by default — every job runs in a bubblewrap jail: no network, read-only filesystem, writes confined to the workspace.
  • Local AI OCRGLM-OCR (MIT, ~1.3B params) via Ollama: layout-aware text + Markdown, zero cloud.
  • Same-format ops — strip EXIF/GPS, fix line endings, transcode charsets.
  • Watch & serve — convert folders as files land in them, or drive it from a local web UI / plain curl.

Quick Start

Installation

Channel Command
PyPI uv tool install cirax (or pipx install cirax)
curl curl -fsSL https://raw.githubusercontent.com/baselanaya/Cirax/main/install.sh | sh
npm npm i -g @baselanaya/cirax
Windows Cirax-Setup-win64.exe from Releases (desktop app + CLI)
Desktop (Linux) grab the .deb / .rpm / .AppImage from Releases

Cirax itself is tiny — the engines are your system packages. cirax doctor --show-missing prints exactly what to install.

First conversion

cirax doctor              # capability matrix of this machine
cirax plan report.docx    # every reachable target, with routes
cirax convert report.docx preview.png

Desktop app

Drag, drop, convert. The GUI speaks to the same sandboxed pipeline as the CLI and ships in every release artifact.

Engine installation

Domain pacman packages
Images libvips imagemagick libheif libjxl libavif libwebp oxipng pngquant
Video / Audio ffmpeg mkvtoolnix-cli sox opus-tools gifsicle
Office libreoffice-still pandoc
Ebooks calibre
PDF qpdf ghostscript poppler img2pdf ocrmypdf
Archives 7zip zstd unar libisoburn
Data jq go-yq miller duckdb
RAW / Vector darktable inkscape librsvg potrace
3D / Disks / GIS assimp qemu-img gdal
AI ollama + ollama pull glm-ocr

Architecture

flowchart LR
    A[CLI / GUI / Web / Watch] --> B[Job Engine]
    B --> C{Router}
    C --> D[Engine Registry YAML]
    C --> E[Engine 1]
    C --> F[Engine 2]
    C --> G[Engine n]
    E --> H[(bwrap jail)]
    F --> H
    G --> H
    H --> I[Output]

Inputs are detected with file(1) + an extension table; the router searches the capability graph up to three hops through pivot formats (PDF, PNG, WAV, JSON…); a job engine runs the chain inside a sandbox with per-engine concurrency, progress parsing and guaranteed cleanup.

Cirax vs. Online Converters

Online converters Cirax
Your files uploaded to someone's server never leave the disk
Format pairs a hand-picked menu the closure of 58 engines (chains)
Fidelity whatever it feels like tagged lossless/lossy before running
OCR / AI extra fee, extra upload GLM-OCR locally, after one ollama pull
Works offline no completely
Sandboxing n/a bubblewrap, no network, per job

Supported Platforms

Platform Status Notes
Linux x86_64 (Arch, Ubuntu, Fedora…) ✅ supported engines via your package manager
AppImage / deb / rpm ✅ released desktop app + CLI in every release
Windows / macOS ❌ not yet engine discovery needs porting

Contributing

Fork → branch (feat/…) → PR. Adding a conversion engine is a YAML stanza — see README section on engines in the docs and the existing specs under src/cirax/data/engines/.

Adding an Engine

Drop a YAML stanza in src/cirax/data/engines/ — inputs, outputs, a command template, optional per-format flags and presets — and the router picks it up. No code.

- engine: mycodec
  binary: mycodec
  package: mycodec
  presets:
    web: {flags: {image/myfmt: "-q 70"}}
  routes:
    - from: [image/png]
      to: [image/myfmt]
      lossless: true
      priority: 90
      command: "mycodec encode {input} {flags} {output}"

Built by Basel Anaya — Maximlabs.co

Don't upload. Convert.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cirax-0.6.0.tar.gz (14.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cirax-0.6.0-py3-none-any.whl (45.5 kB view details)

Uploaded Python 3

File details

Details for the file cirax-0.6.0.tar.gz.

File metadata

  • Download URL: cirax-0.6.0.tar.gz
  • Upload date:
  • Size: 14.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cirax-0.6.0.tar.gz
Algorithm Hash digest
SHA256 a6845e943651a897433a4049d332d3b4d829a7660118899d576910736622c33e
MD5 854ed630f907b0a9971ac727e0f523b0
BLAKE2b-256 c7e7bc0c853030203c9744808d1177c81025d67f8a7aaf88253da3a5145d25dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for cirax-0.6.0.tar.gz:

Publisher: publish.yml on baselanaya/Cirax

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cirax-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: cirax-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 45.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cirax-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4a8f4d5b17d43c9bb9f74b794859a88a1fd56803b83ca73618d0e3252592df69
MD5 d56ecd9226a7d145cdb16c6a0f823df7
BLAKE2b-256 9f32cbc72e1f91736a5d4807b512c6642ffd4dd24d9b7bc3c151bfc86ef236b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for cirax-0.6.0-py3-none-any.whl:

Publisher: publish.yml on baselanaya/Cirax

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.10.2

2 files

0.10.1

2 files

0.10.0

2 files

0.9.4

2 files

0.9.3

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.2

2 files

0.8.1

2 files

0.7.0

2 files

0.6.3

2 files

0.6.2

2 files

0.6.1

2 files

This release

0.6.0 This release

2 files

0.5.1

2 files

0.5.0

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page