music on atproto
plyr.fm
1{
2 "lexicon": 1,
3 "id": "fm.plyr.track",
4 "defs": {
5 "main": {
6 "type": "record",
7 "description": "A music track published to the AT Protocol network.",
8 "key": "tid",
9 "record": {
10 "type": "object",
11 "required": ["title", "artist", "audioUrl", "fileType", "createdAt"],
12 "properties": {
13 "title": {
14 "type": "string",
15 "description": "The title of the track.",
16 "minLength": 1,
17 "maxLength": 256
18 },
19 "artist": {
20 "type": "string",
21 "description": "The artist name (display name of the uploader).",
22 "minLength": 1,
23 "maxLength": 256
24 },
25 "audioUrl": {
26 "type": "string",
27 "format": "uri",
28 "description": "URL to the audio file (currently R2 CDN URL)."
29 },
30 "fileType": {
31 "type": "string",
32 "description": "Audio file format extension (e.g., mp3, wav, flac).",
33 "minLength": 1,
34 "maxLength": 16
35 },
36 "album": {
37 "type": "string",
38 "description": "Album name this track belongs to.",
39 "maxLength": 256
40 },
41 "duration": {
42 "type": "integer",
43 "description": "Duration in seconds.",
44 "minimum": 0
45 },
46 "features": {
47 "type": "array",
48 "description": "Featured artists on this track.",
49 "items": {
50 "type": "ref",
51 "ref": "#featuredArtist"
52 },
53 "maxLength": 10
54 },
55 "imageUrl": {
56 "type": "string",
57 "format": "uri",
58 "description": "URL to cover artwork image."
59 },
60 "createdAt": {
61 "type": "string",
62 "format": "datetime",
63 "description": "Timestamp when the track was uploaded."
64 }
65 }
66 }
67 },
68 "featuredArtist": {
69 "type": "object",
70 "description": "A featured artist on a track.",
71 "required": ["did", "handle"],
72 "properties": {
73 "did": {
74 "type": "string",
75 "format": "did",
76 "description": "The DID of the featured artist."
77 },
78 "handle": {
79 "type": "string",
80 "format": "handle",
81 "description": "The handle of the featured artist."
82 },
83 "displayName": {
84 "type": "string",
85 "description": "Display name of the featured artist.",
86 "maxLength": 256
87 }
88 }
89 }
90 }
91}