All Projects → vidify → Vidify

vidify / Vidify

Licence: lgpl-3.0
Play music videos automatically for the songs playing on any device

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Vidify

Alltomp3 App
Download and Convert YouTube, SoundCloud & Spotify in MP3 with full tags (title, artist, genre, cover, lyrics 🔥)
Stars: ✭ 920 (+868.42%)
Mutual labels:  music, spotify, lyrics, youtube
Ytmdl
A simple app to get songs from YouTube in mp3 format with artist name, album name etc from sources like iTunes, Spotify, LastFM, Deezer, Gaana etc.
Stars: ✭ 2,070 (+2078.95%)
Mutual labels:  music, spotify, youtube
Sonos Web
Web interface for Sonos audio systems
Stars: ✭ 114 (+20%)
Mutual labels:  music, spotify, youtube
Spotify Onthego
Download Spotify playlists by searching for audio files on YouTube
Stars: ✭ 66 (-30.53%)
Mutual labels:  music, spotify, youtube
Alltomp3
Node module to download and convert in MP3 with tags an online video
Stars: ✭ 120 (+26.32%)
Mutual labels:  spotify, lyrics, youtube
Getsong
Download any song mp3 with no dependencies except ffmpeg
Stars: ✭ 102 (+7.37%)
Mutual labels:  music, spotify, youtube
Spotiflyer
Spotify/Gaana/Youtube Music Downloader For Android!
Stars: ✭ 231 (+143.16%)
Mutual labels:  music, spotify, youtube
Carol Xamarin
A minimal and beautiful lyrics app for macOS built with Xamarin and C#
Stars: ✭ 97 (+2.11%)
Mutual labels:  music, spotify, lyrics
Botify
Discord bot that plays Spotify tracks and YouTube videos or any URL including Soundcloud links and Twitch streams
Stars: ✭ 86 (-9.47%)
Mutual labels:  music, spotify, youtube
Smd
Spotify Music Downloader
Stars: ✭ 822 (+765.26%)
Mutual labels:  music, spotify, youtube
Lyricsx
🎶 Ultimate lyrics app for macOS.
Stars: ✭ 3,251 (+3322.11%)
Mutual labels:  music, spotify, lyrics
Ytspotifydl
Youtube and Spotify music downloader with metadata.
Stars: ✭ 34 (-64.21%)
Mutual labels:  music, spotify, youtube
Raveberry
A multi-user music server with a focus on participation
Stars: ✭ 442 (+365.26%)
Mutual labels:  music, spotify, youtube
Youtubetospotify
A Python script to fetch tracks of music channels on Youtube, find them on Spotify and add them to a playlist
Stars: ✭ 33 (-65.26%)
Mutual labels:  music, spotify, youtube
Youtube Music Desktop
A desktop client for YouTube Music with MusixMatch lyrics.
Stars: ✭ 92 (-3.16%)
Mutual labels:  music, lyrics, youtube
Streamly
Portable, independent, web-based, simple streaming YouTube video queues and playlists for music videos, audiobooks, etc.
Stars: ✭ 60 (-36.84%)
Mutual labels:  music, youtube
A Pop
🎶 HD Music Streaming and Sharing Web App
Stars: ✭ 55 (-42.11%)
Mutual labels:  music, spotify
Headfon.es
a mini Spotify clone 🎧
Stars: ✭ 62 (-34.74%)
Mutual labels:  music, spotify
Go Videos Ru
Каталог докладов, лекций и других видеоматериалов по Go
Stars: ✭ 64 (-32.63%)
Mutual labels:  videos, youtube
Musicalyoutube
A Youtube floating PIP player for Android.
Stars: ✭ 50 (-47.37%)
Mutual labels:  music, youtube
logo

Vidify

Watch music videos in real-time for the songs playing on your device

Build Status PyPi version AUR version

Example

A lighter and less dev-oriented version of this README can be found at vidify.org. The official site also has translations available.

Table of contents

Installation

Vidify is intended to be modular. By default, it includes support for the most popular music players (a.k.a. APIs). Same goes for the video players (currently, VLC by default). This can be extended by installing the required dependencies listed in their sections.

Here are the different ways to install Vidify, depending on your Operating System:

  • Cross-platform: With pip: pip install --user vidify. Optional APIs and Players can be installed with pip install --user vidify[extra1,extra2], which is equivalent to installing the list of dependencies needed for extra1 and extra2.
  • Windows or Linux: Using the binaries from the latest stable releases. These include support for all optional APIs, and use mpv as the player.
  • Linux:
    • Arch Linux: you can install it from the AUR: vidify. Maintained by me (marioortizmanero).
    • Gentoo Linux: there's an ebuild maintained by AndrewAmmerlaan in the GURU overlay at media-video/vidify: eselect repository enable guru && emerge --sync guru && emerge vidify
    • Feel free to upload it to your distro's repositories! Let me know in an issue so that I can add it to this list.

Note: Vidify requires Python >= 3.6.

The APIs

An API is simply a source of information about the music playing on a device. For example, the Spotify desktop client, or iTunes. Here are the currently supported ones:

Name Wiki link Extra requirements Description
Linux Media Players (mpris_linux*) 🔗 Installed by default (see the wiki) Any MPRIS compatible media player for Linux or BSD (99% of them, like Spotify, Clementine, VLC...).
Spotify for Windows & MacOS (swspotify*) 🔗 Installed by default The Spotify desktop app for Windows & MacOS, using the SwSpotify library.
Spotify Web (spotify_web*) 🔗 Installed by default The official Spotify Web API, using Tekore. Check the wiki for more details on how to set it up.

* The name inside parenthesis is used as a key for the arguments and the config options. --api mpris_linux would force using the Linux Media Players API, for instance. It's also used for the extra dependencies installation with pip: pip install vidify[extra1] would install all the extra requirements for extra1 with pip.

The players

The embedded video players inside the app. The default one is VLC because it's more popular, but you can use others if you have the player itself installed, and the Python extra dependencies.

Name Extra requirements Description Arguments/config options
VLC (vlc) VLC The default video player. Widely used and very solid. --vlc-args <VLC_ARGS>
Mpv (mpv) Mpv, python-mpv A command-line portable video player. More lightweight and precise than VLC. --mpv-flags <MPV_ARGS> (only boolean flags)
External (external) Installed by default Play the videos on external devices. Check the external players section for more. None

For now, the only way to specify what player to use is with arguments or inside the config file with the internal name. You can use --player mpv or save it in your config file for future usage:

[Defaults]
player = mpv

The external player

The external player lets you play Vidify's music videos essentially anywhere. It will send all the music video information to an external application. Here are the current implementations:

  • Vidify TV: available on Android, Android TV and Amazon Fire Stick TV. Play Store page.

Audio synchronization

Vidify has an audio synchronization feature. The full repository is in vidify/audiosync. It's still Work-In-Progress.

Audiosync is only available on Linux for now. It's strongly recommended to use Mpv as the video player. You can install it with pip install vidify[audiosync], along with the following dependencies:

  • FFTW: libfftw3 on Debian-based distros.
  • ffmpeg: ffmpeg on most repositories. It must be available on your path.
  • pulseaudio: pulseaudio, pre-installed on most repos.
  • youtube-dl: this is installed by default with Vidify, but make sure it's available on your path.

It's also available as vidify-audiosync on the AUR, and it comes pre-installed in the binaries.

It can be activated with --audiosync, or inside your config file:

[Defaults]
audiosync = true

You can calibrate the audiosync results with the option --audiosync-calibration or audiosync_calibration. By default it's 0 milliseconds, but it may depend on your hardware.

Note: if when using audiosync there's no sound, you might need to disable stream target device restore by editing the corresponing line in /etc/pulse/default.pa to load-module module-stream-restore restore_device=false.

Note 2: you should make sure that the sink being recorded is either audiosync, or the one where the music is playing. Here's an example on Pavucontrol (it's usually called 'Monitor of ...'):

pavucontrol

Usage

The app has an interface that will guide you through most of the set-up, but you can use command line arguments and the config file for more advanced options (and until the GUI is completely finished):

setup
usage: vidify [-h] [-v] [--debug] [--config-file CONFIG_FILE] [-n] [-f] [--dark-mode] [--stay-on-top]
              [--width WIDTH] [--height HEIGHT] [-a API] [-p PLAYER] [--audiosync]
              [--audiosync-calibration AUDIOSYNC_CALIBRATION] [--vlc-args VLC_ARGS]
              [--mpv-flags MPV_FLAGS] [--client-id CLIENT_ID] [--client-secret CLIENT_SECRET]
              [--redirect-uri REDIRECT_URI]
Argument Description
-n, --no-lyrics do not print lyrics.
-f, --fullscreen play videos in fullscreen mode.
--dark-mode enables dark mode for the GUI.
--stay-on-top the app window will stay on top of other apps.
--width <WIDTH> set the width for the downloaded videos (this is useful to play lower quality videos if your connection isn't good).
--height <HEIGHT> set the height for the downloaded videos.
-a, --api specify the API to use. See the APIs section for more info about the supported APIs.
-p, --player specify the player to use. See the Players section for more info about the supported players.
--audiosync enables the Audio Synchronization feature (disabled by default).
--audiosync-calibration You can calibrate the delay in milliseconds audiosync returns with this. It can be positive or negative. The default is 0ms.
--config-file <PATH> indicate the path of your config file.

The config file

The configuration file is created by default at your usual config directory:

  • Linux: ~/.config/vidify/config.ini (or in $XDG_CONFIG_HOME, if defined)
  • Mac OS X: ~/Library/Preferences/vidify/config.ini
  • Windows: C:\Users\<username>\AppData\Local\vidify\vidify\config.ini

You can use a custom one by passing --config-file <PATH> as an argument. The config file is overriden by the configuration passed as arguments, but keeps your settings for future usage. Here's an example of one. It uses the INI config file formatting. Most options are inside the [Defaults] section.

All the available options for the config file are the same as the arguments listed in the Usage section, except for --config-file <PATH>, which is only an argument. Their names are the same but with underscores instead of dashes. For example, --use-mpv would be equivalent to use_mpv = true.

FAQ

Vidify doesn't work correctly with Python 3.8 and PySide2

PySide2 started supporting Python 3.8 with the 5.14 release. Make sure you're using an updated version and try again. TypeError: 'Shiboken.ObjectType' object is not iterable will be raised otherwise.

ModuleNotFoundError: No module named 'gi' when using a virtual environment

For some reason, python-gobject may not be available inside a virtual environment. You can create a symlink inside it with:

ln -s "/usr/lib/python3.8/site-packages/gi" "$venv_dir/lib/python3.8/site-packages"

or install it with pip following this guide.

Vidify doesn't recognize some downloaded songs

If the song doesn't have a metadata field with its title and artist (the latter is optional), Vidify is unable to know what song is playing. Try to modify the metadata of your downloaded songs with VLC or any other tool.

FileNotFoundError: Could not find module 'libvlc.dll'.

Make sure that both Python and VLC are either 32 bits, or 64 bits, but not different. You should have a directory called C:\Program Files (x86)\VideoLAN\VLC (32b), or C:\Program Files\VideoLAN\VLC (64b).

Not playing any videos (HTTP Error 403: Forbidden)

If Vidify is not playing any videos, and is throwing 403 Forbidden errors (with the --debug argument). The YouTube-DL cache has likely become corrupt or needs to be regenerated because of other reasons, please try deleting ~/.cache/youtube-dl.


Development

Helpful documentation links for contributing:

The app logo was created by xypnox in this issue.

The changelog and more information about this program's versions can be found in the Releases page.

External player implementations

The Vidify external player has an open protocol for anyone to implement their own app or program to play the videos. You can read more about how it works in this wiki article.

Tests

You can run the module locally with python -m vidify.

This project uses unittest for testing. Run them with python -m unittest. You'll need all the extra dependencies installed for this to work.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].