Skip to main content

Django App for Music Publishers

Project description

https://travis-ci.com/matijakolaric-com/django-music-publisher.svg?branch=master https://coveralls.io/repos/github/matijakolaric-com/django-music-publisher/badge.svg?branch=master https://img.shields.io/pypi/l/django-music-publisher.svg https://img.shields.io/pypi/v/django-music-publisher.svg https://img.shields.io/pypi/pyversions/django-music-publisher.svg https://img.shields.io/pypi/djversions/django-music-publisher.svg https://img.shields.io/pypi/status/django-music-publisher.svg https://img.shields.io/badge/home-matijakolaric.com-d50000.svg

This is a simple Django app for original music publishers. The app is released under MIT license and is basically free. At this point, it covers all the data required for batch registrations of musical works.

Introduction

https://matijakolaric-com.github.io/django-music-publisher/overview.png

Use Case

This app is targeted at single original publishers, publishing original musical works. (Original work is one that is not a modification of an existing musical work.) It holds data on musical works, including songwriters (composers and lyricists), performing artists, albums, library releases etc, and allows batch registrations.

Multiple writers, both controlled and uncontrolled, are covered, but data on other publishers (other original publishers, administrators and sub-publishers) can not be entered. This is just enough data for acquiring ISWCs.

A special US situation where an original publisher may have one entity for every of the three PROs is also covered since version 18.8.

It is presumed that writers keep 50% of performing rights and the other 50%, as well as 100% of mechanical and sync goes to the original publisher.

Alternate titles and basic data on performing artists and just enough data for registration of library works, as well as full data about the first recording, can be entered.

This translates to following CWR 2.1 transaction record types:

  • NWR/REV,

  • SPU (just one), SPT (just World),

  • SWR, SWT (just World), PWR (including society-assigned agreement number),

  • OWR,

  • ALT,

  • PER,

  • REC (single) and

  • ORN (limited to library).

Common Works Registration is used for batch registrations, although the actual generation requires an external commerical service.

Django Music Publisher app works without it, but data will not be validated as CWR-compliant, and there will be no way to create CWR, unless you make your own. The CWR generation could be solved with a template, but without the former, it would most likely not result in valid CWR files.

Processing of CWR acknowledgement files works without the external service.

Processing of incoming royalty statements is on the roadmap, to be added later in 2018.

Beyond

If you are looking for a solution that covers more territory, this may be an educational proof of concept, maybe even a good starting point for a custom development.

Please note that the limitations of this project are not chosen based on technical complexity of additional features, but due to the fact that beyond this point, the learning curve gets really steep, both for software developers and users.

Common Works Registration (CWR), or even the baby version of it, Electronic Batch Registration (EBR), is usually the most time-consumig part of any software project for music publishers. You may be interested in using external REST API service for data validation, as well as generation and parsing of CWR files.

CWR Developer Toolset

This particular software uses two simplest of the REST API tools from the CWR Developer Toolset, one for data validation and one for generation of CWR files.

Even if you need a far more complex CWR, this project is still a good proof of concept how well these tools work.

Installing the app

If you want to install the django_music_publisher app, just use pip:

pip install --upgrade django_music_publisher

Add music_publisher.apps.MusicPublisherConfig to INSTALLED_APPS, no URLs need to be added, as everything goes through the Django Admin.

You will have to add this to the settings, replace with your data.

MUSIC_PUBLISHER_SETTINGS = {
    'admin_show_publisher': False,
    'admin_show_saan': True,

    'token': None,
    'validator_url': None,
    'generator_url': None,

    'publisher_id': 'TOP',  # THE 2-3 letter CWR delivery publisher code
    'publisher_name': 'THE ORIGINAL PUBLISHER',  # the publisher name
    'publisher_ipi_name': '00000000199',  # IPI name number
    'publisher_ipi_base': 'I0000000393',  # IPI base number (rarely used)
    'publisher_pr_society': '052',  # Performing Rights Society Code
    'publisher_mr_society': '044',  # Mechanical Rights Society Code
    'publisher_sr_society': None,  # Sync Rights Society Code (rarely used)

    'library': 'THE FOO LIBRARY',  # Use only if you are in library music
    'label': 'FOO BAR MUSIC',  # Use only if you are also a label
}

For US publishers with entities in different PROs, define the “main” publisher first, which is original publisher for affiliates in the respective PRO and foreign societies. Then define ones in other PROs.

MUSIC_PUBLISHER_SETTINGS = {
    'admin_show_publisher': True,
    'admin_show_saan': False,

    'token': None,
    'validator_url': None,
    'generator_url': None,

    'publisher_id': 'FOO',
    'publisher_name': 'FOO S MUSIC PUBLISHING',
    'publisher_ipi_name': '00000000199',
    'publisher_pr_society': '071',  # SESAC
    'publisher_mr_society': '034',  # HFA
    'publisher_sr_society': None,

    'us_publisher_override': {
        'ASCAP': {
            'publisher_id': 'FOOA',
            'publisher_name': 'FOO A MUSIC PUBLISHING',
            'publisher_ipi_name': '00000000493',
            'publisher_pr_society': '010',  # ASCAP
            'publisher_mr_society': '034',  # HFA
            'publisher_sr_society': None,
        },
        'BMI': {
            'publisher_id': 'FOOB',
            'publisher_name': 'FOO B MUSIC PUBLISHING',
            'publisher_ipi_name': '00000000395',
            'publisher_pr_society': '021',  # BMI
            'publisher_mr_society': '044',  # HFA
            'publisher_sr_society': None,
        },
        'SESAC': None,  # Already defined, set to None
    },

    'library': 'FOO BAR MUSIC LIBRARY',
    'label': 'FOO BAR MUSIC',
}

When you apply for a free 15-day demo licence, additional documentation will be provided, as well as token, validator_url, and creator_url values.

Installing the project (standalone deployment)

You can only install this project on a computer that has Python 3 preinstalled. Supported versions are 3.5 and 3.6. It might work with other Python 3 versions, but not with Python 2. It is advised you run this inside a virtual environment.

Do:

python3 -m venv dmp
cd dmp
source bin/activate
git clone https://github.com/matijakolaric-com/django-music-publisher.git
cd django-music-publisher
pip install -r requirements.txt

The next step is to create dmp_project/local_settings.py or edit dmp_project/settings.py. Regardless, SECRET_KEY and MUSIC_PUBLISHER_SETTINGS (see above for details) must be set. Then:

python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

Then open the following link: http://localhost:8000/ and log in with credentials you provided.

Societies

The only optional setting is MUSIC_PUBLISHER_SOCIETIES. In the default setup, only 12 societies from six countries are present. If you need to add additional societies, do it with this setting (and not in the models.py).

Societies the original publisher and writers are affiliated with, as well as all societies whose acknowledgement files are being imported, must be present.

Validation and CWR Generation Service

As stated above, this tool uses an external service for data validation and generation of CWR files, which is a part of CWR Developer Toolset.

Free 15 day demo licence is available upon requests. Contact us through this Contact Page.

Walkthrough and Demo

Walkthrough is available in the docs folder.

Demo is available, some demo data is provided. There are two versions, the US and the World version:

More information

More information can be found in this page https://matijakolaric.com/articles/2/.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-music-publisher-18.8.tar.gz (624.8 kB view details)

Uploaded Source

Built Distribution

django_music_publisher-18.8-py2.py3-none-any.whl (25.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django-music-publisher-18.8.tar.gz.

File metadata

  • Download URL: django-music-publisher-18.8.tar.gz
  • Upload date:
  • Size: 624.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.5.2

File hashes

Hashes for django-music-publisher-18.8.tar.gz
Algorithm Hash digest
SHA256 ecd14f8aefed22498e26907040f55b02526a78c771de7a4ae3367a0561126252
MD5 16d8cef8dbdcb76c50fb2c70f6e8fe1a
BLAKE2b-256 0e061fc064695b7600d9ccc8a15208a0e8449c0c9f532a857252fd8ef659f412

See more details on using hashes here.

File details

Details for the file django_music_publisher-18.8-py2.py3-none-any.whl.

File metadata

  • Download URL: django_music_publisher-18.8-py2.py3-none-any.whl
  • Upload date:
  • Size: 25.8 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.5.2

File hashes

Hashes for django_music_publisher-18.8-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 3048457afb1e5c3f199c444ac27e8b7b6cf9036deadc103092add0b84e763937
MD5 e7fc5fbd55f7eb2c5270a91521851391
BLAKE2b-256 465d761e6b794ec57e9dc95129096249acf3e7a6d4e01da982e04647f868831e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page