Common Works Registration (CWR) File Format
In this article, one of several articles about CWR, the Common Works Registration format will be covered. CWR can not be created manually, specialised software is required.
If you are developing software, then this is the right article for you.
If you are looking for CWR-capable software, instead of technical explanations, take a look at Django-Music-Publisher. It has great documentation and video tutorials. And it is free.
If you already use commercial software that outputs CWR, and you ran into problems, consider using our Visual CWR Validator.
OK. Let’s get technical!
Underlying Format
CWR is based on EDI, a long-obsolete standard for data exchange over 300bps modems from the seventies. I will not go into reasons why CISAC still insists on it, even plans to release at least two more versions. It is a fixed-width text format, and here is a CWR 2.1 example created form made-up data in DMP.
HDRPB000000199DMP DEMO PUBLISHING 01.102019021516052620190215 GRHREV0000102.100000000000 REV0000000000000000THE ONE DMP000001 00000000 UNC000000Y ORI N00000000000 N SPU000000000000000101DMP DMP DEMO PUBLISHING E 00000000000000000199 052050000441000004410000 N SPT0000000000000002DMP 050001000010000I2136N001 SWR0000000000000003W000001 SMITH JOHN JAMES CA0000000000000000039521 05000 00000 00000 N SWT0000000000000004W000001 050000000000000I2136N001 PWR0000000000000005DMP DMP DEMO PUBLISHING SAAN12345 W000001 ALT0000000000000006THE ONE BED AT ALT0000000000000007THE ONE DRUMS ONLY AT ALT0000000000000008THE ONE NO DRUMS AT ALT0000000000000009THE ONE STING AT PER0000000000000010THE BAND REC000000000000001100000000 000000 DML ORN0000000000000012LIB INTERNET 0000DMP DEMO LIBRARY 0000 REV0000000100000000SECOND BEST DMP000002 00000000 UNC000000U ORI N00000000000 N SPU000000010000000101DMP DMP DEMO PUBLISHING E 00000000000000000199 052025000440500004405000 N SPT0000000100000002DMP 025000500005000I2136N001 SWR0000000100000003W000001 SMITH JOHN JAMES CA0000000000000000039521 02500 00000 00000 N SWT0000000100000004W000001 025000000000000I2136N001 PWR0000000100000005DMP DMP DEMO PUBLISHING SAAN12345 W000001 OWR0000000100000006W000003 ADAMS AARON CA00000000000000000000 05000 05000 05000 ALT0000000100000007SECOND PLACE AT GRT000010000000200000023 0000000000 TRL000010000000200000025
Please note that CWR 2.2 is a dead-end and CWR 3.0 is not in real use yet. More in the article about CWR Versions.
Here is an example of the same data in normalized JSON (created from the above file with our free CWR 2.1 parser, something that is quite familiar to contemporary software developers:
{ "writers": { "W000001": { "last_name": "Smith", "first_name": "John James", "ipi_name": "00000000395", "pr_society": "21" }, "W000003": { "last_name": "Adams", "first_name": "Aaron" } }, "publishers": { "DMP": { "name": "DMP Demo Publishing", "ipi_name": "00000000199", "pr_society": "052", "mr_society": "044" } }, "albums": {}, "artists": { "A000001": { "last_name": "The Band" } }, "libraries": { "L001": { "name": "DMP Demo Library" } }, "works": { "DMP000002": { "work_title": "Second Best", "version_type": "original", "alternate_titles": [ { "alternate_title": "Second Place" } ], "writers_for_work": [ { "controlled": true, "relative_share": "0.50", "writer_id": "W000001", "capacity": "CA", "publishers_for_writer": [ { "publisher_id": "DMP", "agreement": { "saan": "SAAN12345", "type": "OG" } } ] }, { "controlled": false, "relative_share": "0.50", "writer_id": "W000003", "capacity": "CA" } ], "live_artists": [], "society_work_codes": [] }, "DMP000001": { "work_title": "The One", "version_type": "original", "alternate_titles": [ { "alternate_title": "The One Bed" }, { "alternate_title": "The One No Drums" }, { "alternate_title": "The One Drums Only" }, { "alternate_title": "The One Sting" } ], "writers_for_work": [ { "controlled": true, "relative_share": "1.00", "writer_id": "W000001", "capacity": "CA", "publishers_for_writer": [ { "publisher_id": "DMP", "agreement": { "saan": "SAAN12345", "type": "OG" } } ] } ], "recordings": { "R000001": { "isrc": "", "record_label": "DML", "artist_id": "A000001" } }, "source": { "type": "library", "library_id": "L001", "cd_identifier": "INTERNET" }, "live_artists": [], "society_work_codes": [] } } }
The two works represented here contain only very basic data, most notably only the data about a single original publisher for a controlled writer. In reality, contemporary CWR files often also contain data about several original publishers for each work, administrators, and many sub-publishers with different society affiliations for their respective territories, data on agreements and different share splits for different territories. CWR files with over 100 lines per work are quite common these days, and 1000+ lines are no longer exceptions.
But it is not the size that makes CWR complicated, nor this obsolete format. It is the complexity of validation rules, which differ from one society to the next and not all are documented. While a single CWR file should work everywhere, there are edge cases when the rules by different societies are conflicting. The tools on this site can help in the process of figuring thigs out. They are divided into the free tools, development tools and commercial services.
If you choose to do it the hard way, you should go to https://www.cisac.org and search the documents for CWR. The proper overview is in the article about CWR Documentation.