at.atmosynth.module

atmosynth.at

Schema Diff

+5 -1

From

CID
bafyreibwkmr5b32...
Indexed At
2026-08-31 13:27 UTC
View this version

To

CID
bafyreif4uicvsyi...
Indexed At
2026-08-31 14:12 UTC
View this version

Compatibility Analysis

Backward Compatible

No changes detected.

1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "automation": {
5 5
      "description": "A breakpoint envelope scheduled onto an AudioParam. Breakpoints up to and including sustainAt are scheduled on note-on; those after it on note-off.",
6 6
      "properties": {
7 7
        "breakpoints": {
8 8
          "items": {
9 9
            "ref": "#breakpoint",
10 10
            "type": "ref"
11 11
          },
12 12
          "minLength": 1,
13 13
          "type": "array"
14 14
        },
15 15
        "id": {
16 16
          "maxLength": 64,
17 17
          "minLength": 1,
18 18
          "type": "string"
19 19
        },
20 20
        "label": {
21 21
          "maxLength": 200,
22 22
          "type": "string"
23 23
        },
24 24
        "sustainAt": {
25 25
          "description": "Index into breakpoints where the value holds while a note is held. Absent means a one-shot.",
26 26
          "minimum": 0,
27 27
          "type": "integer"
28 28
        },
29 29
        "target": {
30 30
          "ref": "#paramTarget",
31 31
          "type": "ref"
32 32
        }
33 33
      },
34 34
      "required": [
35 35
        "id",
36 36
        "target",
37 37
        "breakpoints"
38 38
      ],
39 39
      "type": "object"
40 40
    },
41 41
    "breakpoint": {
42 42
      "properties": {
43 43
        "curve": {
44 44
          "description": "How the value travels from the previous breakpoint.",
45 45
          "knownValues": [
46 46
            "step",
47 47
            "linear",
48 48
            "exponential"
49 49
          ],
50 50
          "type": "string"
51 51
        },
52 52
        "time": {
53 53
          "description": "Milliseconds from the trigger.",
54 54
          "minimum": 0,
55 55
          "type": "integer"
56 56
        },
57 57
        "value": {
58 -
          "description": "The param's value at this instant.",
58 +
          "description": "The param's value at this instant. 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.",
59 59
          "type": "unknown"
60 60
        }
61 61
      },
62 62
      "required": [
63 63
        "time",
64 64
        "value"
65 65
      ],
66 66
      "type": "object"
67 67
    },
68 68
    "connection": {
69 69
      "description": "An audio connection from a node output to either an audio input or a named AudioParam.",
70 70
      "properties": {
71 71
        "from": {
72 72
          "ref": "#source",
73 73
          "type": "ref"
74 74
        },
75 75
        "to": {
76 76
          "ref": "#target",
77 77
          "type": "ref"
78 78
        }
79 79
      },
80 80
      "required": [
81 81
        "from",
82 82
        "to"
83 83
      ],
84 84
      "type": "object"
85 85
    },
86 86
    "lineage": {
87 87
      "description": "The module this one was forked from, and its author.",
88 88
      "properties": {
89 89
        "authorDid": {
90 90
          "format": "did",
91 91
          "type": "string"
92 92
        },
93 93
        "moduleId": {
94 94
          "maxLength": 128,
95 95
          "type": "string"
96 96
        },
97 97
        "uri": {
98 98
          "format": "at-uri",
99 99
          "type": "string"
100 100
        }
101 101
      },
102 102
      "required": [
103 103
        "uri",
104 104
        "authorDid"
105 105
      ],
106 106
      "type": "object"
107 107
    },
108 108
    "main": {
109 109
      "description": "A module, held in its author's own repository.",
110 110
      "key": "tid",
111 111
      "record": {
112 112
        "properties": {
113 113
          "audioInputs": {
114 114
            "description": "Zero or more individually identified audio inputs.",
115 115
            "items": {
116 116
              "ref": "#port",
117 117
              "type": "ref"
118 118
            },
119 119
            "type": "array"
120 120
          },
121 121
          "audioOutputs": {
122 122
            "items": {
123 123
              "ref": "#port",
124 124
              "type": "ref"
125 125
            },
126 126
            "type": "array"
127 127
          },
128 128
          "automation": {
129 129
            "description": "Scheduled AudioParam envelopes. Web Audio has no envelope node, so these are their own structure.",
130 130
            "items": {
131 131
              "ref": "#automation",
132 132
              "type": "ref"
133 133
            },
134 134
            "type": "array"
135 135
          },
136 136
          "connections": {
137 137
            "items": {
138 138
              "ref": "#connection",
139 139
              "type": "ref"
140 140
            },
141 141
            "type": "array"
142 142
          },
143 143
          "createdAt": {
144 144
            "format": "datetime",
145 145
            "type": "string"
146 146
          },
147 147
          "description": {
148 148
            "maxLength": 3000,
149 149
            "type": "string"
150 150
          },
151 151
          "descriptionVersion": {
152 152
            "description": "Version of the module description this record follows. A reader accepts any version at or below its own.",
153 153
            "minimum": 1,
154 154
            "type": "integer"
155 155
          },
156 156
          "forkedFrom": {
157 157
            "ref": "#lineage",
158 158
            "type": "ref"
159 159
          },
160 160
          "midiInputs": {
161 161
            "items": {
162 162
              "ref": "#port",
163 163
              "type": "ref"
164 164
            },
165 165
            "type": "array"
166 166
          },
167 167
          "moduleId": {
168 168
            "description": "Stable identity shared by every published version of this module.",
169 169
            "maxLength": 128,
170 170
            "type": "string"
171 171
          },
172 172
          "name": {
173 173
            "maxLength": 200,
174 174
            "minLength": 1,
175 175
            "type": "string"
176 176
          },
177 177
          "nodes": {
178 178
            "items": {
179 179
              "ref": "#node",
180 180
              "type": "ref"
181 181
            },
182 182
            "type": "array"
183 183
          },
184 184
          "parameters": {
185 185
            "items": {
186 186
              "ref": "#parameter",
187 187
              "type": "ref"
188 188
            },
189 189
            "type": "array"
190 190
          },
191 191
          "sampleSlots": {
192 192
            "items": {
193 193
              "ref": "#sampleSlot",
194 194
              "type": "ref"
195 195
            },
196 196
            "type": "array"
197 197
          },
198 198
          "versionKey": {
199 199
            "description": "This record's own key within the series. Informational; the record key is authoritative.",
200 200
            "maxLength": 128,
201 201
            "type": "string"
202 202
          }
203 203
        },
204 204
        "required": [
205 205
          "descriptionVersion",
206 206
          "moduleId",
207 207
          "name",
208 208
          "description",
209 209
          "audioInputs",
210 210
          "audioOutputs",
211 211
          "midiInputs",
212 212
          "nodes",
213 213
          "connections",
214 214
          "createdAt"
215 215
        ],
216 216
        "type": "object"
217 217
      },
218 218
      "type": "record"
219 219
    },
220 220
    "node": {
221 221
      "description": "One Web Audio node. `kind` is drawn from a closed vocabulary; `options` are its construction-time settings, which are not AudioParams and cannot be modulated.",
222 222
      "properties": {
223 223
        "id": {
224 224
          "maxLength": 64,
225 225
          "minLength": 1,
226 226
          "type": "string"
227 227
        },
228 228
        "kind": {
229 229
          "maxLength": 64,
230 230
          "minLength": 1,
231 231
          "type": "string"
232 232
        },
233 233
        "options": {
234 +
          "description": "The node's settings, as its kind defines them. 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.",
234 235
          "type": "unknown"
235 236
        }
236 237
      },
237 238
      "required": [
238 239
        "id",
239 240
        "kind"
240 241
      ],
241 242
      "type": "object"
242 243
    },
243 244
    "paramTarget": {
244 245
      "properties": {
245 246
        "node": {
246 247
          "maxLength": 64,
247 248
          "minLength": 1,
248 249
          "type": "string"
249 250
        },
250 251
        "param": {
251 252
          "maxLength": 64,
252 253
          "minLength": 1,
253 254
          "type": "string"
254 255
        }
255 256
      },
256 257
      "required": [
257 258
        "node",
258 259
        "param"
259 260
      ],
260 261
      "type": "object"
261 262
    },
262 263
    "parameter": {
263 264
      "description": "A parameter the module exposes for a patch to set. Each target reaches an AudioParam, a construction option, or one field of an automation breakpoint.",
264 265
      "properties": {
265 266
        "default": {
267 +
          "description": "The value used where a patch sets none. 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 this parameter declares a closed value set, it is one of those strings.",
266 268
          "type": "unknown"
267 269
        },
268 270
        "id": {
269 271
          "maxLength": 64,
270 272
          "minLength": 1,
271 273
          "type": "string"
272 274
        },
273 275
        "label": {
274 276
          "maxLength": 200,
275 277
          "minLength": 1,
276 278
          "type": "string"
277 279
        },
278 280
        "range": {
279 281
          "ref": "#range",
280 282
          "type": "ref"
281 283
        },
282 284
        "targets": {
283 285
          "items": {
284 286
            "ref": "#parameterTarget",
285 287
            "type": "ref"
286 288
          },
287 289
          "minLength": 1,
288 290
          "type": "array"
289 291
        },
290 292
        "values": {
291 293
          "description": "A closed value set, where the parameter is not numeric.",
292 294
          "items": {
293 295
            "maxLength": 200,
294 296
            "type": "string"
295 297
          },
296 298
          "type": "array"
297 299
        }
298 300
      },
299 301
      "required": [
300 302
        "id",
301 303
        "label",
302 304
        "targets"
303 305
      ],
304 306
      "type": "object"
305 307
    },
306 308
    "parameterTarget": {
307 309
      "description": "One of: {node, param}, {node, option}, or {automation, breakpoint, field}.",
308 310
      "properties": {
309 311
        "automation": {
310 312
          "maxLength": 64,
311 313
          "type": "string"
312 314
        },
313 315
        "breakpoint": {
314 316
          "minimum": 0,
315 317
          "type": "integer"
316 318
        },
317 319
        "field": {
318 320
          "knownValues": [
319 321
            "time",
320 322
            "value"
321 323
          ],
322 324
          "type": "string"
323 325
        },
324 326
        "node": {
325 327
          "maxLength": 64,
326 328
          "type": "string"
327 329
        },
328 330
        "option": {
329 331
          "maxLength": 64,
330 332
          "type": "string"
331 333
        },
332 334
        "param": {
333 335
          "maxLength": 64,
334 336
          "type": "string"
335 337
        }
336 338
      },
337 339
      "type": "object"
338 340
    },
339 341
    "port": {
340 342
      "description": "One individually identified audio or MIDI boundary of the module.",
341 343
      "properties": {
342 344
        "id": {
343 345
          "maxLength": 64,
344 346
          "minLength": 1,
345 347
          "type": "string"
346 348
        },
347 349
        "label": {
348 350
          "maxLength": 200,
349 351
          "type": "string"
350 352
        }
351 353
      },
352 354
      "required": [
353 355
        "id"
354 356
      ],
355 357
      "type": "object"
356 358
    },
357 359
    "range": {
358 360
      "properties": {
359 361
        "max": {
362 +
          "description": "The high bound. 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.",
360 363
          "type": "unknown"
361 364
        },
362 365
        "min": {
366 +
          "description": "The low bound. 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.",
363 367
          "type": "unknown"
364 368
        }
365 369
      },
366 370
      "required": [
367 371
        "min",
368 372
        "max"
369 373
      ],
370 374
      "type": "object"
371 375
    },
372 376
    "sampleRef": {
373 377
      "description": "A sample blob and the account that holds it.",
374 378
      "properties": {
375 379
        "blob": {
376 380
          "accept": [
377 381
            "audio/wav"
378 382
          ],
379 383
          "maxSize": 2097152,
380 384
          "type": "blob"
381 385
        },
382 386
        "ownerDid": {
383 387
          "format": "did",
384 388
          "type": "string"
385 389
        }
386 390
      },
387 391
      "required": [
388 392
        "blob",
389 393
        "ownerDid"
390 394
      ],
391 395
      "type": "object"
392 396
    },
393 397
    "sampleSlot": {
394 398
      "description": "A named slot a patch instance may fill with its own sample. `node` names a node in this graph and `property` the thing the sample feeds.",
395 399
      "properties": {
396 400
        "default": {
397 401
          "ref": "#sampleRef",
398 402
          "type": "ref"
399 403
        },
400 404
        "id": {
401 405
          "maxLength": 64,
402 406
          "minLength": 1,
403 407
          "type": "string"
404 408
        },
405 409
        "label": {
406 410
          "maxLength": 200,
407 411
          "type": "string"
408 412
        },
409 413
        "node": {
410 414
          "maxLength": 64,
411 415
          "minLength": 1,
412 416
          "type": "string"
413 417
        },
414 418
        "property": {
415 419
          "knownValues": [
416 420
            "buffer"
417 421
          ],
418 422
          "type": "string"
419 423
        }
420 424
      },
421 425
      "required": [
422 426
        "id",
423 427
        "node",
424 428
        "property"
425 429
      ],
426 430
      "type": "object"
427 431
    },
428 432
    "source": {
429 433
      "properties": {
430 434
        "node": {
431 435
          "maxLength": 64,
432 436
          "minLength": 1,
433 437
          "type": "string"
434 438
        },
435 439
        "output": {
436 440
          "minimum": 0,
437 441
          "type": "integer"
438 442
        }
439 443
      },
440 444
      "required": [
441 445
        "node"
442 446
      ],
443 447
      "type": "object"
444 448
    },
445 449
    "target": {
446 450
      "description": "Exactly one of `input` or `param` is present. `param` is modulation: a node output reaching a named AudioParam.",
447 451
      "properties": {
448 452
        "input": {
449 453
          "minimum": 0,
450 454
          "type": "integer"
451 455
        },
452 456
        "node": {
453 457
          "maxLength": 64,
454 458
          "minLength": 1,
455 459
          "type": "string"
456 460
        },
457 461
        "param": {
458 462
          "maxLength": 64,
459 463
          "type": "string"
460 464
        }
461 465
      },
462 466
      "required": [
463 467
        "node"
464 468
      ],
465 469
      "type": "object"
466 470
    }
467 471
  },
468 472
  "description": "A reusable synth module: Web Audio nodes wired together, with declared audio and MIDI boundaries, exposed parameters, automation and sample slots. Each published version is its own record; records sharing a moduleId form a series.",
469 473
  "id": "at.atmosynth.module",
470 474
  "lexicon": 1
471 475
}

Compare Other Versions

Lexicon Garden

@