{
"id": "org.algorave.set",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"type",
"version",
"performer",
"set",
"code",
"metadata"
],
"properties": {
"set": {
"ref": "#setMeta",
"type": "ref",
"description": "Set metadata (title, BPM, genre, tags)"
},
"code": {
"ref": "#codeMeta",
"type": "ref",
"description": "Source code and language details"
},
"type": {
"type": "string",
"const": "org.algorave.set",
"description": "NSID of the record"
},
"event": {
"ref": "#eventMeta",
"type": "ref",
"description": "Event where the set was performed (optional)"
},
"links": {
"ref": "#linksMeta",
"type": "ref",
"description": "Social and source repository links (optional)"
},
"version": {
"type": "integer",
"minimum": 1,
"description": "Schema version"
},
"metadata": {
"ref": "#metadataMeta",
"type": "ref",
"description": "Publication metadata (license, timestamps)"
},
"performer": {
"ref": "#performer",
"type": "ref",
"description": "The performer who created the set"
},
"recording": {
"ref": "#recordingMeta",
"type": "ref",
"description": "Links to audio/video recordings (optional)"
}
}
}
},
"setMeta": {
"type": "object",
"required": [
"title"
],
"properties": {
"bpm": {
"type": "integer",
"maximum": 300,
"minimum": 40,
"description": "Beats per minute"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Freeform tags"
},
"genre": {
"type": "array",
"items": {
"type": "string"
},
"description": "Genre tags"
},
"title": {
"type": "string",
"maxLength": 256,
"description": "Title of the set"
},
"duration": {
"type": "integer",
"minimum": 0,
"description": "Duration in seconds"
},
"description": {
"type": "string",
"maxLength": 2048,
"description": "Description of the set"
}
}
},
"codeMeta": {
"type": "object",
"required": [
"language",
"source"
],
"properties": {
"seed": {
"type": "integer",
"nullable": true,
"description": "Random seed for reproducibility"
},
"engine": {
"type": "string",
"description": "Audio engine used (e.g. superdirt, webaudio, scsynth)"
},
"source": {
"type": "string",
"maxLength": 65536,
"description": "The live coding source code"
},
"language": {
"type": "string",
"description": "Live coding language (e.g. tidalcycles, strudel, sonic-pi)"
},
"dependencies": {
"type": "object",
"description": "Additional dependencies (freeform key-value)"
},
"engineVersion": {
"type": "string",
"description": "Version of the audio engine"
},
"languageVersion": {
"type": "string",
"description": "Version of the language"
}
}
},
"eventMeta": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "Event URL"
},
"date": {
"type": "string",
"description": "Event date"
},
"name": {
"type": "string",
"maxLength": 256,
"description": "Event name"
},
"location": {
"type": "string",
"maxLength": 256,
"description": "Event location"
}
}
},
"linksMeta": {
"type": "object",
"properties": {
"github": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "URL to GitHub repository"
},
"social": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "URL to social media profile"
}
}
},
"performer": {
"type": "object",
"required": [
"handle"
],
"properties": {
"did": {
"type": "string",
"description": "AT Protocol DID of the performer"
},
"handle": {
"type": "string",
"description": "Handle of the performer"
},
"displayName": {
"type": "string",
"description": "Display name of the performer"
}
}
},
"metadataMeta": {
"type": "object",
"required": [
"license"
],
"properties": {
"isLive": {
"type": "boolean",
"default": true,
"description": "Whether the set was performed live"
},
"license": {
"type": "string",
"description": "License under which the set is published (e.g. CC-BY-SA-4.0)"
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "ISO 8601 creation timestamp"
},
"supersedes": {
"type": "string",
"nullable": true,
"description": "AT URI of the set this one supersedes"
},
"publishedAt": {
"type": "string",
"format": "datetime",
"description": "ISO 8601 publication timestamp"
}
}
},
"recordingMeta": {
"type": "object",
"properties": {
"audio": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "URL to audio recording"
},
"video": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "URL to video recording"
}
}
}
},
"type": "record",
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"revision": 1,
"description": "Schema for an Algorave live coding set. Each record captures a live coding performance: performer, source code, metadata, and links."
}