Skip to content

mkb79/audible-cli

Repository files navigation

audible-cli

AUDIBLE-CLI

A powerful command-line tool for managing and downloading your Audible audiobooks.
Built with ❤️ in Python.

Note

🦀 audible-rs — a Rust rewrite in the making, experienced testers wanted

A ground-up Rust reimplementation of audible-cli (and the Audible library) is in active development: one fast, statically-linked binary — no Python required — with a reworked command set, an encrypted auth format, a local library database (SQLite/FTS5), and a capability-based plugin system.

It is pre-alpha and I'm looking for experienced users to run it against real accounts and report the rough edges. If you're comfortable on the command line and don't mind occasional breakage, please help kick the tyres → github.com/mkb79/audible-rs (the README there has a one-line installer for prebuilt Linux/macOS binaries). Share feedback, questions and findings in the audible-rs Discussions.

audible-cli stays fully supported — audible-rs is the future direction, not an immediate replacement, and the two use separate config directories, so you can run them side by side.


✨ 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

  1. Run the interactive setup:

    audible quickstart

    → creates config, profile, and auth file.

  2. List your library:

    audible library list
  3. 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 file
    • country_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 specified
  • filename_mode: filename handling for downloads
    • ascii (default)
    • override with --filename-mode
  • chapter_type: chapter format for downloads
    • tree (default)
    • override with --chapter-type

👤 Profile section

  • auth_file: authentication file for this profile
  • country_code: Audible marketplace
  • filename_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 for cmd_*.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

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.

About

A command line interface for audible package. With the cli you can download your Audible books, cover, chapter files.

Topics

Resources

License

Stars

756 stars

Watchers

10 watching

Forks

Sponsor this project

 

Contributors