-
Notifications
You must be signed in to change notification settings - Fork 3
Add Music Metadata Guide from template repo #20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: copilot/fix-all-issues
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,294 @@ | ||||||
| # Music Metadata Guide for Independent Artists | ||||||
|
|
||||||
| ## Introduction | ||||||
|
|
||||||
| Welcome to the definitive guide on music metadata for independent artists. This resource aims to help you properly document your music so you can maximize your discoverability, ensure proper royalty collection, and avoid the dreaded "black box" where unclaimed funds disappear. | ||||||
|
|
||||||
| As an independent artist, your metadata is your digital footprint—it's how streaming platforms, collection societies, and fans identify and find your work. Getting this right from the start can make a significant difference in your career trajectory. | ||||||
|
|
||||||
| ## Why Metadata Matters | ||||||
|
|
||||||
| - **Royalty Collection**: Ensures your earnings reach you instead of ending up in the "black box" of unclaimed royalties | ||||||
| - **Discoverability**: Makes your music easier to find through search and recommendation algorithms | ||||||
| - **Professional Presentation**: Provides a consistent, polished experience for listeners across platforms | ||||||
| - **Rights Protection**: Properly documents your ownership and creative contributions | ||||||
|
|
||||||
| ## Essential Metadata Fields | ||||||
|
|
||||||
| ### Basic Track Information | ||||||
| - **Track Title**: Use consistent capitalization and spelling | ||||||
| - **Artist Name(s)**: Include all contributing artists | ||||||
| - **Album/Release Title**: Match exactly across all platforms | ||||||
| - **Release Date**: Use YYYY-MM-DD format | ||||||
| - **Genre(s)**: Be specific but relevant | ||||||
| - **Language**: Specify the language of vocals | ||||||
|
|
||||||
| ### Identifiers | ||||||
| - **ISRC** (International Standard Recording Code): Unique identifier for each recording | ||||||
| - **UPC/EAN** (Universal Product Code): Identifies your release as a whole | ||||||
| - **ISWC** (International Standard Musical Work Code): Identifies the underlying composition | ||||||
|
|
||||||
| ### Rights Management | ||||||
| - **Songwriter(s)**: Full legal names of all writers | ||||||
| - **Publisher(s)**: Publishing company information | ||||||
| - **Producer(s)**: Production credits | ||||||
| - **PRO Affiliation**: Your Performance Rights Organization (ASCAP, BMI, SESAC, etc.) | ||||||
| - **Split Sheets**: Documentation of ownership percentages | ||||||
|
|
||||||
| ### Technical Information | ||||||
| - **BPM**: Tempo information | ||||||
| - **Key**: Musical key | ||||||
| - **Explicit Content**: Yes/No designation | ||||||
| - **Sound Recording Copyright Owner**: Usually "℗ [Year] [Record Label/Artist Name]" | ||||||
| - **Composition Copyright Owner**: Usually "© [Year] [Publisher/Writer Name]" | ||||||
|
|
||||||
| ## Key Identifiers for Indie Artists | ||||||
|
|
||||||
| 1. **EIN (Employer Identification Number):** | ||||||
| - **What it is:** A unique number assigned by the IRS to business entities for tax reporting. | ||||||
| - **Why needed:** Required for tax purposes, especially if the artist is operating as a business entity. | ||||||
| - **Where to register:** Through the IRS website. | ||||||
|
|
||||||
| 2. **IPI (Interested Parties Information):** | ||||||
| - **What it is:** A unique identifier used by performing rights organizations to track songwriters and publishers. | ||||||
| - **Why needed:** Essential for royalty collection and ensuring rights holders are properly credited. | ||||||
| - **Where to register:** Via a Performing Rights Organization (PRO) like ASCAP, BMI, or SESAC. | ||||||
|
|
||||||
| 3. **ISRC (International Standard Recording Code):** | ||||||
| - **What it is:** A unique identifier for sound recordings and music video recordings. | ||||||
| - **Why needed:** Facilitates the tracking of recordings for royalty payments. | ||||||
| - **Where to register:** Through a national ISRC agency or directly from the RIAA if you are in the US. | ||||||
|
|
||||||
| 4. **ISWC (International Standard Musical Work Code):** | ||||||
| - **What it is:** Identifies musical works and is used to manage rights and royalties. | ||||||
| - **Why needed:** Ensures that songwriters are credited and compensated. | ||||||
| - **Where to register:** Typically handled by a PRO when you register your compositions. | ||||||
|
|
||||||
| 5. **ISNI (International Standard Name Identifier):** | ||||||
| - **What it is:** A unique identifier for the identities of public figures, including artists. | ||||||
| - **Why needed:** Helps in distinguishing between artists with similar names. | ||||||
| - **Where to register:** Through an ISNI registration agency. | ||||||
|
|
||||||
| 6. **Work ID:** | ||||||
| - **What it is:** An internal identifier used by PROs to track specific works. | ||||||
| - **Why needed:** For managing rights and ensuring accurate royalty distribution. | ||||||
| - **Where to register:** Automatically assigned when you register a work with a PRO. | ||||||
|
|
||||||
| ## Adding Your ISNI to Music Metadata: Why It Matters | ||||||
|
|
||||||
| As an independent artist, ensuring your music metadata is accurate and comprehensive is crucial for proper crediting and potential royalty collection. One key piece of information you should consider adding, if you have one, is your **International Standard Name Identifier (ISNI)**. | ||||||
|
|
||||||
| **What is an ISNI?** | ||||||
|
|
||||||
| Think of an ISNI as a unique digital ID for creators and rights holders in the music industry (and beyond!). It helps distinguish you from other artists with similar names and ensures your contributions are correctly attributed to you across various databases and platforms. | ||||||
|
|
||||||
| **Why include your ISNI in your music metadata?** | ||||||
|
|
||||||
| * **Unique Identification:** It provides a clear and unambiguous way to identify you as a creator. | ||||||
| * **Accurate Crediting:** Helps ensure you receive proper credit for your work as a performer, songwriter, or producer. | ||||||
| * **Streamlined Royalty Collection:** While not directly a royalty collection tool, accurate identification can contribute to smoother rights management. | ||||||
| * **Professional Standard:** Including an ISNI demonstrates attention to detail and adherence to industry best practices. | ||||||
|
|
||||||
| **Where can you include your ISNI?** | ||||||
|
|
||||||
| While not all metadata fields in distribution platforms currently have a dedicated "ISNI" field, here are some places you might be able to include it or discuss its inclusion with your distributor: | ||||||
|
|
||||||
| * **Artist Name Field:** If there's no specific ISNI field, and if it's permitted by the platform's guidelines, you *could* append your ISNI to your artist name (e.g., "Your Artist Name (ISNI: 0000-0000-0000-0000)"). However, **always check the platform's guidelines first** as this might not be the intended use of the artist name field. | ||||||
| * **Contributor/Composer/Writer Fields:** Some platforms allow you to specify roles and provide identifiers for contributors. If an ISNI field is available for these roles, be sure to include it. | ||||||
| * **Notes or Comments Section:** Some platforms might have a general notes or comments section where you could include your ISNI for reference. | ||||||
| * **Communicate with your Distributor:** The best approach is to inquire with your music distributor about whether they have a specific field for ISNI or if they have recommendations on where to include it in your metadata. | ||||||
|
|
||||||
| **How to get an ISNI:** | ||||||
|
|
||||||
| If you don't have an ISNI, you can obtain one through an official ISNI registration agency. Some platforms, like Sound Credit, may also offer ISNI registration services. | ||||||
|
|
||||||
| ## Platforms & Resources | ||||||
|
|
||||||
| ### Distribution Services | ||||||
| - **DistroKid**: Allows detailed metadata input, fast distribution | ||||||
| - **TuneCore**: Comprehensive metadata fields, strong accounting features | ||||||
| - **CD Baby**: User-friendly interface, established reputation | ||||||
| - **Amuse**: Free tier available, mobile-first approach | ||||||
| - **UnitedMasters**: Strong marketing tools alongside distribution | ||||||
|
|
||||||
| ### Metadata Management Tools | ||||||
| - **Soundcharts**: Monitor your music performance across platforms | ||||||
| - **Songtradr**: Metadata enhancement and music licensing | ||||||
| - **VEVA Sound**: Professional metadata capture and management | ||||||
|
|
||||||
| ### PROs & Collection Societies | ||||||
| - **US**: ASCAP, BMI, SESAC | ||||||
| - **UK**: PRS for Music | ||||||
| - **Canada**: SOCAN | ||||||
| - **Australia**: APRA AMCOS | ||||||
| - **International**: CISAC directory of worldwide societies | ||||||
|
|
||||||
| ### Royalty Collection | ||||||
| - **SoundExchange**: Collects digital performance royalties in the US | ||||||
| - **Music Reports**: Royalty administration and claiming service | ||||||
| - **Kobalt**: Publishing administration with strong technology focus | ||||||
| - **Songtrust**: Global royalty collection for indie artists | ||||||
|
|
||||||
| ## Best Practices | ||||||
|
|
||||||
| 1. **Be Consistent**: Use identical metadata across all platforms | ||||||
| 2. **Register Early**: Join your local PRO before releasing music | ||||||
| 3. **Document Everything**: Keep records of all collaborators and agreements | ||||||
| 4. **Use Templates**: Create metadata templates for your releases | ||||||
| 5. **Verify Before Release**: Double-check all information prior to distribution | ||||||
| 6. **Monitor Your Catalog**: Regularly check for missing royalties or metadata issues | ||||||
| 7. **Learn Industry Standards**: Follow DDEX standards when possible | ||||||
|
|
||||||
| ## Common Pitfalls to Avoid | ||||||
|
|
||||||
| - Inconsistent artist name spelling across platforms | ||||||
| - Missing or incomplete songwriter information | ||||||
| - Failure to register works with PROs | ||||||
| - Overlooking international collection opportunities | ||||||
| - Using temporary or placeholder metadata | ||||||
| - Ignoring administrative aspects of music publishing | ||||||
| - Not documenting collaboration splits before release | ||||||
|
|
||||||
| ## Future-Proofing Your Catalog | ||||||
|
|
||||||
| - Keep a master spreadsheet of all your metadata | ||||||
| - Back up all agreements and documentation | ||||||
| - Stay informed about industry metadata standards | ||||||
| - Consider blockchain and emerging technologies for rights management | ||||||
| - Document your studio setup and recording processes | ||||||
|
|
||||||
| ## Sample Metadata Management App | ||||||
|
|
||||||
| Creating an app to help music publishers and independent artists manage their metadata involves a combination of technical and domain-specific knowledge. Below are sample code snippets to guide you in developing such an app. | ||||||
|
|
||||||
| > **Note:** These are basic examples for learning purposes only. For production use, add input validation, secure data storage, authentication, and set `debug=False`. Never log sensitive identifiers like EIN to console output. | ||||||
|
|
||||||
| ### Basic Metadata App (Python/Flask) | ||||||
|
|
||||||
| Backend code (Python using Flask): | ||||||
| ```python | ||||||
| from flask import Flask, render_template, request | ||||||
|
|
||||||
| app = Flask(__name__) | ||||||
|
|
||||||
| metadata = {} | ||||||
|
|
||||||
| @app.route('/') | ||||||
| def index(): | ||||||
| return render_template('index.html', metadata=metadata) | ||||||
|
|
||||||
| @app.route('/update_metadata', methods=['POST']) | ||||||
| def update_metadata(): | ||||||
| song_name = request.form['song_name'] | ||||||
| artist = request.form['artist'] | ||||||
| genre = request.form['genre'] | ||||||
|
|
||||||
| metadata[song_name] = {'artist': artist, 'genre': genre} | ||||||
|
|
||||||
| return render_template('index.html', metadata=metadata) | ||||||
|
|
||||||
| if __name__ == '__main__': | ||||||
| app.run(debug=True) | ||||||
| ``` | ||||||
|
|
||||||
| Frontend code (HTML/CSS): | ||||||
| ```html | ||||||
| <!DOCTYPE html> | ||||||
| <html> | ||||||
| <head> | ||||||
| <title>Metadata App</title> | ||||||
| </head> | ||||||
| <body> | ||||||
| <h1>Metadata App for Indie Artists</h1> | ||||||
| <form action="/update_metadata" method="post"> | ||||||
| <label for="song_name">Song Name:</label> | ||||||
| <input type="text" name="song_name"> | ||||||
| <br> | ||||||
| <label for="artist">Artist:</label> | ||||||
| <input type="text" name="artist"> | ||||||
| <br> | ||||||
| <label for="genre">Genre:</label> | ||||||
| <input type="text" name="genre"> | ||||||
| <br> | ||||||
| <input type="submit" value="Update Metadata"> | ||||||
| </form> | ||||||
|
|
||||||
| <h2>Current Metadata</h2> | ||||||
| <ul> | ||||||
| {% for song_name, data in metadata.items() %} | ||||||
| <li>{{ song_name }} - Artist: {{ data['artist'] }}, Genre: {{ data['genre'] }}</li> | ||||||
| {% endfor %} | ||||||
| </ul> | ||||||
| </body> | ||||||
| </html> | ||||||
| ``` | ||||||
|
|
||||||
| ### Metadata Registration App with Identifiers | ||||||
|
|
||||||
| This expanded version includes fields for all key identifiers: | ||||||
|
|
||||||
| ```python | ||||||
| from flask import Flask, render_template, request | ||||||
|
|
||||||
| app = Flask(__name__) | ||||||
|
|
||||||
| @app.route('/') | ||||||
| def home(): | ||||||
| return render_template('index.html') | ||||||
|
|
||||||
| @app.route('/register', methods=['POST']) | ||||||
| def register(): | ||||||
| artist_name = request.form['artist_name'] | ||||||
| ein = request.form['ein'] | ||||||
| ipi = request.form['ipi'] | ||||||
| isrc = request.form['isrc'] | ||||||
| iswc = request.form['iswc'] | ||||||
| isni = request.form['isni'] | ||||||
| work_id = request.form['work_id'] | ||||||
| # Process registration data | ||||||
| print(f"Artist: {artist_name}, EIN: {ein}, IPI: {ipi}, ISRC: {isrc}, ISWC: {iswc}, ISNI: {isni}, Work ID: {work_id}") | ||||||
| return 'Registration successful' | ||||||
|
|
||||||
| if __name__ == '__main__': | ||||||
| app.run(debug=True) | ||||||
|
Comment on lines
+252
to
+253
|
||||||
| ``` | ||||||
|
|
||||||
| Registration form (save as `templates/index.html`): | ||||||
| ```html | ||||||
| <!DOCTYPE html> | ||||||
| <html> | ||||||
| <head> | ||||||
| <title>Music Metadata Registration</title> | ||||||
| </head> | ||||||
| <body> | ||||||
| <h1>Register Your Music Metadata</h1> | ||||||
| <form action="/register" method="post"> | ||||||
| <label for="artist_name">Artist Name:</label> | ||||||
| <input type="text" name="artist_name"><br> | ||||||
| <label for="ein">EIN:</label> | ||||||
| <input type="text" name="ein"><br> | ||||||
| <label for="ipi">IPI:</label> | ||||||
| <input type="text" name="ipi"><br> | ||||||
| <label for="isrc">ISRC:</label> | ||||||
| <input type="text" name="isrc"><br> | ||||||
| <label for="iswc">ISWC:</label> | ||||||
| <input type="text" name="iswc"><br> | ||||||
| <label for="isni">ISNI:</label> | ||||||
| <input type="text" name="isni"><br> | ||||||
| <label for="work_id">Work ID:</label> | ||||||
| <input type="text" name="work_id"><br> | ||||||
| <input type="submit" value="Register"> | ||||||
| </form> | ||||||
| </body> | ||||||
| </html> | ||||||
| ``` | ||||||
|
|
||||||
| To run either app, install Flask (`pip install flask`) and run the Python script. | ||||||
|
|
||||||
| ## Connect With The Community | ||||||
|
|
||||||
| Have questions? Join our Discord community of independent artists sharing knowledge about metadata best practices. | ||||||
|
||||||
| Have questions? Join our Discord community of independent artists sharing knowledge about metadata best practices. | |
| Have questions? Use the repository's issue tracker or discussion board to connect with other independent artists and maintainers and share knowledge about metadata best practices. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The note says to set
debug=Falsefor production, but the sample runs the server withdebug=True. Since these snippets are likely to be copy/pasted, consider changing this todebug=False(or reading from an env var) to avoid encouraging an unsafe default.