Audible is a Python low-level interface to communicate with the non-publicly Audible API.
It enables Python developers to create their own Audible services. Asynchronous communication with the Audible API is supported.
For a basic command line interface take a look at my audible-cli package. This package supports:
- downloading audiobooks (aax/aaxc), cover, PDF and chapter files
- export library to csv files
- get activation bytes
- add own plugin commands
Python >= 3.10
pip install audibleAvailable in audible >= 0.11.0
For significantly better performance (5-100x faster cryptographic operations), install with optional high-performance crypto backends.
Option 1: cryptography (recommended)
Modern, actively maintained, Rust-accelerated library:
pip install audible[cryptography]Option 2: pycryptodome
Mature, C-based cryptographic library:
pip install audible[pycryptodome]Option 3: Both (best for development/testing)
pip install audible[cryptography,pycryptodome]Using uv:
# With cryptography
uv pip install audible[cryptography]
# With pycryptodome
uv pip install audible[pycryptodome]
# With both
uv pip install audible[cryptography,pycryptodome]
# Or run with extras (in project context)
uv run --extra cryptography your_script.pyThe library automatically selects the best available provider:
- cryptography (preferred, Rust-accelerated)
- pycryptodome (C-based)
- legacy (pure Python fallback)
Performance improvements with optimized backends:
- 5-10x faster AES encryption/decryption
- 10-20x faster RSA operations
- 3-5x faster key derivation (PBKDF2)
- 5-10x faster hashing (SHA-256, SHA-1)
Provider Overrides (advanced)
Most applications do not need to interact with the crypto layer directly.
Prefer configuring providers through high-level APIs such as Authenticator:
from audible import Authenticator
from audible.crypto_provider import CryptographyProvider, set_default_crypto_provider
# Force a specific provider for this authenticator instance
auth = Authenticator.from_file(
"auth.json",
password="secret",
crypto_provider=CryptographyProvider,
)
# Optional: set a process-wide default provider, then reset to auto-detect
set_default_crypto_provider(CryptographyProvider)
...
set_default_crypto_provider()get_crypto_providers() remains available for internal use, but it is not part of
the supported public API.
Available in audible >= 0.11.0
For improved JSON serialization/deserialization performance (2-5x faster), install with optional high-performance JSON backends.
Option 1: json-full (recommended)
Complete coverage with best performance for all use cases:
pip install audible[json-full]Includes:
orjson: 4-5x faster for compact JSON (API responses, metadata)ujson: 2-3x faster with indent=4 support (auth files, library exports)
Option 2: json-fast
Optimized for compact JSON only:
pip install audible[json-fast]Includes:
orjson: 4-5x faster for compact JSON
Option 3: Individual providers
# orjson (Rust-based, fastest for compact JSON)
pip install audible[orjson]
# ujson (C-based, excellent for pretty-printed output)
pip install audible[ujson]
# rapidjson (C++ based, alternative to ujson)
pip install audible[rapidjson]Using uv:
# json-full (recommended)
uv pip install audible[json-full]
# json-fast
uv pip install audible[json-fast]
# Or run with extras (in project context)
uv run --extra json-full your_script.pyThe library automatically selects the best available provider:
- orjson (Rust-based, 4-5x faster for compact JSON)
- ujson (C-based, 2-3x faster with indent support)
- rapidjson (C++ based, 2-3x faster)
- stdlib json (always available)
Performance improvements with optimized backends:
- 4-5x faster compact JSON (orjson)
- 2-3x faster pretty-printed JSON (ujson/rapidjson)
- Smart fallback: orjson automatically uses ujson/rapidjson for indent=4
Provider Overrides (advanced)
Most applications do not need to interact with the JSON layer directly. The library automatically uses the best provider. However, you can override:
from audible.json_provider import OrjsonProvider, get_json_provider, set_default_json_provider
# Get auto-detected provider
provider = get_json_provider()
print(f"Using: {provider.provider_name}")
# Force a specific provider
data = {"key": "value"}
orjson = get_json_provider(OrjsonProvider)
json_str = orjson.dumps(data)
# Optional: set a process-wide default provider
set_default_json_provider(OrjsonProvider)The documentation can be found at Read the Docs
Contributions are very welcome. To learn more, see the Contributor Guide.
Distributed under the terms of the AGPL-3.0, Audible is free and open source software.
If you encounter any problems, please file an issue along with a detailed description.
Thanks a lot JetBrains for supporting me with a free license This project was generated from @cjolowicz's Hypermodern Python Cookiecutter template.