{"id":13467265,"url":"https://github.com/deep5050/radio-active","last_synced_at":"2026-04-03T17:03:43.194Z","repository":{"id":46798462,"uuid":"361989270","full_name":"deep5050/radio-active","owner":"deep5050","description":"Play any radios around the globe right from the terminal :zap:","archived":false,"fork":false,"pushed_at":"2026-01-22T19:27:14.000Z","size":614,"stargazers_count":569,"open_issues_count":24,"forks_count":31,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-01-23T10:36:42.612Z","etag":null,"topics":["audio","cli","commandline-interface","favorite-station","music","music-bot","music-player","online-radio","pyradio","pyradios","radio","radios","stations","stream-processing","streaming"],"latest_commit_sha":null,"homepage":"https://www.radio-browser.info/#/","language":"Python","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/deep5050.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"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},"funding":{"github":"deep5050","custom":["https://deep5050.github.io/payme","https://www.paypal.com/paypalme/deep5050"]}},"created_at":"2021-04-27T05:18:13.000Z","updated_at":"2026-01-22T15:43:47.000Z","dependencies_parsed_at":"2022-09-10T14:41:05.771Z","dependency_job_id":"bd1f834c-44b8-49c6-85a8-17e4492841ee","html_url":"https://github.com/deep5050/radio-active","commit_stats":{"total_commits":53,"total_committers":1,"mean_commits":53.0,"dds":0.0,"last_synced_commit":"30dd642c85cfd0b990342d5884bef55235a27e5e"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/deep5050/radio-active","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deep5050%2Fradio-active","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deep5050%2Fradio-active/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deep5050%2Fradio-active/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deep5050%2Fradio-active/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deep5050","download_url":"https://codeload.github.com/deep5050/radio-active/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deep5050%2Fradio-active/sbom","scorecard":{"id":331826,"data":{"date":"2025-08-11","repo":{"name":"github.com/deep5050/radio-active","commit":"d5096a675ecaab79b29e2d6a3e099f541ac6560b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":1,"reason":"Found 3/27 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/meme.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/meme.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/deep5050/radio-active/meme.yml/main?enable=pin","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"21 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2024-48 / GHSA-fj7x-q9j7-g6q6","Warn: Project is vulnerable to: PYSEC-2019-41 / GHSA-qfc5-mcwq-26q8","Warn: Project is vulnerable to: PYSEC-2014-14 / GHSA-652x-xj99-gmcc","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2014-13 / GHSA-cfj3-7x9c-4p3h","Warn: Project is vulnerable to: PYSEC-2018-28 / GHSA-x84v-xcm2-53pg","Warn: Project is vulnerable to: PYSEC-2013-22 / GHSA-27x4-j476-jp5f","Warn: Project is vulnerable to: PYSEC-2025-49 / GHSA-5rjg-fvgr-3xxf","Warn: Project is vulnerable to: GHSA-cx63-2mw6-8hw5","Warn: Project is vulnerable to: PYSEC-2022-43012 / GHSA-r9hx-vwmv-q579","Warn: Project is vulnerable to: GHSA-34jh-p97f-mpxf","Warn: Project is vulnerable to: PYSEC-2023-212 / GHSA-g4mx-q9vg-27p4","Warn: Project is vulnerable to: PYSEC-2023-207 / GHSA-gwvm-45gx-3cf8","Warn: Project is vulnerable to: PYSEC-2019-133 / GHSA-mh33-7rrq-662w","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v","Warn: Project is vulnerable to: PYSEC-2019-132 / GHSA-r64q-w8jr-g9qp","Warn: Project is vulnerable to: PYSEC-2023-192 / GHSA-v845-jxx5-vc9f","Warn: Project is vulnerable to: PYSEC-2020-148 / GHSA-wqvq-5m8c-6g24","Warn: Project is vulnerable to: PYSEC-2018-32 / GHSA-www2-v7xj-xrc6","Warn: Project is vulnerable to: PYSEC-2021-108"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 15 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T03:49:01.373Z","repository_id":46798462,"created_at":"2025-08-18T03:49:01.373Z","updated_at":"2025-08-18T03:49:01.373Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31364613,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T15:19:21.178Z","status":"ssl_error","status_checked_at":"2026-04-03T15:19:20.670Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["audio","cli","commandline-interface","favorite-station","music","music-bot","music-player","online-radio","pyradio","pyradios","radio","radios","stations","stream-processing","streaming"],"created_at":"2024-07-31T15:00:54.591Z","updated_at":"2026-04-03T17:03:43.173Z","avatar_url":"https://github.com/deep5050.png","language":"Python","readme":"\u003cdiv align=center\u003e\n\u003cp align=center\u003e\u003cimg src=https://user-images.githubusercontent.com/27947066/267328833-3e81a98e-2acb-4291-89cb-f3f9bed6c299.png width=250px\u003e\u003c/p\u003e\n\u003ch1 align=center\u003e RADIOACTIVE \u003c/h1\u003e\n\u003cp\u003e SEARCH - PLAY - RECORD - REPEAT \u003c/p\u003e\n\n\n\n\n\n\n\n\u003ca href=\"https://www.producthunt.com/posts/radio-active?utm_source=badge-featured\u0026utm_medium=badge\u0026utm_souce=badge-radio-active\" target=\"_blank\"\u003e\u003cimg src=\"https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=305380\u0026theme=dark\" alt=\"radio-active - Play more than 30K radio stations from your terminal | Product Hunt\" style=\"width: 250px; height: 54px;\" width=\"250\" height=\"54\" /\u003e\u003c/a\u003e\n\n \u003cp align=center \u003e\u003cimg align=center src=https://static.pepy.tech/personalized-badge/radio-active?period=total\u0026units=international_system\u0026left_color=black\u0026right_color=green\u0026left_text=TotalInstalls\u003e\u003c/p\u003e\n \u003cp\u003e\n\u003cimg width=\"500px\" alt=\"UPI\" src=\"https://raw.githubusercontent.com/deep5050/random-shits-happen-here/main/235618869-8c9d9bce-096d-469e-8f61-c29cc01eacc3%20(1).png\"\u003e\n\u003c/p\u003e\n\n\u003cp align=center\u003e\n\u003cimg align=center src=https://user-images.githubusercontent.com/27947066/271250790-291c02fa-e568-45c8-8097-72167a109b82.png  width=550px\u003e\n\u003chr\u003e\n\u003cimg alt=\"GitHub\" src=\"https://img.shields.io/github/license/deep5050/radio-active?style=for-the-badge\"\u003e\n\u003cimg alt=\"PyPI\" src=\"https://img.shields.io/pypi/v/radio-active?style=for-the-badge\"\u003e\n\u003cimg alt=\"PyPI - Downloads\" src=\"https://img.shields.io/pypi/dm/radio-active?style=for-the-badge\"\u003e\n\u003cimg alt=\"CodeFactor Grade\" src=\"https://img.shields.io/codefactor/grade/github/deep5050/radio-active/main?style=for-the-badge\"\u003e\n\u003ca href=https://discord.gg/53rfebFyqK\u003e\u003cimg alt=\"Discord\" src=\"https://img.shields.io/discord/847703568949051392?style=for-the-badge\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=center\u003e \u003ca href=https://www.youtube.com/watch?v=X-NfK5XbM90\u003e\u003cimg alt=\"YouTube Video Likes and Dislikes\" src=\"https://img.shields.io/youtube/likes/X-NfK5XbM90?style=social\u0026withDislikes\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp align=center\u003e \u003ca href=https://discord.gg/53rfebFyqK\u003e Join Discord Server \u003c/a\u003e\u003c/p\u003e\n\n\u003c/div\u003e\n\n# Demo\n\u003cp align=center\u003e \u003cimg src=https://github.com/deep5050/radio-active/assets/27947066/358d5c7f-c501-4335-873b-a9a1dc45cd69 width=600px\u003e \u003c/p\u003e\n\n\n### Features\n\n- [x] Supports more than 40K stations !! :radio:\n- [x] Record audio from live radio on demand :zap:\n- [x] Get song information on run-time 🎶\n- [x] Saves last station information\n- [x] Favorite stations :heart:\n- [x] Selection menu for favorite stations\n- [x] Supports user-added stations :wrench:\n- [x] Looks minimal and user-friendly\n- [x] Runs on Raspberry Pi\n- [x] Finds nearby stations\n- [x] Discovers stations by genre\n- [x] Discovers stations by language\n- [x] VLC, MPV player support\n- [x] Default config file\n- [x] Result limit (default 100)\n- [x] Sleep Timer (pomodoro) ⏲️\n- [x] History/Recently Played stations\n- [x] Scheduled Recording\n- [ ] I'm feeling lucky! Play Random stations\n\n\n\u003e See my progress ➡️ [here](https://github.com/users/deep5050/projects/5)\n\n🎊🎊 For developer's guides and detailed architecture refer to this wiki: https://deepwiki.com/deep5050/radio-active\n\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/deep5050/radio-active)\n\n### Why radioactive?\n\nWhile there are various CLI-based radio players like [PyRadio](https://github.com/coderholic/pyradio) and [TERA](https://github.com/shinokada/tera), Radioactive stands out for its simplicity. It's designed to work seamlessly right from the start. You don't need to be a hardcore Linux or Vim expert to enjoy radio stations with Radioactive. The goal of Radioactive is to offer a straightforward user interface that's easy to grasp and comes preconfigured, without unnecessary complexities.\n\n### In the Spotlight\n\nThe praise from YouTube channels and blogs underscores Radioactive's emergence as a top choice for radio enthusiasts. Its simple yet powerful features, make it a must-try application for radio lovers of all expertise levels. Discover the world of radio with ease – experience Radioactive today.\n\n1. See DistroTube YouTube channel talks about my app: https://www.youtube.com/watch?v=H7sf1RDFXpU\u0026pp=ygUYcmFkaW9hY3RpdmUgcGxheWVyIHJhZGlv\n2. Ubunlog: https://ubunlog.com/en/radio-activate-an-application-to-listen-to-the-radio-from-the-terminal/\n3. LinuxLinks: https://www.linuxlinks.com/radio-active-listen-radio-terminal/3/\n4. Official entry in the RadioBrowser API: [https://www.radio-browser.info/users](https://www.radio-browser.info/users#:~:text=Sources-,radio%2Dactive,-Sources)\n5. ThingsAndStuff: https://wiki.thingsandstuff.org/Streaming#:~:text=com/billniakas/bash_radio_gr-,radio%2Dactive,-https%3A//github.com\n6. Awesome-stars: https://arbal.github.io/awesome-stars/#:~:text=deep5050/radio%2Dactive%20%2D%20Play%20any%20radios%20around%20the%20globe%20right%20from%20the%20terminal%20%3Azap%3A\n7. OpenSourceAgenda: https://www.opensourceagenda.com/projects/my-awesome-stars#:~:text=deep5050/radio%2Dactive%20%2D%20Play%20any%20radios%20around%20the%20globe%20right%20from%20the%20terminal%20%3Azap%3A\n\n\n### Install\n\nSimply run: `pip3 install --upgrade radio-active`\n\nI recommend installing it using `pipx install radio-active`\n\n#### TODO:\n\n- [ ] Create deb, rpm and exe packages\n- [ ] Add it to various Linux distribution package repositories.\n- [ ] Add to scoop, chocolately\n\n### External Dependency\n\nIt needs [FFmpeg](https://ffmpeg.org/download.html) to be installed on your\nsystem in order to record the audio\n\non Ubuntu-based system \u003e= 20.04 Run\n\n```\nsudo apt update\nsudo apt install ffmpeg\n```\n\nFor other systems including Windows see the above link\n\n#### Installing FFmpeg\n\nFFmpeg is required for this program to work correctly. Install FFmpeg by following these steps:-\n\n- On Linux - \u003chttps://www.tecmint.com/install-ffmpeg-in-linux/\u003e\n- On Windows - \u003chttps://www.wikihow.com/Install-FFmpeg-on-Windows\u003e\n\n\n### Run\n\nSearch a station with `radio --search [STATION_NAME]` or simply `radio` :zap: to select from the favorite menu.\n\n### Tips\n\n1. Use a modern terminal emulator, otherwise the UI might break! (gets too ugly sometimes)\n2. On Windows, instead of the default Command Prompt, use the new Windows Terminal or web-based emulators like Hyper, Cmdr, Terminus, etc. for better UI\n3. Let the app run for at least 5 seconds (not a serious issue though, for better performance)\n\n\n### Demo\n\n#### Scheduled Recording\nTo schedule a recording:\n`radio --record-at \"18:30\" --uuid \"96444e20-0601-11e8-ae97-52543be04c81\" --filename \"evening_jazz\" --duration 30`\nThis will countdown until 18:30, then record the station for 30 minutes, and exit.\n\n### Demo\n\n\u003c!-- \u003ca align=center href=\"https://www.youtube.com/watch?v=X-NfK5XbM90\" target=\"_blank\"\u003e \u003cimg align=center src=https://user-images.githubusercontent.com/27947066/267328820-f7264e02-edc1-46f3-9548-5dfb50a6627d.jpg /\u003e \u003c/a\u003e\n\u003chr\u003e --\u003e\n\u003ca align=center href=\"https://asciinema.org/a/611668\" target=\"_blank\"\u003e\u003cimg src=\"https://asciinema.org/a/617580.svg\" /\u003e\u003c/a\u003e\n\n\n### Options\n\n\n| Options            | Note     | Description                                    | Default       | Values                 |\n| ------------------ | -------- | ---------------------------------------------- | ------------- | ---------------------- |\n| (No Option)        | Optional | Select a station from menu to play             | False         |                        |\n| `--search`, `-S`   | Optional | Station name                                   | None          |                        |\n| `--play`, `-P`     | Optional | A station from fav list or url for direct play | None          |                        |\n| `--country`, `-C`  | Optional | Discover stations by country code              | False         |                        |\n| `--state`          | Optional | Discover stations by country state             | False         |                        |\n| `--language`       | optional | Discover stations by                           | False         |                        |\n| `--tag`            | Optional | Discover stations by tags/genre                | False         |                        |\n| `--uuid`, `-U`     | Optional | ID of the station                              | None          |                        |\n| `--record` , `-R`  | Optional | Record a station and save to file              | False         |                        |\n| `--record-at`      | Optional | Start recording at a specific time (HH:MM)     | None          | HH:MM (24h)            |\n| `--duration`       | Optional | Duration of recording in minutes               | None          | Minutes                |\n| `--filename`, `-N` | Optional | Filename to used to save the recorded audio    | None          |                        |\n| `--filepath`       | Optional | Path to save the recordings                    | `~/radioactive/recordings` |                        |\n| `--filetype`, `-T` | Optional | Format of the recording                        | mp3           | `mp3`,`auto`           |\n| `--last`           | Optional | Play last played station                       | False         |                        |\n| `--random`         | Optional | Play a random station from favorite list       | False         |                        |\n| `--sort`           | Optional | Sort the result page                           | votes         |                        |\n| `--filter`         | Optional | Filter search results                          | None          |                        |\n| `--limit`          | Optional | Limit the # of results in the Discover table   | 100           |                        |\n| `--volume` , `-V`  | Optional | Change the volume passed into ffplay           | 80            | [0-100]                |\n| `--favorite`, `-F` | Optional | Add current station to fav list                | False         |                        |\n| `--add` , `-A`     | Optional | Add an entry to fav list                       | False         |                        |\n| `--list`, `-W`     | Optional | Show fav list                                  | False         |                        |\n| `--remove`         | Optional | Remove entries from favorite list              | False         |                        |\n| `--flush`          | Optional | Remove all the entries from fav list           | False         |                        |\n| `--history`        | Optional | Show recently played stations                  | False         |                        |\n| `--kill` , `-K`    | Optional | Kill background radios.                        | False         |                        |\n| `--loglevel`       | Optional | Log level of the program                       | Info          | `info`,  `warning`, `error`, `debug` |\n| `--player`         | Optional | Media player to use                            |  ffplay       | `vlc`, `mpv`, `ffplay`              |\n\n\u003chr\u003e\n\n\n\u003e [!NOTE]\n\u003e Once you save/play at least one station, invoking `radio` without any options will show a selection menu\n\n\u003e `--search`, `-S`: Search for a station online.\n\n\u003e `--play`, `-P`: You can pass an exact name from your favorite stations or alternatively pass any direct stream URL. This would bypass any user selection menu (useful when running from another script)\n\n\u003e `--uuid`,`-U`: When station names are too long or confusing (or multiple\n\u003e results for the same name) use the station's uuid to play. --uuid gets the\n\u003e greater priority than `--search`. Example: 96444e20-0601-11e8-ae97-52543be04c81. type `u` on the runtime command to get the UUID of a station.\n\n\u003e `--loglevel`,: Don't need to specify unless you are developing it. `info`, `warning`, `error`, `debug`\n\n\u003e `-F`: Add the current station to your favorite list. Example: `-F my_fav_1`\n\n\u003e `-A`: Add any stations to your list. You can add stations that are not currently available on our API. When adding a new station enter a name and direct URL to the audio stream.\n\n\u003e `--limit`: Specify how many search results should be displayed.\n\n\u003e `--filetype`: Specify the extension of the final recording file. default is `mp3`. you can provide `-T auto` to autodetect the codec and set file extension accordingly (in original form).\n\n\u003e `--record-at`: Schedule a recording to start at a specific local time (HH:MM 24-hour format). Requires `--uuid`, `--filename`, and `--duration` to be specified.\n\n\u003e `--duration`: Specify the recording duration in minutes. Required for scheduled recording.\n\n\n\n### Runtime Commands\n\nInput a command during the radio playback to perform an action. Available commands are:\n\n```\nEnter a command to perform an action: ?\n\nt/T/track: Current song name (track info)\nr/R/record: Record a station\nf/F/fav: Add station to favorite list\ns/S/search: Search for a new station\nn/N/next: Play next station from search results or favorite list\ntimer/sleep: Set a sleep timer (duration in minutes)\nrf/RF/recordfile: Specify a filename for the recording.\nh/H/help/?: Show this help message\nq/Q/quit: Quit radioactive\n```\n\n### Sort Parameters\n\nyou can sort the result page with these parameters:\n- `name` (default)\n- `votes` (based on user votes)\n- `codec`\n- `bitrate`\n- `lastcheckok` (active stations)\n- `lastchecktime` (recent active)\n- `clickcount` (total play count)\n- `clicktrend` (currently trending stations)\n- `random`\n\n### Filter Parameters\n\nFilter search results with `--filter`. Some possible expressions are\n- `--filter \"name=shows\"`\n- `--filter \"name=shows,talks,tv\"`\n- `--filter \"name!=news,shows\"`\n- `--filter \"country=in\"`\n- `--filter \"language=bengali,nepali\"`\n- `--filter \"bitrate\u003e64\"`\n- `--filter \"votes\u003c500\"`\n- `--filter \"codec=mp3\"`\n- `--filter \"tags!=rock,pop\"`\n\nAllowed operators are: \n\n-  `=`\n- `,`\n- `!=`\n- `\u003e`\n- `\u003c`\n- `\u0026`\n\nAllowed keys are: `name`, `country` (countrycode as value), `language`, `bitrate`, `votes`, `codec`, `tags`\n\nProvide multiple filters at one go, use `\u0026`\n\nA complex filter example: `--filter \"country!=CA\u0026tags!=islamic,classical\u0026votes\u003e500\"`\n\n\u003e [!NOTE]\n\u003e set `--limit` to a higher value while filtering results\n\n\n### Default Configs\n\nDefault configuration file is added into your home directory as `.radio-active-configs.ini`\n\n```bash\n[AppConfig]\nloglevel = info\nlimit = 100\nsort = votes\nfilter = none\nvolume = 80\nfilepath = /home/{user}/radioactive/recordings/\nfiletype = mp3\nplayer = ffplay\n```\n\n### Feature Configuration\n\nYou can enable or disable specific features by editing `~/radioactive/features.conf`.\nIf the file does not exist, it will be automatically created on the first run.\n\n```bash\nMINIMAL_FEATURE=false\nRECORDING_FEATURE=true\nTRACK_FEATURE=true\nSEARCH_FEATURE=true\nCYCLE_FEATURE=true\nINFO_FEATURE=true\nTIMER_FEATURE=true\nHISTORY_FEATURE=true\n```\n\n\u003e Setting `MINIMAL_FEATURE=true` will override and disable all other optional features.\n\n### Configuration Paths\nAll the data files are stored in a folder called `radioactive` under your user home directory.\n\n- **Configuration**:  `~/radioactive/config.ini`\n- **Features**: `~/radioactive/features.conf`\n- **Favorites**: `~/radioactive/alias_map`\n- **Last Station**: `~/radioactive/last_station`\n- **Recordings**: `~/radioactive/recordings`\n\nLegacy configuration files are automatically migrated to this new location on the first run.\n\n\u003e [!WARNING]\n\u003e Do NOT modify the keys, only change the values.\n\n### Bonus Tips\n\n1. when using `rf`: you can force the recording to be in mp3 format by adding an extension to the file name. Example \"talk-show.mp3\". If you don't specify any extension it should auto-detect. Example \"new_show\"\n\n2. You don't have to pass the exact option name, a portion of it will also work. for example `--sea` for `--search`, `--coun` for `--country`, `--lim` for `--limit`\n\n3. It's better to leave the `--filetype` as mp3 when you need to record something quickly. The autocodec takes a few milliseconds extra to determine the codec.\n\n### Changes\n\nsee [CHANGELOG](./CHANGELOG.md)\n\n### Community\n\nShare you favorite list with our community 🌐 ➡️ [Here](https://github.com/deep5050/radio-active/discussions/10)\n\n\u003e Your favorite list `alias_map` is under `~/radioactive/` directory.\n\n\n### Support\n\n\u003cp\u003e\n\u003ca href=https://deep5050.github.io/payme\u003eVisit my contribution page for more payment options.\n\u003c/p\u003e\n\u003cp align=center\u003e\u003ca href=\"https://www.buymeacoffee.com/deep5050\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" style=\"height: 40px !important;width: 117px !important;\" \u003e\u003c/a\u003e\u003c/p\u003e\n\n### Acknowledgements\n\n\u003cdiv\u003eIcons made by \u003ca href=\"https://www.freepik.com\" title=\"Freepik\"\u003eFreepik\u003c/a\u003e from \u003ca href=\"https://www.flaticon.com/\" title=\"Flaticon\"\u003ewww.flaticon.com\u003c/a\u003e\u003c/div\u003e\n\n\n\u003cdiv align=center\u003e\n\u003cimg src=https://github.com/deep5050/random-shits-happen-here/assets/27947066/83d08065-c209-4012-abb7-9c0aa64d761b width=400px \u003e\n\u003cp align=center\u003e Happy Listening \u003c/p\u003e\n\n\u003c/div\u003e\n\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.bjoli.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/48383?v=4?s=100\" width=\"100px;\" alt=\"Joe Smith\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJoe Smith\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/deep5050/radio-active/commits?author=Yasumoto\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/deep5050/radio-active/commits?author=Yasumoto\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-Yasumoto\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/salehjafarli\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/81613563?v=4?s=100\" width=\"100px;\" alt=\"salehjafarli\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003esalehjafarli\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/deep5050/radio-active/commits?author=salehjafarli\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/marvoh\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5451142?v=4?s=100\" width=\"100px;\" alt=\"marvoh\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003emarvoh\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/deep5050/radio-active/commits?author=marvoh\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/deep5050/radio-active/issues?q=author%3Amarvoh\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n\n![Alt](https://repobeats.axiom.co/api/embed/753765f73315fcacbddcacbabc672771d939ebcb.svg \"Repobeats analytics image\")\n\n\u003cdiv align=center\u003e\n\u003cp\u003e\n\u003cimg src=https://stars.medv.io/deep5050/radio-active.svg align=center\u003e\n\u003c/p\u003e\n\u003c/div\u003e\n","funding_links":["https://github.com/sponsors/deep5050","https://deep5050.github.io/payme","https://www.paypal.com/paypalme/deep5050","https://www.buymeacoffee.com/deep5050"],"categories":["Entertainment","Python","\u003ca name=\"music\"\u003e\u003c/a\u003eSound and music"],"sub_categories":["Music"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeep5050%2Fradio-active","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeep5050%2Fradio-active","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeep5050%2Fradio-active/lists"}