An overarching ambition for this project is to model a way of handling musician data, media, and payments in a way that is platform agnostic. In the same way that we can use any browser of our choice to browse the web, wouldn't it be nice to do the same with music?
To my mind this would comprise of the following schemas as its core:
With playback logging and payments woven in. As well as:
The shape might be something like...
Artists
{
"protocol": "soli/artist@0.1",
"id": "artist:<uuid-or-did>",
"name": "string",
"bio": "string?",
"image_cid": "cid?",
"releases": ["ipfs://<CID1>", "ipfs://<CID2>"],
"links": {
"website": "url?",
"socials": ["url?", "url?"]
}
"external_ids": {
"musicbrainz": "uuid?",
"isni": "string?"
}
}
Releases
{
"protocol": "soli/release@0.1",
"id": "release:<uuid>",
"artist_id": "artist:<id>",
"license": "CC-BY-NC-4.0 | CC0 | ARR"
"title": "string",
"release_type": "album | ep | single",
"release_date": "YYYY-MM-DD",
"genres": ["string"],
"tags": ["string"],
"artwork_cid": "cid",
"tracks": ["ipfs://<track1>", "ipfs://<track2>", "..."]
"external_ids": {
"musicbrainz": "uuid?",
"upc": "string?"
}
}
Tracks
{
"protocol": "soli/track@0.1",
"id": "track:<uuid>",
"license": "CC-BY-NC-4.0 | CC0 | ARR"
"artist_id": "artist:<id>",
"release_id": "release:<id>",
"title": "string",
"duration_seconds": 0,
"audio": {
"files": [
{
"codec": "audio/flac",
"cid": "cid"
},
{
"codec": "audio/opus",
"cid": "cid"
}
]
}
"external_ids": {
"musicbrainz_recording": "uuid?",
"isrc": "string?"
}
}
Play events
{
"type": "track.play",
"track": "track_id",
"artist": "artist_id",
"timestamp": "ISO8601",
"listener": "optional user id",
"signature": "optional"
}
These manifests would exist in IPFS and be able to reference each other, with any given platform able to tap into the same data and use it to connect people with music.
An overarching ambition for this project is to model a way of handling musician data, media, and payments in a way that is platform agnostic. In the same way that we can use any browser of our choice to browse the web, wouldn't it be nice to do the same with music?
To my mind this would comprise of the following schemas as its core:
With playback logging and payments woven in. As well as:
The shape might be something like...
Artists
{ "protocol": "soli/artist@0.1", "id": "artist:<uuid-or-did>", "name": "string", "bio": "string?", "image_cid": "cid?", "releases": ["ipfs://<CID1>", "ipfs://<CID2>"], "links": { "website": "url?", "socials": ["url?", "url?"] } "external_ids": { "musicbrainz": "uuid?", "isni": "string?" } }Releases
{ "protocol": "soli/release@0.1", "id": "release:<uuid>", "artist_id": "artist:<id>", "license": "CC-BY-NC-4.0 | CC0 | ARR" "title": "string", "release_type": "album | ep | single", "release_date": "YYYY-MM-DD", "genres": ["string"], "tags": ["string"], "artwork_cid": "cid", "tracks": ["ipfs://<track1>", "ipfs://<track2>", "..."] "external_ids": { "musicbrainz": "uuid?", "upc": "string?" } }Tracks
{ "protocol": "soli/track@0.1", "id": "track:<uuid>", "license": "CC-BY-NC-4.0 | CC0 | ARR" "artist_id": "artist:<id>", "release_id": "release:<id>", "title": "string", "duration_seconds": 0, "audio": { "files": [ { "codec": "audio/flac", "cid": "cid" }, { "codec": "audio/opus", "cid": "cid" } ] } "external_ids": { "musicbrainz_recording": "uuid?", "isrc": "string?" } }Play events
{ "type": "track.play", "track": "track_id", "artist": "artist_id", "timestamp": "ISO8601", "listener": "optional user id", "signature": "optional" }These manifests would exist in IPFS and be able to reference each other, with any given platform able to tap into the same data and use it to connect people with music.