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
Desktop 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.4.3.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.4.3-py3-none-any.whl (43.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cirax-0.4.3.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.4.3.tar.gz
Algorithm Hash digest
SHA256 b90e88ca4c4cdcbdca3f3af82a2b99d0607c67c4e8d073a991b738449557e5fb
MD5 c1fb5f7d5ee17765b0658117f5d0242f
BLAKE2b-256 b9be939ee3fc9528e9c95b1fd65335ea184f1d150e631e1fcb6e7ec252fd7214

See more details on using hashes here.

Provenance

The following attestation bundles were made for cirax-0.4.3.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.4.3-py3-none-any.whl.

File metadata

  • Download URL: cirax-0.4.3-py3-none-any.whl
  • Upload date:
  • Size: 43.3 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.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 77171d4971f86f74424bafc0b18f972e5ffe39ce77fb211421c7194658229c0f
MD5 b70ad7714eae45ee6b99cca8292780bf
BLAKE2b-256 ff353265d72608b0d0d8b4114574a69e8b3e0ba9988e03c7fdf4daced7e2e46b

See more details on using hashes here.

Provenance

The following attestation bundles were made for cirax-0.4.3-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

0.6.0

2 files

0.5.1

2 files

0.5.0

2 files

This release

0.4.3 This release

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