# Caery
Caery is a Rust desktop app for converting media files with `ffmpeg`, styled after the KnottFlasher/Motte monochrome HUD interface.
It supports common local workflows:
- Video to audio extraction, such as `.mp4` to `.mp3`, `.flac`, `.wav`, `.ogg`, `.opus`, or `.m4a`.
- Video to video transcoding, such as `.mkv` to `.mp4`, `.webm`, `.mov`, or `.mkv`.
- Audio to audio conversion between common audio containers/codecs.
- Built-in Media Vault browser, path paste, and drag-and-drop source selection.
- Suggested output filenames, overwrite guarding, final route review, live logs, and progress telemetry.
## Run
```bash
cargo run
```
Caery is designed for Linux desktops and expects `ffmpeg` and `ffprobe` to be installed.
More usage details are in [`docs/usage.md`](docs/usage.md).
## CLI Mode
Run quick terminal conversions with two paths. Caery infers the route from the input and output extensions:
```bash
caery song.wav song.mp3
caery clip.mp4 clip.flac
caery clip.mkv clip.webm
cargo run -- song.wav song.mp3
cargo run -- clip.mp4 clip.flac
cargo run -- clip.mkv clip.webm
```
Quick mode supports audio-to-audio, video-to-audio, and video-to-video. If the extension pair cannot map to a supported route, Caery exits before starting `ffmpeg` and prints why it cannot infer the conversion.
Use `--cli` for explicit terminal conversion options:
```bash
caery --cli --input clip.mp4 --audio-format mp3
caery --cli --input clip.mkv --output clip.webm --mode video-to-video --video-format webm --quality archive
caery --cli --input song.wav --mode audio-to-audio --audio-format flac
cargo run -- --cli --input clip.mp4 --audio-format mp3
cargo run -- --cli --input clip.mkv --output clip.webm --mode video-to-video --video-format webm --quality archive
cargo run -- --cli --input song.wav --mode audio-to-audio --audio-format flac
```
CLI options:
- `--input` or `-i`: source media file.
- `--output` or `-o`: output file; omitted output paths use `<source>-caery.<format>`.
- `--mode` or `-m`: `extract-audio`, `video-to-video`, or `audio-to-audio`.
- `--audio-format`: `mp3`, `m4a`, `flac`, `wav`, `ogg`, or `opus`.
- `--video-format`: `mp4`, `mkv`, `webm`, or `mov`.
- `--quality` or `-q`: `compact`, `balanced`, or `archive`.
- `--overwrite` or `-y`: replace an existing output file.
Use `caery --cli --help` for the full terminal help.
## Desktop Install
Install the current binary as a Linux desktop app launcher:
```bash
cargo run -- --install
```
`--install` writes:
- `~/.local/share/applications/caery.desktop`
- `~/.local/share/icons/hicolor/256x256/apps/caery.png` from the bundled `assets/logo.png`
- `~/Desktop/Caery.desktop` when `~/Desktop` exists
The launcher points to the exact binary used to run `--install`. For a permanent launcher, run `--install` from the final installed binary path rather than a temporary build location.
## Workflow
1. Choose a source audio or video file with Media Vault, paste a path, or drag a file into the window.
2. Confirm or edit the output file path.
3. Pick the conversion route: extract audio, transcode video, or transcode audio.
4. Pick the output format and quality profile.
5. Press `Review + Convert`, inspect the final route, then start conversion.
## System Tools
- `ffmpeg` for conversion.
- `ffprobe` for duration probing and progress calculation.
Install them with your distro package manager, for example `sudo pacman -S ffmpeg`, `sudo apt install ffmpeg`, or `sudo dnf install ffmpeg`.
## Test
```bash
cargo fmt --check
cargo test
cargo check
```