retype

Pre-alpha · local file conversion

The rename is the conversion.

Change holiday.heic to holiday.jpg and the bytes follow. Put the quality, dimensions, and geometry in the new name: holiday.webp+q80+cap1080.

  • Linux, macOS, Windows
  • No upload, no account
  • Undo built in
Specimen 01 / a rename watched folder
HEIC holiday.heic source
WEBP holiday-quality80-cap1080.webp output

WebP, quality 80, capped at 1080.

  • holiday-quality80-cap1080.webp
Same string in a shell
retype c holiday.heic webp+q80+cap1080
A few pairs
  • heicjpg
  • movmp4
  • wavmp3
  • mdpdf
  • tar.gzzip
  • pngwebp
Coverage

01 / The gesture

One rename. Three places it can happen.

The filename is the interface. Retype reads the name after the dot, plans the work, and puts the result beside the source. The source stays where it is when you use the command.

01

From a file manager

Register a folder once. Rename the extension from any program that can rename a file.

holiday.heic holiday.jpg

Nothing already in the folder is converted.

02

From a shell

The second argument is the rest of the new name. No output path is required, because the name already has one.

retype c holiday.heic webp+q80
# holiday-quality80.webp
03

From a script

Every command has a JSON form. Exit codes separate usage, diagnosis, environment, filesystem, daemon, and state failures.

retype c holiday.heic jpg --json
# one object, one result

Before anything runs

The plan is visible.

retype explain reads a name without a file. --dry-run reads a real one. Both print the output name, the pipeline in order, the program, the command line it would run, and the fidelity tier.

Nothing is written. No converter starts. A name that cannot be understood is a diagnosis with a span, not a guess.

$ retype explain holiday.heic 'webp+q80+cap1080'
intent   webp+quality80+cap1080
source   holiday.heic
says     convert from heic to webp with quality at 80,
         then cap to 1080
output   holiday-quality80-cap1080.webp
  backend magick
  argv    magick {input} -quality 80 -filter Lanczos
          -resize 1080x1080> {output}
  tier    converted

02 / The grammar

Small enough to remember. Precise enough to trust.

A format, then tokens. The tokens run in the order you write them. A token the target cannot carry is an error, not a silent no-op.

Core sample / token families webp+q80+cap1080+rotate90
  1. Format jpg · png · webp · avif · heic · mp4 · md · zip
  2. Geometry cap1080 · resize1280x720 · rotate90 · fliph
  3. Encoder quality80 · lossless · size5mb · effort4
  4. Sound at10s · fps24 · mute
  5. Control ask · now

Categories, not a fixed pipeline. The written order is the pipeline.

Order is the pipeline

Geometry runs where you put it, and the order changes the image.

rotate90+cap1080 turn, then cap cap1080+rotate90 cap, then turn

Refusal is a feature

Asking a lossless format for a quality dial is a diagnosis. Accepting the token and ignoring it would teach a habit that fails later, on a format where it matters.

retype c scan.png jpg+q80      # fine
retype c scan.jpg png+q80      # E_INAPPLICABLE: png has no quality

One name, several files

A comma starts another output. Each group is one file, and one rename can produce all of them.

retype c holiday.heic png,webp+cap1080
# holiday.png
# holiday-cap1080.webp

Retype is pre-alpha. Some tokens are declared and not yet wired. The manual marks what has landed, and the command says so rather than doing nothing.

03 / Local by construction

Your files stay on your machine.

No upload path. No account. No telemetry. Retype is a local daemon and a client, not a service with a file input.

01

No cloud in the loop

A conversion reads the source, runs a program on this machine, and writes beside it. Nothing is sent anywhere. There is no account to create and no usage to report.

02

One owner for state

The daemon owns the watchers, queue, journal, undo store, and notifications. The command line and the GUI are clients of the same daemon, so a typed job and a watched rename share one queue.

03

Bring your own converters

Retype ships no encoder. It calls ImageMagick, FFmpeg, pandoc, and 7-Zip; you install them with your package manager. retype doctor reports the version, build, and missing delegates.

One host no outbound request
source holiday.heic
daemon queue · journal · undo
tool magick · ffmpeg
state directory the source is not uploaded

Undo

One week. Five gigabytes. One command.

Every job keeps what it needs to be reversed, including the source bytes when the rename consumed the source name. The defaults are a week and 5 GB, host-level, not a folder setting.

retype undo --last

Ask first

A fast gesture should not become a long surprise.

A watched rename that would take a while parks and waits. A source above 4 GiB parks without a timer. +ask asks on purpose; +now says you already know.

holiday.heic → holiday.webp+ask
holiday.heic → holiday.webp+now

Provenance

The file can tell you how it was made.

retype why answers with the intent, the tool and engine, the tier, and the store that matched: an identity index that survives the usual rename, or an extended attribute where the platform has one. No content hash, no signature, and no feature gated on a record being present.

retype why holiday.webp
Brought by the machine

ImageMagick 7.1+ · FFmpeg 6.0+ · pandoc 3.0+ · 7-Zip 23.0+

The CLI never downloads a tool during a conversion. A missing converter is an environment failure that names what to install.

04 / Coverage with a claim

A format count tells you nothing. A pair claim does.

Retype claims coverage per source and target pair, per tool and engine, with a tier. The claim is evidence, not a feature list.

01

exact

No sample was re-encoded. The container may change; the payload may not.

mp4 → mkv remux, tiff → png
02

converted

Every sample or glyph is decoded and re-embedded. The content is recognisably the same; the encoding is new.

heic → jpg, wav → mp3
03

delegated

A tool retype does not model does the work. The promise is a valid file of the target format, nothing about its insides.

psd through ImageMagick
Source Target What the distinction looks like
mp4 mkv Remux. No sample is re-encoded. exact
heic jpg Decode, then encode at the JPEG dial. converted
wav mp3 Lossy on the second pass. A different promise. converted
md pdf The PDF engine changes what the result can claim. converted
psd png A tool retype does not model. delegated

Illustrative pairs, from the definitions. A shipped claim is earned against the tool build that produced it. When the build changes, the pair is reported unverified, and a pair that promised exact refuses rather than quietly lowering the promise.

  • Images

    heic, jpg, png, webp, avif, tiff, gif, bmp, ico

  • Audio / video

    mp4, mkv, mov, webm, mp3, flac, wav, opus

  • Documents

    md, html, docx, odt, epub, rst, tex, typst, pdf output

  • Archives

    zip, tar, tar.gz, 7z; rar read only

05 / Install

Pre-alpha, on purpose.

The CLI and daemon install today. Some intent tokens are still being wired. The manual says which. The pre-release installer is a convenience, not the signed installed tier.

For Linux and macOS. Run it again to update.

curl -fsSL https://retype.name/install.sh | bash

Installs the CLI, daemon, and shared release assets under ~/.local. Verifies the release checksum.

  • Platforms Linux glibc 2.31+, macOS 13+, Windows 10 21H2+
  • Converters Install only the tools for the formats you use
  • Download The installer verifies the release checksum before use