Blu-ray ripping, authoring, menus and burning.
Native AACS keys. UDF 2.50 images. Authored BD-J menus. No MakeMKV, no subscription.
Keepsake Atelier is a desktop workshop for the discs you already own. It reads what is on a Blu-ray or DVD, takes it apart without re-encoding when you do not want to, puts a new disc together when you do, and checks the result before it reaches a writer.
It uses native tooling wherever possible: libbluray for navigation, libaacs for
decryption, newfs_udf and hdiutil for UDF 2.50 images and burns on macOS,
and a bundled ffmpeg for muxing and encoding. The app runs on macOS, Linux and
Windows from one Rust engine.
- Site: https://ghostyshell.github.io/keepsake-atelier/
- Guides: docs/guides/index.md
- Features: docs/features.md
- Roadmap: docs/roadmap.md
| Build | GoFile (primary) | file.kiwi (backup) | Size |
|---|---|---|---|
Keepsake-Atelier-0.1.0-arm64.dmg |
Download | Mirror | 33.9 MiB |
Keepsake-Atelier-0.1.0-x64.dmg |
Download | Mirror | 38.3 MiB |
keepsake-atelier-0.1.0-macos-arm64.tar.gz |
Download | Mirror | 2.3 MiB |
keepsake-atelier-0.1.0-macos-x64.tar.gz |
Download | Mirror | 2.4 MiB |
keepsake-atelier-0.1.0-linux-x64.tar.gz |
Download | Mirror | 2.4 MiB |
Keepsake-Atelier-0.1.0-linux-x64.AppImage |
Download | Mirror | 107.7 MiB |
Keepsake-Atelier-0.1.0-linux-x64.deb |
Download | Mirror | 35.7 MiB |
keepsake-atelier-0.1.0-windows-x64.zip |
Download | Mirror | 8.4 MiB |
Keepsake-Atelier-0.1.0-windows-x64-setup.exe |
Download | Mirror | 99.2 MiB |
Apple Silicon or Intel on macOS 12 or newer, plus Linux x86_64 and Windows x86_64 builds. The links are refreshed weekly because GoFile expires free-tier files. The project site reads the same manifest.
The DMG and the macOS CLI tarball are self-contained: libbluray, libaacs, libbdplus and their dependencies are inside, built with a macOS 12.0 deployment target. The CLI tarball also carries ffmpeg, ffprobe and the menu JAR. Both support macOS 12 or newer. The app is not notarized. On first launch, right-click the app, choose Open, then confirm. Or clear the quarantine flag:
xattr -dr com.apple.quarantine "/Applications/Keepsake Atelier.app"The tarball is the CLI only. Unpack it and put keepsake-atelier on your
PATH if you want the command line without the app. Linux also ships an
AppImage and a deb; Windows ships a CLI zip and an NSIS installer. Both desktop
builds are previews, and the macOS DMG is the reference app. See
docs/platforms.md for what works on each platform.
The app is MIT and stays free. There is no paid tier.
- Discord: https://discord.gg/SUaUrVGj5f
- Ko-fi: https://ko-fi.com/ghosty99
- Ethereum:
0xbBef115aD853236a350EaF04777a2AdB2e7c0317(Etherscan)
keepsake-atelier doctor # what is installed and connected
keepsake-atelier devices # optical drives
keepsake-atelier disc /Volumes/MY_DISC # titles, playlists, streams
keepsake-atelier rip /Volumes/MY_DISC # main title, lossless remux
keepsake-atelier verify /Volumes/MY_DISC # navigation and clip checkAuthoring:
keepsake-atelier author movie.mkv --out movie.iso --label MY_MOVIE
keepsake-atelier author ep1.mkv ep2.mkv --out season.iso --menuBurning is opt-in:
keepsake-atelier burn movie.iso # dry run, prints the command
keepsake-atelier burn movie.iso --yes # writes the discThe app exposes the same workflow as cards: discs, titles, rips, authoring, menus, keys, DVD, covers, queue, verify, burn and system check.
- Inspect. Title map, playlists, clips, durations, chapters, streams, HDR,
AACS state, and the navigation table from
index.bdmv. - Keys. Native AACS1 recovery from the drive's volume ID and the disc's MKB
on macOS, Linux and Windows, plus AACS2 unit keys derived offline from
Unit_Key_RO.inf. KEYDB import, search and edit. MakeMKV dumps are a fallback, not a requirement. - Rip. Lossless remux to MKV or MP4, or x264, x265 and VideoToolbox encode. English non-commentary audio by default, subtitles off, chapters and metadata kept.
- Author. One title or many, a BDMV folder or a native UDF 2.50 ISO, chapter marks from the inputs, optional BD-J title menu, and BD-25/BD-50 splitting.
- Menus. A real 1080p BD-J menu with one row per title, a background,
arrows, digits and mouse. One generic Xlet reads the disc's own
menu.txt. Menu documents can be parsed, edited, saved and applied to another disc. - DVD. List and rip
VIDEO_TStitles through ffmpeg'sdvdvideodemuxer. - TV. Split a disc into per-episode files with SxxExx names, OP/ED detection and TMDB metadata.
- Copy. 1:1 encrypted clone, decrypted ISO, or a plain folder.
- Verify. Walk every title, movie object, playlist, clip and menu row before you burn.
- Burn. Native
hdiutil burnon macOS, growisofs on Linux, and Windows' IMAPI2 stack. Dry run by default. Confirmation required. - Automate. Every capability is a CLI command and an MCP tool. The server is off by default and binds to loopback.
The complete list, including limits and caveats, is in docs/features.md.
| Guide | What it covers |
|---|---|
| Install | Download, Gatekeeper, first launch, drive check |
| Rip a movie | Pick a title, choose tracks, remux or encode |
| Author a disc | One or many titles, folders and ISOs, splitting |
| Menus | BD-J title menu, background, templates, checks |
| Keys and AACS | KEYDB, native recovery, AACS2, LibreDrive |
| DVD-Video | List and rip DVD titles |
| TV and anime | Episode split, naming, openings and endings |
| Burn and verify | Size query, dry run, write, read back |
| MCP | Drive the app from Claude, Cursor or a script |
| Troubleshooting | The errors people actually hit |
Prerequisites on macOS:
- Xcode command line tools, Rust and Node.
- Homebrew libraries:
libbluray libaacs libbdplus. - The bundled ffmpeg is built once with
scripts/build-ffmpeg.sh.
cargo build --release
./target/release/keepsake-atelier doctor
cd app
npm install
npm run tauri dev # development
npm run tauri build # app and DMGBLURAY_PREFIX overrides the libbluray prefix. KEEPSAKE_FFMPEG points at a
specific ffmpeg. The pre-rename BLUFORGE_* environment names are still
accepted.
core/ keepsake-core - framework-agnostic engine (Rust)
device.rs IOKit device enumeration, optical detection
keys.rs KEYDB.cfg store, search, validation
native.rs native AACS1/AACS2 key recovery
disc.rs libbluray FFI (titles, decrypted title streaming)
bluray_shim.c small C shim so Rust avoids libbluray struct layout churn
menu.rs menu documents: index.bdmv navigation + editable templates
bdjo.rs BD-J object writer for authored title menus
assets/menu/ the generic menu Xlet (00000.jar) and its source
bdmv.rs multi-title index/MovieObject writer, menu install
udf.rs native UDF 2.50 images with newfs_udf and hdiutil
udf_portable.rs portable UDF 2.50 images (hadris-cd) for Linux and Windows
burn.rs hdiutil burn / growisofs orchestration
rip.rs ffmpeg orchestration (remux / encode) with progress
dvd.rs DVD-Video title parse and rip
iso.rs decrypted ISO and folder export
verify.rs navigation, playlist, clip and menu checks
config.rs persisted settings
cli/ `keepsake-atelier` - headless CLI
app/ Tauri v2 desktop app (React + TypeScript frontend)
src-tauri/ Rust commands bridging the UI to core
docs/ guides, feature list, publishing and the project site
scripts/ ffmpeg build, menu asset, release publishing, weekly refresh
Decryption is Rust orchestration over libbluray plus an AACS backend. libaacs
with the local KEYDB is the default. MakeMKV's libmmbd is used only as a
fallback for a disc that cannot be keyed natively, or for BD+ without VM data.
ffmpeg is used only for muxing and encoding, never decryption.
Releases are published to GoFile and mirrored to file.kiwi. A launchd job
rebuilds the current version, re-uploads the artifacts, repoints
docs/downloads.json and the README table, commits the change and cleans up the
local build. See docs/publishing.md.
scripts/publish-release.sh # build, upload, patch links, push
scripts/refresh-release-links.sh # what the weekly job runs
scripts/install-refresh-job.sh # install the launchd agentscripts/mkbd.mjs builds a small but spec-valid BDMV tree (index, MovieObject,
playlist, clip and an ffmpeg-made H.264 + AC-3 clip), so the whole pipeline runs
with no hardware:
node scripts/mkbd.mjs /tmp/testbd 8
./target/release/keepsake-atelier disc /tmp/testbd
./target/release/keepsake-atelier rip /tmp/testbd /tmp/out.mkv --title 0
./target/release/keepsake-atelier iso /tmp/testbd /tmp/out.iso --label SINTELThe test suite runs with cargo test.
- Features - the complete capability list.
- Guides - task-shaped pages.
- Publishing - builds, mirrors, weekly refresh.
- Menu templates - the menu-document format.
- Decryption - AACS, BD+ and the backends.
- ffmpeg - how the bundled build is made.
- Platforms - what works on macOS, Linux and Windows.
- Roadmap - phases and known limits.
- Interface design - direction, tokens, motion and accessibility.
- Design skills - the skill routing used for the UI.
- Site source - the GitHub Pages landing page.
- Contributing - build, tests, style and the release process.
- macOS first. The macOS app is the reference build. Linux ships a tested CLI plus AppImage and deb previews; Windows ships a CLI zip and an NSIS installer preview. See docs/platforms.md for the per-platform matrix.
- Cinavia is a proprietary audio watermark. There is no open detector or remover, and none is bundled.
- Authored BD-J menus are verified in a JVM harness and by libbluray's parser, not on a hardware player. They are opt-in.
- Burning needs a writer and a blank BD-RE or BD-R. The drive and size query are tested; a physical write is still worth doing on your own media.
- Native key recovery needs a LibreDrive vendor read. Stock firmware on some drives does not provide it. libaacs with a KEYDB entry still decrypts.
MIT. See LICENSE.
