Modified the `--output` option to use `pathlib.Path` for type safety and consistency. This ensures better integration with modern Python path handling. |
||
---|---|---|
.github | ||
assets | ||
docs | ||
plugin_cmds | ||
src/audible_cli | ||
utils | ||
.gitignore | ||
audible.spec | ||
CHANGELOG.md | ||
DESCRIPTION.md | ||
LICENSE | ||
pyi_entrypoint.py | ||
pyproject.toml | ||
README.md | ||
test.py | ||
uv.lock |
AUDIBLE-CLI
A powerful command-line tool for managing and downloading your Audible audiobooks.
Built with ❤️ in Python.
✨ Features
- 🔑 Manage multiple Audible accounts (profiles)
- 📚 Browse and export your library and wishlist
- 🎧 Download audiobooks in AAXC or AAX with metadata & chapters
- ⚡ Fast HTTP requests powered by httpx
- 🛠️ Plugin system for custom commands & extensions
- 💻 Cross-platform: Linux, macOS, Windows
- 🚀 Prebuilt executables (no Python required)
📦 Installation
With uv tool (recommended)
uv tool install audible-cli
With uvx
uvx --from audible-cli audible
From PyPI
pip install audible-cli
From GitHub
git clone https://github.com/mkb79/audible-cli.git
cd audible-cli
pip install .
🖥️ Standalone executables
Don’t want to install Python?
Prebuilt binaries are available on the releases page.
⚠️ On Windows, prefer the onedir build for faster startup.
🚀 Quickstart
-
Run the interactive setup:
audible quickstart
→ creates config, profile, and auth file.
-
List your library:
audible library list
-
Download your entire library:
audible download --all --aax
📚 Common use cases
Goal | Command |
---|---|
List all audiobooks | audible library list |
Export library to JSON | audible library export --output library.json |
Add to wishlist | audible wishlist add --asin B004V00AEG |
Download since date | audible download --start-date "2023-01-01" --aaxc --all |
Switch profile | audible -P germany library list |
⚙️ Configuration & Profiles
App directory
audible-cli
stores its configuration files in an app directory.
OS | Path |
---|---|
Windows | C:\Users\<user>\AppData\Local\audible |
Linux | ~/.audible |
macOS | ~/.audible |
You can override this by setting the environment variable:
export AUDIBLE_CONFIG_DIR=/path/to/dir
Config file
- Name:
config.toml
- Format: TOML
- Structure:
[APP]
section → global defaults[profile.<name>]
section → settings per Audible account
Example:
[APP]
primary_profile = "default"
filename_mode = "ascii"
chapter_type = "tree"
[profile.default]
auth_file = "auth.json"
country_code = "us"
[profile.germany]
auth_file = "auth_de.json"
country_code = "de"
Profiles
- Each profile corresponds to an Audible account or marketplace
- Contains:
auth_file
→ authentication filecountry_code
→ Audible marketplace (us
,de
,uk
, …)
- Switch profiles with:
audible -P germany library list
The [APP].primary_profile
is used if no profile is specified.
Auth files
- Stored in the same app directory as the config file
- Can be password-protected:
audible -p "mypassword" download --asin <ASIN>
- If no password is passed, you will be prompted with hidden input
Config options
🔧 APP section
primary_profile
: default profile if none is specifiedfilename_mode
: filename handling for downloadsascii
(default)- override with
--filename-mode
chapter_type
: chapter format for downloadstree
(default)- override with
--chapter-type
👤 Profile section
auth_file
: authentication file for this profilecountry_code
: Audible marketplacefilename_mode
: overrides[APP].filename_mode
chapter_type
: overrides[APP].chapter_type
🧩 Built-in commands
- activation-bytes → Manage DRM activation keys
- api → Call raw Audible API endpoints
- download → Download audiobooks
- library → List, export your library
- wishlist → Manage wishlist (list, add, remove, export)
- manage → Profiles, configs, auth-files
- quickstart → Interactive setup
Show help:
audible <command> -h
🔧 Plugins & Extensions
Custom plugin commands
Create a file in the plugin folder, e.g. cmd_hello.py
:
import click
@click.command(name="hello")
def cli():
click.echo("Hello from plugin!")
Important: A custom plugin must start with the prefix
cmd_
. The loader scans forcmd_*.py
files and attaches each command to the CLI.
Run:
audible hello
Plugin packages
You can also distribute plugins as Python packages via entry points.
The entry point group is audible.cli_plugins
.
Example: pyproject.toml
[project]
name = "audible-myplugin"
version = "0.1.0"
dependencies = ["audible-cli", "click"]
[project.entry-points."audible.cli_plugins"]
my_command = "myplugin.cli:my_command"
another = "myplugin.cli:another"
After installation, your plugin commands will automatically be available in audible
:
audible my-command
audible another
🔊 Verbosity
Control logging output:
audible -v debug library list
audible -v error download --all
Levels: debug
, info
, warning
, error
, critical
Default: info
🧩 Add-ons
- audible-cli-flask → Run
audible-cli
in a Flask web server - audible-series → Organize series from your library
Want your add-on listed? → Open a PR or issue 🚀
🤝 Contributing
Contributions welcome!
- File issues
- Open pull requests
- Share plugins and add-ons
License
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-only).
See LICENSE for details.