Relaystation logo Relaystation

cputools

File, document, media & data tools — one HTTPS call, sub-cent, no server to run.

ffmpeg, pandoc, qpdf, tesseract, DuckDB and more — wrapped behind a pay-per-call API. No instance to provision, no engine to package, no idle cost. Pay only for the calls you make, or pay with a wallet (x402) and never create an account.

Pay-per-call (~$0.0002/MB at launch)No idle costWe package the engines, you don’t

Build vs. buy: the math

The real question isn’t “is per-call cheap” — it’s “cheaper than running it myself, all-in?” Here’s the model. Run your own numbers; we’ll tell you when you should self-host.

What running it yourself costs / month

  • Instance — an always-on box sized for your peak, idle 24/7 (~$20–60/mo modest; more for LibreOffice/ffmpeg memory).
  • Engine packaging + maintenance — wrapping ffmpeg/pandoc/qpdf/tesseract/DuckDB is real work: dependency hell, the Lambda 250 MB limit, version bumps, CVE patching.
  • Scaling + reliability — spikes, cold starts, retries, the ops pager.

What we cost

price_per_MB × MB_processed, ~$0.0002/MB at launch (min 1 MiB/op), $0 when idle, zero maintenance — we own the engine packaging, patching, and scaling.

The crossover formula
monthly_us   = price_per_MB × total_MB_per_month          (+ $0 idle, + $0 maintenance)
monthly_diy  = instance_$/mo + (maintenance_hrs × $/hr) + amortized_setup_$
self-host wins only when  monthly_diy  <  monthly_us

Worked example (illustrative): 10,000 document conversions/mo at min-1 MiB ≈ $2/mo with us, vs a ~$30/mo idle VM + a couple maintenance hours — we win by ~20×, before counting the eng-hours to package LibreOffice. At low or spiky volume we win decisively (you pay nothing between bursts; they pay for an idle box).

When you SHOULD run your own

At sustained high throughput, the per-MB adds up and a dedicated, fully-utilized instance can be cheaper per unit. If you’re pushing large, steady volume every day, model the crossover with the formula above — and if self-host wins, run it. (We also offer scratch-tier reuse + chained ops to cut per-call MB.) We’d rather you do the math than oversell.

The open source we stand on

cputools is a thin, paid convenience layer over open-source engines built by others. We disclose every engine, link its project, and credit its license — transparency is the point. If an engine’s license requires attribution, this page is it. (This table is generated from the worker’s real dependency surface — not hand-written.)

Vendored in the worker

Engine Version What it powers Project License
ffmpeg 7.0.2 audio/video transcode, trim, loudnorm, subtitles, overlay, concat, frames, probe ffmpeg.org LGPL-2.1-or-later / GPL-2.0-or-later (build-dependent)
pandoc 3.10 document conversion (markdown/HTML/docx/odt/rtf/epub/LaTeX), citations pandoc.org GPL-2.0-or-later
qpdf 10.6.3 (libqpdf 28.6.3) PDF encrypt, compress/linearize, repair qpdf.sourceforge.io Apache-2.0
poppler (pdftoppm) libpoppler 123 PDF → PNG/JPEG page render poppler.freedesktop.org GPL-2.0-or-later
tesseract 4.1.1 (libtesseract 4.0.1, eng) OCR — scanned PDF/image → text github.com/tesseract-ocr/tesseract Apache-2.0
DuckDB vendored CLI SQL over files (data ops) duckdb.org MIT

npm libraries (versions read live from the build)

Library Version What it powers Project License
sharp 0.33.5 image convert/resize/crop/grayscale/trim, HTML→image, OG cards sharp.pixelplumbing.com Apache-2.0
pdf-lib 1.17.1 PDF merge/split/pages/rotate/watermark/metadata pdf-lib.js.org MIT
qrcode 1.5.4 QR code generation github.com/soldair/node-qrcode MIT
bwip-js 4.11.1 barcode generation github.com/metafloor/bwip-js MIT
exceljs 4.4.0 Excel read/write (xlsx I/O) github.com/exceljs/exceljs MIT
diff 9.0.0 text diff / patch / merge github.com/kpdecker/jsdiff BSD-3-Clause

Upstream services (not vendored)

LibreOffice (via Gotenberg) MPL-2.0 · libreoffice.org

Office → PDF, legacy/exotic Office rescue (PDF-output-only) — Reached via the self-hosted Gotenberg HTTP upstream — not a binary vendored in our worker (Brief 188 / D216).

We didn’t write ffmpeg or pandoc — we packaged them, kept them patched, and put a pay-per-call wire in front so you don’t have to.

The tools, by what you need to do

Each job is one consolidated call (one call, many formats). Follow a link for the full list and the live per-op price on the working catalog.

Quickstart

Two ways in, same surface. Inputs are {inline: base64} (≤4 MB) or {inputKey} from an upload-url (≤50 MB); every op returns the uniform output envelope. Exact per-op prices live on the API reference and /v1/catalog.

x402 — no account
curl -X POST https://api.relaystation.ai/v1/pdf/merge \
  -H 'X-Payment: <base64 x402 authorization>' \
  -H 'Idempotency-Key: <unique>' \
  -H 'Content-Type: application/json' \
  -d '{"inputs":[{"inline":"<base64 pdf>"},{"inline":"<base64 pdf>"}]}'
API key
curl -X POST https://api.relaystation.ai/v1/pdf/merge \
  -H 'Authorization: Bearer rs_live_…' \
  -H 'Idempotency-Key: <unique>' \
  -H 'Content-Type: application/json' \
  -d '{"inputs":[…]}'

See the recipes → · ← Back to the catalog