This schema is intentionally minimal in hopes of being forwards compatible. It does not aim to be the source of truth for official music metadata
This is an iteration of the previous version, which sourced properties from DDEX, popular DSPs, and community members (see the comments on that document for existing feedback & discussion).
For many NFT projects, metadata is immutable or unlikely to be updated. Any information that is expected to change (e.g. publishing/master rights) is not meant to be captured here.
Crowdsourced thoughts (open for editing)
// *! = required*
{
"version": string!, // schema version
"title": string!,
"artist": string!,
// "artist": { // non-nullable
// "name": string!,
// "isni": string,
// ...
// },
"description": string,
"duration": number!, // seconds
"mimeType": string!,
"trackNumber": int, // starts at 1
"project": { // nullable
"title": string!,
"artwork": { // project artwork may be different from single artwork
"uri": string!, // ipfs://<CID>
"mimeType": string!,
"nft": string, // caip19 ([ref](<https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-19.md>))
},
"description": string,
"type": string, // eg: *EP, Album, Compilation*
"originalReleaseDate": DateTime ISO8601, // (or sumn)
"recordLabel": string, // what is this used for? unstable
"publisher": string, // what is this used for? unstable
"upc": string
},
"artwork": {
"uri": string!,
"mimeType": string!,
"nft": string, // caip19 ([ref](<https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-19.md>))
},
"visualizer": { // nullable
"uri": string!,
"mimeType": string!,
"nft": string, // caip19 ([ref](<https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-19.md>))
},
"genre": string, // limit: 50 chars
"tags": [string],
"lyrics": { // nullable
"text": string!,
"nft": string, // caip19 ([ref](<https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-19.md>))
}
"bpm": number,
"key": string, // open key notation (e.g. 6a)
"license": string, // TODO - define options
"isrc": string,
"locationCreated": string, // open for interpretation
"originalReleaseDate": DateTime ISO8601,
"recordLabel": string,
"publisher": string,
"credits": [ // nullable
{
"name": string!, // e.g. Daddy Kev
"collaboratorType": string!, // e.g. composer, songwriter, performer, producer, mixingEngineer, masteringEngineer
// thoughts on adding a wallet address here?
}
],
"losslessAudio": string!, // URI
// OpenSea standards 👇
"image": string!,
"name": string!, // <artist> — <title>
"external_url": string!,
"animation_url": string!, // lossy audio
"attributes": {
"artist" : string!, // name collisions
"project": string, // name collisions
"bpm" : number,
"key": string,
"genre": string,
"recordLabel": string,
"license": string
}
}
{
"version": "mnft-20220202",
"title": "Our Taproot",
"artist": "Omari Jazz",
// "artist": {
// "name": "Omari Jazz"
// },
"description": "this song is a vibe",
"duration": 65.881,
"mimeType": "audio/aiff",
"trackNumber": 9,
"project": {
"title": "Dream Child",
"artwork": {
"uri": "ipfs://bafybeibmxbxuw5n5hwmrhtyp2qlzgiu56qpzzwi3pbflbnbb4ykhhgy7gu",
"mimeType": "image/jpeg",
"nft": "eip155:1/erc721:0x06012c8cf97BEaD5deAe237070F9587f8E7A266d/771769"
},
"type": "Album",
"originalReleaseDate": "2020-06-05"
},
"artwork": {
"uri": "ipfs://bafybeibmxbxuw5n5hwmrhtyp2qlzgiu56qpzzwi3pbflbnbb4ykhhgy7gu",
"mimeType": "image/jpeg",
"nft": "eip155:1/erc721:0x06012c8cf97BEaD5deAe237070F9587f8E7A266d/771769"
},
"visualizer": {
"uri": "ipfs://bafybeibmxbxuw5n5hwmrhtyp2qlzgiu56qpzzwi3pbflbnbb4ykhhgy7gu",
"mimeType": "video/mp4"
},
"genre": "Future beats",
"tags": ["chill", "dreamy"],
"bpm": "93",
"key": "6a",
"license": "CC0",
"isrc": "QZHN62027539",
"locationCreated": "Portland, OR",
"originalReleaseDate": "2020-06-05",
"recordLabel": null,
"publisher": null,
"credits": [
{
"name": "Omari Jazz",
"collaboratorType": "producer"
},
{
"name": "Omari Jazz",
"collaboratorType": "songwriter"
},
{
"name": "Harris Cole",
"collaboratorType": "masteringEngineer"
},
{
"name": "Doplhin Midwives",
"collaboratorType": "performer"
},
{
"name": "B Timon",
"collaboratorType": "performer"
}
],
"image": "ipfs://bafybeibmxbxuw5n5hwmrhtyp2qlzgiu56qpzzwi3pbflbnbb4ykhhgy7gu",
"name": "Omari Jazz - Our Taproot",
"external_url": "<https://catalog.works/0x7C2668BD0D3c050703CEcC956C11Bd520c26f7d4/our-taproot>",
"animation_url": "ipfs://bafybeibmxbxuw5n5hwmrhtyp2qlzgiu56qpzzwi3pbflbnbb4ykhhgy7gu",
"attributes": {
"artist" : "Omari Jazz",
"project": "Dream Child",
"bpm" : 93,
"key": "6a",
"genre": "Future beats",
"recordLabel": null,
"license": "CC0"
}
}