github mkb79/audible-cli v0.6.0
Release v0.6.0

5 hours ago

Breaking

  • Log output now goes to stderr, so stdout carries only what a command produces. Every log line went to stdout before, which handed audible api library | jq prose along with the JSON and left a caller no way to tell the two apart. A script that redirected stdout to keep the log, such as audible download … > log.txt, needs 2> or the new --log-file from now on (#306)
  • audible manage auth-file add asks whether the auth file should have a password. --password has always written an encrypted file, but it was the only option of that command without a prompt, so the questions it asks walked straight past the one about encryption while quickstart asked outright. A script that passed every other option has to pass --password '' as well from here on, to say that it wants none (#313, #315)

Fixed

  • audible manage auth-file add --external-login no longer asks for an Audible username and password. The browser performs that login: build_auth_file() hands the two values to Authenticator.from_login, while the external branch calls from_login_external, which is given the marketplace and the callback that opens the browser. They were asked for and dropped (#314, #315)
  • audible manage auth-file remove reports a wrong password instead of raising a traceback about PKCS7 padding (#313, #315)
  • --version no longer exits 1 with the error glued to the version when the update check cannot reach GitHub. The version now prints on its own line and the failure is a warning on stderr (#309)
  • The deprecated resolve_podcats() handed back a coroutine instead of awaiting it, so it warned about its own spelling and then did nothing (#305)
  • --resolve-podcasts now takes every parent podcast out of the library, not every second one. The parents were removed from the very list being walked, so each removal moved the rest along underneath the walk and the following item was stepped over. Where parents sit next to each other, the ones left behind became download jobs that cannot succeed, a parent having no audio of its own (#305)
  • A podcast episode that is already downloaded no longer costs a voucher on every run. The licence was requested before the file was found to be there, which spends one of the licences Audible grants per title and per day (#299)
  • A cover size a title does not offer is reported as a warning, not an error, so a batch download carries on with the rest (#300)
  • A request to Audible's CDE host is tried up to three times when it gets no answer. That host answers the AAX download request and drops connections often enough to fail a run that would otherwise have finished (#298)
  • A failed download job now names the command, the title and the ASIN, instead of leaving a message that says only that something went wrong (#298)
  • AAXC downloads of podcast episodes are no longer rejected over their audio/mp3 content type (#297)
  • The content type of a download is compared by its media type, so parameters such as ; charset=utf-8 and a difference in casing no longer decide whether a file is accepted (#297)

Changed

  • Nine remaining status messages became log messages, so --verbosity reaches them too (#306)
  • --version prints the version alone; the update notice goes to stderr, where a pipe no longer picks it up (#306)
  • Prompts and the sentences explaining them moved to stderr with the rest, so a redirected stdout no longer swallows half of quickstart (#306)
  • Progress bars hold their line: a ruled block at the bottom of the terminal with one numbered line per worker and one for the queue. It follows the window through a resize and keeps the queue line when there is no room for the rest; --no-progress turns it off (#302)
  • A title too long for the window loses its middle instead of pushing the bar and the counts off the line (#302)

Added

  • audible manage auth-file encrypt puts a password on an auth file that has none, and audible manage auth-file decrypt takes it off again. Encryption could only be chosen while a device was being registered, so a file written in the open stayed that way short of deregistering and starting over. Whatever is not given on the command line is asked for, so a password need not be typed where the shell keeps it, and a script that passes both options is asked nothing. An auth file holds the registration of a device and half of one can only be replaced by registering again, so the rewrite writes beside the file, flushes it and the directory, and moves it into place in a single step with the permissions the old file had. A symlink is followed to what it points at; a file with a second hard link, an empty password, a file that is not an auth file and one already in the shape the command would produce are all refused without anything being written (#313, #315)
  • --log-file PATH writes the log to a file as well, with timestamp, module and line (#306)
  • NO_COLOR and FORCE_COLOR decide whether diagnostics are coloured (#306)
  • Standalone builds for arm64 on Linux and Windows; the macOS build stays Apple silicon only (#296)
  • Release download names now carry the architecture, for example audible_win_arm64.zip. The previous names stay alongside them until 15 November 2026 (#296)
  • A pycryptodome extra for platforms that cryptography publishes no wheel for (#296)
  • Documentation for running audible-cli in CI with GitHub Actions through the setup-audible-cli action, storing only the two device credentials that ADP signing needs (#303)

Don't miss a new audible-cli release

NewReleases is sending notifications on new releases.