Music player and music library manager for Linux, Windows, and macOS

Overview

Ex Falso / Quod Libet - A Music Library / Editor / Player

Quod Libet is a music management program. It provides several different ways to view your audio library, as well as support for Internet radio and audio feeds. It has extremely flexible metadata tag editing and searching capabilities.

Ex Falso is a tag editor with the same tag editing interface as Quod Libet.

https://quodlibet.readthedocs.io

https://github.com/quodlibet/quodlibet/raw/master/docs/images/paned.png

For information on how to build/install/test Quod Libet check out

https://quodlibet.readthedocs.org/en/latest/development/overview.html

Comments
  • Display a long size timescolling-bar on the window

    Display a long size timescolling-bar on the window

    Original issue 204 created by nanocmoi on 2009-05-22T09:02:53.000Z:

    It's quite tying to have to click on the time button to display the time bar. I think there is a lot of place to display such a bar all the time in the window. If the bar could be bigger than now it would be easier to navigate into long songs.

    enhancement patch UI 
    opened by lazka 47
  • Official Python 3 support

    Official Python 3 support

    With Debian's recent announcement, it seems as good a time as ever to bring up the spectre of Python 3 again.

    Things have come on a bit but I can't remember whatever happened to the notes we had for dependencies and blockers for a Py3K version of QL (PyGTK is long done now at least), and there don't seem to be any open issues to track this.

    Whilst the QL Python 3 FAQ entry states there are no plans (though that was written some time ago), if there was a plan, it should probably be maintained here now...

    opened by declension 46
  • Incorrect MPRIS volume scaling

    Incorrect MPRIS volume scaling

    The volume widget uses cubic volume scaling not linear so you can't map MPRIS's volume 1 to 1. If you do your volume will be out of sync as it is now.

    opened by JasonLG1979 41
  • Working on translation, how to apply a translation

    Working on translation, how to apply a translation

    Dear all,

    First I would like to congratulate you for the hard work over the years. I finally migrated to Quod Libet and would like to help. I wrote the French translation team to join the translation effort.

    I checked out from github and can run Quod Libet without problem.

    One question: when translatinge the French .po file, I don't see translations applied in Quod Libet interface. Examples include "File", "Add a Folder...", "Add a Location...".

    What shall I do to see and review my translations?

    Kind regards, Kellogs

    opened by ffries 41
  • Cover grid scroll performance

    Cover grid scroll performance

    I experience severe performance issues in the cover grid browser when I'm scrolling through the albums.

    This only happens when I'm not using gnome-shell and it happens with or without a desktop session, with several different window managers (tried Mate's marco, awesomewm, xmonad).

    Applying this changeset proposed in a pull request fixes the scroll performance issue.

    openSUSE Leap 42.3 QuodLibet 4.0.2

    Audio device: GStreamer (pulsesink) Python: 3.5.4 Mutagen: 1.40.0 GTK+: 3.20.10 (X11) PyGObject: 3.27.1 GStreamer: 1.8.3.0

    with proprietary nvidia driver v390.48

    bug browsers performance 
    opened by slosd 34
  • Fetch cover from last.fm

    Fetch cover from last.fm

    Original issue 780 created by [email protected] on 2011-07-21T13:24:21.000Z:

    I were trying to write plugin, that actually queries to last.fm on each song change and downloads cover for that specific album and shows it instead of image named cover.png.

    I stumbled upon problem when trying to find out how those covers are displayed. I actually looked at http://code.google.com/p/quodlibet/source/browse/quodlibet/quodlibet/qltk/cover.py but as I read code everything I found was „Pop-up image“. Wiki didn't provided any good info as well(have to admit, that I just peeked into Dev section of it). So there are some requests:

    Please point me to actual file, which takes care of displaying cover. Or Create plugin instead of me. What I've already done: http://pastebin.com/8V9huMWY

    enhancement 
    opened by lazka 33
  • Lyrics no longer available via LyricWiki API

    Lyrics no longer available via LyricWiki API

    Original issue 273 created by jrittenh on 2009-08-08T18:02:27.000Z:

    Noticed as of today, attempting to download lyrics gives the following response:

    Unfortunately, due to licensing restrictions from some of the major music publishers we can no longer return lyrics through the LyricWiki API (where this application gets some or all of its lyrics).

    The lyrics for this song can be found at the following URL: <url here>

    (Please note: this is not the fault of the developer who created this application, but is a restriction imposed by the music publishers themselves.)

    bug 
    opened by lazka 33
  • Quod Libet doesn't match FreeDesktop directories specs

    Quod Libet doesn't match FreeDesktop directories specs

    Original issue 138 created by thibaut.bethune on 2009-02-24T23:52:29.000Z:

    I've tried Quod Libet 2.0 on Ubuntu 9.04 alpha 4 and it seems that Quod Libet places its configuration files in /home/.quodlibet directory which doesn't match FreeDesktop directories specs :

    The default for $XDG_CONFIG_HOME is $HOME/.config, the default for $XDG_DATA_HOME is $HOME/.local/share. So all applications should look for those environment variables and use those default values if the variables are not set.

    This is quite important since it's not possible to easily backup config & data files if these files are not stored at the right place

    See http://www.freedesktop.org/wiki/Specifications/basedir-spec See also http://ploum.frimouvy.org/?184-cleaning-user-preferences-keeping-user-data (main post and comment#8)

    enhancement 
    opened by lazka 31
  • right click on headers causes error

    right click on headers causes error

    Original issue 14 created by tobiassaunders on 2008-09-15T13:33:52.000Z:

    right clicking on the headers causes an error: === SYSTEM INFORMATION: Quod Libet 2.0 Mutagen 1.14 Python 2.5.2 (r252:60911, Mar 1 2008, 13:52:45) [GCC 4.2.3] linux2

    === STACK TRACE Traceback (most recent call last):

    File "/usr/lib/python2.5/site-packages/quodlibet/qltk/songlist.py", line 856, in __showmenu self.__getmenu(column).popup(None, None, None, event.button, time)

    File "/usr/lib/python2.5/site-packages/quodlibet/qltk/songlist.py", line 818, in __getmenu for header in sorted(zip(map(tag, group), group)):

    NameError: global name 'tag' is not defined

    I was in the process of creating my library

    bug 
    opened by lazka 31
  • QL aborts on session logout and shutdown because X server is not available anymore

    QL aborts on session logout and shutdown because X server is not available anymore

    I run QL master ( 56b68e50c) on Xubuntu 18.04 and it has been nagging me for a very long time that when I logout from my current session or shutdown, QL doesn't retain its current state (currently playing song, filter string, ...). Investigating issue #1562, I discovered that QL abruptly aborts without saving its state on session logout (and shutdown).

    I ran quodlibet --debug capturing the output in 3 situations, and here are the shutdown messages:

    1. Quit QL (full log)

      D: 24.437: qltk.window.__restore_state: Restore state
      D: 24.438: qltk.window.__restore_position: Restore position
      D: 24.438: qltk.window.__restore_size: Restore size
      D: 24.440: main.before_quit: Saving active browser state
      D: 24.441: main.before_quit: Shutting down player device 'GStreamer: 1.14.1.0'.
      D: 24.452: PluginManager.save: Saving plugins: 8 active
      D: 24.452: PluginManager.enable: Disable 'Theme Switcher'
      D: 24.510: PluginManager.enable: Disable 'ToggleMenuBar'
      D: 24.511: PluginManager.enable: Disable 'mpris'
      D: 24.654: PluginManager.enable: Disable 'queue'
      D: 24.655: PluginManager.enable: Disable 'Website Search'
      D: 24.655: PluginManager.enable: Disable 'editplaycount'
      D: 24.655: PluginManager.enable: Disable 'CustomCommands'
      D: 24.655: PluginManager.enable: Disable 'include_saved'
      D: 24.656: _main.quit_gtk: Quit GTK: done.
      D: 25.340: _main.run: Gtk.main() done.
      D: 25.340: library.save: Saving all libraries...
      D: 25.341: SongFileLibrary.save(<libraries.SongFileLibrary object at 0x7feb4abdccf0 (quodlibet+library+libraries+SongFileLibrary at 0x29cf6c0)>): Saving contents to '/home/paulo/.config/quodlibet/songs'.
      D: 34.721: config.save: Writing config...
      D: 34.763: main.main: Finished shutdown.
      
    2. Logout (full log)

      Gdk-Message: 13:37:09.077: quodlibet: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
      
    3. Shutdown (full log)

      Gdk-Message: 13:38:22.261: quodlibet: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
      

    All processes receive SIGHUP on logout (and shutdown), so the X server also shuts down on logout (and shutdown, obviously). When QL receives SIGHUP, I get the impression that it attempts some operation that access the X server, most likely calling some GTK function, but without catching errors, so it simply aborts, not saving its state.

    So, somehow once QL starts to shutdown, it should catch errors when calling any GTK functions (or any other functions that access the X server). If that's not feasible, then it should save its state before running any such X-accessing commands.

    enhancement 
    opened by marcelpaulo 28
  • Waveform seekbar plugin

    Waveform seekbar plugin

    Original issue 1530 created by reiter.christoph on 2015-01-27T17:28:58.000Z:

    [18:06:22] <wander> hi, are there plans to allow visualization plugins - e.g. a waveform http://i.imgur.com/w8PIXFb.png? I already did some of those plugins for a different player and would really like to have them on quodlibet too [18:07:19] <wander> (or is this possible already and I missed something?) [18:10:41] <lazka> wander, played around a bit some years ago: https://bpaste.net/show/7e451bf11028 [18:11:31] <lazka> but that's not the right approach [18:11:56] <lazka> since there is buffering going on between the pipeline and the soundcard [18:12:02] <lazka> also the window can't be closed [18:13:23] <lazka> so I'm wondering if it isn't better to use an external app for that [18:13:36] <lazka> projectM for example [18:14:31] <wander> well, I care mostly about the waveform plugin, since I consider this to be a major usability improvement [18:14:34] <lazka> wander, ah you mean waveform only? [18:14:59] <lazka> oops, I didn't look at the image [18:16:03] <wander> yeah, having this right in the player would really be nice and would make seeking much more efficient [18:16:21] <lazka> wander, do you know of any gstreamer based player providing this? [18:16:52] <wander> I think clementine is gstreamer based and has something they call moodbar [18:17:12] <lazka> ok [18:17:13] <wander> that's basically a waveform with additional color highlighting [18:18:29] <wander> the main issue I saw was that there's currently no way to extend the user interface of quodlibet with such a plugin [18:21:35] <lazka> should be easy.. it can just be a one time hack to inject a widget somewhere [18:24:11] <wander> ok, then I'll do some experimenting with that [18:24:26] <wander> and btw. thx for the great player [18:24:43] <wander> in case you are the dev ;) [18:24:49] <lazka> found this: https://stackoverflow.com/questions/19454832/gstreamer-audiosink-to-output-stream-of-integers-representing-volume-levels [18:25:42] <lazka> so what we need is when a song starts, decode in the background, record the levels, then inject a widget which draws it using cairo [18:25:52] <wander> yep [18:26:20] <wander> I already developed such a plugin, but I'm not familiar with gstreamer [18:26:47] <wander> and caching is recommended [18:26:48] <lazka> and we could name it "extended seekbar" and make the waveform part optional so these guys are happy: https://code.google.com/p/quodlibet/issues/detail?id=204

    enhancement 
    opened by lazka 28
  • Re-enable Python scripts to access Quodlibet library

    Re-enable Python scripts to access Quodlibet library

    The proposed change

    Allow stand-alone Python script access to the Quodlibet library as @lazka described in #1939 for Quodlibet 3.6

    import os, sys
    sys.path.insert(0, '/home/david/quodlibet')
    import quodlibet
    from quodlibet import library
    
    quodlibet.init()
    lib = library.init(os.path.join(quodlibet.get_user_dir(), "songs"))
    

    With Quodlibet 4.6.1 this script fails with the following:

    /home/david/quodlibet/quodlibet/qltk/__init__.py:21: PyGIWarning: PangoCairo was imported without specifying a version first. Use gi.require_version('PangoCairo', '1.0') before import to ensure that the right version gets loaded.
      from gi.repository import GLib, GObject, PangoCairo
    Traceback (most recent call last):
      File "/home/david/PycharmProjects/qlbridge/access.py", line 8, in <module>
        quodlibet.init()
      File "/home/david/quodlibet/quodlibet/_init.py", line 55, in init
        init_cli(no_translations=no_translations, config_file=config_file)
      File "/home/david/quodlibet/quodlibet/_init.py", line 136, in init_cli
        _init_gettext(no_translations)
      File "/home/david/quodlibet/quodlibet/_init.py", line 76, in _init_gettext
        i18n.init(language)
      File "/home/david/quodlibet/quodlibet/util/i18n.py", line 282, in init
        assert "gi.repository.Gtk" not in sys.modules
    AssertionError
    

    Benefits of this change

    I'll continue to use a script in newer Quodlibet versions to obtain & work with the song tag values extracted from the Quodlibet library, to support remote Quodlibet operation with simplified query creation from a mobile phone or tablet.

    Any issues this might cause

    I'm not sure if this is a documentation request for the Development Guide or FAQ, or a code change would be required.

    enhancement 
    opened by davidSchlosser 0
  • ALAC files wont play with Flatpak version on Manjaro

    ALAC files wont play with Flatpak version on Manjaro

    Steps to reproduce

    1. Clean install Manjaro Linux x86_64
    2. Install flatpak via pamac flatpak
    3. Install QuodLibet via flatpak install io.github.quodlibet.QuodLibet
    4. Run QuodLibet via flatpak run io.github.quodlibet.QuodLibet
    5. Add a directory with music with various codecs (FLAC, WAV, ALAC etc.). to QuodLibet via File > Preferences > Library
    6. Start random playback of music by hitting space

    Expected Output

    All songs would be played back at random, one after another.

    Actual Output

    When hitting any ALAC encoded song along the cue QuodLibet would stop the playback and display an error: No GStreamer element found to handle media format. Media format: Apple Lossless Audio (ALAC) decoder.

    Test System

    Which version of Quod Libet?

    4.5.0, stable

    Which operating system

    • OS: Manjaro Linux x86_64
    • Host: 21D4CTO1WW ThinkPad Z16 Gen 1
    • Kernel: 6.1.1-1-MANJARO
    • Shell: zsh 5.9
    • DE: GNOME 43.2
    • WM: Mutter
    • WM Theme: Adwaita
    • Terminal: kgx
    • CPU: AMD Ryzen 5 PRO 6650H with Radeon Graphics (12) @ 3.300GHz
    • GPU: AMD ATI Radeon 680M
    • Memory: 11349MiB / 15255MiB
    • Compositor: Wayland
    • Audio server: PipeWire 1:0.3.63-1
    • Audio session manager: WirePlumber 0.4.13-1

    If it's audio-related, what back-end?

    gstreamer 1.20.5-1 extra

    Additional Information

    I tried to install manjaro-gstreamer and gst-libav packages but neither of them fixed the issue. Also, due to lack of experience (I guess), I wasn't able to get any meaningful log output. I tried journalctl _PID= and to run the app from the command line via flatpak run io.github.quodlibet.QuodLibet.

    bug 
    opened by amadeusp 0
  • Allow sorting not to use sort tags if configured

    Allow sorting not to use sort tags if configured

    The proposed change

    When sorting by artist or album, it should be possible to disable using the artistsort and albumsort tags.

    Benefits of this change

    It will be up to the user to define which tags to use. Using the *sort tags can have quite surprising results

    image

    When scrolling through songs or views to visually find stuff, this kind of sorting feels very unintuitive.

    Any issues this might cause

    It might require refactoring in multiple places.

    enhancement browsers songlist 
    opened by LoveIsGrief 0
  • Dequeue after song ended

    Dequeue after song ended

    The proposed change

    Lately I have been using quodlibet a little more intensively. I had to get back to using the queue list, since I wanted to clean up my tags meanwhile. And finally I'm still facing the "problem" of the track disappearing as soon it starts playing. I had tried to solve this in #3907.

    I would prefer that the track being played remains displayed (and selected by default) at the top of the queue. It could allow for example to change its rating, see its tags, etc. I know it's possible to get that on the player itself with right-click, but I forget it each time I need to do that. Most of the time I access the contextual menu on the track lists.

    I don't know if others see a problem here? I'd like to reopen the debate on this...

    Benefits of this change

    See above

    Any issues this might cause

    It may change habits, but I guess in that sense it wouldn't bother.

    enhancement 
    opened by jej 1
  • Disable search clearing button when there is no search text

    Disable search clearing button when there is no search text

    Discussed in https://github.com/quodlibet/quodlibet/discussions/4229

    Originally posted by stabilergriller December 25, 2022 Just a small suggestion. How about greying out the arrow pointing left in the search field, when there's no term entered?

    This is how it looks like in the moment:

    Screenshot_2022-12-25_16-52-24

    Mock up for my idea:

    Screenshot_2022-12-25_16-56-00

    (This is not something I did myself, but rather a bug that occurs when switching between light / dark version of a theme in the plugins section - I think)

    So after entering one / several characters in empty field => turn icon from grey to black When deleting character(s) => turn icon from black to grey, if no chars left

    Of course, one must also account for dark themes.

    Tested on Pop!_OS 22.04 LTS (Live CD) with QL installed from Repository (not Flatpak)

    enhancement browsers 
    opened by declension 3
Releases(release-4.5.0)
Owner
Quod Libet
Music player and music library manager for Linux, Windows, and macOS
Quod Libet
This is an OverPowered Vc Music Player! Will work for you and play music in Voice Chatz

VcPlayer This is an OverPowered Vc Music Player! Will work for you and play music in Voice Chatz Telegram Voice-Chat Bot [PyTGCalls] ⇝ Requirements ⇜

null 1 Dec 20, 2021
Music player - endlessly plays your music

Music player First, if you wonder about what is supposed to be a music player or what makes a music player different from a simple media player, read

Albert Zeyer 482 Dec 19, 2022
SU Music Player — The first open-source PyTgCalls based Pyrogram bot to play music in voice chats

SU Music Player — The first open-source PyTgCalls based Pyrogram bot to play music in voice chats Note Neither this, or PyTgCalls are fully

SU Projects 58 Jan 2, 2023
XA Music Player - Telegram Music Bot

XA Music Player Requirements ?? FFmpeg (Latest) NodeJS nodesource.com (NodeJS 17+) Python (3.10+) PyTgCalls (Lastest) MongoDB (3.12.1) 2nd Telegram Ac

RexAshh 3 Jun 30, 2022
music library manager and MusicBrainz tagger

beets Beets is the media library management system for obsessive music geeks. The purpose of beets is to get your music collection right once and for

beetbox 11.3k Dec 31, 2022
The project aims to develop a personal-assistant for Windows & Linux-based systems

The project aims to develop a personal-assistant for Windows & Linux-based systems. Samiksha draws its inspiration from virtual assistants like Cortana for Windows, and Siri for iOS. It has been designed to provide a user-friendly interface for carrying out a variety of tasks by employing certain well-defined commands.

SHUBHANSHU RAI 1 Jan 16, 2022
Anki vector Music ❤ is the best and only Telegram VC player with playlists, Multi Playback, Channel play and more

Anki Vector Music ?? A bot that can play music on Telegram Group and Channel Voice Chats Available on telegram as @Anki Vector Music Features ?? Thumb

Damantha Jasinghe 12 Nov 12, 2022
❤️ Hi There Im Cozmo Music Bot A next gen powerful telegram group Music bot for get your Songs and music @Venuja_Sadew

?? Cozmo MUSIC ?? Cozmo Music is a Music powerfull bot for playing music on telegram voice chat groups. Requirements FFmpeg NodeJS nodesource.com Pyth

Venuja Sadew 3 Jan 8, 2022
NovaMusic is a music sharing robot. Users can get music and music lyrics using inline queries.

A music sharing telegram robot using Redis database and Telebot python library using Redis database.

Hesam Norin 7 Oct 21, 2022
Stevan KZ 1 Oct 27, 2021
A simple music player, powered by Python, utilising various libraries such as Tkinter and Pygame

A simple music player, powered by Python, utilising various libraries such as Tkinter and Pygame

PotentialCoding 2 May 12, 2022
Okaeri-Music is a telegram music bot project, allow you to play music on voice chat group telegram.

Okaeri-Music is a telegram bot project that's allow you to play music on telegram voice chat group

Wahyusaputra 1 Dec 22, 2021
Okaeri-Music is a telegram music bot project, allow you to play music on voice chat group telegram.

??️ PROJECT MUSIC,THIS IS MAINTAINED Okaeri-Music is a telegram bot project that's allow you to play music on telegram voice chat group Features ?? Th

Okaeri-Project 2 Dec 23, 2021
:notes: Cross-platform music player

Exaile Exaile is a music player with a simple interface and powerful music management capabilities. Features include automatic fetching of album art,

Exaile 327 Dec 19, 2022
A Music Player Bot for Discord Servers

A Music Player Bot for Discord Servers

Halil Acar 2 Oct 25, 2021
An 8D music player made to enjoy Halloween this year!🤘

HAPPY HALLOWEEN buddy! Split Player Hello There! Welcome to SplitPlayer... Supposed To Be A 8DPlayer.... You Decide.... It can play the ordinary audio

Akshat Kumar Singh 1 Nov 4, 2021
A music player designed for a University Project.

A music player designed for a University Project. Very flexibe and easy to use, a real life working application with user friendly controls. Hope u enjoy!!

Aditya Johorey 1 Nov 19, 2021
A Quick Music Player Made Fully in Python

Quick Music Player Made Fully In Python. Pure Python, cross platform, single function module with no dependencies for playing sounds. Installation & S

null 1 Dec 24, 2021
Vixtify - Python Controlled Music Player

Strumm Sound Playlist : Click me to listen Welcome to GitHub Pages You can use the editor on GitHub to maintain and preview the content for your websi

Vicky Kumar 2 Feb 3, 2022