{"id":51845307,"url":"https://github.com/mkb79/audible","last_synced_at":"2026-07-23T12:00:23.867Z","repository":{"id":34943825,"uuid":"192534912","full_name":"mkb79/Audible","owner":"mkb79","description":"A(Sync) Interface for internal Audible API written in pure Python.","archived":false,"fork":false,"pushed_at":"2026-07-20T14:01:38.000Z","size":2939,"stargazers_count":408,"open_issues_count":14,"forks_count":38,"subscribers_count":9,"default_branch":"master","last_synced_at":"2026-07-20T15:24:51.976Z","etag":null,"topics":["async-functions","audible","audible-api","encrypted-store","python"],"latest_commit_sha":null,"homepage":"https://audible.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mkb79.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":["mkb79"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2019-06-18T12:24:05.000Z","updated_at":"2026-07-20T14:00:25.000Z","dependencies_parsed_at":"2024-01-15T03:59:27.124Z","dependency_job_id":"c51e0ea4-3d28-4342-90eb-f6595644e22d","html_url":"https://github.com/mkb79/Audible","commit_stats":{"total_commits":330,"total_committers":15,"mean_commits":22.0,"dds":0.0636363636363636,"last_synced_commit":"9dd41d4c88ed31e361c06a38f3d83559a973c106"},"previous_names":[],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/mkb79/Audible","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkb79%2FAudible","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkb79%2FAudible/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkb79%2FAudible/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkb79%2FAudible/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mkb79","download_url":"https://codeload.github.com/mkb79/Audible/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkb79%2FAudible/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35801472,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-23T02:00:06.683Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["async-functions","audible","audible-api","encrypted-store","python"],"created_at":"2026-07-23T12:00:19.384Z","updated_at":"2026-07-23T12:00:23.859Z","avatar_url":"https://github.com/mkb79.png","language":"Python","funding_links":["https://github.com/sponsors/mkb79"],"categories":[],"sub_categories":[],"readme":"# Audible\n\n[![image](https://img.shields.io/pypi/v/audible.svg)](https://pypi.org/project/audible/)\n[![image](https://img.shields.io/pypi/l/audible.svg)](https://pypi.org/project/audible/)\n[![image](https://img.shields.io/pypi/pyversions/audible.svg)](https://pypi.org/project/audible/)\n[![image](https://img.shields.io/pypi/status/audible.svg)](https://pypi.org/project/audible/)\n[![image](https://img.shields.io/pypi/wheel/audible.svg)](https://pypi.org/project/audible/)\n[![CI](https://github.com/mkb79/Audible/actions/workflows/ci.yml/badge.svg)](https://github.com/mkb79/Audible/actions/workflows/ci.yml)\n[![CodeFactor](https://www.codefactor.io/repository/github/mkb79/audible/badge)](https://www.codefactor.io/repository/github/mkb79/audible)\n[![Downloads](https://static.pepy.tech/badge/audible/month)](https://pepy.tech/project/audible)\n\n**Audible is a Python low-level interface to communicate with the non-publicly\n[Audible](\u003chttps://en.wikipedia.org/wiki/Audible_(service)\u003e) API.**\n\nIt enables Python developers to create their own Audible services.\nAsynchronous communication with the Audible API is supported.\n\nFor a basic command line interface take a look at my\n[audible-cli](https://github.com/mkb79/audible-cli) package. This package\nsupports:\n\n- downloading audiobooks (aax/aaxc), cover, PDF and chapter files\n- export library to [csv](https://en.wikipedia.org/wiki/Comma-separated_values)\n  files\n- get activation bytes\n- add own plugin commands\n\n## Requirements\n\nPython \u003e= 3.11\n\n## Installation\n\n### Standard Installation\n\n```bash\npip install audible\n```\n\n### Recommended: With Performance Optimizations\n\n**Available in audible \u003e= 0.11.0**\n\nFor significantly better performance (5-100x faster cryptographic operations),\ninstall with optional high-performance crypto backends.\n\n**Option 1: cryptography (recommended)**\n\nModern, actively maintained, Rust-accelerated library:\n\n```bash\npip install audible[cryptography]\n```\n\n**Option 2: pycryptodome**\n\nMature, C-based cryptographic library:\n\n```bash\npip install audible[pycryptodome]\n```\n\n**Option 3: Both (best for development/testing)**\n\n```bash\npip install audible[cryptography,pycryptodome]\n```\n\n**Using uv:**\n\n```bash\n# With cryptography\nuv pip install audible[cryptography]\n\n# With pycryptodome\nuv pip install audible[pycryptodome]\n\n# With both\nuv pip install audible[cryptography,pycryptodome]\n\n# Or run with extras (in project context)\nuv run --extra cryptography your_script.py\n```\n\nThe library automatically selects the best available provider:\n\n1. cryptography (preferred, Rust-accelerated)\n2. pycryptodome (C-based)\n3. legacy (pure Python fallback)\n\nPerformance improvements with optimized backends:\n\n- **5-10x faster** AES encryption/decryption\n- **10-20x faster** RSA operations\n- **3-5x faster** key derivation (PBKDF2)\n- **5-10x faster** hashing (SHA-256, SHA-1)\n\n**Provider Overrides (advanced)**\n\nMost applications do not need to interact with the crypto layer directly.\nPrefer configuring providers through high-level APIs such as `Authenticator`:\n\n```python\nfrom audible import Authenticator\nfrom audible.crypto_provider import CryptographyProvider, set_default_crypto_provider\n\n# Force a specific provider for this authenticator instance\nauth = Authenticator.from_file(\n    \"auth.json\",\n    password=\"secret\",\n    crypto_provider=CryptographyProvider,\n)\n\n# Optional: set a process-wide default provider, then reset to auto-detect\nset_default_crypto_provider(CryptographyProvider)\n...\nset_default_crypto_provider()\n```\n\n`get_crypto_providers()` remains available for internal use, but it is not part of\nthe supported public API.\n\n### Optional: High-Performance JSON Backends\n\n**Available in audible \u003e= 0.11.0**\n\nFor improved JSON serialization/deserialization performance (2-5x faster),\ninstall with optional high-performance JSON backends.\n\n**Option 1: json-full (recommended)**\n\nComplete coverage with best performance for all use cases:\n\n```bash\npip install audible[json-full]\n```\n\nIncludes:\n\n- `orjson`: 4-5x faster for compact JSON (API responses, metadata)\n- `ujson`: 2-3x faster with indent=4 support (auth files, library exports)\n\n**Option 2: json-fast**\n\nOptimized for compact JSON only:\n\n```bash\npip install audible[json-fast]\n```\n\nIncludes:\n\n- `orjson`: 4-5x faster for compact JSON\n\n**Option 3: Individual providers**\n\n```bash\n# orjson (Rust-based, fastest for compact JSON)\npip install audible[orjson]\n\n# ujson (C-based, excellent for pretty-printed output)\npip install audible[ujson]\n\n# rapidjson (C++ based, alternative to ujson)\npip install audible[rapidjson]\n```\n\n**Using uv:**\n\n```bash\n# json-full (recommended)\nuv pip install audible[json-full]\n\n# json-fast\nuv pip install audible[json-fast]\n\n# Or run with extras (in project context)\nuv run --extra json-full your_script.py\n```\n\nThe library automatically selects the best available provider:\n\n1. orjson (Rust-based, 4-5x faster for compact JSON)\n2. ujson (C-based, 2-3x faster with indent support)\n3. rapidjson (C++ based, 2-3x faster)\n4. stdlib json (always available)\n\nPerformance improvements with optimized backends:\n\n- **4-5x faster** compact JSON (orjson)\n- **2-3x faster** pretty-printed JSON (ujson/rapidjson)\n- **Smart fallback**: orjson automatically uses ujson/rapidjson for indent=4\n\n**Provider Overrides (advanced)**\n\nMost applications do not need to interact with the JSON layer directly.\nThe library automatically uses the best provider. However, you can override:\n\n```python\nfrom audible.json_provider import OrjsonProvider, get_json_provider, set_default_json_provider\n\n# Get auto-detected provider\nprovider = get_json_provider()\nprint(f\"Using: {provider.provider_name}\")\n\n# Force a specific provider\ndata = {\"key\": \"value\"}\norjson = get_json_provider(OrjsonProvider)\njson_str = orjson.dumps(data)\n\n# Optional: set a process-wide default provider\nset_default_json_provider(OrjsonProvider)\n```\n\n## Read the Doc\n\nThe documentation can be found at [Read the Docs](https://audible.readthedocs.io/en/latest)\n\n## Contributing\n\nContributions are very welcome.\nTo learn more, see the [Contributor Guide].\n\n## License\n\nDistributed under the terms of the [AGPL-3.0][license],\n_Audible_ is free and open source software.\n\n## Issues\n\nIf you encounter any problems,\nplease [file an issue] along with a detailed description.\n\n## Credits\n\nThanks a lot JetBrains for supporting me with a free [license](https://www.jetbrains.com/community/opensource/#support)\nThis project was generated from [@cjolowicz]'s [Hypermodern Python Cookiecutter] template.\n\n[@cjolowicz]: https://github.com/cjolowicz\n[pypi]: https://pypi.org/\n[hypermodern python cookiecutter]: https://github.com/cjolowicz/cookiecutter-hypermodern-python\n[file an issue]: https://github.com/mkb79/Audible/issues\n[pip]: https://pip.pypa.io/\n[audible]: https://github.com/mkb79/Audible\n[pipx]: https://pypa.github.io/pipx/\n\n\u003c!-- github-only --\u003e\n\n[license]: https://github.com/mkb79/Audible/blob/main/LICENSE\n[contributor guide]: https://github.com/mkb79/Audible/blob/main/CONTRIBUTING.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkb79%2Faudible","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmkb79%2Faudible","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkb79%2Faudible/lists"}