full diff

at.atmosynth.performance

atmosynth.at +8 −0
From
bafyreierbek5jpy26mdtkoti35e6uqnl5gw5jal5hqtrxoejs26wzd5sb4 indexed 2026-11-07 09:27 UTC View this version
To
bafyreifb7ewbbxv5y3z3xjatyvxa7owexezqrgxbeue4zodi2be5ww6cpu indexed 2026-11-07 18:00 UTC View this version

Compatibility

backward compatible Backward compatible. 4 non-breaking changes.

Non-breaking changes (4)
  • AddedVertex AddedVertex { vertex_id: "at.atmosynth.performance#changed.patchPresentation" }
  • AddedVertex AddedVertex { vertex_id: "at.atmosynth.performance:body.patchPresentation" }
  • AddedEdge AddedEdge { src: "at.atmosynth.performance#changed", tgt: "at.atmosynth.performance#changed.patchPresentation", kind: "prop", name: Some("patchPresentation") }
  • AddedEdge AddedEdge { src: "at.atmosynth.performance:body", tgt: "at.atmosynth.performance:body.patchPresentation", kind: "prop", name: Some("patchPresentation") }

Migration guidance

Added

  • AddedVertex { vertex_id: "at.atmosynth.performance#changed.patchPresentation" }
  • AddedVertex { vertex_id: "at.atmosynth.performance:body.patchPresentation" }

Notes

  • Non-breaking: AddedEdge { src: "at.atmosynth.performance#changed", tgt: "at.atmosynth.performance#changed.patchPresentation", kind: "prop", name: Some("patchPresentation") }
  • Non-breaking: AddedEdge { src: "at.atmosynth.performance:body", tgt: "at.atmosynth.performance:body.patchPresentation", kind: "prop", name: Some("patchPresentation") }

Changes

11{
22 "$type": "com.atproto.lexicon.schema",
33 "defs": {
44 "changed": {
55 "description": "Any other change to the patch: an instance added or taken away, a wire connected or disconnected, the note plane, a pattern, a song, a scene, the tempo. Each is the whole patch as it stands after it, so a reader that can load a patch can replay every one. A change nobody can hear, such as where a block is drawn, may be left out.",
66 "properties": {
77 "patch": {
88 "description": "The patch from this moment on: an at.atmosynth.patch record, `$type` and all.",
99 "type": "unknown"
10 },
11 "patchPresentation": {
12 "description": "How the patch is drawn from this moment on: an at.atmosynth.patchPresentation record, `$type` and all, held whole. Nothing heard depends on it. Optional: absent leaves it drawn as it was before this change.",
13 "type": "unknown"
1014 }
1115 },
1216 "required": [
1317 "patch"
1418 ],
1519 "type": "object"
1620 },
1721 "event": {
1822 "description": "One thing that happened in a performance, when, and who did it. Never in a record: a performance's timeline is a JSON array of these.",
1923 "properties": {
2024 "at": {
2125 "description": "When, in microseconds from the beginning, no later than the performance's `length`.",
2226 "minimum": 0,
2327 "type": "integer"
2428 },
2529 "by": {
2630 "description": "Who: one of the performance's `players`.",
2731 "format": "did",
2832 "type": "string"
2933 },
3034 "what": {
3135 "refs": [
3236 "#played",
3337 "#moved",
3438 "#changed",
3539 "#started",
3640 "#stopped",
3741 "#switched"
3842 ],
3943 "type": "union"
4044 }
4145 },
4246 "required": [
4347 "at",
4448 "by",
4549 "what"
4650 ],
4751 "type": "object"
4852 },
4953 "loop": {
5054 "description": "One thing on the transport, playing: a sequencer's loop, an arranger's song, a scenes block, or an automation block's lane.",
5155 "properties": {
5256 "instanceId": {
5357 "description": "What is playing, by its instance id in the patch: a sequencer, an arranger, a scenes block or an automation block.",
5458 "maxLength": 64,
5559 "minLength": 1,
5660 "type": "string"
5761 },
5862 "scene": {
5963 "description": "For a scenes block: the scene it was playing, by its place in the block's `scenes`. It may not be the patch's `scene`, where another had been chosen and had not yet taken over. Optional: absent is the patch's.",
6064 "minimum": 0,
6165 "type": "integer"
6266 },
6367 "since": {
6468 "description": "For a scenes block: how many ticks before the beginning that scene took over, as decimal text, which is where the loops it starts from their first step count from. Optional: absent is a scene playing since before anything was counted.",
6569 "maxLength": 32,
6670 "type": "string"
6771 },
6872 "tick": {
6973 "description": "How far it had reached, 96 to the beat, as decimal text, since a loop is rarely caught on a whole tick. For a sequencer playing a loop of its own, the tick of its pattern; for anything else, ticks from its downbeat: an arranger's from its song's first beat, an automation block's into its lane, a scenes block's from the downbeat its lines are counted from, and a sequencer an arranger or a scenes block chooses the loops of from its own.",
7074 "maxLength": 32,
7175 "type": "string"
7276 }
7377 },
7478 "required": [
7579 "instanceId",
7680 "tick"
7781 ],
7882 "type": "object"
7983 },
8084 "main": {
8185 "description": "A performance, held in the repository of whoever recorded it.",
8286 "key": "tid",
8387 "record": {
8488 "properties": {
8589 "audio": {
8690 "description": "What it sounded like, lossless, in pieces heard one after another with no gap between them, together lasting `length`. Every note and change sounds where the timeline puts it, which is when the room had it happen and not when any one device heard it. It is what an app plays that has no engine; the timeline is what an app with one plays through the patch. The two are the same performance.",
8791 "items": {
8892 "accept": [
8993 "audio/wav",
9094 "audio/flac"
9195 ],
9296 "maxSize": 52428800,
9397 "type": "blob"
9498 },
9599 "maxLength": 256,
96100 "minLength": 1,
97101 "type": "array"
98102 },
99103 "createdAt": {
100104 "format": "datetime",
101105 "type": "string"
102106 },
103107 "description": {
104108 "maxLength": 3000,
105109 "type": "string"
106110 },
107111 "length": {
108112 "description": "How long it lasts, in microseconds. Every time in a performance is in microseconds, counted from its beginning, on the clock it was played on: in a room the room's, so that two people who kept the same stretch kept the same moments, whenever each of them heard them.",
109113 "minimum": 1,
110114 "type": "integer"
111115 },
112116 "license": {
113117 "ref": "at.atmosynth.defs#license",
114118 "type": "ref"
115119 },
116120 "lineage": {
117121 "description": "What it came from beyond its own patch, whose instruments credit their makers in the patch's own lineage.",
118122 "items": {
119123 "ref": "at.atmosynth.defs#lineage",
120124 "type": "ref"
121125 },
122126 "maxLength": 64,
123127 "type": "array"
124128 },
125129 "loops": {
126130 "description": "The loops already playing when it began, each at the tick it had reached: a sequencer's loop, an arranger's song, a scenes block or an automation block's lane, each on the transport as a loop is. One named here plays on from that tick; one not named was stopped. Optional: absent is every loop stopped.",
127131 "items": {
128132 "ref": "#loop",
129133 "type": "ref"
130134 },
131135 "maxLength": 256,
132136 "type": "array"
133137 },
134138 "name": {
135139 "maxLength": 200,
136140 "minLength": 1,
137141 "type": "string"
138142 },
139143 "patch": {
140144 "description": "The patch as it stood when the performance began: an at.atmosynth.patch record, `$type` and all, held here whole, so the performance plays without reading anything else. Played in a room it is the room's patch, unpublished changes included. The timeline's changes are made to it in order: the patch at any moment is this one with every change before that moment made.",
141145 "type": "unknown"
142146 },
147 "patchPresentation": {
148 "description": "How `patch` was drawn when the performance began: an at.atmosynth.patchPresentation record, `$type` and all, held here whole beside it. Nothing heard depends on it, and a reader that only plays ignores it. Optional: absent is a patch drawn from what it says itself.",
149 "type": "unknown"
150 },
143151 "playedOn": {
144152 "description": "The published patch it was played on, as published when it began. It says where the performance happened, and `patch` is what was played, which may hold more than was published then. Optional permanently: absent is a patch never published.",
145153 "ref": "com.atproto.repo.strongRef",
146154 "type": "ref"
147155 },
148156 "players": {
149157 "description": "Everybody who played a note or changed the sound in it, each once, and nobody else: who it credits. Each event of the timeline names one of them. Whoever recorded it is among them, since only somebody who played in a performance keeps it.",
150158 "items": {
151159 "format": "did",
152160 "type": "string"
153161 },
154162 "maxLength": 64,
155163 "minLength": 1,
156164 "type": "array"
157165 },
158166 "startedAt": {
159167 "description": "When it began.",
160168 "format": "datetime",
161169 "type": "string"
162170 },
163171 "tags": {
164172 "description": "Freely created tags, lower-cased on write.",
165173 "items": {
166174 "maxLength": 128,
167175 "type": "string"
168176 },
169177 "maxLength": 32,
170178 "type": "array"
171179 },
172180 "timeline": {
173181 "description": "What happened, in order: each piece a JSON array of #event, each event no earlier than the one before it, and the pieces, read one after another, the whole of it. In blobs rather than here because a long performance in a busy room outgrows a record. Replaying it through `patch` is the performance played again.",
174182 "items": {
175183 "accept": [
176184 "application/json"
177185 ],
178186 "maxSize": 52428800,
179187 "type": "blob"
180188 },
181189 "maxLength": 64,
182190 "minLength": 1,
183191 "type": "array"
184192 }
185193 },
186194 "required": [
187195 "name",
188196 "patch",
189197 "players",
190198 "startedAt",
191199 "length",
192200 "timeline",
193201 "audio",
194202 "createdAt"
195203 ],
196204 "type": "object"
197205 },
198206 "type": "record"
199207 },
200208 "moved": {
201209 "description": "One parameter of one instance set, as a turn of a knob sets it: the patch's `parameterValues` entry for it, from this moment on.",
202210 "properties": {
203211 "instanceId": {
204212 "maxLength": 64,
205213 "minLength": 1,
206214 "type": "string"
207215 },
208216 "parameterId": {
209217 "maxLength": 64,
210218 "minLength": 1,
211219 "type": "string"
212220 },
213221 "useDefault": {
214222 "description": "Set where the parameter goes back to its module's default, in place of a value.",
215223 "type": "boolean"
216224 },
217225 "value": {
218226 "description": "The value, as text, as the patch writes one.",
219227 "maxLength": 200,
220228 "type": "string"
221229 }
222230 },
223231 "required": [
224232 "instanceId",
225233 "parameterId"
226234 ],
227235 "type": "object"
228236 },
229237 "played": {
230238 "description": "A key struck or let go, as a room passes it on: what reaches the patch, after any arpeggiator of the player's own.",
231239 "properties": {
232240 "block": {
233241 "description": "The Keyboard block it was played into, by instance id. Optional: absent is the player through no block.",
234242 "maxLength": 64,
235243 "minLength": 1,
236244 "type": "string"
237245 },
238246 "key": {
239247 "maximum": 127,
240248 "minimum": 0,
241249 "type": "integer"
242250 },
243251 "velocity": {
244252 "description": "How hard, and nought for letting the key go.",
245253 "maximum": 127,
246254 "minimum": 0,
247255 "type": "integer"
248256 }
249257 },
250258 "required": [
251259 "key",
252260 "velocity"
253261 ],
254262 "type": "object"
255263 },
256264 "started": {
257265 "description": "Something on the transport starting, or everything: a sequencer's loop, an arranger's song, a scenes block or an automation block's lane. The moment is when it was heard to start, not when it was asked for.",
258266 "properties": {
259267 "instanceId": {
260268 "description": "The sequencer, arranger, scenes block or automation block. Optional: absent is everything on the transport in the patch.",
261269 "maxLength": 64,
262270 "minLength": 1,
263271 "type": "string"
264272 },
265273 "tick": {
266274 "description": "How far it starts from at this moment, 96 to the beat, as decimal text, as a loop's `tick` says it: a song started from a section starts from that section's first tick.",
267275 "maxLength": 32,
268276 "type": "string"
269277 }
270278 },
271279 "required": [
272280 "tick"
273281 ],
274282 "type": "object"
275283 },
276284 "stopped": {
277285 "description": "Something on the transport stopping, or everything.",
278286 "properties": {
279287 "instanceId": {
280288 "description": "The sequencer, arranger, scenes block or automation block. Optional: absent is everything on the transport in the patch.",
281289 "maxLength": 64,
282290 "minLength": 1,
283291 "type": "string"
284292 }
285293 },
286294 "type": "object"
287295 },
288296 "switched": {
289297 "description": "A scene taking over on a scenes block. The moment is when it was heard to take over, on the line the block's launch put it on, not when it was chosen: choosing it was a change to the patch's `scene`, a `#changed` at the moment it was chosen.",
290298 "properties": {
291299 "instanceId": {
292300 "description": "The scenes block.",
293301 "maxLength": 64,
294302 "minLength": 1,
295303 "type": "string"
296304 },
297305 "scene": {
298306 "description": "The scene taking over, by its place in the block's `scenes` at this moment.",
299307 "minimum": 0,
300308 "type": "integer"
301309 },
302310 "tick": {
303311 "description": "Where on the scenes block it takes over, in ticks from its downbeat, 96 to the beat, as decimal text: the line it was heard on.",
304312 "maxLength": 32,
305313 "type": "string"
306314 }
307315 },
308316 "required": [
309317 "instanceId",
310318 "scene",
311319 "tick"
312320 ],
313321 "type": "object"
314322 }
315323 },
316324 "description": "A performance: everything one person or several played together on a patch, in the now, kept whole. Every note, every move of a parameter and every other change to the patch, each by whoever made it, on one timeline, with what it sounded like. Whoever played in it and recorded it keeps it, in their own repository, with everybody else's playing in it; several of them may each keep their own.",
317325 "id": "at.atmosynth.performance",
318326 "lexicon": 1
319327}

Compare other versions