MBID Poller

This project provides a polling mechanism, packaged in a Docker container, to routinely check the MusicBrainz ID (MBID) status for items and then optionally trigger a search in a Lidarr instance.


💡 Acknowledgements

The core logic for the polling mechanism in this project is based on an existing script generously shared by GitHub user kchiem.

We are utilizing and adapting the Perl script found in the following public Gist:

We appreciate kchiem's contribution to the community!


🚀 Setup and Usage

This project is designed to run as a service alongside a Lidarr instance using Docker Compose.

1. Prerequisites

Before starting, ensure you have:

  1. Docker and Docker Compose installed.
  2. A running Lidarr instance.
  3. The project files (Dockerfile, poller.pl, docker-compose.yaml, etc.) in a single directory.

2. Configure Docker Compose

The mbid-poller container needs to communicate with your Lidarr instance.

  1. Rename the Example: Rename the provided docker-compose.yaml.example to docker-compose.yaml.
  2. Network Setup: Ensure the lidarr and mbid-poller services are on the same Docker network (e.g., example_network). If you use a different setup (like host network), update LIDARR_BASE accordingly.
  3. Lidarr Base URL: The script uses the Lidarr API to automatically add the polled artists. You must set the following environment variables in the mbid-poller service:

| Environment Variable | Description | Source in Lidarr | | LIDARR_BASE | The internal URL of your Lidarr instance. | N/A (Docker network alias) | | LIDARR_API_KEY | Your Lidarr API key. | Settings > General > API Key | | LIDARR_ROOT_FOLDER | The path for your music root folder as seen by Lidarr. | Settings > Media Management > Root Folders | | LIDARR_QUALITY_PROFILE_ID | The numerical ID for the desired Quality Profile. (Default is 1) | Settings > Profiles > Quality Profiles (Inspect element to find ID) | | LIDARR_METADATA_PROFILE_ID | The numerical ID for the desired Metadata Profile. (Default is 1) | Settings > Profiles > Metadata Profiles (Inspect element to find ID) |

3. Choose the MBID Input Source

The poller.pl script supports three different ways to provide MBIDs, in order of priority:

Environment Variable Priority Description
MBID_API_URL 1st (Highest) A URL that returns a JSON array of objects, each containing a foreignId field.
MBID_JSON_FILE 2nd A path to a local JSON file (like ids.json) containing the MBID array.
MBID_URL 3rd (Lowest) A single MusicBrainz URL or ID to process.

In your docker-compose.yaml, only one of these should be uncommented and set.

  1. Place your list of IDs in an ids.json file in the project directory (or adjust the volume mount).

  2. In docker-compose.yaml, comment out MBID_API_URL and uncomment MBID_JSON_FILE:

    # ... mbid-poller environment section
    environment:
      # ...
      - LIDARR_BASE=http://lidarr:8686
      - LIDARR_API_KEY=your_lidarr_api_key_here
      - LIDARR_ROOT_FOLDER=/music # Example
      - LIDARR_QUALITY_PROFILE_ID=1 # Example
      - LIDARR_METADATA_PROFILE_ID=1 # Example
      # - MBID_API_URL= 
      - MBID_JSON_FILE=/config/ids.json
      # - MBID_URL=... 
    volumes:
      - ./ids.json:/config/ids.json:ro # Maps your local file into the container
    

4. Build and Run

With your files and docker-compose.yaml configured, you can build and run the poller.

  1. Build the Container: This compiles the Perl dependencies using the Dockerfile.

    docker compose build mbid-poller
    
  2. Run the Poller: Since the restart policy is set to "no", this command will run the script once and exit.

    docker compose up mbid-poller
    

The script will fetch the IDs, then loop through them. For each ID, it will:

  1. Ping the external MusicBrainz API until a successful response is received.
  2. Use the Lidarr API to automatically add the artist and set it to monitored.
  3. Output a confirmation or error message before moving to the next artist.
Description
A polling script to populate content on Musicbrainz for a select list of artists provided by the user. With thanks to @kchiem for their perl script as the key piece of this image. https://gist.github.com/kchiem/eb998ac3c6f5a96cbec03b8e8c3b21a6
Readme 71 KiB
Languages
Perl 92.6%
Dockerfile 7.4%