From
bafyreifqsfat7swdhbpxkbmy5zrjloitnlpoo7ibomktyywvmsdl3ojcyy
indexed 2026-06-25 04:44 UTC
View this version
To
bafyreialxvxcydzzaoj2gnfq4okbitiihi2eizbguxkfdysqx3snntzyui
indexed 2026-10-05 21:43 UTC
View this version
Compatibility
breaking 1 breaking change, 0 non-breaking changes.
Breaking changes (1)
- ConstraintTightened ConstraintTightened { vertex_id: "fm.freemix.release.stem:body.stemType", sort: "knownValues", old_value: "[\"drums\",\"bass\",\"vocals\",\"synth\",\"guitar\",\"keys\",\"pad\",\"lead\",\"fx\",\"other\"]", new_value: "[\"drums\",\"bass\",\"vocals\",\"synth\",\"guitar\",\"keys\",\"pad\",\"lead\",\"fx\",\"other\",\"808\",\"synth-strings\",\"vocal-sample\",\"space-echo\",\"plate\",\"african-percussion\",\"surdo\",\"kete\"]" }
Migration guidance
Constraint changes
- ConstraintTightened ConstraintTightened { vertex_id: "fm.freemix.release.stem:body.stemType", sort: "knownValues", old_value: "[\"drums\",\"bass\",\"vocals\",\"synth\",\"guitar\",\"keys\",\"pad\",\"lead\",\"fx\",\"other\"]", new_value: "[\"drums\",\"bass\",\"vocals\",\"synth\",\"guitar\",\"keys\",\"pad\",\"lead\",\"fx\",\"other\",\"808\",\"synth-strings\",\"vocal-sample\",\"space-echo\",\"plate\",\"african-percussion\",\"surdo\",\"kete\"]" }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"main": {55
"description": "A stem (isolated track component) belonging to a parent track",66
"key": "tid",77
"record": {88
"properties": {99
"aiDeclaration": {1010
"description": "Declaration of AI involvement in creation",1111
"properties": {1212
"category": {1313
"description": "Level of AI involvement",1414
"knownValues": [1515
"none",1616
"assisted",1717
"augmented",1818
"generated"1919
],2020
"maxLength": 100,2121
"type": "string"2222
},2323
"description": {2424
"description": "Creator's description of how AI was used",2525
"maxLength": 1000,2626
"type": "string"2727
},2828
"tools": {2929
"description": "AI tools used",3030
"items": {3131
"maxLength": 100,3232
"type": "string"3333
},3434
"maxLength": 10,3535
"type": "array"3636
}3737
},3838
"required": [3939
"category"4040
],4141
"type": "object"4242
},4343
"audioDurationMs": {4444
"description": "Duration of the stem in milliseconds",4545
"type": "integer"4646
},4747
"audioFormat": {4848
"description": "Audio file format",4949
"knownValues": [5050
"wav",5151
"flac",5252
"mp3"5353
],5454
"maxLength": 100,5555
"type": "string"5656
},5757
"audioHash": {5858
"description": "SHA-256 hash of the stem audio content",5959
"maxLength": 200,6060
"type": "string"6161
},6262
"audioSizeBytes": {6363
"description": "Size of the audio file in bytes",6464
"type": "integer"6565
},6666
"audioUrl": {6767
"description": "DEPRECATED (FM-508): no longer emitted. Stem audio is private (gated download / app-served preview) and is never surfaced in the portable record. Field kept (optional) to tolerate pre-FM-508 records without a putRecord rewrite. Stems never get a public clip.",6868
"format": "uri",6969
"maxLength": 3000,7070
"type": "string"7171
},7272
"bpmCentis": {7373
"description": "Centi-BPM (BPM × 100), integer — the Lexicon model has no float type; decode as `bpmCentis / 100` on read. Mirrors `fm.freemix.release.track`.",7474
"maximum": 99900,7575
"minimum": 2000,7676
"type": "integer"7777
},7878
"coverArtUrl": {7979
"description": "URL to cover art image",8080
"format": "uri",8181
"maxLength": 3000,8282
"type": "string"8383
},8484
"createdAt": {8585
"description": "Record creation timestamp",8686
"format": "datetime",8787
"maxLength": 100,8888
"type": "string"8989
},9090
"description": {9191
"description": "Stem description",9292
"maxLength": 5000,9393
"type": "string"9494
},9595
"detachedAt": {9696
"description": "FM-504 tombstone: when the parent link was severed",9797
"format": "datetime",9898
"maxLength": 100,9999
"type": "string"100100
},101101
"genres": {102102
"description": "Genre classifications. Deliberately plural `genres` (it IS an array), NOT the track lexicon's singular `genre` — singular-for-an-array is misleading. Intentional divergence.",103103
"items": {104104
"maxLength": 50,105105
"type": "string"106106
},107107
"maxLength": 10,108108
"type": "array"109109
},110110
"label": {111111
"description": "Human-readable name (e.g., 'Main Vocal', 'Acid Line', '808 Kit')",112112
"maxLength": 100,113113
"type": "string"114114
},115115
"license": {116116
"description": "AT URI of the license grant record. For child stems this is the parent track's license, copied down at creation (FM-504)",117117
"format": "at-uri",118118
"maxLength": 3000,119119
"type": "string"120120
},121121
"musicalKey": {122122
"description": "Musical key (e.g., 'Am', 'F#m', 'Bb'). Deliberately named `musicalKey`, NOT the track lexicon's `key`: `key` is dangerously overloaded in a data layer (record keys, rkeys, map keys), so `musicalKey` is collision-proof and self-documenting. Intentional divergence.",123123
"maxLength": 10,124124
"type": "string"125125
},126126
"parentTrack": {127127
"description": "AT URI of the parent track this stem belongs to (optional for standalone stems)",128128
"format": "at-uri",129129
"maxLength": 3000,130130
"type": "string"131131
},132132
"parentTrackCid": {133133
"description": "CID of the parent track record (pins to exact version)",134134
"format": "cid",135135
"maxLength": 200,136136
"type": "string"137137
},138138
"position": {139139
"description": "Display order position (0-indexed)",140140
"minimum": 0,141141
"type": "integer"142142
},143143
"previouslyAttachedToCid": {144144
"description": "FM-504 tombstone: CID of the former parent track record at detach time",145145
"format": "cid",146146
"maxLength": 200,147147
"type": "string"148148
},149149
"previouslyAttachedToUri": {150150
"description": "FM-504 tombstone: AT URI of the former parent track, set when this stem was detached (parent deleted, keep-stems path). Preserves remix-tree placement + royalty-lineage reconstructability",151151
"format": "at-uri",152152
"maxLength": 3000,153153
"type": "string"154154
},155155
"stemType": {156156
"description": "Type/category of the stem",157157
"knownValues": [158158
"drums",159159
"bass",160160
"vocals",161161
"synth",162162
"guitar",163163
"keys",164164
"pad",165165
"lead",166166
"fx",167
"other"167
"other",168
"808",169
"synth-strings",170
"vocal-sample",171
"space-echo",172
"plate",173
"african-percussion",174
"surdo",175
"kete"168176
],169177
"maxLength": 100,170178
"type": "string"171179
},172180
"tags": {173181
"description": "Freeform tags",174182
"items": {175183
"maxLength": 50,176184
"type": "string"177185
},178186
"maxLength": 10,179187
"type": "array"180188
},181189
"title": {182190
"description": "Stem title (first-class stems). `label` remains the required human-readable name; `title` is the unified-on-title field added in FM-504",183191
"maxLength": 300,184192
"type": "string"185193
}186194
},187195
"required": [188196
"stemType",189197
"label",190198
"audioHash",191199
"audioDurationMs",192200
"audioFormat",193201
"audioSizeBytes",194202
"createdAt"195203
],196204
"type": "object"197205
},198206
"type": "record"199207
}200208
},201209
"id": "fm.freemix.release.stem",202210
"lexicon": 1203211
}