# org.algorave.set

> Published by [archive.algorave.org](https://lexicon.garden/identity/did:plc:zevnzfwozqlsqz54c3artdzt)

## Description

Schema for an Algorave live coding set. Each record captures a live coding performance: performer, source code, metadata, and links.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:zevnzfwozqlsqz54c3artdzt/org.algorave.set)
- [Documentation](https://lexicon.garden/lexicon/did:plc:zevnzfwozqlsqz54c3artdzt/org.algorave.set/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:zevnzfwozqlsqz54c3artdzt/org.algorave.set/examples)

## Definitions

### `org.algorave.set`

**Type**: `record`

**Key**: `tid`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `set` | `ref` → `#setMeta` | Yes | Set metadata (title, BPM, genre, tags) |
| `code` | `ref` → `#codeMeta` | Yes | Source code and language details |
| `type` | `string` | Yes | NSID of the record |
| `event` | `ref` → `#eventMeta` | No | Event where the set was performed (optional) |
| `links` | `ref` → `#linksMeta` | No | Social and source repository links (optional) |
| `version` | `integer` | Yes | Schema version |
| `metadata` | `ref` → `#metadataMeta` | Yes | Publication metadata (license, timestamps) |
| `performer` | `ref` → `#performer` | Yes | The performer who created the set |
| `recording` | `ref` → `#recordingMeta` | No | Links to audio/video recordings (optional) |

### `org.algorave.set#setMeta`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `bpm` | `integer` | No | Beats per minute |
| `tags` | `array` | No | Freeform tags |
| `genre` | `array` | No | Genre tags |
| `title` | `string` | Yes | Title of the set |
| `duration` | `integer` | No | Duration in seconds |
| `description` | `string` | No | Description of the set |

### `org.algorave.set#codeMeta`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `seed` | `integer` | No | Random seed for reproducibility |
| `engine` | `string` | No | Audio engine used (e.g. superdirt, webaudio, scsynth) |
| `source` | `string` | Yes | The live coding source code |
| `language` | `string` | Yes | Live coding language (e.g. tidalcycles, strudel, sonic-pi) |
| `dependencies` | `object` | No | Additional dependencies (freeform key-value) |
| `engineVersion` | `string` | No | Version of the audio engine |
| `languageVersion` | `string` | No | Version of the language |

### `org.algorave.set#eventMeta`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `url` | `string` (uri) | No | Event URL |
| `date` | `string` | No | Event date |
| `name` | `string` | No | Event name |
| `location` | `string` | No | Event location |

### `org.algorave.set#linksMeta`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `github` | `string` (uri) | No | URL to GitHub repository |
| `social` | `string` (uri) | No | URL to social media profile |

### `org.algorave.set#performer`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `did` | `string` | No | AT Protocol DID of the performer |
| `handle` | `string` | Yes | Handle of the performer |
| `displayName` | `string` | No | Display name of the performer |

### `org.algorave.set#metadataMeta`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `isLive` | `boolean` | No | Whether the set was performed live |
| `license` | `string` | Yes | License under which the set is published (e.g. CC-BY-SA-4.0) |
| `createdAt` | `string` (datetime) | No | ISO 8601 creation timestamp |
| `supersedes` | `string` | No | AT URI of the set this one supersedes |
| `publishedAt` | `string` (datetime) | No | ISO 8601 publication timestamp |

### `org.algorave.set#recordingMeta`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `audio` | `string` (uri) | No | URL to audio recording |
| `video` | `string` (uri) | No | URL to video recording |

## Raw Schema

```json
{
  "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."
}
```
