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 "supportGate": {
66 "type": "ref",
67 "ref": "#supportGate",
68 "description": "If set, this track requires viewer to be a supporter of the artist via atprotofans."
69 }
70 }
71 }
72 },
73 "supportGate": {
74 "type": "object",
75 "description": "Configuration for supporter-gated content.",
76 "required": ["type"],
77 "properties": {
78 "type": {
79 "type": "string",
80 "description": "The type of support required to access this content.",
81 "knownValues": ["any"]
82 }
83 }
84 },
85 "featuredArtist": {
86 "type": "object",
87 "description": "A featured artist on a track.",
88 "required": ["did", "handle"],
89 "properties": {
90 "did": {
91 "type": "string",
92 "format": "did",
93 "description": "The DID of the featured artist."
94 },
95 "handle": {
96 "type": "string",
97 "format": "handle",
98 "description": "The handle of the featured artist."
99 },
100 "displayName": {
101 "type": "string",
102 "description": "Display name of the featured artist.",
103 "maxLength": 256
104 }
105 }
106 }
107 }
108}