Terminal based YouTube player and downloader

Overview

mps-youtube

Wheel Status

Features

  • Search and play audio/video from YouTube
  • Search tracks of albums by album title
  • Search and import YouTube playlists
  • Create and save local playlists
  • Download audio/video
  • Convert to mp3 & other formats (requires ffmpeg or avconv)
  • View video comments
  • Works with Python 3.x
  • Works with Windows, Linux and Mac OS X
  • Requires mplayer or mpv

This project is based on mps, a terminal based program to search, stream and download music. This implementation uses YouTube as a source of content and can play and download video as well as audio. The pafy library handles interfacing with YouTube.

FAQ / Troubleshooting common issues

Screenshots

Search

http://mps-youtube.github.io/mps-youtube/std-search.png

A standard search is performed by entering / followed by search terms.

You can play all of the search results by giving 1- as input

Repeating song/songs can be done with song_number[loop], for example: 1[3] or 4-6[2]

Local Playlists

http://mps-youtube.github.io/mps-youtube/local-playlist.png

Search result items can easily be stored in local playlists.

YouTube Playlists

http://mps-youtube.github.io/mps-youtube/playlist-search.png

YouTube playlists can be searched and played or saved as local playlists.

A playlist search is performed by // followed by search term.

Download

http://mps-youtube.github.io/mps-youtube/download.png

Content can be downloaded in various formats and resolutions.

Comments

http://mps-youtube.github.io/mps-youtube/comments.png

A basic comments browser is available to view YouTube user comments.

Music Album Matching

http://mps-youtube.github.io/mps-youtube/album-1.png

http://mps-youtube.github.io/mps-youtube/album-2.png

An album title can be specified and mps-youtube will attempt to find matches for each track of the album, based on title and duration. Type help search for more info.

Customisation

http://mps-youtube.github.io/mps-youtube/customisation2.png

Search results can be customised to display additional fields and ordered by various criteria.

This configuration was set up using the following commands:

set order views
set columns user:14 date comments rating likes dislikes category:9 views

Type help config for help on configuration options

Installation

Linux

Note: ~/.local/bin should be in your PATH for --user installs.

Using pip:

$ pip3 install --user mps-youtube

To install the experimental development version and try the latest features:

$ pip3 install --user -U git+https://github.com/mps-youtube/mps-youtube.git

Installing youtube-dl is highly recommended:

$ pip3 install --user youtube-dl
and to upgrade:
$ pip3 install --user youtube-dl --upgrade

(youtube-dl version dowloaded directly from youtube-dl website can't be used by mps-youtube. While the version in the repositories is usually outdated)

For mpris2 support, install the python bindings for dbus and gobject:

$ pip3 install --user dbus-python pygobject

Ubuntu

You can install mps-youtube directly from the official repositories:

[sudo] apt install mps-youtube

Arch Linux

You can install mps-youtube directly from the official repositories:

[sudo] pacman -S mps-youtube

macOS X

Install mpv (recommended player) with Homebrew:

brew cask install mpv

Alternately, you can install mplayer with MacPorts:

sudo port install MPlayer

Or with Homebrew:

brew install mplayer

Install mps-youtube using Homebrew:

brew install mps-youtube

Additional Windows installation notes

As an alternative to installing with pip, there is a standalone binary available. Go to Releases and download mpsyt-VERSION.exe under downloads for the latest release.

Install the python colorama module to get colors (optional):

pip3 install colorama

Mpsyt requires a player to use as a backend, with either mpv or mplayer supported. Mpv is the recommended option.

Mpv can be downloaded from https://mpv.srsfckn.biz/

Extract both mpv.exe and mpv.com to the same folder as mpsyt.exe or to a folder in the system path.

Alternately, mplayer can be downloaded from http://oss.netfarm.it/mplayer

Extract the mplayer.exe file, saving it to the folder that mpsyt.exe resides in (usually C:\PythonXX\Scripts\) or to a folder in the system path.

Run via Docker container

Using Docker, run with:

sudo docker run --device /dev/snd -it --rm --name mpsyt rothgar/mpsyt

Additional Docker notes

If you would like to locally build the container you can run the following steps

Check out this repo:

git clone https://github.com/mps-youtube/mps-youtube.git

Enter the directory and run docker build:

cd mps-youtube
sudo docker build -t mpsyt .

Now run the container interactively with:

sudo docker run -v /dev/snd:/dev/snd -it --rm --privileged --name mpsyt mpsyt

In order to have access to the local sound device (/dev/snd) the container needs to be privileged.

Upgrading

Upgrade pip installation:

[sudo] pip3 install mps-youtube --upgrade

Usage

mps-youtube is run on the command line using the command:

mpsyt

Enter h from within the program for help.

IRC

An IRC channel #mps-youtube for the project is available on Freenode (chat.freenode.net:6697). You can join directly by clicking this link.

How to Contribute

Contributions are welcomed! However, please check out the contributing page before making a contribution.

Issues
  • Mpris interface

    Mpris interface

    Implementing mpris would give us capability to control mpsyt remotely. Plus mpris is freedesktop standard, so lot of things would just work on most systems with mpsyt. I mean cool things like media keys support or integration to desktop (yes, it would allow mps to be controlled from GNOME default applet).

    Cons: it would bring dbus dependency and it's not working on windows by design (thus it would broke nothing for windows).

    I'm willing to implement this, if it would be accepted.

    opened by hrnr 54
  • Use the gdata 3 API (WIP)

    Use the gdata 3 API (WIP)

    This is a work in progress update to use gdata 3, so that mpsyt will actually work. Comment here if you have fixed something in your own repo and I will merge it into the branch. I think that is a little better than just commenting on a github issue and exchanging commit urls. #249 #254

    @np1 @jkatzwinkel @lol768

    opened by ids1024 51
  • Doesn't work at all (anymore, used to)

    Doesn't work at all (anymore, used to)

    Hello,

    Issue / Suggestion

    • rm -r ~/.config/mps-youtube/ to be sure
    • Launch and try any video
    • It doesn't work (no crash) and acts as if nothing happened (see video: https://a.pomf.space/vgoutmsjmdje.webm)
    • Trying to use the command line specified in the log works fine.

    log: https://a.pomf.space/dceoiuhvolip.log

    Your Environment

    mpsyt version      : 0.2.7.1
       notes           : released 6 July 2016
    pafy version       : 0.5.3.1 (youtube-dl backend)
    youtube-dl version : 2017.12.31
    Python version     : 3.5.4 (default, Dec  7 2017, 17:07:05)
    [GCC 6.4.0]
    Processor          : AMD FX(tm)-8350 Eight-Core Processor
    Machine type       : x86_64
    Architecture       : 64bit,
    Platform           : Linux-4.14.8-gentoo-r1-x86_64-AMD_FX-tm-8350_Eight-Core_Processor-with-gentoo-2.4.1
    sys.stdout.enc     : UTF-8
    default enc        : utf-8
    Config dir         : /home/user/.config/mps-youtube
    env:TERM           : st-256color
    env:SHELL          : /bin/zsh
    env:LANG           : en_US.utf8
    

    Gentoo GNU/Linux, using mpv 0.27, ffmpeg 3.4.1.

    opened by ghost 41
  • WIP Plugin API Code

    WIP Plugin API Code

    Initial Implementation of #314.

    I created this pull request to help organize development of this feature.

    As of this post, the feature does not work. The album search plugin can be loaded with pluginload Album Search, but mpsyt currently crashes when the album command is used.

    This will resolve #314.

    opened by ids1024 39
  • Mpris

    Mpris

    This pull request implements MPRIS2 remote interface.

    This would close #191.

    opened by hrnr 36
  • Error 403 Daily Limit Exceeded

    Error 403 Daily Limit Exceeded

    I'm getting the following error trying to search:

    Error 403 Daily Limit Exceeded. The quota will be reset at midnight Pacific Time (PT). You may monitor your quota usage and adjust limits in the API Console: https://console.developers.google.com/apis/api/translate/quotas?project=655912152876

    I use mps-youtube almost daily at my cafe and it is the first time I get it,

    Tried to search a similar bug but didn't found anything about it.

    opened by jdsampayo 35
  • Every search returned nothing.

    Every search returned nothing.

    I recently installed maps-youtube using home-brew. Since the python script uses python 3 syntax, while I only installed python 2.7.10, some problems were caused. But even after solving these problems, the mpsyt returned nothing for every search, including searches for music, linux, etc. The output of mpsyt --version is

    mpsyt version : 0.2.5 notes : released 1 June 2015 pafy version : 0.3.74 Python version : 2.7.10 (default, Jun 10 2015, 19:42:47) [GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] Processor : i386 Machine type : x86_64 Architecture : 64bit, Platform : Darwin-14.4.0-x86_64-i386-64bit sys.stdout.enc : UTF-8 default enc : ascii env:TERM : xterm-256color env:SHELL : /bin/bash

    And the output of the command python -c "import urllib2;print(len(urllib2.urlopen('https://youtube.com').read()))" is: 367645, so it doesn't seem to be a certificate issue, but I am not sure either. I have reinstalled openssl, but the result seems not changed. Is this because of the python versions, or due to another issue? Thanks for any help in advance.

    opened by JSDurand 34
  • Make portable playlists

    Make portable playlists

    One problem that I face when making playlists on YouTube is that after spending time to make a playlist, sometimes the videos disappear (video made private, video deleted, etc.) without leaving behind any information about the deleted item.

    I think this can be overcome by MPS by doing the following:

    1. Add config options to save playlists to a desired location
    2. Make playlists portable by writing them in yaml with enough information about the item, so that in case the original video is deleted, one at least has enough information about it to add a new source url. Also, syncing across computer will become feasible.
    opened by icymist 31
  • I quit!

    I quit!

    Sadly I won't have enough time to give to open source projects for the foreseeable future. I don't even have time to review the pull requests.

    Is anyone interested in taking the lead on this project?

    I would be glad to add a collaborator here, otherwise it can continue in a fork.

    If you're interested let me know here or by email.

    Thanks!

    opened by np1 29
  • Refactor player.py

    Refactor player.py

    This is my take on refactoring player.py. This is obviously not complete. I implemented mpv player and wanted some feedback before going on. Any suggestions are appreciated. @ids1024 @Razesdark @hrnr @ritiek

    There are some changes to be made in mpris.py to accommodate the change in player.py. It should be easy. Other than that no major changes won't be needed in files other than player.py(I think).

    opened by vn-ki 29
  • Exception in thread-2:

    Exception in thread-2:

        Sigala - Sweet Lovin' ft. Bryn Christopher (Official Video) [03:35]
                                                                                                                                       [1/15>
    Exception in thread Thread-2:
    Traceback (most recent call last):
      File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
        self.run()
      File "/usr/lib/python3.8/threading.py", line 870, in run
        self._target(*self._args, **self._kwargs)
      File "/home/linuxmint/.local/lib/python3.8/site-packages/mps_youtube/streams.py", line 180, in _preload
        streamlist = get(song)
      File "/home/linuxmint/.local/lib/python3.8/site-packages/mps_youtube/streams.py", line 51, in get
        p = util.get_pafy(vid, force=force, callback=callback)
      File "/home/linuxmint/.local/lib/python3.8/site-packages/mps_youtube/util.py", line 205, in get_pafy
        p = pafy.new(ytid, callback=callback_fn)
      File "/usr/lib/python3/dist-packages/pafy/pafy.py", line 122, in new
        return Pafy(url, basic, gdata, size, callback, ydl_opts)
      File "/usr/lib/python3/dist-packages/pafy/backend_youtube_dl.py", line 29, in __init__
        super(YtdlPafy, self).__init__(*args, **kwargs)
      File "/usr/lib/python3/dist-packages/pafy/backend_shared.py", line 95, in __init__
        self._fetch_basic()
      File "/usr/lib/python3/dist-packages/pafy/backend_youtube_dl.py", line 51, in _fetch_basic
        self._dislikes = self._ydl_info['dislike_count']
    KeyError: 'dislike_count'
    Exception in thread Thread-1:
    Traceback (most recent call last):
      File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
        self.run()
      File "/usr/lib/python3.8/threading.py", line 870, in run
        self._target(*self._args, **self._kwargs)
      File "/home/linuxmint/.local/lib/python3.8/site-packages/mps_youtube/streams.py", line 180, in _preload
        streamlist = get(song)
      File "/home/linuxmint/.local/lib/python3.8/site-packages/mps_youtube/streams.py", line 51, in get
        p = util.get_pafy(vid, force=force, callback=callback)
      File "/home/linuxmint/.local/lib/python3.8/site-packages/mps_youtube/util.py", line 205, in get_pafy
        p = pafy.new(ytid, callback=callback_fn)
      File "/usr/lib/python3/dist-packages/pafy/pafy.py", line 122, in new
        return Pafy(url, basic, gdata, size, callback, ydl_opts)
      File "/usr/lib/python3/dist-packages/pafy/backend_youtube_dl.py", line 29, in __init__
        super(YtdlPafy, self).__init__(*args, **kwargs)
      File "/usr/lib/python3/dist-packages/pafy/backend_shared.py", line 95, in __init__
        self._fetch_basic()
      File "/usr/lib/python3/dist-packages/pafy/backend_youtube_dl.py", line 51, in _fetch_basic
        self._dislikes = self._ydl_info['dislike_count']
    KeyError: 'dislike_count'
    Traceback (most recent call last):                                                                                                                
      File "/home/linuxmint/.local/bin/mpsyt", line 8, in <module>
        sys.exit(main.main())
      File "/home/linuxmint/.local/lib/python3.8/site-packages/mps_youtube/main.py", line 148, in main
        if matchfunction(i.function, i.regex, userinput):
      File "/home/linuxmint/.local/lib/python3.8/site-packages/mps_youtube/main.py", line 65, in matchfunction
        func(*matches)
      File "/home/linuxmint/.local/lib/python3.8/site-packages/mps_youtube/commands/play.py", line 100, in play
        play_range(songlist, shuffle, repeat, override)
      File "/home/linuxmint/.local/lib/python3.8/site-packages/mps_youtube/player.py", line 49, in play_range
        video, stream = stream_details(song, override=override, softrepeat=softrepeat)
      File "/home/linuxmint/.local/lib/python3.8/site-packages/mps_youtube/player.py", line 159, in stream_details
        streams.get(song, force=failcount, callback=screen.writestatus)
      File "/home/linuxmint/.local/lib/python3.8/site-packages/mps_youtube/streams.py", line 51, in get
        p = util.get_pafy(vid, force=force, callback=callback)
      File "/home/linuxmint/.local/lib/python3.8/site-packages/mps_youtube/util.py", line 205, in get_pafy
        p = pafy.new(ytid, callback=callback_fn)
      File "/usr/lib/python3/dist-packages/pafy/pafy.py", line 122, in new
        return Pafy(url, basic, gdata, size, callback, ydl_opts)
      File "/usr/lib/python3/dist-packages/pafy/backend_youtube_dl.py", line 29, in __init__
        super(YtdlPafy, self).__init__(*args, **kwargs)
      File "/usr/lib/python3/dist-packages/pafy/backend_shared.py", line 95, in __init__
        self._fetch_basic()
      File "/usr/lib/python3/dist-packages/pafy/backend_youtube_dl.py", line 51, in _fetch_basic
        self._dislikes = self._ydl_info['dislike_count']
    KeyError: 'dislike_count'
    
    opened by rbjnazz 0
  • KeyError: 'dislike_count' in pafy

    KeyError: 'dislike_count' in pafy

    I think the API no longer returns dislike counts (given the recent Youtube fiasco with removing dislikes...), and now pafy will throw an exception when playing a video.

    Traceback (most recent call last):
      File "/usr/local/Cellar/[email protected]/3.9.8/Frameworks/Python.framework/Versions/3.9/lib/python3.9/threading.py", line 973, in _bootstrap_inner
        self.run()
      File "/usr/local/Cellar/[email protected]/3.9.8/Frameworks/Python.framework/Versions/3.9/lib/python3.9/threading.py", line 910, in run
        self._target(*self._args, **self._kwargs)
      File "/usr/local/lib/python3.9/site-packages/mps_youtube/streams.py", line 180, in _preload
        streamlist = get(song)
      File "/usr/local/lib/python3.9/site-packages/mps_youtube/streams.py", line 51, in get
        p = util.get_pafy(vid, force=force, callback=callback)
      File "/usr/local/lib/python3.9/site-packages/mps_youtube/util.py", line 221, in get_pafy
        p = pafy.new(ytid, callback=callback_fn)
      File "/usr/local/lib/python3.9/site-packages/pafy/pafy.py", line 124, in new
        return Pafy(url, basic, gdata, size, callback, ydl_opts=ydl_opts)
      File "/usr/local/lib/python3.9/site-packages/pafy/backend_youtube_dl.py", line 31, in __init__
        super(YtdlPafy, self).__init__(*args, **kwargs)
      File "/usr/local/lib/python3.9/site-packages/pafy/backend_shared.py", line 97, in __init__
        self._fetch_basic()
      File "/usr/local/lib/python3.9/site-packages/pafy/backend_youtube_dl.py", line 54, in _fetch_basic
        self._dislikes = self._ydl_info['dislike_count']
    KeyError: 'dislike_count'
    

    Issue / Suggestion

    The easiest fix is to go into site-packages/pafy/backend_youtube_dl.py and comment out this line

    #self._dislikes = self._ydl_info['dislike_count']
    

    Your Environment

    mpsyt version      : 0.2.8
       notes           : released 17 February 2018
    pafy version       : 0.5.5 (youtube-dl backend)
    youtube-dl version : 2021.06.06
    Python version     : 3.9.8 (main, Nov 10 2021, 09:21:22) 
    [Clang 13.0.0 (clang-1300.0.29.3)]
    Processor          : i386
    Machine type       : x86_64
    Architecture       : 64bit, 
    Platform           : macOS-11.4-x86_64-i386-64bit
    sys.stdout.enc     : utf-8
    default enc        : utf-8
    Config dir         : /Users/twong/.config/mps-youtube
    env:TERM           : xterm-256color
    env:SHELL          : /bin/zsh
    env:LANG           : en_US.UTF-8
    
    mpv 0.34.0 Copyright © 2000-2021 mpv/MPlayer/mplayer2 projects
     built on Tue Nov 16 13:41:55 UTC 2021
    FFmpeg library versions:
       libavutil       56.70.100
       libavcodec      58.134.100
       libavformat     58.76.100
       libswscale      5.9.100
       libavfilter     7.110.100
       libswresample   3.9.100
    FFmpeg version: 4.4.1
    
    opened by snyamwong 1
  • error with new api key

    error with new api key

    HI, I can search without issues, but when trying to reproduce a video I got the following message:

    Problem playing last item: "video name here" kdnWG7qqPoo: Youtube says: Unable to extract video data 
    ERROR: Z_hLJ4zMyVs: YouTube said: Unable to extract video data
    

    Other codes appear on other videos...

    Your Environment

    mpsyt version      : 0.2.8
       notes           : released 17 February 2018
    pafy version       : 0.5.5 (youtube-dl backend)
    youtube-dl version : 2020.06.16.1
    Python version     : 3.8.10 (default, Sep 28 2021, 16:10:42) 
    [GCC 9.3.0]
    Processor          : x86_64
    Machine type       : x86_64
    Architecture       : 64bit, ELF
    Platform           : Linux-5.14.10-xanmod1-x86_64-with-glibc2.29
    sys.stdout.enc     : utf-8
    default enc        : utf-8
    Config dir         : /home/kira/.config/mps-youtube
    env:TERM           : xterm-256color
    env:SHELL          : /bin/bash
    env:LANG           : en_US.UTF-8
    
    
    OS: Ubuntu 20.04.3 LTS x86_64 
    Host: HP Pavilion Laptop 15-cs3xxx 
    Kernel: 5.14.10-xanmod1 
    Uptime: 31 mins 
    Packages: 4064 (dpkg), 11 (snap) 
    Shell: bash 5.0.17 
    Resolution: 1920x1080 
    DE: GNOME 
    WM: Mutter 
    WM Theme: RR-Jet -Black1.4v 
    Theme: Black-n-White-GTK [GTK2/3] 
    Icons: suru-plus-aspromauros-1.6 [GTK2/3] 
    Terminal: guake 
    CPU: Intel i7-1065G7 (8) @ 3.900GHz 
    GPU: Intel Iris Plus Graphics G7 
    GPU: NVIDIA GeForce GTX 1050 3 GB Max-Q 
    Memory: 5010MiB / 11759MiB 
    
    mpv 0.32.0 Copyright © 2000-2020 mpv/MPlayer/mplayer2 projects
     built on UNKNOWN
    ffmpeg library versions:
       libavutil       56.31.100
       libavcodec      58.54.100
       libavformat     58.29.100
       libswscale      5.5.100
       libavfilter     7.57.100
       libswresample   3.5.100
    ffmpeg version: 4.2.4-1ubuntu0.1
    
    opened by kurokirasama 8
  • ERROR: kN09y8oiTrA: YouTube said: Unable to extract video data

    ERROR: kN09y8oiTrA: YouTube said: Unable to extract video data

    Issue / Suggestion

    The following message appears when performing a search

    ERROR: kN09y8oiTrA: YouTube said: Unable to extract video data

    I already cleared the cache, and reinstalled/upgraded youtube-dl via pip3

    Your Environment

    Running Mac OS Big Sur version 11.5.2 (20G95)

    mpsyt version      : 0.2.8
       notes           : released 17 February 2018
    pafy version       : 0.5.5 (youtube-dl backend)
    youtube-dl version : 2020.05.03
    Python version     : 3.9.7 (default, Sep  3 2021, 12:37:55) 
    [Clang 12.0.5 (clang-1205.0.22.9)]
    Processor          : i386
    Machine type       : x86_64
    Architecture       : 64bit, 
    Platform           : macOS-11.5.2-x86_64-i386-64bit
    sys.stdout.enc     : utf-8
    default enc        : utf-8
    Config dir         :  ~/.config/mps-youtube
    env:TERM           : xterm-256color
    env:SHELL          : /bin/bash
    env:LANG           : fr_CH.UTF-8
    
    opened by bvvt 1
  • Crashing when perfomrming a playlist search

    Crashing when perfomrming a playlist search

    Issue / Suggestion

    The following message apears when I perform a playlist search:

    Searching playlists for swag                                                                                                                             
    Traceback (most recent call last):
      File "/usr/local/Cellar/mps-youtube/0.2.8_11/libexec/lib/python3.9/site-packages/mps_youtube/main.py", line 65, in matchfunction
        func(*matches)
      File "/usr/local/Cellar/mps-youtube/0.2.8_11/libexec/lib/python3.9/site-packages/mps_youtube/commands/search.py", line 386, in pl_search
        g.content = content.generate_playlist_display()
      File "/usr/local/Cellar/mps-youtube/0.2.8_11/libexec/lib/python3.9/site-packages/mps_youtube/content.py", line 155, in generate_playlist_display
        updated = yt_datetime(x.get('updated'))[1]
      File "/usr/local/Cellar/mps-youtube/0.2.8_11/libexec/lib/python3.9/site-packages/mps_youtube/util.py", line 315, in yt_datetime
        time_obj = time.strptime(yt_date_time, "%Y-%m-%dT%H:%M:%S.%fZ")
      File "/usr/local/Cellar/[email protected]/3.9.7/Frameworks/Python.framework/Versions/3.9/lib/python3.9/_strptime.py", line 562, in _strptime_time
        tt = _strptime(data_string, format)[0]
      File "/usr/local/Cellar/[email protected]/3.9.7/Frameworks/Python.framework/Versions/3.9/lib/python3.9/_strptime.py", line 349, in _strptime
        raise ValueError("time data %r does not match format %r" %
    ValueError: time data '2020-08-31T15:32:25Z' does not match format '%Y-%m-%dT%H:%M:%S.%fZ'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/usr/local/bin/mpsyt", line 33, in <module>
        sys.exit(load_entry_point('mps-youtube==0.2.8', 'console_scripts', 'mpsyt')())
      File "/usr/local/Cellar/mps-youtube/0.2.8_11/libexec/lib/python3.9/site-packages/mps_youtube/main.py", line 148, in main
        if matchfunction(i.function, i.regex, userinput):
      File "/usr/local/Cellar/mps-youtube/0.2.8_11/libexec/lib/python3.9/site-packages/mps_youtube/main.py", line 80, in matchfunction
        content.generate_songlist_display(zeromsg=g.message)
      File "/usr/local/Cellar/mps-youtube/0.2.8_11/libexec/lib/python3.9/site-packages/mps_youtube/content.py", line 74, in generate_songlist_display
        return generate_playlist_display()
      File "/usr/local/Cellar/mps-youtube/0.2.8_11/libexec/lib/python3.9/site-packages/mps_youtube/content.py", line 155, in generate_playlist_display
        updated = yt_datetime(x.get('updated'))[1]
      File "/usr/local/Cellar/mps-youtube/0.2.8_11/libexec/lib/python3.9/site-packages/mps_youtube/util.py", line 315, in yt_datetime
        time_obj = time.strptime(yt_date_time, "%Y-%m-%dT%H:%M:%S.%fZ")
      File "/usr/local/Cellar/[email protected]/3.9.7/Frameworks/Python.framework/Versions/3.9/lib/python3.9/_strptime.py", line 562, in _strptime_time
        tt = _strptime(data_string, format)[0]
      File "/usr/local/Cellar/[email protected]/3.9.7/Frameworks/Python.framework/Versions/3.9/lib/python3.9/_strptime.py", line 349, in _strptime
        raise ValueError("time data %r does not match format %r" %
    ValueError: time data '2020-08-31T15:32:25Z' does not match format '%Y-%m-%dT%H:%M:%S.%fZ'
    

    Your Environment

    mpsyt --version info:

    mpsyt version      : 0.2.8
       notes           : released 17 February 2018
    pafy version       : 0.5.5 (youtube-dl backend)
    youtube-dl version : 2020.05.03
    Python version     : 3.9.7 (default, Sep  3 2021, 12:37:55) 
    [Clang 12.0.5 (clang-1205.0.22.9)]
    Processor          : i386
    Machine type       : x86_64
    Architecture       : 64bit, 
    Platform           : macOS-11.5.2-x86_64-i386-64bit
    sys.stdout.enc     : utf-8
    default enc        : utf-8
    Config dir         : ~/.config/mps-youtube
    env:TERM           : xterm-256color
    env:SHELL          : /bin/bash
    env:LANG           : fr_CH.UTF-8
    

    Running Mac OS Big Sur 11.5.2

    Using mplayer 1.4

    opened by bvvt 1
  • Content

    Content

    Add adjustable quality of video to optimize data usage

    opened by badheshchauhan 1
  • mpv player script file isn't read when  video is streamed.

    mpv player script file isn't read when video is streamed.

    Issue / Suggestion

    Your Environment

    opened by Pawan-666 1
  • yt-dl is out of date and will no longer function

    yt-dl is out of date and will no longer function

    Issue / Suggestion

    Suggest utilizing the version of yt-dl provided at https://ytdl-org.github.io/youtube-dl/download.html The version packaged by pip3 is out of date and is no longer functional.

    opened by josephdighton 0
  • use dict.get(

    use dict.get("foo") instead of dict["foo"]

    In order to prevent following catastrophic error that I often encounter.

    Traceback (most recent call last):                                                                                                                                                                             
      File "/usr/bin/mpsyt", line 33, in <module>
        sys.exit(load_entry_point('mps-youtube==0.2.8', 'console_scripts', 'mpsyt')())
      File "/usr/lib/python3.9/site-packages/mps_youtube/main.py", line 153, in main
        if matchfunction(i.function, i.regex, userinput):
      File "/usr/lib/python3.9/site-packages/mps_youtube/main.py", line 70, in matchfunction
        func(*matches)
      File "/usr/lib/python3.9/site-packages/mps_youtube/commands/play.py", line 121, in play_all
        play(options, "1-" + str(len(g.model)))
      File "/usr/lib/python3.9/site-packages/mps_youtube/commands/play.py", line 102, in play
        g.PLAYER_OBJ.play(songlist, shuffle, repeat, override)
      File "/usr/lib/python3.9/site-packages/mps_youtube/player.py", line 79, in play
        self._playsong()
      File "/usr/lib/python3.9/site-packages/mps_youtube/player.py", line 138, in _playsong
        self._launch_player()
      File "/usr/lib/python3.9/site-packages/mps_youtube/player.py", line 298, in _launch_player
        self.launch_player(cmd)
      File "/usr/lib/python3.9/site-packages/mps_youtube/players/mpv.py", line 135, in launch_player
        self._player_status(self.songdata + "; ", self.song.length)
      File "/usr/lib/python3.9/site-packages/mps_youtube/players/mpv.py", line 188, in _player_status
        if resp['data'] is not None:
    KeyError: 'data'
    
    opened by tcaxle 1
  • How to Ignore non-youtube link when Youtube video data is fetched through a loop?

    How to Ignore non-youtube link when Youtube video data is fetched through a loop?

    I'm fetching Youtube link (single video) data (such as Duration, Title) with pafy from a column (example: B4:B100). There are total 12 Youtube links and 1 non-youtube link. in the middle. pafy stops if it finds a non-youtube link. Is there any way of ignoring non-youtube links?

    My Python Code -

    It works perfectly if there are only Youtube links

    from gspread.models import Worksheet
    from oauth2client.service_account import ServiceAccountCredentials
    import gspread
    import pafy
    import pprint
    import youtube_dl
    
    scope = ['https://www.googleapis.com/auth/spreadsheets.readonly','https://www.googleapis.com/auth/spreadsheets','https://www.googleapis.com/auth/drive.readonly','https://www.googleapis.com/auth/drive.file','https://www.googleapis.com/auth/drive']
    creds = ServiceAccountCredentials.from_json_keyfile_name("C:\Python39\MyScripts\ptkou\ptkouapi.json",scope)
    client = gspread.authorize(creds)
    
    #defining sheet
    sheet = client.open("Productivity Tracker").worksheet("Template")
    
    
    #getting youtube links
    SheetLinks = sheet.get('Links')
    flat_SheetLinks =[]
    for i in SheetLinks:
        for j in i:
            flat_SheetLinks.append(j)
    
    #pafy implementation
    flat_duration_out = []
    for x in flat_SheetLinks:
        url =x
        video = pafy.new(url)
        title_out = video.title
        duration_out = video.duration
        author_out = video.author
        flat_duration_out.append(duration_out)
        
        #Print Values (Loop)
        print(url)
        print("Title : " + title_out)
        print("Duration : " + duration_out)
        print("Channel : " + author_out)
    
    #updating cells with fetched data
    cell_range = sheet.range('F4:F102')
    cell_values = flat_duration_out
    
    for y, val in enumerate(cell_values):
        cell_range[y].value = val
    sheet.update_cells(cell_range)
    
    

    In the Terminal of VS Code-

    pafy stops if it sees a non-youtube link and the sheet does no get updated with the fetched data

    PS C:\Python39\MyScripts> & C:/Python39/python.exe c:/Python39/MyScripts/ptkou/ptkou.py https://www.youtube.com/watch?v=ddf5Z0aQPzY Title : Python Gspread Tutorial + How To Use the Google Sheets API with Python Duration : 00:13:18 Channel : Frank Mularcik https://www.youtube.com/watch?v=JXlr21jv32Q Title : Most Frequently Asked Questions on Covid19 Vaccine | Dr. Vinoth Kumar | CARE Hospitals Duration : 00:02:59 Channel : CARE Hospitals https://www.youtube.com/watch?v=HFqf6aKdOC0 Title : Why doesn’t the Leaning Tower of Pisa fall over? - Alex Gendler Duration : 00:05:06 Channel : TED-Ed https://www.youtube.com/watch?v=kd2KEHvK-q8 Title : The Vanishing of Flight 370 Duration : 00:24:54 Channel : LEMMiNO https://www.youtube.com/watch?v=mLW6ZOKbq3Y Title : The Hijacking Of Flight 8969 | Mayday S2 EP3 | Wonder Duration : 00:51:41 Channel : Wonder https://www.youtube.com/watch?v=c16hr60PLT4 Title : Cutting Water in Half With a Superhydrophobic knife Duration : 00:00:59 Channel : Action Lab Shorts https://www.youtube.com/watch?v=x2w-tbUBgN4 Title : Darts World Championship 1990 Paul Lim Perfect Leg 9 Darter Duration : 00:02:04 Channel : BDODarts https://www.youtube.com/watch?v=tXh6Ev3oTqU Title : Now You See Me 2 "Hidden Card" Scene [HD] Jesse Eisenberg, Dave Franco, Woody Harrelson Duration : 00:04:44 Channel : We Got This Covered https://www.youtube.com/watch?v=xaiJPBfSjdw Title : Dog reacts to her Cancer test results. Duration : 00:00:44 Channel : Dani Girl https://www.youtube.com/watch?v=lSnXQL94R60 Title : तेरी प्यारी प्यारी दो अखिया dj mix song 2019 mix by parshant fandan Duration : 00:03:14 Channel : Prashant Fandan https://www.youtube.com/watch?v=Wrv_XQ92YQM Title : Should Pedophilia Be Accepted? Duration : 00:07:02 Channel : Answers in Genesis Traceback (most recent call last): File "c:\Python39\MyScripts\ptkou\ptkou.py", line 27, in <module> video = pafy.new(url) File "C:\Python39\lib\site-packages\pafy\pafy.py", line 124, in new return Pafy(url, basic, gdata, size, callback, ydl_opts=ydl_opts) File "C:\Python39\lib\site-packages\pafy\backend_youtube_dl.py", line 31, in __init__ super(YtdlPafy, self).__init__(*args, **kwargs) File "C:\Python39\lib\site-packages\pafy\backend_shared.py", line 62, in __init__ self.videoid = extract_video_id(video_url) File "C:\Python39\lib\site-packages\pafy\backend_shared.py", line 51, in extract_video_id raise ValueError(err % url) ValueError: Need 11 character video id or the URL of the video. Got https://spreadsheetpoint.com/regexmatch-function-google-sheets/

    Your Environment

    pafy (version 0.5.5) Windows 10

    opened by alive45 0
Releases(v0.2.8)
  • v0.2.8(Feb 17, 2018)

    Features:

    • Lastfm scrobbling (@rien333) (#758)
    • splaylist and suser commands for Spotify (@ritiek) (#678)
    • Autoplay support (@nikhilweee) (#594)
    • genpl command (@nishanthkarthik) (#642)
    • video_format configuration setting (@Vrihub) (#656)
    • live command for live streams (@Razesdark) (#635)
    • Add time column (@akaWolf) (#582)
    • Add video ID column (@Razesdark) (#627)
    • Allow filtering search by duration (@jas32096) (#548)
    • Allow filtering search by date (@jas32096) (#553)
    • Add history recent to display history without duplicates (@srvanrell) (#510)
    • --no-textart to disable ascii art (for screenreaders) (@Gongreg) (#517)
    • set_title option to disable setting window title (@ardrabczyk) (#498)
    • Add s command for getting stream information (@ritiek) (#675)
    • Add option to disable mpris (@hrnr) (#728)
    • Generate playlist from video description (@Razesdark) (#649)

    Enhancements:

    • Store playlists as m3u files instead of binary (@kraetzin) (#682)
    • Show replies when displaying comments (@paulfertser) (#677)
    • Use https urls for album art (@vszakats) (#574)
    • When using "repeat" with mpv, keep player running (@ritiek) (#660)
    • Display artist/album in mpris using lastfm (@vn-ki) (#739)
    • Use channel.list API for user search (@Razesdark) (#628)
    • Maintain volume across songs with mpv (@Razesdark) (#720)
    • Prevent mpris from crashing the main process (@hrnr) (#728)

    Bug fixes:

    • Fix mpris seeking with recent mpv vesions (@mg6) (#687)
    • Fix removing video from multi-page playlist (@kraetzin) (#695)
    • Skip unavailable tracks (@ritiek) (#734)
    • Correctly display minutes/seconds (@Laxa) (#748)
    • Handle null time-pos from mpv (@pritambaral) (#519)
    • Fix da/dv command regex (@Vrihub) (#691)
    • Skip channels in video/playlist searches (@ritiek) (#664)
    • Fix divide by zero error (@ids1024) (#620)

    Use git log v0.2.7.1..v0.2.8 to see all changes, including various minor fixes, documentation changes, etc. not included here.

    Source code(tar.gz)
    Source code(zip)
    mps-youtube-0.2.8.tar.gz.asc(488 bytes)
    mpsyt-0.2.8.exe(8.92 MB)
  • v0.2.7.1(Jul 6, 2016)

  • v0.2.7(Jun 27, 2016)

    Version 0.2.7 27 June 2016

    Features:

    • Setting for default audio format (@nishanthkarthik) (#71 #466 #467)
    • Search history with history command (@kraetzin) (#344 #472)
    • Add syntax for repeating a track several times (@ghallak) (#437 #490)
    • Reverse command (@kraetzin) (#422 #473)
    • New daurl <url> command (@maricn) (#402)

    Enhancements:

    • Pass --no-ytdl to mpv (@ids1024) (#492)
    • Do not suppress mpv output in debug mode (@ids1024)
    • Print traceback in debug mode (@ids1024)
    • Speed up checkupdate by avoiding redirects (@ids1024) (#454)
    • Pass --play-and-exit if vlc is used as a player (@ids1024)`

    Bug fixes:

    • Fix error with python 3.3 (@ids1024) (#414)
    • Fix maxres bug (@ids1024) (#430)
    • Fix playlist cache bug in info command (@ids1024) (#468)
    • Fix usersearch argument error (@ids1024) (#469 #482)
    • Fix progress bar with new mpv versions (@ids1024) (#470 #485)
    • Fix syntax error with set command (@ids1024) (#419)
    • Fix syntax error with -w, -f, -a (@ids1024) (#420)
    • Fix clipboard support (@ids1024) (#461)
    • Fix mpv version checking on windows (@ids1024) (#397)
    • Add youtube_dl as dependency to Dockerfile (@PI-Victor) (#481)

    Internal api changes:

    • The code is now split between several files (@ids1024) (#208)
    • Add initial content api, for now only used for comments (@ids1024)
    • Begin documenting internal apis using sphinx (@ids1024)
    Source code(tar.gz)
    Source code(zip)
    mps-youtube-0.2.7.tar.gz.asc(473 bytes)
    mpsyt-0.2.7.exe(12.55 MB)
  • v0.2.6(Jan 1, 2016)

    Features:

    • Add browserplay command to play video in browser (@rjvani) (#355 #390)
    • Make url command support multiple urls, and allow loading urls from file (@paulnicolet) (#90 #391)
    • Make youtube id available to download command (@ids1024) (#375)
    • Make pagination work properly for all lists of songs (local playlists, etc.) and make them all support the dump command (@ids1024) (#201)
    • Show warning when adding duplicate track to playlist (@BensonQiu) (#374 #383)

    Bug fixes:

    • Support playlists longer than 200 items (ids1024) (#192)
    • Make dapl download complete playlist (@JKatzwinkel) (#294 #325)
    • Use pyperclip instead of xerox, fixing clipboard on Linux (@ids1024) (#311)
    • Fix error message on windows when video title has & (@ids1024) (#321)
    • Run notifier command in background (@hrnr) (#339)
    • Correctly handle -v option of play (@TimoDritschler) (#352)
    • Make it possible to use a pager with --help (@livingBEEF) (#349)
    • Allow mplayer for https streams if version is new enough (@ids1024 @Evidlo @paddatrapper) (#315 #336 #317)
    • Use mpv.com instead of mpv.exe on windows (@ids1024)

    Internal API changes:

    • Split code into several files (still a work in progress) (@ids1024) (#208)
    • Use a python decorator to declare commands (@ids1024)
    • Create a paginatesongs() function for handling the pagination and dump command uniformly as mentioned in features (#399) (@ids1024)
    • Various others

    There have been various other small bug fixes and internal API changes. Use git log v0.2.5..0.2.6 to see all of them.

    Source code(tar.gz)
    Source code(zip)
    mpsyt-0.2.6.exe(12.51 MB)
    v0.2.6.tar.gz.asc(473 bytes)
  • v0.2.5(Jun 1, 2015)

    Version 0.2.5 1 June 2015

    • Support python 3 only (will not run with python 2)
    • Fix progress bar bug on Windows (#215, #223)
    • Fix bug in playlist search (#282)
    • Add user_order setting for separate order of user searches (lol768) (#277)
    • Add mix command (lol768) (#241, #283)
    • Add page count with total number of pages and current page (JKatzwinkel)
    • Fix UnicodeEncodeError on non-unicode terminals
    • Install .desktop in setup.py so it does not have to be installed manually required for Ubuntu sound menu support

    Update October 24 2015 The file mpsyt-0.2.5-pafy-0.4.0.exe is a rebuild of the program, built 2015-10-24, build against pafy 0.4.0, which was released after the release of mpsyt 0.2.5. It fixes some issues with the previous build (mpsyt-0.2.5.exe). This applies only to Windows, of course, and only if installing with these binaries.

    Source code(tar.gz)
    Source code(zip)
    mpsyt-0.2.5-pafy-0.4.0.exe(12.27 MB)
    mpsyt-0.2.5.exe(9.81 MB)
    v0.2.5.tar.gz.asc(473 bytes)
  • v0.2.4(May 14, 2015)

    Version 0.2.4 13 May 2015

    • Fix issue with rate-limiting in "album" command (#217)
    • Implement support for MPRIS (hrnr and ids1024) (#191, #210)
    • Fix display issue with small terminal width (#215)
    • Use version 3 of the youtube api, since version 2 was disabled
    Source code(tar.gz)
    Source code(zip)
  • v0.2.3(Feb 16, 2015)

    Version 0.2.3 17 February 2015

    • Fix issue with opening old playlist file (#214)
    • Fix issue with "set" command
    • Metadata tagging of downloaded audio files requires ffmpeg or avconv early implementation, uses YouTube video title, needs more work
    Source code(tar.gz)
    Source code(zip)
  • v0.2.2(Feb 14, 2015)

    Version 0.2.2 14 February 2014

    • Implement skip to previous track (ids1024) #175 #18 #14 Use > and < keys for next and prev track, q for quit (was ctrl-c) mpv / mplayer input.conf can be imported to use custom keymappings
    • Implement optional external download application (ids1024 and np1) #198 #132 enter "help dl-command" for more info
    • Show stream quality on status line (Brebiche38) #134 #163
    • Implement support for creating Windows builds with py2exe (ids1024) #190 Use setup.py in py2exe branch
    • Fix progress bar for mpv 0.7 (ids1024) #155 #161 Resolves issues with playback looping
    • Fix mps-youtube does not run on FreeBSD (nivit)
    • Fix YouTube comments overshoot window size
    • Fix issue with audio remux when using d download command
    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Nov 27, 2014)

  • v0.2.0(Nov 24, 2014)

    Version 0.2.0 25 November 2014

    • Auto detect terminal window size
    • Transcode audio to MP3 and other formats (requires ffmpeg or avconv) (#55)
    • Enabled da and dv commands for playlist search results
    • Added dapl and dvpl to download YouTube playlist audio/video by url/id to a separate subdirectory (mtahmed) #110
    • Progress indicator now works with mpv (previously only mplayer)
    • Added option to show system notifications (Alex Nisnevich) #95 (can be used with libnotify - notify-send on linux)
    • Added overwrite true/false option for downloads (mtahmed) #93 (skips download if downloaded file already exists)
    • Added copy to clipboard feature #97 (requires python xerox module and xclip on linux or pywin32 on windows)
    • Remux audio downloads for better file compatibility (#135)

    [Bugfix] - Accept two-character length usernames (#99)

    [Bugfix] - Expand ~ character in download directory setting (punchagan)

    [Bugfix] - Don't truncate filename (YoussF) #122

    [Bugfix] - Exit with correct status code

    Source code(tar.gz)
    Source code(zip)
  • v0.01.46(May 17, 2014)

    Version 0.01.46 May 18 2014

    • Added c to view comments for a video (first 50 comments, no reply-comments)
    • Added feature to match album tracks using MusicBrainz (vixus0) To search albums, enter "album" optionally followed by album title
    • Custom formatted search result list using "set columns" command Optionally shows: rating, likes, dislikes, views, user, date, category and comments (number of) in search results
    • Added "set order (relevance|views|rating|date)" command for specifying search result ordering
    • Added "set console-width" for setting output width (default 80)
    • Added uploaded date in video info display (request #64)
    • Added likes / dislikes in video info display
    Source code(tar.gz)
    Source code(zip)
  • v0.01.44(Mar 27, 2014)

    Version 0.01.44 Mar 27 2014

    • Added max_res config item for selecting video resolution (request 56)
    • Added window_size and window_pos for selecting size / position of player
    • Improved handling of playlist file read/write (issue 66)
    • Revert to lower quality on unavailable/corrupt streams (issue 65)
    • Enabled multiple invocation commands (comma separated) (request 61) Eg: mpsyt //the doors, 1, shuffle, 1-3-a, quit
    • Improved url caching
    • Added shuffle command (no arguments, shuffles displayed items)
    • Handle 'video not available in your country' during multiple downloads
    • Fix UnicodeDecodeError in mplayer progress parsing (issue 58)
    • Fix UnicodeEncodeError under Windows with Python 2.7 (issue 59)
    Source code(tar.gz)
    Source code(zip)
  • v0.01.41(Mar 14, 2014)

    Version 0.01.41 Mar 14 2014

    • new configuration option, max_results - sets number of returned results (1 - 50)
    • pl now accepts YouTube playlist id's as well as url's
    • Fix error in download of .m4a files when mplayer is set as player.
    • Added option for downloading multiple items eg. da 1-4 or dv 3,5,6
    Source code(tar.gz)
    Source code(zip)
  • v0.01.40(Mar 11, 2014)

  • v0.01.39(Mar 10, 2014)

    Version 0.01.39 Mar 10 2014

    Features:

    • Added time / progress bar indicator. Big thanks to Thomas LÉVEIL! (mplayer only)
    • Added command to retrieve YouTube user playlists; userpl {username} or upl {username}
    • Added command to retrieve related videos; r{number}
    • playurl now respects -f, -w, and -a flags (fullscreen, window or audio)
    • Implemented input history persistence (uses readline, linux only)
    • Implemented non-interactive mode for command line invocation with playurl
    • Implemented less interactive mode for command line invocation with dlurl

    Changes:

    • // or .. prefix to search for YouTube playlists (was plsearch / pls)

    Help / Documentation:

    • help will show relevant help topic page e.g., help dlurl
    • Documented configuration options ("set" commands)
    • Re-authored some help categories
    • Changed help to help , removed menu from help pages

    Bugfixes

    • mplayer / mpv window now displays content title instead of url
    • Fixed issue with Python3 terminal output on playback ctrl-c interrupt
    • Fixed issue with debug mode not logging to file
    • Changed year format in YT playlist result screen to last two digits. (Under some environments it was showing 4-digit years)
    Source code(tar.gz)
    Source code(zip)
  • v0.01.38(Mar 5, 2014)

    Version 0.01.38 Mar 5 2014

    • Added i{number} for YT playlist information display
    • Added stream url preloading for first item of opened YT playlists
    • Added last-updated date to YT playlist search result list
    • Fixed UnicodeError when run in non-UTF8 environments
    • Added more verbosity to --version command line option
    • Added --debug command line option (logs to {tmpdir}/mpsyt.log)
    Source code(tar.gz)
    Source code(zip)
  • v0.01.37(Mar 2, 2014)

    Version 0.01.37 Mar 2 2014

    • Excluded YouTube paid videos from search results
    • Added "pl {playlist url}" command to open YouTube playlist url
    • Added "plsearch {query}" command to search for YouTube playlists (or pls {query})
    • Added "dump" command to show entire YT playlist (useful for saving locally)
    • Added "undump" command to undo dump (re-paginates YT playlist items)
    • Added "u {number}" command to list uploads by uploader of {number}
    • Added "url {YouTube url}" command for retrieving a specific YT video
    • Added "playurl {YouTube url}" command for directly playing a YT video
    • Added "dlurl {YouTube url}" command for directly downloading a YT video
    • Changed command to list user uploads, new syntax is "user "
    • Added mpsyt --version flag for printing version info
    • Added mpsyt --help flag for printing help text
    • Fixed indentation bug when scrolling through readline history
    Source code(tar.gz)
    Source code(zip)
  • v0.01.36(Feb 27, 2014)

    Version 0.01.36 Feb 27 2014

    • Wait for preloading item if it is selected while preloading
    • Fix bug where -a audio override is sometimes ignored
    Source code(tar.gz)
    Source code(zip)
  • v0.01.35(Feb 24, 2014)

    Version 0.01.35 Feb 25 2014

    • Faster opening of audio streams with mpv (--demuxer-lavf-o=fflags=+ignidx argument added for m4a streams)
    • Faster opening of audio streams with mplayer (reject m4a streams, prefer ogg streams) (fallback to video stream and suppress video when no ogg available)

    This releases fixes an annoying bug in mpsyt which caused long delays when playing many audio items. It was due to mplayer and mpv seeking through the entire stream before commencing playback.

    Source code(tar.gz)
    Source code(zip)
  • v0.01.34(Feb 22, 2014)

  • v0.01.33(Feb 22, 2014)

    Version 0.01.33 Feb 22 2014

    • Changed structure of playlist file. Now consumes KB's rather than MB's
    • Same playlist file shared between Python2.7+ and Python3+ (was separate)
    • Improved display alignment for Russian text
    • Preload of url fails silently on unobtainable items (previously crashed)
    • Added prompt to mux audio on m4v download (experimental)
    Source code(tar.gz)
    Source code(zip)
  • v0.01.32(Feb 16, 2014)

    Version 0.01.32 Feb 17 2014

    • Improve display alignment with certain unicode characters
    • Fix crash when using 'set' command on Windows (thomasleveil)
    Source code(tar.gz)
    Source code(zip)
  • v0.01.31(Feb 13, 2014)

  • v0.01.30(Feb 13, 2014)

    13 Feb 2014 Version 0.01.30

    To assist with packaging and resolve a nameclash with other software, pms was renamed to mps.

    To keep the names harmonious, this program has been renamed to from pms-youtube to mps-youtube. The main python file has been renamed from pmsyt to mpsyt

    The Github url is now:

    http://github.com/np1/mps-youtube (the old github url redirects to this)

    The PyPI home is now:

    https://pypi.python.org/pypi/mps-youtube

    Source code(tar.gz)
    Source code(zip)
  • v0.01.12(Feb 10, 2014)

  • v0.01.11(Feb 10, 2014)

  • v0.01.10(Feb 9, 2014)

    9 Feb 2014 v0.01.10

    -f, -w and -a arguments for playing items in fullscreen, window or audio (overrides configured setting)

    Updated built-in help screens.

    Fixed alignment of duration column for videos over 1 hour.

    Source code(tar.gz)
    Source code(zip)
Terminal-based CPU stress and monitoring utility

The Stress Terminal UI: s-tui Stress-Terminal UI, s-tui, monitors CPU temperature, frequency, power and utilization in a graphical way from the termin

Alex Manuskin 2.8k Nov 30, 2021
Command line radio player

Curseradio Internet radio in the terminal Curseradio is a curses interface for browsing and playing an OPML directory of internet radio streams. It is

Gordon Ball 166 Nov 30, 2021
A Ruby gem that beautifies the terminal's ls command, with color and font-awesome icons. :tada:

Color LS A Ruby script that colorizes the ls output with color and icons. Here are the screenshots of working example on an iTerm2 terminal (Mac OS),

Athitya Kumar 3.9k Nov 15, 2021
A smart and nice Twitter client on terminal written in Python.

A Note about Twitter API Change Heads-up! As Twitter discontinues supporting Stream API, RainbowStream's stream function has been stopped working for

orakaro.targaryen 3.3k Nov 23, 2021
:duck: DuckDuckGo from the terminal

ddgr ddgr is a cmdline utility to search DuckDuckGo (html version) from the terminal. While googler is extremely popular among cmdline users, in many

Piña Colada 2.2k Nov 30, 2021
:mag: Google from the terminal

googler is a power tool to Google (web, news, videos and site search) from the command-line. It shows the title, URL and abstract for each result, whi

Piña Colada 5.6k Nov 30, 2021
System monitoring dashboard for terminal

gtop System monitoring dashboard for terminal. Requirements Linux / OSX / Windows (partial support) Node.js >= v8 Installation $ npm install gtop -g D

Can Güney Aksakalli 8.8k Nov 23, 2021
Git repository summary on your terminal

A command-line Git information tool written in Rust Onefetch is a command-line Git information tool written in Rust that displays project information

Ossama Hjaji 3.7k Nov 21, 2021
Browse Reddit from your terminal

THIS PROJECT IS NO LONGER MAINTAINED RTV Development is Shutting Down List of Alternative Projects Reddit Terminal Viewer (RTV) A text-based interface

Michael Lazar 4.6k Nov 25, 2021
Notifies you when long-running terminal commands complete

undistract-me Notifies you when long-running terminal commands complete. What is this? Does this ever happen to you? You're doing some work, and as pa

Jonathan Lange 485 Nov 18, 2021
A smarter cd command for your terminal

zoxide A smarter cd command for your terminal zoxide is a blazing fast replacement for your cd command, inspired by z and z.lua. It keeps track of the

Ajeet D'Souza 4.3k Nov 30, 2021
A new way to see and navigate directory trees : https://dystroy.org/broot

Broot A better way to navigate directories Install Broot Get an overview of a directory, even a big one br -s Notice the unlisted? That's what makes i

Canop 6.3k Nov 24, 2021
cloc counts blank lines, comment lines, and physical lines of source code in many programming languages.

cloc Count Lines of Code cloc counts blank lines, comment lines, and physical lines of source code in many programming languages. Latest release: v1.9

null 12.9k Nov 30, 2021
Command-line program to download image galleries and collections from several image hosting sites

gallery-dl gallery-dl is a command-line program to download image galleries and collections from several image hosting sites (see Supported Sites). It

Mike Fährmann 4.1k Nov 24, 2021
Interactice process killer for Linux and macOS

gkill - Interactive process killer for Linux and macOS Install go get github.com/heppu/gkill Usage Run gkill and select process you want to kill by u

Henri Koski 297 Nov 5, 2021
Glances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, Mac OS and Windows operating systems.

Glances - An eye on your system Summary Glances is a cross-platform monitoring tool which aims to present a large amount of monitoring information thr

Nicolas Hennion 19.6k Dec 2, 2021
Linux Kernel Manager and Activity Monitor 🐧💻

Linux Kernel Manager and Activity Monitor ?? ?? The kernel is the part of the operating system that facilitates interactions between hardware and soft

Orhun Parmaksız 1.4k Nov 22, 2021
Quick and simple image processing at the command line. :hammer:

Korkut Quick and simple image processing at the command line. Getting started First download and install ImageMagick. Mac OS X ImageMagick supports th

Oguzhan Inan 333 Nov 13, 2021