{"id":29620453,"url":"https://github.com/damajor/BALD","last_synced_at":"2025-07-21T03:02:55.529Z","repository":{"id":276055754,"uuid":"927881921","full_name":"damajor/BALD","owner":"damajor","description":"Brand new Audible Library Downloader","archived":false,"fork":false,"pushed_at":"2025-05-15T23:15:51.000Z","size":526,"stargazers_count":12,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-16T00:24:14.624Z","etag":null,"topics":["aax","aaxc","audible","audible-converter","audible-library","audible-library-extractor","audiobook","audiobooks","audiobookshelf","downloader","ffmpeg","mp4","ogg","podman","shell"],"latest_commit_sha":null,"homepage":"https://damajor.github.io/BALD/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/damajor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"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}},"created_at":"2025-02-05T17:41:47.000Z","updated_at":"2025-05-15T23:15:55.000Z","dependencies_parsed_at":"2025-04-02T14:21:03.489Z","dependency_job_id":"25e1bea9-4dc3-4796-add3-10c8800d8aaf","html_url":"https://github.com/damajor/BALD","commit_stats":null,"previous_names":["damajor/bald"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/damajor/BALD","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/damajor%2FBALD","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/damajor%2FBALD/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/damajor%2FBALD/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/damajor%2FBALD/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/damajor","download_url":"https://codeload.github.com/damajor/BALD/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/damajor%2FBALD/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266231762,"owners_count":23896473,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["aax","aaxc","audible","audible-converter","audible-library","audible-library-extractor","audiobook","audiobooks","audiobookshelf","downloader","ffmpeg","mp4","ogg","podman","shell"],"created_at":"2025-07-21T03:02:13.544Z","updated_at":"2025-07-21T03:02:55.522Z","avatar_url":"https://github.com/damajor.png","language":"Shell","funding_links":[],"categories":["Shell"],"sub_categories":[],"readme":"---\ntitle: BALD\npermalink: index.html\noutput: pdf_document\ngeometry: margin=2cm\n---\n\n[![Docker Repository on Quay](https://quay.io/repository/damajor/bald/status \"Docker Repository on Quay\")](https://quay.io/repository/damajor/bald)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/damajor/BALD)\n\n\n    BBBBBBBBBBBBBBBBB               AAA               LLLLLLLLLLL             DDDDDDDDDDDDD        \n    B::::::::::::::::B             A:::A              L:::::::::L             D::::::::::::DDD     \n    B::::::BBBBBB:::::B           A:::::A             L:::::::::L             D:::::::::::::::DD   \n    BB:::::B     B:::::B         A:::::::A            LL:::::::LL             DDD:::::DDDDD:::::D  \n      B::::B     B:::::B        A:::::::::A             L:::::L                 D:::::D    D:::::D \n      B::::B     B:::::B       A:::::A:::::A            L:::::L                 D:::::D     D:::::D\n      B::::BBBBBB:::::B       A:::::A A:::::A           L:::::L                 D:::::D     D:::::D\n      B:::::::::::::BB       A:::::A   A:::::A          L:::::L                 D:::::D     D:::::D\n      B::::BBBBBB:::::B     A:::::A     A:::::A         L:::::L                 D:::::D     D:::::D\n      B::::B     B:::::B   A:::::AAAAAAAAA:::::A        L:::::L                 D:::::D     D:::::D\n      B::::B     B:::::B  A:::::::::::::::::::::A       L:::::L                 D:::::D     D:::::D\n      B::::B     B:::::B A:::::AAAAAAAAAAAAA:::::A      L:::::L         LLLLLL  D:::::D    D:::::D \n    BB:::::BBBBBB::::::BA:::::A             A:::::A   LL:::::::LLLLLLLLL:::::LDDD:::::DDDDD:::::D  \n    B:::::::::::::::::BA:::::A               A:::::A  L::::::::::::::::::::::LD:::::::::::::::DD   \n    B::::::::::::::::BA:::::A                 A:::::A L::::::::::::::::::::::LD::::::::::::DDD     \n    BBBBBBBBBBBBBBBBBAAAAAAA                   AAAAAAALLLLLLLLLLLLLLLLLLLLLLLLDDDDDDDDDDDDD        \n                _____               _                     _____       _ _ _   _          \n               | __  |___ ___ ___ _| |   ___ ___ _ _ _   |  _  |_ _ _| |_| |_| |___      \n               | __ -|  _| .'|   | . |  |   | -_| | | |  |     | | | . | | . | | -_|     \n               |_____|_| |__,|_|_|___|  |_|_|___|_____|  |__|__|___|___|_|___|_|___|     \n                                                                                         \n             __    _ _                      ____                _           _         \n            |  |  |_| |_ ___ ___ ___ _ _   |    \\ ___ _ _ _ ___| |___ ___ _| |___ ___ \n            |  |__| | . |  _| .'|  _| | |  |  |  | . | | | |   | | . | .'| . | -_|  _|\n            |_____|_|___|_| |__,|_| |_  |  |____/|___|_____|_|_|_|___|__,|___|___|_|  \n                                    |___|                                             \n\n\nBrand new Audible Library Downloader\n====================================\n\n**Author: damajor**\n\n**Source code: [BALD @ GitHub](https://github.com/damajor/BALD)**\n\n**Topics: Automatic download / art cover embedding / metadata tagging / conversion / renaming of Audible books**\n\nTable of content\n================\n\u003c!-- @import \"[TOC]\" {cmd=\"toc\" depthFrom=1 depthTo=4 orderedList=true} --\u003e\n\u003c!-- code_chunk_output --\u003e\n\n1. [Description](#description)\n2. [Feature details](#feature-details)\n3. [For the impatient](#for-the-impatient)\n4. [Pre-requisites](#pre-requisites)\n5. [Required tools](#required-tools)\n6. [Optional tools](#optional-tools)\n7. [Repository files description](#repository-files-description)\n8. [Installation](#installation)\n9. [Usage examples](#usage-examples)\n    1. [Manual run](#manual-run)\n    2. [Automatic run (crontab)](#automatic-run-crontab)\n    3. [Container usage](#container-usage)\n        1. [Container volume maps list](#container-volume-maps-list)\n            1. [Required](#required)\n            2. [Optional](#optional)\n        2. [Audible CLI initialization](#audible-cli-initialization)\n        3. [Podman command line](#podman-command-line)\n        4. [Podman compose](#podman-compose)\n        5. [Podman Quadlet (systemd integration)](#podman-quadlet-systemd-integration)\n        6. [Podman Quadlet Automation](#podman-quadlet-automation)\n10. [Configuration](#configuration)\n11. [Anti-piracy notice](#anti-piracy-notice)\n12. [License](#license)\n\n\u003c!-- /code_chunk_output --\u003e\n\n# Description\n\nBALD is a highly configurable tool to download your Audible library and build your local library.  \nBALD uses various tools to download, enrich metadata, convert audiobooks, rename files and move them to target location.\nThis script is intended to be run on a Linux system (WSL may work) with bash and some other tools installed\n\nLast run time is stored in a status file for next runs, so only deltas are downloaded.\n\nSome logs will be created \u0026 deleted inside `script_dir/tmp` directory.\nAll working files during processing are stored in the same directory as the downloaded books.\n\nA Dockerfile is also provided for those who want to use it in rootless containers.\n\nIn case of a problem please open an issue on GitHub \u003chttps://github.com/damajor/BALD/issues\u003e\n\n\u003e **NB:**\n\u003e Some metadata may be wrong or malformed, don't blame the script but complains to Audible\n\u003e If you find a reliable logic or source of metadata to fix Audible quirks, open an issue \u0026 let me know.\n\n\u003e **Notes regarding MP4:**\n\u003e While MP4 conversion is supported, OGA is recommended.\n\u003e Thumbnails on MP4 may not always works.\n\u003e Moreover for high quality MP4/AAC encoding, ffmpeg requires to be compiled with non-free codecs. OGG Vorbis gives better results, better compression, better compression quality out of the box and good compatibility ;)\n\n# Feature details\n\n - automatic Audible audiobooks downloads\n - crontab friendly (delta runs)\n - library history downloads (full \u0026 deltas)\n - wishlist download\n - either one of:\n   - keep original chapters,\n   - chapters renaming,\n   - or rebuild entirely all chapters\n - metadata enrichment (from normal \u0026 hidden AAX/AAXC tags, or from history TSV file)\n - cover art embedding\n - audiobooks conversion to **oga** (Ogg container with Opus codec)\n - audiobooks conversion to **m4b** (MP4 container with AAC codec)\n - size control of converted audiobooks:\n   - custom fixed bitrate\n   - dynamic bitrate based on a user ratio\n - parallelization of heavy work (conversion \u0026 metadata enrichment)\n - \"perfect\" embedded metadata for AudioBookShelf ([AudioBookShelf](https://github.com/advplyr/audiobookshelf))\n - dynamic naming scheme for destination directories \u0026 file names\n - helper script for downloading external scripts\n - container Dockerfile provided with all dependencies \u0026 external scripts (tested on Podman rootless)\n - basic statistics after each run\n - local TSV database of converted audiobooks\n - and more...\n\n# For the impatient\n\n- Go read the full Podman walkthrough here [README_Podman_Walkthrough.md](README_Podman_Walkthrough.md).\n- Read the full parameter settings here [README_Config_Parameters.md](README_Config_Parameters.md).\n- Encoding parameters examples [README_Encoding_Options.md](README_Encoding_Options.md)\n\n# Pre-requisites\n\n - install `audible-cli` and create a profile (check instructions here \u003chttps://github.com/mkb79/audible-cli\u003e)\n - modify script user config variables to match your needs\n - run `parallel --citation` and follow instructions to avoid output warning garbage\n\n# Required tools\n\n - bash (v4.3+)\n - jq\n - bc\n - xxd (for ogg image blobber script)\n - audible-cli (at least version 0.3.2b3)\n - ffmpeg / ffprobe (tested 6.1.2 \u0026 7.1)\n - mediainfo\n - parallel\n - AtomicParsley (for MP4 artwork/cover)\n\n**Also download these scripts and put them in the same directory as this script**\n\n - `ogg-image-blobber.sh` (from \u003chttps://github.com/twopoint71/ogg-image-blobber\u003e)\n - `update_chapter_titles.py` (from \u003chttps://github.com/mkb79/audible-cli/blob/master/utils/update_chapter_titles.py\u003e)\n\n# Optional tools\n\n - Java + Tika (download jar from [Apache Tika](https://tika.apache.org/))  \n   **It slows down metadata extraction** but gives very good language accuracy detection.\n\nOr\n\n - Your own Tika server (**processing is faster than using the jar**)\n\n# Repository files description\n\n- `BALD.sh` it is the main script with all the processing logic.\n- `grab_additional_scripts.sh` a quick and dirty script for lazy boys. It will download external scripts and optional tool for you, as well creating a user config file with default values (just remove `myconfig` if you want to set parameters in the script itself).\n- `docker_mod.sh` not to be used directly by the user, it is sourced by the main script to make it compatible with containers.\n- `rebuild_chapters.sh` used to build `ffmpeg` chapters metadata\n- `Dockerfile` used to build your own container image.\n- `compose.yaml` example of for Podman/Docker compose.\n- `README.md` the file you are currently reading.\n- `README.pdf` for convenience purposes the README is also exported as PDF file.\n- `LICENSE` is the license file of this project.\n\n# Installation\n\nIt is as simple as:\n\n1. Clone GitHub repository or download archive of it  \n`git clone https://github.com/damajor/BALD`  \n2. Manually grab external tools and put them in the same directory of the script **OR** execute the download script (this will also create a default `myconfig` file)  \n`./grab_additional_scripts.sh`  \n3. Carefully configure all settings in `myconfig` or directly inside the script\n\n\u003e **Note:**  \n\u003e The script is not compatible with NTFS filesystem.\n\n# Usage examples\n\nDouble check prerequisites and settings :)\n\nBALD was designed to run every day at most.\n\n## Manual run\n\nOnce configured the only thing is to run the script.\n\nOn the first run the script will download ALL your library to the desired location and will do its jobs for metadata, conversion and moving converted files to target location.\n\nUpcoming runs will only download new books from Audible (delta run) and process them as usual.\n\n\u003e **Example:**  \n\u003e either  \n\u003e `/full/path/of/script/BALD.sh`  \n\u003e or if the script is in your path, just use:  \n\u003e `BALD.sh`  \n\u003e or if you start it manually from the script location:  \n\u003e `./BALD.sh`\n\n## Automatic run (crontab)\n\nIt is recommended to run the script daily at most. It works better with a daily scheduling or more like every week or month.\n\n\u003e **Example:**  \n\u003e Run every day at 4PM  \n\u003e `0 4 * * * /full/path/of/script/BALD.sh \u003edev/null 2\u003e/dev/null`  \n\u003e Run every first day of each month at 4PM  \n\u003e `0 4 1 * * /full/path/of/script/BALD.sh \u003edev/null 2\u003e/dev/null`\n\n\u003e **Notes:**  \n\u003e - Please note that automated runs does NOT prevent you to manually run the script at any time you want.  \n\u003e Example, if you set up a weekly update, but you want to quickly run it manually once because you purchased a new audiobook, then just do it! (the script will store the last execution to the time of the manual run)  \n\u003e - Before setting up your automation, try to run manually the script to see if it behaves the way you have configured it.  \n\u003e - **Also, it is HIGHLY recommended doing the first run manually. Just because it will sync entire library and can take hours of processing for big libraries.**\n\n## Container usage\n\n[![Docker Repository on Quay](https://quay.io/repository/damajor/bald/status \"Docker Repository on Quay\")](https://quay.io/repository/damajor/bald)\n\n\u003e **Notes:**  \n\u003e The script has been developed using Podman rootless.  \n\u003e It should work on Docker (rootless or not).  \n\u003e Everything inside the container runs as 'root' user, **use rootless containers without CAP_ADMIN for security**.\n\n\u003e **IMPORTANT:**  \n\u003e [Initialize audible-cli](#audible-cli-initialization)\n\nWhen used in containers the script makes some settings 'readonly'.\nThe user MUST map specific volumes (the script will check all volumes are mapped, or it will exit).\n\nThe following settings are hard coded using the script inside container:\n```\nHIST_LIB_DIR=\"/audible_history\"\nSTATUS_FILE=\"/status_file\"\nDOWNLOAD_DIR=\"/audible_dl\"\nDEST_BASE_DIR=\"/audiobooks_dest\"\nLOCAL_DB=\"/BALD/personal_library.tsv\"\nDEBUG_USEAAXSAMPLE=/sample.aax\nDEBUG_USEAAXCSAMPLE=/sample.aaxc\n```\nThe user is responsible to map volumes accordingly.\n\n### Container volume maps list\n\nWhen mapping local directories to your container, make sure that they all exist.\n\n#### Required\n\nThe following volumes MUST be mapped to the container, if one map is missing the script will exit with an error message with the missing volume:\n\n| Local                                     | Container                   | Type    |\n|-------------------------------------------|-----------------------------|---------|\n| [HIST_LIB_DIR](#hist_lib_dir)             | /audible_history            | dir     |\n| [STATUS_FILE](#status_file)               | /status_file                | file    |\n| [DOWNLOAD_DIR](#download_dir)             | /audible_dl                 | dir     |\n| [DEST_BASE_DIR](#dest_base_dir)           | /audiobooks_dest            | dir     |\n| [LOCAL_DB](#local_db)                     | /BALD/personal_library.tsv  | dir     |\n| myconfig                                  | /BALD/myconfig              | file    |\n| tmp logs directory                        | /BALD/tmp                   | dir     |\n| audible-cli config dir                    | /root/.audible              | dir     |\n\n#### Optional\n\nThose volumes are optional, just if you want to debug the script:\n\n| Local                                         | Container             | Type    |\n|-----------------------------------------------|-----------------------|---------|\n| [DEBUG_USEAAXSAMPLE](#debug_useaaxsample)     | /BALD/sample.aax      | file    |\n| [DEBUG_USEAAXCSAMPLE](#debug_useaaxcsample)   | /BALD/sample.aaxc     | file    |\n| aaxc voucher file                             | /BALD/sample.voucher  | file    |\n\n### Audible CLI initialization\n\nIf you have `audible-cli` installed and initialized then you can directly map your `audible-cli` config directory and skip this part.\n\nIf you had never used `audible-cli` then follow what comes next.\n\nMake local `audible-cli` configuration directory:  \n    `mkdir -p /home/myuser/.audible`\n\nRun `audible-cli` quick-start enrollment:  \n    `podman run -it --rm -v /home/myuser/.audible:/root/.audible quay.io/damajor/bald:latest audible quickstart`\n\nFor more information refers to `audible-cli` documentation here \u003chttps://github.com/mkb79/audible-cli/blob/master/README.md#getting-started\u003e.\n\n### Podman command line\n\nIf you want to use the following settings with Podman:\n```\nHIST_LIB_DIR=\"/home/myuser/Audible/lib_history\"\nSTATUS_FILE=\"/home/myuser/Audible/audible_last_sync\"\nDOWNLOAD_DIR=\"/home/myuser/Audible/Downloads\"\nDEST_BASE_DIR=\"/home/myuser/AudioBookShelf/audiobooks\"\nLOCAL_DB=\"/home/myuser/Audible/personal_library.tsv\"\nDEBUG_USEAAXSAMPLE=sample.aax\nDEBUG_USEAAXCSAMPLE=sample.aaxc\n```\n\nUse the following command (*change local paths to match your needs*):\n```\npodman run -it --rm \\\n    -v /home/myuser/.audible:/root/.audible \\\n    -v /home/myuser/Audible/lib_history:/audible_history \\\n    -v /home/myuser/Audible/audible_last_sync:/status_file \\\n    -v /home/myuser/Audible/Downloads:/audible_dl \\\n    -v /home/myuser/Audible/personal_library.tsv:/BALD/personal_library.tsv \\\n    -v /home/myuser/AudioBookShelf/audiobooks:/audiobooks_dest \\\n    -v /home/myuser/BALD/myconfig:/BALD/myconfig \\\n    -v /home/myuser/BALD/tmp:/BALD/tmp \\\n    quay.io/damajor/bald:latest\n```\n\nIf you want to debug using sample files, just add:\n```\n    -v /home/myuser/BALD/sample.aax:/BALD/sample.aax \\\n    -v /home/myuser/BALD/sample.aaxc:/BALD/sample.aaxc \\\n    -v /home/myuser/BALD/sample.voucher:/BALD/sample.voucher \\\n```\n\n### Podman compose\n\nUse compose file only after you have done `audible-cli` initialization ([Help here](#audible-cli-initialization)).\nCompose file example:\n\n```\nservices:\n  BALD:\n    image: quay.io/damajor/bald:latest\n    environment:\n      - TZ=Europe/Rome\n    volumes:\n      - /home/myuser/.audible:/root/.audible:z\n      - /home/myuser/Audible/lib_history:/audible_history:z\n      - /home/myuser/Audible/audible_last_sync:/status_file:z\n      - /home/myuser/Audible/downloads:/audible_dl:z\n      - /home/myuser/Audible/personal_library.tsv:/BALD/personal_library.tsv:z\n      - /home/myuser/AudioBookShelf/audiobooks:/audiobooks_dest:z\n      - /home/myuser/BALD/myconfig:/BALD/myconfig:z\n      - /home/myuser/BALD/tmp:/BALD/tmp:z\n```\n\nRun with:  \n`podman compose -f compose.yaml up --force-recreate`\n\n### Podman Quadlet (systemd integration)\n\nBelow is an example systemd quadlet for a oneshot BALD service.\n\n1. Create a file `/home/YOURUSER/.config/containers/systemd/bald.container` with the content below (change the path to your local paths)\n\n```\n[Unit]\nDescription=Podman BALD\n\n[Install]\n\n[Service]\nRestart=no\nType=oneshot\n\n[Container]\nImage=quay.io/damajor/bald:latest\nContainerName=bald\nHostName=bald\nAutoUpdate=registry\nVolume=/home/myuser/Audible/lib_history:/audible_history:Z\nVolume=/home/myuser/Audible/audible_last_sync:/status_file:Z\nVolume=/home/myuser/Audible/downloads:/audible_dl:Z\nVolume=/home/myuser/AudioBookShelf/audiobooks:/audiobooks_dest:z\nVolume=/home/myuser/Audible/personal_library.tsv:/BALD/personal_library.tsv:Z\nVolume=/home/myuser/BALD/myconfig:/BALD/myconfig:Z\nVolume=/home/myuser/BALD/tmp:/BALD/tmp:Z\nVolume=/home/myuser/.audible:/root/.audible:Z\nEnvironment=\"GENERIC_TIMEZONE=Europe/Rome\" \"TZ=Europe/Rome\"\n```\n\n2. Run `systemctl --user daemon-reload`\n3. To run BALD just do `systemctl --user start bald.service` each time you need to sync your Audible library\n\n### Podman Quadlet Automation\n\nFor scheduling synchronization of your library, create a systemd timer.\n\n1. Create the timer file `/home/YOURUSER/.config/systemd/user/bald.timer` with the following content\n\n```\n[Unit]\nDescription=Podman BALD timer\nRefuseManualStart=no\nRefuseManualStop=no\n\n[Timer]\n# Runs sync every day at 23:30\nOnCalendar=Mon..Sun 23:30\nPersistent=false\nUnit=bald.service\n\n[Install]\nWantedBy=timers.target\n```\n\n2. Run `systemctl --user daemon-reload`\n3. Enable \u0026 start the timer with `systemctl --user enable --now bald.timer`\n\n# Configuration\n\n**Make sure you read all setting descriptions and usage.**\n\nChange the variables in the script section **User config** according to your needs.\n\n**All the parameters MUST have a value set** (there is only basic validation).\n\nYou can avoid to change settings in the script itself by creating a file named `myconfig` and put all the settings in it. The script will load this file if it exists, otherwise it will use default values from script itself.\n`myconfig` file takes precedence over internal settings.\n\n\n**Read the full parameter settings here [README_Config_Parameters.md](README_Config_Parameters.md).**\n\n# Anti-piracy notice\n\n**Note that this project does NOT ‘crack’ the DRM**. It simply allows the user to use their own encryption key (fetched from Audible servers) to decrypt the audiobook in the same manner that the official audiobook playing software does.\n\n**Please only use this application for gaining full access to your own audiobooks for archiving/conversion/convenience. DeDRMed audiobooks should not be uploaded to open servers, torrents, or other methods of mass distribution. No help will be given to people doing such things. Authors, retailers, and publishers all need to make a living, so that they can continue to produce audiobooks for us to hear, and enjoy.**\n\nThis blurb is borrowed from the \u003chttps://apprenticealf.wordpress.com/\u003e page.\n\n# License\n\nMIT License\n\nCopyright (c) [2025] [damajor @ \u003chttps://github.com/damajor\u003e]\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdamajor%2FBALD","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdamajor%2FBALD","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdamajor%2FBALD/lists"}