# BangerBot — Get those bangers banging 🔥
[![Poetry](https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json)](https://python-poetry.org/)
![Python Versions](https://img.shields.io/pypi/pyversions/bangerbot)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![PyPI - Version](https://img.shields.io/pypi/v/bangerbot)](https://pypi.python.org/pypi/bangerbot)
![PyPI - Status](https://img.shields.io/pypi/status/bangerbot)
![PyPI - License](https://img.shields.io/pypi/l/bangerbot)
## What is this for?
Preparing a DJ set and digging for tracks car be very time consuming and cumbersome. This is a tool aimed for DJs to ease their workflow by providing them a simple utility to download their favorites ([FREE !](#disclaimer)) tracks.
It's as simple as this:
```bash
banger get https://soundcloud.com/fc_kabagar/kylie-on-jersey
```
When you're in a digging session, you might not want to spend time getting your tracks in-between each listening, but you still want to save them. Just write your tracks urls (Youtube or Soundcloud) inside your `~/Music/bangerbot/bangers.txt` file.
When you're ready, run a batch to catch'em all:
```bash
banger batch
```
When downloading your bangers, BangerBot will automatically put them either in `bangerbot/HQ-tracks/` (High Quality) or `bangerbot/LQ-tracks/` (Low Quality) depending on their audio format, ready to be imported to your Traktor, Rekordbox or Serato libraries:
![banberbot_tree](https://raw.githubusercontent.com/aliberts/BangerBot/master/assets/bangerbot_tree.png)
BangerBot will write the urls of all the downloaded tracks in `bangers_history.txt`.
## But... why?
BangerBot is essentially a wrapper around [scdl](https://github.com/flyingrub/scdl) and [yt-dlp](https://github.com/yt-dlp/yt-dlp). You could run a command with either of them and get the same result as with BangerBot. But you'd have to first decide which CLI tool to use depending on the source (Youtube or Soundcloud) and then remember their commands and all the options each time.
Here's what the equivalent of `banger get <youtube_url>` looks like with, e.g., yt-dlp:
```bash
yt-dlp --format bestaudio[ext=m4a] <youtube_url> -P <your_download_directory>
```
What BangerBot provides is mainly 2 things:
- A simple and consistent interface, because you don't care if that track is coming from SoundCloud or Youtube, you just want to `get` it.
- A workflow utility that helps you get straight to the point and reduce the hassle when preparing a DJ set.
## Installation
### 1. Install pipx
If you don't have it, install [pipx](https://github.com/pypa/pipx)
#### MacOS
```bash
brew install pipx
pipx ensurepath
```
#### Linux
```bash
python3 -m pip install --user pipx
python3 -m pipx ensurepath
```
### 2. Install BangerBot
```bash
pipx install bangerbot
```
### 3. Run init
Follow the prompt to setup the folder used by BangerBot:
```bash
banger init
```
This will create the bangerbot folder and install the `scdl`and `yt-dlp` dependencies via pipx if they are not found
## Use BangerBot
### get
Download a banger:
```bash
banger get https://soundcloud.com/fc_kabagar/kylie-on-jersey
```
### batch
Download multiples bangers at once.
Simply put your tracks url inside `bangers.txt` (1 url per line) and run a batch:
```bash
banger batch
```
The default location for `bangers.txt` is `~/Music/bangerbot/bangers.txt` but you can change it when setting up with `banger init` or you can point to any file you like using the `-f` option.
```bash
banger batch -f ~/Music/some_more_bangers.txt
```
## Supported urls
For now, BangerBot only supports SoundCloud and Youtube urls.
## Roadmap
- [x] Support Youtube and SoundCloud urls
- [x] `banger get`
- [x] `banger batch`
- [ ] Tests
- [ ] Improve history format: banger_name: short_url
- [ ] Shell completion
- [ ] `banger info` to get info about a track
- [ ] `banger history` to display history
- [ ] `banger where` to show the location of the bangerbot folder
- [ ] Safely clear banger.txt content after download
- [ ] Fetch metadata to downloaded tracks
## Disclaimer
Supporting music artists is very important to keep them bangers coming.
This tool is intended to get tracks when they are made freely available for download by the producer or as a last resort if you really can't get the track anywhere else.
Besides, tracks that are not freely available will be downloaded in `.mp3` or `.m4a` which might sound ok for you at home but probably won't on a larger sound system.
Do not use this tool to steal artists and music producers hard work, seriously. 🙏
Raw data
{
"_id": null,
"home_page": "https://github.com/aliberts/BangerBot",
"name": "bangerbot",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.10,<4.0",
"maintainer_email": "",
"keywords": "music,dj,poetry",
"author": "Simon Alibert",
"author_email": "alibert.sim@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/fc/7c/a73d5f139c7cfa28a2944d5d89d8a2168097b255e8191dcdf541b9120c82/bangerbot-0.1.4.tar.gz",
"platform": null,
"description": "# BangerBot \u2014 Get those bangers banging \ud83d\udd25\n\n[![Poetry](https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json)](https://python-poetry.org/)\n![Python Versions](https://img.shields.io/pypi/pyversions/bangerbot)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![PyPI - Version](https://img.shields.io/pypi/v/bangerbot)](https://pypi.python.org/pypi/bangerbot)\n![PyPI - Status](https://img.shields.io/pypi/status/bangerbot)\n![PyPI - License](https://img.shields.io/pypi/l/bangerbot)\n\n## What is this for?\n\nPreparing a DJ set and digging for tracks car be very time consuming and cumbersome. This is a tool aimed for DJs to ease their workflow by providing them a simple utility to download their favorites ([FREE !](#disclaimer)) tracks.\n\nIt's as simple as this:\n\n```bash\nbanger get https://soundcloud.com/fc_kabagar/kylie-on-jersey\n```\n\nWhen you're in a digging session, you might not want to spend time getting your tracks in-between each listening, but you still want to save them. Just write your tracks urls (Youtube or Soundcloud) inside your `~/Music/bangerbot/bangers.txt` file.\nWhen you're ready, run a batch to catch'em all:\n\n```bash\nbanger batch\n```\n\nWhen downloading your bangers, BangerBot will automatically put them either in `bangerbot/HQ-tracks/` (High Quality) or `bangerbot/LQ-tracks/` (Low Quality) depending on their audio format, ready to be imported to your Traktor, Rekordbox or Serato libraries:\n\n![banberbot_tree](https://raw.githubusercontent.com/aliberts/BangerBot/master/assets/bangerbot_tree.png)\n\nBangerBot will write the urls of all the downloaded tracks in `bangers_history.txt`.\n\n## But... why?\n\nBangerBot is essentially a wrapper around [scdl](https://github.com/flyingrub/scdl) and [yt-dlp](https://github.com/yt-dlp/yt-dlp). You could run a command with either of them and get the same result as with BangerBot. But you'd have to first decide which CLI tool to use depending on the source (Youtube or Soundcloud) and then remember their commands and all the options each time.\n\nHere's what the equivalent of `banger get <youtube_url>` looks like with, e.g., yt-dlp:\n\n```bash\nyt-dlp --format bestaudio[ext=m4a] <youtube_url> -P <your_download_directory>\n```\n\nWhat BangerBot provides is mainly 2 things:\n\n- A simple and consistent interface, because you don't care if that track is coming from SoundCloud or Youtube, you just want to `get` it.\n- A workflow utility that helps you get straight to the point and reduce the hassle when preparing a DJ set.\n\n## Installation\n\n### 1. Install pipx\n\nIf you don't have it, install [pipx](https://github.com/pypa/pipx)\n\n#### MacOS\n\n```bash\nbrew install pipx\npipx ensurepath\n```\n\n#### Linux\n\n```bash\npython3 -m pip install --user pipx\npython3 -m pipx ensurepath\n```\n\n### 2. Install BangerBot\n\n```bash\npipx install bangerbot\n```\n\n### 3. Run init\n\nFollow the prompt to setup the folder used by BangerBot:\n\n```bash\nbanger init\n```\n\nThis will create the bangerbot folder and install the `scdl`and `yt-dlp` dependencies via pipx if they are not found\n\n## Use BangerBot\n\n### get\n\nDownload a banger:\n\n```bash\nbanger get https://soundcloud.com/fc_kabagar/kylie-on-jersey\n```\n\n### batch\n\nDownload multiples bangers at once.\nSimply put your tracks url inside `bangers.txt` (1 url per line) and run a batch:\n\n```bash\nbanger batch\n```\n\nThe default location for `bangers.txt` is `~/Music/bangerbot/bangers.txt` but you can change it when setting up with `banger init` or you can point to any file you like using the `-f` option.\n\n```bash\nbanger batch -f ~/Music/some_more_bangers.txt\n```\n\n## Supported urls\n\nFor now, BangerBot only supports SoundCloud and Youtube urls.\n\n## Roadmap\n\n- [x] Support Youtube and SoundCloud urls\n- [x] `banger get`\n- [x] `banger batch`\n- [ ] Tests\n- [ ] Improve history format: banger_name: short_url\n- [ ] Shell completion\n- [ ] `banger info` to get info about a track\n- [ ] `banger history` to display history\n- [ ] `banger where` to show the location of the bangerbot folder\n- [ ] Safely clear banger.txt content after download\n- [ ] Fetch metadata to downloaded tracks\n\n## Disclaimer\n\nSupporting music artists is very important to keep them bangers coming.\nThis tool is intended to get tracks when they are made freely available for download by the producer or as a last resort if you really can't get the track anywhere else.\n\nBesides, tracks that are not freely available will be downloaded in `.mp3` or `.m4a` which might sound ok for you at home but probably won't on a larger sound system.\n\nDo not use this tool to steal artists and music producers hard work, seriously. \ud83d\ude4f\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Get those bangers banging \ud83d\udd25",
"version": "0.1.4",
"project_urls": {
"Homepage": "https://github.com/aliberts/BangerBot",
"Repository": "https://github.com/aliberts/BangerBot"
},
"split_keywords": [
"music",
"dj",
"poetry"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "8da32ab6de2468383a25da1790cbdb0288f7d3357e6ed5aca2a6eb2f80cdb06a",
"md5": "2a51ceec530fd854beeae092c8282691",
"sha256": "2549bbc787814d8560b28ae5e0a100f4af4c20856e8e31b09f5208338192a53e"
},
"downloads": -1,
"filename": "bangerbot-0.1.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2a51ceec530fd854beeae092c8282691",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10,<4.0",
"size": 7863,
"upload_time": "2023-11-09T15:15:47",
"upload_time_iso_8601": "2023-11-09T15:15:47.822635Z",
"url": "https://files.pythonhosted.org/packages/8d/a3/2ab6de2468383a25da1790cbdb0288f7d3357e6ed5aca2a6eb2f80cdb06a/bangerbot-0.1.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fc7ca73d5f139c7cfa28a2944d5d89d8a2168097b255e8191dcdf541b9120c82",
"md5": "c75a1c5a689ca7bb7de73122b738acb2",
"sha256": "a13bfec4728f22b5d70e3b9ae25499a7cc5b46fdf0bf6d8b0c3a2e9bfb0a6e3b"
},
"downloads": -1,
"filename": "bangerbot-0.1.4.tar.gz",
"has_sig": false,
"md5_digest": "c75a1c5a689ca7bb7de73122b738acb2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10,<4.0",
"size": 6788,
"upload_time": "2023-11-09T15:15:49",
"upload_time_iso_8601": "2023-11-09T15:15:49.437149Z",
"url": "https://files.pythonhosted.org/packages/fc/7c/a73d5f139c7cfa28a2944d5d89d8a2168097b255e8191dcdf541b9120c82/bangerbot-0.1.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-11-09 15:15:49",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "aliberts",
"github_project": "BangerBot",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "bangerbot"
}