Picard Qt / Plugin API

This page has not been reviewed by our documentation team (more info).

Contents

APIs for PicardQt Plugins

API documentation for PicardQt plugins.

Metadata Processors

MusicBrainz metadata can be post-processed at two levels, album and track.

Album metadata example:

    1  PLUGIN_NAME = "Disc Numbers"
    2  PLUGIN_AUTHOR = "Lukas Lalinsky"
    3  PLUGIN_DESCRIPTION = "Moves disc numbers from album titles to tags."
    4  
    5  from picard.metadata import register_album_metadata_processor
    6  import re
    7  
    8  def remove_discnumbers(metadata, release):
    9      matches = re.search(r"\(disc (\d+)\)", metadata["album"])
   10      if matches:
   11          metadata["discnumber"] = matches.group(1)
   12          metadata["album"] = re.sub(r"\(disc \d+\)", "", metadata["album"])
   13  
   14  register_album_metadata_processor(remove_discnumbers)

Track metadata example:

    1  PLUGIN_NAME = "Feat. Artists"
    2  PLUGIN_AUTHOR = "Lukas Lalinsky"
    3  PLUGIN_DESCRIPTION = "Removes feat. artists from track titles."
    4  
    5  from picard.metadata import register_track_metadata_processor
    6  import re
    7  
    8  def remove_featartists(metadata, release, track):
    9      metadata["title"] = re.sub(r"\(feat. [^)]*\)", "", metadata["title"])
   10  
   11  register_track_metadata_processor(remove_featartists)

File Formats

Example:

    1  PLUGIN_NAME = "..."
    2  PLUGIN_AUTHOR = "..."
    3  PLUGIN_DESCRIPTION = "..."
    4  
    5  from picard.file import File
    6  from picard.formats import register_format
    7  
    8  class MyFile(File):
    9      EXTENSIONS = [".foo"]
   10      NAME = "Foo Audio"
   11      def read(self):
   12          ....
   13      def save(self):
   14          ....
   15  
   16  register_format(MyFile)

Tagger Script Functions

To define new tagger script function use register_script_function(function, name=None) from module picard.script.

Example:

    1  PLUGIN_NAME = "Initials"
    2  PLUGIN_AUTHOR = "Lukas Lalinsky"
    3  PLUGIN_DESCRIPTION = "Provides tagger script function $initials(text)."
    4  
    5  from picard.script import register_script_function
    6  
    7  def initials(parser, text):
    8      return "".join(a[:1] for a in text.split(" ") if a[:1].isalpha())
    9  
   10  register_script_function(initials)