at.atmosynth.patch
Schema Diff
+2 -1
Compatibility Analysis
Backward Compatible
No changes detected.
1
1
{
2
2
"id": "at.atmosynth.patch",
3
3
"defs": {
4
4
"main": {
5
5
"key": "tid",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"descriptionVersion",
11
11
"name",
12
12
"description",
13
13
"moduleInstances",
14
14
"createdAt"
15
15
],
16
16
"properties": {
17
17
"name": {
18
18
"type": "string",
19
19
"maxLength": 200,
20
20
"minLength": 1
21
21
},
22
22
"tags": {
23
23
"type": "array",
24
24
"items": {
25
25
"type": "string",
26
26
"maxLength": 128
27
27
},
28
28
"description": "Freely created tags, lower-cased on write so one hashtag matches one set of patches."
29
29
},
30
30
"types": {
31
31
"type": "array",
32
32
"items": {
33
33
"type": "string",
34
34
"knownValues": [
35
35
"Lead",
36
36
"Pad",
37
37
"Bass",
38
38
"Plucked",
39
39
"Percussion",
40
40
"Keys",
41
41
"Brass",
42
42
"Strings",
43
43
"Vocal",
44
44
"SFX"
45
45
]
46
46
},
47
47
"description": "Zero or more of the ten fixed types. A patch may carry several."
48
48
},
49
49
"output": {
50
50
"ref": "#outputRef",
51
51
"type": "ref",
52
52
"description": "Which instance reaches the audio output."
53
53
},
54
54
"createdAt": {
55
55
"type": "string",
56
56
"format": "datetime"
57
57
},
58
58
"forkedFrom": {
59
59
"ref": "#lineage",
60
60
"type": "ref"
61
61
},
62
62
"connections": {
63
63
"type": "array",
64
64
"items": {
65
65
"ref": "#connection",
66
66
"type": "ref"
67
67
}
68
68
},
69
69
"description": {
70
70
"type": "string",
71
71
"maxLength": 3000
72
72
},
73
73
"midiRouting": {
74
74
"type": "array",
75
75
"items": {
76
76
"ref": "#midiRoute",
77
77
"type": "ref"
78
78
},
79
79
"description": "Which module instances receive MIDI input."
80
80
},
81
81
"moduleInstances": {
82
82
"type": "array",
83
83
"items": {
84
84
"ref": "#moduleInstance",
85
85
"type": "ref"
86
86
}
87
87
},
88
88
"descriptionVersion": {
89
89
"type": "integer",
90
90
"minimum": 1,
91
91
"description": "Version of the patch description this record follows."
92
92
}
93
93
}
94
94
},
95
95
"description": "A patch, held in its creator's own repository."
96
96
},
97
97
"lineage": {
98
98
"type": "object",
99
99
"required": [
100
100
"uri",
101
101
"creatorDid"
102
102
],
103
103
"properties": {
104
104
"uri": {
105
105
"type": "string",
106
106
"format": "at-uri"
107
107
},
108
108
"patchId": {
109
109
"type": "string",
110
110
"maxLength": 128
111
111
},
112
112
"creatorDid": {
113
113
"type": "string",
114
114
"format": "did"
115
115
}
116
116
},
117
117
"description": "The patch this one was forked from, and its creator. Preserved even when the source is later deleted."
118
118
},
119
119
"inputRef": {
120
120
"type": "object",
121
121
"required": [
122
122
"instanceId",
123
123
"audioInput"
124
124
],
125
125
"properties": {
126
126
"audioInput": {
127
127
"type": "string",
128
128
"maxLength": 64,
129
129
"minLength": 1
130
130
},
131
131
"instanceId": {
132
132
"type": "string",
133
133
"maxLength": 64,
134
134
"minLength": 1
135
135
}
136
136
}
137
137
},
138
138
"position": {
139
139
"type": "object",
140
140
"required": [
141
141
"x",
142
142
"y"
143
143
],
144
144
"properties": {
145
145
"x": {
146
146
"type": "integer"
147
147
},
148
148
"y": {
149
149
"type": "integer"
150
150
}
151
151
}
152
152
},
153
153
"midiRoute": {
154
154
"type": "object",
155
155
"required": [
156
156
"instanceId",
157
157
"midiInput"
158
158
],
159
159
"properties": {
160
160
"midiInput": {
161
161
"type": "string",
162
162
"maxLength": 64,
163
163
"minLength": 1
164
164
},
165
165
"instanceId": {
166
166
"type": "string",
167
167
"maxLength": 64,
168
168
"minLength": 1
169
169
}
170
170
}
171
171
},
172
172
"moduleRef": {
173
173
"type": "object",
174
174
"required": [
175
175
"moduleId",
176
176
"versionKey",
177
177
"authorDid"
178
178
],
179
179
"properties": {
180
180
"moduleId": {
181
181
"type": "string",
182
182
"maxLength": 128,
183
183
"minLength": 1
184
184
},
185
185
"authorDid": {
186
186
"type": "string",
187
187
"format": "did"
188
188
},
189
189
"versionKey": {
190
190
"type": "string",
191
191
"maxLength": 128,
192
192
"minLength": 1
193
193
}
194
194
},
195
195
"description": "A pin to one exact published version of a module. Resolving it fetches that record, whoever authored it."
196
196
},
197
197
"outputRef": {
198
198
"type": "object",
199
199
"required": [
200
200
"instanceId",
201
201
"audioOutput"
202
202
],
203
203
"properties": {
204
204
"instanceId": {
205
205
"type": "string",
206
206
"maxLength": 64,
207
207
"minLength": 1
208
208
},
209
209
"audioOutput": {
210
210
"type": "string",
211
211
"maxLength": 64,
212
212
"minLength": 1
213
213
}
214
214
}
215
215
},
216
216
"connection": {
217
217
"type": "object",
218
218
"required": [
219
219
"from",
220
220
"to"
221
221
],
222
222
"properties": {
223
223
"to": {
224
224
"ref": "#inputRef",
225
225
"type": "ref"
226
226
},
227
227
"from": {
228
228
"ref": "#outputRef",
229
229
"type": "ref"
230
230
}
231
231
},
232
232
"description": "An audio connection between two module instances, naming the declared ports at each end."
233
233
},
234
234
"moduleInstance": {
235
235
"type": "object",
236
236
"required": [
237
237
"instanceId",
238
238
"module"
239
239
],
240
240
"properties": {
241
241
"module": {
242
242
"ref": "#moduleRef",
243
243
"type": "ref"
244
244
},
245
245
"position": {
246
246
"ref": "#position",
247
247
"type": "ref",
248
248
"description": "Where the creator placed this instance in the patch's arrangement, so the arrangement travels with the patch and a fork inherits it. Optional permanently, and the only field in either description that exists for presentation."
249
249
},
250
250
"instanceId": {
251
251
"type": "string",
252
252
"maxLength": 64,
253
253
"minLength": 1
254
254
},
255
255
"voiceScope": {
256
256
"type": "string",
257
257
"description": "Whether this instance is built once for each sounding note or once for the whole patch. Optional permanently: an unset scope is worked out when the patch is played, and is never written on a creator's behalf.",
258
258
"knownValues": [
259
259
"perNote",
260
260
"perPatch"
261
261
]
262
262
},
263
263
"parameterValues": {
264
264
"type": "array",
265
265
"items": {
266
266
"ref": "#parameterValue",
267
267
"type": "ref"
268
268
}
269
269
},
270
270
"sampleSlotFills": {
271
271
"type": "array",
272
272
"items": {
273
273
"ref": "#sampleSlotFill",
274
274
"type": "ref"
275
275
},
276
276
"description": "Samples this instance supplies for the module's declared slots. A fill lives here, in the patch, so writing one never touches the module."
277
277
}
278
278
},
279
279
"description": "One use of one module version. A patch may use the same module more than once; each instance is separately addressable and carries its own parameter values and slot fills."
280
280
},
281
281
"parameterValue": {
282
282
"type": "object",
283
283
"required": [
284
284
"id"
285
285
],
286
286
"properties": {
287
287
"id": {
288
288
"type": "string",
289
289
"maxLength": 64,
290
290
"minLength": 1
291
291
},
292
292
"value": {
293
-
"type": "unknown"
293
+
"type": "unknown",
294
+
"description": "The value this patch sets the parameter to. A number that is not a whole number is carried as its decimal string — \"0.5\", not 0.5 — because the ATproto data model has no floating-point type and a PDS refuses one. A whole number is an ordinary integer, and a reader turns such a string back into a number. Where the module declares a closed set of values instead, this is one of those strings, and a label that looks like a number stays the label it is."
294
295
},
295
296
"useDefault": {
296
297
"type": "boolean",
297
298
"description": "Set where the patch explicitly defers to the module's default rather than recording a value."
298
299
}
299
300
},
300
301
"description": "A value for one of the module's exposed parameters, or an explicit fall-back to the module's declared default."
301
302
},
302
303
"sampleSlotFill": {
303
304
"type": "object",
304
305
"required": [
305
306
"slotId",
306
307
"blob",
307
308
"ownerDid"
308
309
],
309
310
"properties": {
310
311
"blob": {
311
312
"type": "blob",
312
313
"accept": [
313
314
"audio/wav"
314
315
],
315
316
"maxSize": 2097152
316
317
},
317
318
"slotId": {
318
319
"type": "string",
319
320
"maxLength": 64,
320
321
"minLength": 1
321
322
},
322
323
"ownerDid": {
323
324
"type": "string",
324
325
"format": "did"
325
326
}
326
327
}
327
328
}
328
329
},
329
330
"$type": "com.atproto.lexicon.schema",
330
331
"lexicon": 1,
331
332
"description": "A synth patch: which modules it uses, how they are wired, what their parameters are set to, and how it is played. A patch plus the module records it pins is everything needed to reproduce it."
332
333
}