at.atmosynth.patch

atmosynth.at

Schema Diff

+2 -1

From

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

To

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

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
}

Compare Other Versions

Lexicon Garden

@