A decentralized music tracking and discovery platform built on AT Protocol 馃幍 rocksky.app
spotify atproto lastfm musicbrainz scrobbling listenbrainz
0

Configure Feed

Select the types of activity you want to include in your feed.

rocksky / apps / api / pkl / defs / song / defs.pkl
10 kB 330 lines
1amends "../../schema/lexicon.pkl" 2 3lexicon = 1 4id = "app.rocksky.song.defs" 5defs = new Mapping<String, ObjectType> { 6 ["songViewBasic"] { 7 type = "object" 8 properties { 9 ["id"] = new StringType { 10 type = "string" 11 description = "The unique identifier of the song." 12 } 13 ["title"] = new StringType { 14 type = "string" 15 description = "The title of the song." 16 } 17 ["artist"] = new StringType { 18 type = "string" 19 description = "The artist of the song." 20 } 21 ["albumArtist"] = new StringType { 22 type = "string" 23 description = "The artist of the album the song belongs to." 24 } 25 ["albumArt"] = new StringType { 26 type = "string" 27 format = "uri" 28 description = "The URL of the album art image." 29 } 30 ["uri"] = new StringType { 31 type = "string" 32 format = "at-uri" 33 description = "The URI of the song." 34 } 35 ["album"] = new StringType { 36 type = "string" 37 description = "The album of the song." 38 } 39 ["duration"] = new IntegerType { 40 type = "integer" 41 description = "The duration of the song in milliseconds." 42 } 43 ["trackNumber"] = new IntegerType { 44 type = "integer" 45 description = "The track number of the song in the album." 46 } 47 ["discNumber"] = new IntegerType { 48 type = "integer" 49 description = "The disc number of the song in the album." 50 } 51 ["playCount"] = new IntegerType { 52 type = "integer" 53 description = "The number of times the song has been played." 54 minimum = 0 55 } 56 ["uniqueListeners"] = new IntegerType { 57 type = "integer" 58 description = "The number of unique listeners who have played the song." 59 minimum = 0 60 } 61 ["albumUri"] = new StringType { 62 type = "string" 63 format = "at-uri" 64 description = "The URI of the album the song belongs to." 65 } 66 ["artistUri"] = new StringType { 67 type = "string" 68 format = "at-uri" 69 description = "The URI of the artist of the song." 70 } 71 ["sha256"] = new StringType { 72 type = "string" 73 description = "The SHA256 hash of the song." 74 } 75 ["mbid"] = new StringType { 76 type = "string" 77 description = "The MusicBrainz ID of the song." 78 } 79 ["isrc"] = new StringType { 80 type = "string" 81 description = "The International Standard Recording Code (ISRC) of the song." 82 } 83 ["tags"] = new Array { 84 type = "array" 85 items = new StringType { 86 type = "string" 87 } 88 } 89 ["createdAt"] = new StringType { 90 type = "string" 91 format = "datetime" 92 description = "The timestamp when the song was created." 93 } 94 } 95 } 96 ["songViewDetailed"] { 97 type = "object" 98 properties { 99 ["id"] = new StringType { 100 type = "string" 101 description = "The unique identifier of the song." 102 } 103 ["title"] = new StringType { 104 type = "string" 105 description = "The title of the song." 106 } 107 ["artist"] = new StringType { 108 type = "string" 109 description = "The artist of the song." 110 } 111 ["albumArtist"] = new StringType { 112 type = "string" 113 description = "The artist of the album the song belongs to." 114 } 115 ["albumArt"] = new StringType { 116 type = "string" 117 format = "uri" 118 description = "The URL of the album art image." 119 } 120 ["uri"] = new StringType { 121 type = "string" 122 format = "at-uri" 123 description = "The URI of the song." 124 } 125 ["album"] = new StringType { 126 type = "string" 127 description = "The album of the song." 128 } 129 ["duration"] = new IntegerType { 130 type = "integer" 131 description = "The duration of the song in milliseconds." 132 } 133 ["trackNumber"] = new IntegerType { 134 type = "integer" 135 description = "The track number of the song in the album." 136 } 137 ["discNumber"] = new IntegerType { 138 type = "integer" 139 description = "The disc number of the song in the album." 140 } 141 ["playCount"] = new IntegerType { 142 type = "integer" 143 description = "The number of times the song has been played." 144 minimum = 0 145 } 146 ["uniqueListeners"] = new IntegerType { 147 type = "integer" 148 description = "The number of unique listeners who have played the song." 149 minimum = 0 150 } 151 ["albumUri"] = new StringType { 152 type = "string" 153 format = "at-uri" 154 description = "The URI of the album the song belongs to." 155 } 156 ["artistUri"] = new StringType { 157 type = "string" 158 format = "at-uri" 159 description = "The URI of the artist of the song." 160 } 161 ["sha256"] = new StringType { 162 type = "string" 163 description = "The SHA256 hash of the song." 164 } 165 ["mbid"] = new StringType { 166 type = "string" 167 description = "The MusicBrainz ID of the song." 168 } 169 ["isrc"] = new StringType { 170 type = "string" 171 description = "The International Standard Recording Code (ISRC) of the song." 172 } 173 ["tags"] = new Array { 174 type = "array" 175 items = new StringType { 176 type = "string" 177 } 178 } 179 ["createdAt"] = new StringType { 180 type = "string" 181 format = "datetime" 182 description = "The timestamp when the song was created." 183 } 184 ["artists"] = new Array { 185 type = "array" 186 items = new Ref { 187 ref = "app.rocksky.artist.defs#artistViewBasic" 188 } 189 } 190 ["firstScrobble"] = new Ref { 191 type = "ref" 192 ref = "app.rocksky.song.defs#firstScrobbleView" 193 description = "The first scrobble of this song on Rocksky." 194 } 195 ["matches"] = new Array { 196 type = "array" 197 description = "Ranked list of candidate matches from external metadata providers (e.g. Deezer). Additive field returned by matchSong; may be empty." 198 items = new Ref { 199 ref = "app.rocksky.song.defs#songMatchView" 200 } 201 } 202 } 203 } 204 205 ["songMatchView"] { 206 type = "object" 207 description = "A ranked candidate match for a song from an external metadata provider." 208 properties { 209 ["id"] = new IntegerType { 210 type = "integer" 211 description = "The provider's numeric identifier for the matched track." 212 } 213 ["title"] = new StringType { 214 type = "string" 215 description = "The title of the matched track." 216 } 217 ["artist"] = new StringType { 218 type = "string" 219 description = "The artist of the matched track." 220 } 221 ["album"] = new StringType { 222 type = "string" 223 description = "The album of the matched track." 224 } 225 ["albumArt"] = new StringType { 226 type = "string" 227 format = "uri" 228 description = "The URL of the matched track's album art image." 229 } 230 ["isrc"] = new StringType { 231 type = "string" 232 description = "The International Standard Recording Code (ISRC) of the matched track." 233 } 234 ["durationMs"] = new IntegerType { 235 type = "integer" 236 minimum = 0 237 description = "The duration of the matched track in milliseconds." 238 } 239 ["trackNumber"] = new IntegerType { 240 type = "integer" 241 description = "The track number of the matched track in its album." 242 } 243 ["discNumber"] = new IntegerType { 244 type = "integer" 245 description = "The disc number of the matched track in its album." 246 } 247 ["link"] = new StringType { 248 type = "string" 249 format = "uri" 250 description = "A URL to the matched track on the provider." 251 } 252 ["preview"] = new StringType { 253 type = "string" 254 format = "uri" 255 description = "A URL to a short audio preview of the matched track." 256 } 257 ["rank"] = new IntegerType { 258 type = "integer" 259 description = "The provider's popularity rank for the matched track." 260 } 261 ["explicit"] = new BooleanType { 262 type = "boolean" 263 description = "Whether the matched track has explicit lyrics." 264 } 265 ["score"] = new IntegerType { 266 type = "integer" 267 minimum = 0 268 maximum = 100 269 description = "Match confidence score in the range 0-100 (higher is better)." 270 } 271 } 272 } 273 274 ["recentListenerView"] { 275 type = "object" 276 properties { 277 ["id"] = new StringType { 278 type = "string" 279 description = "The unique identifier of the listener." 280 } 281 ["did"] = new StringType { 282 type = "string" 283 description = "The DID of the listener." 284 } 285 ["handle"] = new StringType { 286 type = "string" 287 description = "The handle of the listener." 288 } 289 ["displayName"] = new StringType { 290 type = "string" 291 description = "The display name of the listener." 292 } 293 ["avatar"] = new StringType { 294 type = "string" 295 format = "uri" 296 description = "The URL of the listener's avatar image." 297 } 298 ["timestamp"] = new StringType { 299 type = "string" 300 format = "datetime" 301 description = "The timestamp of the listener's most recent scrobble of this song." 302 } 303 ["scrobbleUri"] = new StringType { 304 type = "string" 305 format = "at-uri" 306 description = "The URI of the listener's most recent scrobble of this song." 307 } 308 } 309 } 310 311 ["firstScrobbleView"] { 312 type = "object" 313 properties { 314 ["handle"] = new StringType { 315 type = "string" 316 description = "The handle of the user who first scrobbled this song." 317 } 318 ["avatar"] = new StringType { 319 type = "string" 320 format = "uri" 321 description = "The avatar URL of the user who first scrobbled this song." 322 } 323 ["timestamp"] = new StringType { 324 type = "string" 325 format = "datetime" 326 description = "The timestamp of the first scrobble." 327 } 328 } 329 } 330}