JAKYM, Just Another Konsole YouTube-Music. A command line based Youtube music player written in Python with spotify and youtube playlist support

Overview

Just Another Konsole YouTube-Music

Downloads

Overview

I wanted to create this application so that I could use the command line to play music easily. I often play games and listen to music simultaneously but using either Spotify or playing music in a browser takes much-needed resources from my CPU and RAM.

I have spent a lot of time looking through numerous CLI based music players. But they either required setting up lots of things, needed premium features to function or sometimes flat out didn't work even after tinkering with them for hours. Hence I thought that instead of looking for a solution, I should code it myself.

So I present to you JAKYM, Just Another Konsole YouTube-Music.

Screenshot

Usage

  • Run the program by using jakym command jakym or alternatively call it as a python module python -m jakym
  • This will open up the jakym command window.
  • Type spotify to play music using spotify playlist
  • Type youtube to play music using youtube playlist
  • Enter a songname in command window to search for song or just enter its youtube link to play directly from a link.
  • Jakym will queue the song once you type it and allow you to add the next song.
  • Type shuffle to shuffle your queue
  • The queue operates independent of the command window and plays the song on a separate thread.
  • To exit the command window and hence the application simply type exit.

Installation

To Update jakym simply run pip install --upgrade jakym

Installing ffmpeg

ffmpeg is required for this program to work correctly. Install ffmpeg by following these steps :-

Installing simpleaudio

simpleaudio is an optional pydub dependency, however as it is essential for proper working of jakym. Not installing simpleaudio gives major issues on both Linux and Windows.

On Linux

  • Install Dependencies by sudo apt-get install -y python3-dev libasound2-dev
  • Install with: pip install simpleaudio

On Windows

  • Download the .whl file of simpleaudio from here
  • Once downloaded, it can be installed using the following command : pip install package_name.whl

Installing jakym

  • Install by using pypi :-pip install jakym

  • Run using jakym command jakym or call it as a python module python -m jakym

Violla jakym is now installed!

Enjoy jakym

How It Works

  • The program starts and runs two threads, one to input music into the playlist and the other to iterate over the playlist and download the corresponding music and play it.
  • The youtube-dl library does most of the heavy lifting of both parsing links and downloading them into a suitable file format.
  • The pydub and simpleaudio libraries provide cross-platform audio playback without any issues but setting up simpleaudio on windows and Linux take a different approach.
  • The program runs until user specifically types exit.

Version history

Version Improvements
0.3.1 Bug fixes and Shuffle
0.3 Added Youtube Playlist support, Improved Readme
0.2 Added Spotify playlist support, Bug fixes
0.1.1 Improved documentation, Command line integration
0.1 Initial release

Copyright

Copyright (c) 2021 Mayank Jha

License - GNU GPL v3

Comments
  • How to properly exit?

    How to properly exit?

    I currently using ctrl-c to exit the application. I have to press it twice for some reason (maybe something to do with the threads). Is there a better way to exit?

    question 
    opened by lodenrogue 5
  • Simple and very useful!

    Simple and very useful!

    I was having some problems with spotify, and I was about to search for replacement players that doesn't require premium account, this program is perfect, I can play youtube songs and spotify songs! and through the command line!

    • I would suggest adding the ability to play a playlist with a single command, without the need to run the program then type spotify then type the playlist link, this will be very useful
    • adding skipping songs and looping playlist.

    if you accept PR I would be happy to try to contribute!

    enhancement 
    opened by mohad12211 3
  • errors with the playlist feauture

    errors with the playlist feauture

    Hi I have installed JAKYM with yay from AUR on a arch64 machine. While trying to play a playlist this happens: jakym -y https://www.youtube.com/playlist?list=PLz4zPQvMRasSJ6c6HXjm3qRSs2shSlqHg - by Lex Pinging Youtube Processing Song: 1/5 Traceback (most recent call last): File "/home/jirido/.local/bin/jakym", line 8, in sys.exit(main()) File "/home/jirido/.local/lib/python3.9/site-packages/jakym/main.py", line 190, in main playyoutube(args.y) File "/home/jirido/.local/lib/python3.9/site-packages/jakym/main.py", line 25, in playyoutube tempytplaylist,beg=downloader.ytplaylistparser(link,beg) File "/home/jirido/.local/lib/python3.9/site-packages/jakym/downloader.py", line 56, in ytplaylistparser for song in meta['entries']: UnboundLocalError: local variable 'meta' referenced before assignment

    If I try from within almost the same happens. ––––––––––––––––––––––––––––––––––––– - by Lex youtube Enter Playlist: https://www.youtube.com/playlist?list=PLz4zPQvMRasSJ6c6HXjm3qRSs2shSlqHg Pinging Youtube Processing Song: 1/5 Exception in thread Thread-2: Traceback (most recent call last): File "/usr/lib/python3.9/threading.py", line 973, in _bootstrap_inner self.run() File "/usr/lib/python3.9/threading.py", line 910, in run self._target(*self._args, **self._kwargs) File "/home/jirido/.local/lib/python3.9/site-packages/jakym/main.py", line 136, in queue playyoutube(ytplaylist) File "/home/jirido/.local/lib/python3.9/site-packages/jakym/main.py", line 25, in playyoutube tempytplaylist,beg=downloader.ytplaylistparser(link,beg) File "/home/jirido/.local/lib/python3.9/site-packages/jakym/downloader.py", line 56, in ytplaylistparser for song in meta['entries']: UnboundLocalError: local variable 'meta' referenced before assignment File "/usr/lib/python3.9/threading.py", line 910, in run self._target(*self._args, **self._kwargs) File "/home/jirido/.local/lib/python3.9/site-packages/jakym/main.py", line 136, in queue playyoutube(ytplaylist) File "/home/jirido/.local/lib/python3.9/site-packages/jakym/main.py", line 25, in playyoutube tempytplaylist,beg=downloader.ytplaylistparser(link,beg) File "/home/jirido/.local/lib/python3.9/site-packages/jakym/downloader.py", line 56, in ytplaylistparser for song in meta['entries']: UnboundLocalError: local variable 'meta' referenced before assignment

    Something strange also happens when trying to find a song. $ jakym bumblebee Downloading bumblebee song WARNING: Unable to download webpage: HTTP Error 429: Too Many Requests

    then it succeeds.

    If i try to play one song it works but maybe related to the playlist problem it also tells me: - by Lex https://www.youtube.com/watch?v=TJ8ws2dqqFg Downloading https://www.youtube.com/watch?v=TJ8ws2dqqFg song WARNING: Unable to download webpage: HTTP Error 429: Too Many Requests

    And if I search for a song - by Lex hooker Downloading hooker song WARNING: Unable to download webpage: HTTP Error 429: Too Many Requests ERROR: No video formats found; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see https://yt-dl.org/update on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output. Error downloading hooker song

    but then it manages anyway.. Done Downloading Currently Playing : Lex and jack (music video Do I do something wrong or am I missing some dependency?

    opened by Jirido 2
  • "the command 'pip' is not found... " in ubuntu 20.04

    When I type pip install simpleaudio or pip --version "the command 'pip' is not found... " Maybe why I never run python 2. Could you cover it in readme for new users that have this problem? Any workaround would be good too. Thank you for the create this!

    question 
    opened by developer-sp 1
  • make downloads an actual Temp directory

    make downloads an actual Temp directory

    currently downloads is created wherever the program is called from, this leads to sometimes issues like no proper cleanup in case of exception and also proves to be difficult to manage.

    opened by themayankjha 0
  • Control via MQTT

    Control via MQTT

    Hey, I've been using JAKYM to play music around the farm via a USB FM transmitter.

    To make it convenient to control from a phone, I threw together a simple Python wrapper to control it with a MQTT dashboard instead of having to SSH into the server.

    https://github.com/evranch/jakym_mqtt

    Wondering if you'd be interested in MQTT functionality in the main program, if so I could probably add it fairly easily and send you a PR.

    opened by evranch 2
  • [suggestion] change the volume and output device

    [suggestion] change the volume and output device

    (I'm not sure but I think these features improve QOL :D)

    Volume

    Adjust the music's volume. (not per session maybe put it in config file)

    Output Device Changer

    Some users might have more than 1 output device (or virtual devices) it'll be great to be able to change output device.

    opened by Monmcgt 1
Releases(0.4.1)
  • 0.4.1(Jun 28, 2022)

    Changelog:

    • Switched backend to yt-dlp to fix #16 as youtube-dl had slow downloads

    update using pip install --upgrade jakym

    check README for more.

    Thank you for using JAKYM :)

    Source code(tar.gz)
    Source code(zip)
  • 0.4.0(Jul 1, 2021)

    Changelog:

    • Playback controls #9
    • Bug Fixes

    Jakym now has playback controls!

    • Use play , pause, next, back to control the playback.
    • Use repeat all, repeat song and repeat offto control song repetition.
    • Use seek with an integer like 10 or -10 to control the current song.

    update using pip install --upgrade jakym

    check README for more.

    Thank you for using JAKYM :)

    Source code(tar.gz)
    Source code(zip)
  • v0.3.3(Jun 21, 2021)

    Changelog:

    • Better temporary file management #12
    • Playlist management support #2

    two new options save and load allow for saving and loading playlists. jakym -l command line argument.

    update using pip install --upgrade jakym

    check README for more.

    Thank you for using JAKYM :)

    Source code(tar.gz)
    Source code(zip)
A GUI Application that creates a Spotify Playlist from any year in the past, by just entering your preferred date

A GUI Application that creates a Spotify Playlist from any year in the past, by just entering your preferred date

David .K. Danso 1 Jan 17, 2022
Free and Open Source Group Voice chat music player for telegram ❤️ with button support youtube playback support

Free and Open Source Group Voice chat music player for telegram ❤️ with button support youtube playback support

Sehath Perera 1 Jan 8, 2022
PyMusic Player is a music player written in python3.

PyMusic Player is a music player written in python3. It harvests r

PythonSerious 2 Jan 30, 2022
A Python script to create customised Spotify playlists using the JSON, Spotipy Library and Spotify Web API, based on seed tracks in your history.

A Python script to create customised Spotify playlists using the JSON, Spotipy Library and Spotify Web API, based on seed tracks in your history.

Youngseo Park 1 Feb 1, 2022
A Python script to update Spotify Playlist data every 5 minutes.

Spotify Playlist Updater A Python script to update Spotify Playlist data every 5 minutes. Description An automatic playlist updater using Spotify API

null 6 Nov 24, 2022
Web app for spotify playlist management with last.fm integration

Music Tools Set of utility tools for Spotify and Last.fm. Built on my other libraries for Spotify (spotframework), Last.fm (fmframework) and interfaci

andy 3 Dec 14, 2022
Converts a text file of songs to a playlist on your Spotify account.

Playlist Converter Convert a text file of songs to a playlist on your Spotify account. Create your playlists faster instead of manually searching for

Priya Aggarwal 18 Dec 21, 2022
Spotify playlist anonymizer.

Spotify heavily personalizes auto-generated playlists like Song Radio based on the music you've listened to in the past. But sometimes you want to listen to Song Radio precisely to hear some fresh songs outside of your habitual listening realm!

Jakob de Maeyer 9 Nov 27, 2022
Techie Sneh 19 Dec 3, 2021
An interactive App to play with Spotify data, both from the Spotify Web API and from CSV datasets.

An interactive App to play with Spotify data, both from the Spotify Web API and from CSV datasets.

Caio Lang 3 Jan 24, 2022
Spotify Top Lists - get the current top lists of a user from the Spotify API and display them in a Flask app

Spotify Top Lists This is a simple script that will get the current top lists of a user from the Spotify API and display them in a Flask app. Requirem

Yasin 0 Oct 16, 2022
A really easy way to display your spotify listening status on spotify.

Spotify playing README A really easy way to display your spotify listening status on READMEs and Websites too! Demo Here's the embed from the site. Cu

Sunrit Jana 21 Nov 6, 2022
Youtube Music Playlist Organizer

Youtube Music Playlist Organizer, a simple Python application that uses ytmusicapi to help user edit their playlists and organize in other playlists.

Bedir Tapkan 1 Oct 24, 2021
Free and Open Source Channel/Group Voice chat music player for telegram ❤️ with button support Heroku Commands

ZeusMusic Requirements ?? FFmpeg NodeJS nodesource.com Python 3.7 or higher PyTgCalls MongoDB 2nd Telegram Account (needed for userbot) ?? Get SESSION

ZeusNetwork 4 Jan 3, 2022
YouTube playlist Files downloaded by FDM are not organized according to the original order on YouTube

Youtube-Playlist-File-Organizer YouTube playlist Files downloaded by Free Download Manager are not organized according to the original order on YouTub

David Mainoo 3 Dec 27, 2021
Telegram Group Calls Streaming bot with some useful features, written in Python with Pyrogram and Py-Tgcalls. Supporting platforms like Youtube, Spotify, Resso, AppleMusic, Soundcloud and M3u8 Links.

Yukki Music Bot Yukki Music Bot is a Powerful Telegram Music+Video Bot written in Python using Pyrogram and Py-Tgcalls by which you can stream songs,

Team Yukki 996 Dec 28, 2022
Music cog for discord bots. Supports YouTube, YoutubeMusic, SoundCloud and Spotify.

dismusic Music cog for discord bots. Supports YouTube, YoutubeMusic, SoundCloud and Spotify. Installation python3 -m pip install dismusic Usage from d

Md Shahriyar Alam 59 Jan 8, 2023
Telegram Voice Chat UserBot made with Pyrogram and MarshalX/tgcalls with playlist and Heroku support

Telegram Voice Chat UserBot A Telegram UserBot to Play Audio in Voice Chats. This is also the source code of the userbot which is being used for playi

Calls Music 164 Nov 12, 2022
Telegram Voice Chat Music Player UserBot Written with Pyrogram Smart Plugin and tgcalls

Telegram Voice Chat UserBot A Telegram UserBot to Play Audio in Voice Chats. This is also the source code of the userbot which is being used for playi

Dash Eclipse 7 May 21, 2022