Vidify
Detect the songs playing on your device and play their music videos anywhere
Install / Use
/learn @vidify/VidifyREADME
NOTE: Vidify has been archived. Read more here.
<div align="center"> <img src="images/logo.png" height=100 alt="logo" align="center"/> <h1>Vidify</h1> <span>Watch <b>music videos in real-time</b> for the songs playing on your device</span><a href="https://github.com/vidify/vidify/actions"><img alt="Build Status" src="https://github.com/vidify/vidify/workflows/Continuous%20Integration/badge.svg"></a> <a href="https://pypi.org/project/vidify/"><img alt="PyPi version" src="https://img.shields.io/pypi/v/vidify"></a> <a href="https://aur.archlinux.org/packages/vidify/"><img alt="AUR version" src="https://img.shields.io/aur/version/vidify"></a>
<img src="images/screenshot.png" alt="Example" align="center"> </div>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 withpip install --user vidify[extra1,extra2], which is equivalent to installing the list of dependencies needed forextra1andextra2. - 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 main repository at media-video/vidify:
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.
- Arch Linux: you can install it from the AUR:
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:
libfftw3on Debian-based distros. - ffmpeg:
ffmpegon most repositories. It must be available on your path. - pulseaudio:
pulseaudio, pre-installed on most repos. - yt-dlp: 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 ...'):

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):
<div align="center"> <img src="images/screenshot_setup.png" alt="setup"> </div>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 re
Related Skills
qqbot-channel
349.2kQQ 频道管理技能。查询频道列表、子频道、成员、发帖、公告、日程等操作。使用 qqbot_channel_api 工具代理 QQ 开放平台 HTTP 接口,自动处理 Token 鉴权。当用户需要查看频道、管理子频道、查询成员、发布帖子/公告/日程时使用。
docs-writer
100.3k`docs-writer` skill instructions As an expert technical writer and editor for the Gemini CLI project, you produce accurate, clear, and consistent documentation. When asked to write, edit, or revie
model-usage
349.2kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
arscontexta
3.0kClaude Code plugin that generates individualized knowledge systems from conversation. You describe how you think and work, have a conversation and get a complete second brain as markdown files you own.
