No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ymage ec6f25cd13
All checks were successful
/ build-test (push) Successful in 9m15s
docs(readme): group and extend badges
Order badges as status, tech stack, then tooling and workflow.
Add Linux, Bash, Git, Forgejo, mise, Conventional Commits, git-cliff
and GPG signing badges linking to their official sites.
2026-10-05 14:49:45 +02:00
.cargo feat(release): publish crate to Forgejo Cargo registry 2026-09-20 02:12:48 +02:00
.forgejo ci: pin toolchain and run dependency audits on every push 2026-10-05 01:15:05 +02:00
docs refactor(cli)!: require ValidatedArgs in command builders 2026-10-05 01:21:38 +02:00
src refactor(cli)!: require ValidatedArgs in command builders 2026-10-05 01:21:38 +02:00
tests fix(cli): count characters and reject blank metadata 2026-10-05 01:13:40 +02:00
.gitignore chore: stop tracking .planning/ and ignore AI tooling artifacts 2026-08-30 18:14:48 +02:00
.pre-commit-config.yaml chore: add pre-commit configuration and fix whitespace 2026-02-28 23:53:26 +01:00
.tagme-authors.json chore(workflow): clean author list 2026-09-21 10:12:52 +02:00
AGENTS.md refactor(cli)!: require ValidatedArgs in command builders 2026-10-05 01:21:38 +02:00
Cargo.lock refactor(shell): drop shell-escape in favour of an in-tree quoter 2026-10-05 01:11:36 +02:00
Cargo.toml refactor(shell): drop shell-escape in favour of an in-tree quoter 2026-10-05 01:11:36 +02:00
CHANGELOG.md chore(version): Release v3.7.0 2026-10-05 01:43:26 +02:00
CLAUDE.md docs: add CLAUDE.md pointer to AGENTS.md 2026-08-09 11:50:21 +02:00
cliff.toml chore(cliff): fix default first tag version 2026-10-05 01:43:19 +02:00
CODE_OF_CONDUCT.md docs: add Contributor Covenant Code of Conduct 2026-08-30 18:08:18 +02:00
CONTRIBUTING.md refactor(shell): drop shell-escape in favour of an in-tree quoter 2026-10-05 01:11:36 +02:00
deny.toml ci: pin toolchain and run dependency audits on every push 2026-10-05 01:15:05 +02:00
LICENSE chore(license)!: relicense to GPL-3.0-or-later 2026-08-30 18:07:59 +02:00
mise.toml chore(release): switch to tag-driven versioning via CI stamping 2026-08-30 19:14:38 +02:00
README.md docs(readme): group and extend badges 2026-10-05 14:49:45 +02:00
rust-toolchain.toml ci: pin toolchain and run dependency audits on every push 2026-10-05 01:15:05 +02:00
SECURITY.md docs: state that release checksums are not signed 2026-10-05 01:26:49 +02:00
TODO.md feat(cli): add shell completions, man page, and uninstall docs 2026-09-10 16:16:04 +02:00

rstoner

Build Status Version License

Rust Linux Bash

Git Forgejo mise Conventional Commits git-cliff GPG signed

A CLI tool for generating metadata tagging commands for audiobooks.

Overview

rstoner generates shell commands for the tone audiobook metadata tagging tool and the m4b-tool for creating M4B audiobook files.

It processes audiobook directories and outputs ready-to-run commands that can be executed manually or saved to a script.

Alternatively, --native-tags writes ID3v2 tags directly into .mp3 files in-process (via the id3 crate) instead of generating a tone tag command. m4b-tool merge command generation is unaffected either way.

Installation

Download the latest static binary from the releases page:

# Download the binary (replace v3.5.0 with the version you want)
curl -fsSL "https://git.desord.re/eofredj/rstoner/releases/download/v3.5.0/rstoner-x86_64" -o rstoner

# Download the matching checksum and verify
curl -fsSL "https://git.desord.re/eofredj/rstoner/releases/download/v3.5.0/rstoner-x86_64.sha256" -o rstoner-x86_64.sha256
sha256sum -c rstoner-x86_64.sha256

# Make executable and move to PATH
chmod +x rstoner
mv rstoner /usr/local/bin/rstoner

From the Forgejo Cargo Registry

rstoner is published to a private Cargo registry hosted on git.desord.re, not to crates.io. Add the registry to ~/.cargo/config.toml (or the project's .cargo/config.toml), then install:

[registries.forgejo]
index = "sparse+https://git.desord.re/api/packages/eofredj/cargo/"
cargo install rstoner --registry forgejo

Build from Source

git clone https://git.desord.re/eofredj/rstoner.git
cd rstoner
cargo build --release

See CONTRIBUTING.md for static musl builds and other build variants.

Shell Completions and Man Page

# Bash
rstoner --completions bash | sudo tee /etc/bash_completion.d/rstoner > /dev/null

# Zsh
rstoner --completions zsh > "${fpath[1]}/_rstoner"

# Fish
rstoner --completions fish > ~/.config/fish/completions/rstoner.fish

# Man page
rstoner --man | sudo tee /usr/local/share/man/man1/rstoner.1 > /dev/null

Uninstalling

rstoner is a single static binary with no other files installed by default. To remove it:

# Wherever you installed it, e.g.:
rm /usr/local/bin/rstoner
# or, if installed via cargo:
cargo uninstall rstoner

Also remove, if created:

  • ~/.config/rstoner/config.toml (config file, see Configuration)
  • Any shell completion or man page files installed as shown above

Quick Start

rstoner -a "Author Name" -n "Narrator Name" /path/to/audiobook

rstoner runs in dry-run mode by default: it prints the commands (and, with --native-tags, the tags it would write) without changing anything. Pass -x/--no-dry-run to apply.

Full CLI options, examples, generated output, and directory layout requirements are in the Usage Guide.

Requirements

  • tone - Audio metadata tagging tool
  • m4b-tool - M4B audiobook tool

Run rstoner --check to verify both are installed.

Documentation

Document Purpose
Usage Guide Full CLI options, examples, and configuration file
Architecture Overview System design, data flow, and module structure
CONTRIBUTING.md Development setup, style guide, testing, and release process
Security Considerations Shell escaping and the security model

Security

All user-provided values are shell-escaped to prevent command injection. See Security Considerations for the full model, and SECURITY.md to report a vulnerability.

Contributing

See CONTRIBUTING.md for development setup, style guide, and the contribution workflow. Participation in this project is governed by the Code of Conduct.

License

GPL-3.0-or-later. See LICENSE for the full text.