Since v0.2.9, Alchemist gains the first stable 0.3.0 release with: Security: - Fixed a critical bug where a config parse failure on a configured instance could re-enable unauthenticated setup endpoints. - Session cookies are no longer marked Secure by default, restoring plain HTTP and LAN login flows unless ALCHEMIST_COOKIE_SECURE=true is set. - Restricted /api/fs/* filesystem browsing to loopback clients during initial setup. - Hardened proxy header handling with explicit trust configuration. Library and encoding: - Added per-library transcoding profiles with built-in presets. - Added lossless MP4/MOV to MKV remuxing when a file is already in the target codec. - Added subtitle sidecar extraction for text subtitle tracks. - Added stream rules for commentary stripping, language filtering, and default-track retention. - Added optional VMAF quality gating. - Added duplicate detection in Library Intelligence. - Added Library Doctor health scanning. - Added mirrored output roots. Job management: - Added Skipped and Archived tabs. - Added sort controls for jobs. - Added per-job priority promotion. - Added live retry countdowns. - Added structured skip explanations. - Added structured failure explanations. Engine control: - Added Background, Balanced, and Throughput runtime modes with manual overrides. - Added drain mode. - Added boot-time auto-analysis of queued jobs. UI redesign: - Replaced page h1 blocks with a compact engine control strip. - Restructured the dashboard around compact stats, savings, and recent activity. - Grouped log viewer entries by job. - Rebuilt the setup wizard inside the main shell. - Redesigned library selection around recommendations and chips. - Replaced custom stats bars with Recharts area and bar charts. - Merged hardware into Transcoding settings. - Merged notifications and automation into one tab. - Improved mobile navigation and jobs layout. - Tightened typography and token usage across the design system. - Added analyzing shimmer states and protected terminal job states from poll overwrites. Reliability and stability: - Added exponential retry backoff. - Cleaned orphaned temp outputs and subtitle sidecar temp files on startup. - Fixed infinite analysis loops and boot-analysis pagination. - Kept the engine running when the queue drains so new watcher jobs are picked up. - Serialized analysis passes and dropped overlapping watcher-triggered passes. - Added job stall detection. - Fixed graceful shutdown on Ctrl+C and SIGTERM. - Added log retention pruning. - Added auth session cleanup. - Cached /api/system/resources for 500ms. - Added a Drop guard for in_flight_jobs. - Stopped re-probing completed job detail source files when encode_stats already exist. Hardware and encoding: - Fixed Apple VideoToolbox encodes with -allow_sw 1, yuv420p conversion, and hvc1 tagging. - Switched Intel Arc selection to VAAPI-first with QSV as last resort. - Improved audio planning so lossless codecs transcode while common Atmos/EAC3 tracks can copy. - Added libopus runtime fallback to AAC when libopus is unavailable. - Surfaced fuller FFmpeg failure logs and VideoToolbox-specific failure explanations. Backend architecture: - Upgraded to Rust 2024 and MSRV 1.85. - Upgraded sqlx to 0.8 and rand to 0.9. - Removed async-trait in favor of native async fn traits with trait-variant where needed. - Split server.rs into focused submodules. - Moved ffprobe execution to tokio::process::Command with a timeout. - Split high-volume and low-volume broadcast channels. - Hardened cancellation-lock recovery and stderr truncation. - Added warnings for invalid notification and schedule JSON plus safer analysis pagination limits. Database: - Extended decisions with structured reason codes and payload JSON. - Added job_failure_explanations with legacy fallback support. - Added indexes for structured explanation filtering. - Preserved automatic upgrades from 0.2.5 onward. CI/CD and tooling: - Added nightly workflows using the shared build pipeline. - Added actionlint to release checks. - Added the Playwright reliability suite to CI. - Documented and validated the Windows contributor workflow. - Expanded just release-check to cover fmt, clippy, tests, actionlint, web verify, docs build, E2E, and backend build. - Standardized release binaries and checksums. - Published multi-arch Docker images for linux/amd64 and linux/arm64. Release metadata and docs cleanup: - Bumped Cargo, VERSION, web, web-e2e, and docs manifests to 0.3.0. - Updated stable changelog dates and nightly image references. - Removed stale RC-era Windows wording from the README and docs. - Clarified that the Windows core contributor path is supported while broader utility and release recipes remain Unix-first. - Clarified that AMD AV1 remains outside the validated 0.3.0 support matrix. - Aligned Docker Compose, Helm, and release-facing docs on ghcr.io/bybrooklyn/alchemist.
6.1 KiB
Alchemist
Point it at your media library. Walk away. Come back to a smaller, better-encoded collection.
Alchemist saves space automatically without asking you to babysit shell commands or risk your originals. It is free, open source, self-hosted, and gives you a web UI for setup, monitoring, and day-to-day control. If you want storage back without turning media management into a hobby project, this is the tool.
Why Alchemist?
Running ffmpeg by hand works when you only have a few files and a lot of patience. Tools like Tdarr can scale, but they also ask you to learn a larger system. Alchemist is built for the middle: no plugin stacks, no flow editors, no separate services to install, smart enough to skip files that would not really benefit, shipped as a single binary, genuinely GPLv3 open source instead of source-available, and designed for people who just want it to work.
What It Does
Alchemist scans your library, inspects each file, and decides whether transcoding would actually help. If a file is already efficient, it skips it and tells you why in plain English instead of leaving you to guess.
If supported hardware is available, Alchemist uses it automatically. NVIDIA, Intel, AMD, and Apple Silicon are all detected and used without manual setup, and if there is no GPU available it falls back to CPU encoding on its own.
Your originals stay safe. Alchemist never overwrites anything until the new file passes its quality checks. You can keep both files or let Alchemist replace the original, but nothing is lost until you decide that is what you want.
Everything is visible in the web dashboard. You can see what is running, what was skipped, how much space you have recovered, and pause or cancel work whenever you want.
Features
- Give movies, TV, and home videos different behavior with per-library profiles.
- Catch corrupt or broken files before they surprise you with Library Doctor.
- See exactly how much storage you have recovered in the savings dashboard.
- Understand every skipped file immediately with plain-English explanations.
- Get a ping when work finishes through Discord, Gotify, or a webhook.
- Keep heavy jobs out of the way with a scheduler for off-peak hours.
- Push urgent files to the front with the priority queue.
- Switch the engine between background, balanced, and throughput modes without restarting the app.
- Let hardware acceleration happen automatically on NVIDIA, Intel, AMD, or Apple, with CPU fallback when needed.
- Preserve HDR metadata or tonemap to SDR depending on what you need.
- Add folders once and let watch folders keep monitoring them automatically.
- Shape audio output with stream rules for commentary stripping, language filtering, and default-track retention.
Hardware Support
Alchemist uses hardware acceleration when it can and falls back to CPU encoding automatically when it cannot. You do not need different workflows for different machines.
| Vendor | Encoders |
|---|---|
| NVIDIA | AV1, HEVC, H.264 (NVENC) |
| Intel | AV1, HEVC, H.264 (QSV) |
| AMD | HEVC, H.264 (VAAPI/AMF) |
| Apple | HEVC, H.264 (VideoToolbox) |
| CPU | AV1 (SVT-AV1), HEVC (x265), H.264 (x264) |
CPU fallback is automatic when no GPU is available.
Quick Start
Docker (Recommended)
If you want the fastest path to a running instance, use the published container:
services:
alchemist:
image: ghcr.io/bybrooklyn/alchemist:latest
container_name: alchemist
ports:
- "3000:3000"
volumes:
- /path/to/config:/app/config
- /path/to/data:/app/data
- /path/to/media:/media
environment:
- ALCHEMIST_CONFIG_PATH=/app/config/config.toml
- ALCHEMIST_DB_PATH=/app/data/alchemist.db
restart: unless-stopped
Then open http://localhost:3000 in your browser.
If you prefer docker run, this is the trimmed equivalent:
docker run -d --name alchemist -p 3000:3000 -v /path/to/config:/app/config -v /path/to/data:/app/data -v /path/to/media:/media -e ALCHEMIST_CONFIG_PATH=/app/config/config.toml -e ALCHEMIST_DB_PATH=/app/data/alchemist.db --restart unless-stopped ghcr.io/bybrooklyn/alchemist:latest
Binary
Download the latest release from GitHub Releases. Prebuilt binaries are published for Linux x86_64, Linux ARM64, Windows x86_64, macOS Intel, and macOS Apple Silicon.
FFmpeg must be installed separately for binary installs:
sudo apt install ffmpeg
sudo dnf install ffmpeg
sudo pacman -S ffmpeg
brew install ffmpeg
winget install Gyan.FFmpeg
Start Alchemist, then open http://localhost:3000:
./alchemist
On Windows, run alchemist.exe instead.
From Source
For macOS and Linux:
git clone https://github.com/bybrooklyn/alchemist.git
cd alchemist
just install
just build
./target/release/alchemist
Alchemist requires Rust 1.85 or later (MSRV). Use rustup update stable to ensure you are on a recent toolchain, and make sure FFmpeg is installed separately.
For Windows local development:
just install-w
just dev
just check
The core contributor path is supported on Windows. Broader release and utility recipes remain Unix-first.
First Run
- Open http://localhost:3000.
- Complete the setup wizard. It takes about 2 minutes.
- Add your media folders in Watch Folders.
- Alchemist scans and starts working automatically.
- Check the Dashboard to see progress and savings.
Supported Platforms
| Platform | Status |
|---|---|
| Linux x86_64 | ✅ Supported |
| Linux ARM64 | ✅ Supported |
| Windows x86_64 | ✅ Supported |
| macOS Apple Silicon | ✅ Supported |
| macOS Intel | ✅ Supported |
| Docker linux/amd64 | ✅ Supported |
| Docker linux/arm64 | ✅ Supported |
License
Licensed under GPLv3. See LICENSE for details.
Contributing
Start with CONTRIBUTING.md for contribution terms, docs/docs/contributing/development.md for local setup, and RELEASING.md for the release process.