at.atmosynth.arrangement

atmosynth.at

Schema Diff

+29 -0

From

CID
bafyreigh27mez7m...
Indexed At
2026-10-20 18:30 UTC
View this version

To

CID
bafyreid5qebwekk...
Indexed At
2026-10-21 18:33 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 8 non-breaking changes.

Breaking Changes (2)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.atmosynth.arrangement#loopRange", src: "at.atmosynth.arrangement#loopRange", tgt: "at.atmosynth.arrangement#loopRange.start", kind: "prop", name: Some("start") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.atmosynth.arrangement#loopRange", src: "at.atmosynth.arrangement#loopRange", tgt: "at.atmosynth.arrangement#loopRange.end", kind: "prop", name: Some("end") }
Non-Breaking Changes (8)
  • AddedVertex AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange" }
  • AddedVertex AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange.end" }
  • AddedVertex AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange.on" }
  • AddedVertex AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange.start" }
  • AddedVertex AddedVertex { vertex_id: "at.atmosynth.arrangement:body.loop" }
  • AddedEdge AddedEdge { src: "at.atmosynth.arrangement#loopRange", tgt: "at.atmosynth.arrangement#loopRange.on", kind: "prop", name: Some("on") }
  • AddedEdge AddedEdge { src: "at.atmosynth.arrangement:body", tgt: "at.atmosynth.arrangement:body.loop", kind: "prop", name: Some("loop") }
  • AddedEdge AddedEdge { src: "at.atmosynth.arrangement:body.loop", tgt: "at.atmosynth.arrangement#loopRange", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange" }
  • AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange.end" }
  • AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange.on" }
  • AddedVertex { vertex_id: "at.atmosynth.arrangement#loopRange.start" }
  • AddedVertex { vertex_id: "at.atmosynth.arrangement:body.loop" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "at.atmosynth.arrangement#loopRange", src: "at.atmosynth.arrangement#loopRange", tgt: "at.atmosynth.arrangement#loopRange.start", kind: "prop", name: Some("start") }
  • Breaking: RequiredEdgeAdded { vertex_id: "at.atmosynth.arrangement#loopRange", src: "at.atmosynth.arrangement#loopRange", tgt: "at.atmosynth.arrangement#loopRange.end", kind: "prop", name: Some("end") }
  • Non-breaking: AddedEdge { src: "at.atmosynth.arrangement#loopRange", tgt: "at.atmosynth.arrangement#loopRange.on", kind: "prop", name: Some("on") }
  • Non-breaking: AddedEdge { src: "at.atmosynth.arrangement:body", tgt: "at.atmosynth.arrangement:body.loop", kind: "prop", name: Some("loop") }
  • Non-breaking: AddedEdge { src: "at.atmosynth.arrangement:body.loop", tgt: "at.atmosynth.arrangement#loopRange", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "includedPart": {
5 5
      "description": "One part this arrangement includes, and how its creator mixes it.",
6 6
      "properties": {
7 7
        "mix": {
8 8
          "description": "The arrangement's creator's mix of the part's tracks, which stands in place of the part's own strips and destinations wherever it names a track. A track it does not name is heard as the part writes it.",
9 9
          "items": {
10 10
            "ref": "#partMix",
11 11
            "type": "ref"
12 12
          },
13 13
          "maxLength": 32,
14 14
          "type": "array"
15 15
        },
16 16
        "part": {
17 17
          "description": "The part, and the version of it that was included. The part is heard as it is now; the version says what the arrangement's creator agreed to, so a change since can be shown to them.",
18 18
          "ref": "com.atproto.repo.strongRef",
19 19
          "type": "ref"
20 20
        }
21 21
      },
22 22
      "required": [
23 23
        "part"
24 24
      ],
25 25
      "type": "object"
26 26
    },
27 +
    "loopRange": {
28 +
      "description": "A range of the timeline, in ticks, played over and over while the loop is on.",
29 +
      "properties": {
30 +
        "end": {
31 +
          "description": "Where the range ends, in ticks: after `start`.",
32 +
          "minimum": 1,
33 +
          "type": "integer"
34 +
        },
35 +
        "on": {
36 +
          "description": "Whether the loop is on. Optional: absent is off, and only `true` is written.",
37 +
          "type": "boolean"
38 +
        },
39 +
        "start": {
40 +
          "description": "Where the range starts, in ticks.",
41 +
          "minimum": 0,
42 +
          "type": "integer"
43 +
        }
44 +
      },
45 +
      "required": [
46 +
        "start",
47 +
        "end"
48 +
      ],
49 +
      "type": "object"
50 +
    },
27 51
    "main": {
28 52
      "description": "An arrangement, held in its creator's own repository.",
29 53
      "key": "tid",
30 54
      "record": {
31 55
        "properties": {
32 56
          "createdAt": {
33 57
            "format": "datetime",
34 58
            "type": "string"
35 59
          },
36 60
          "description": {
37 61
            "maxLength": 3000,
38 62
            "type": "string"
39 63
          },
40 64
          "keys": {
41 65
            "description": "The key map: the first point at 0, each later than the one before. Optional: absent says no key, which is an arrangement's to leave unsaid.",
42 66
            "items": {
43 67
              "ref": "at.atmosynth.defs#keyPoint",
44 68
              "type": "ref"
45 69
            },
46 70
            "maxLength": 1024,
47 71
            "type": "array"
48 72
          },
49 73
          "length": {
50 74
            "description": "Where the arrangement ends, in ticks. Optional: absent ends it with its last clip.",
51 75
            "minimum": 1,
52 76
            "type": "integer"
53 77
          },
54 78
          "license": {
55 79
            "ref": "at.atmosynth.defs#license",
56 80
            "type": "ref"
57 81
          },
58 82
          "lineage": {
59 83
            "description": "Where the arrangement came from: the arrangement it was forked from, the patch it was made of, and every record anything in it was imported from, so its credits are complete without reading anything else.",
60 84
            "items": {
61 85
              "ref": "at.atmosynth.defs#lineage",
62 86
              "type": "ref"
63 87
            },
64 88
            "maxLength": 64,
65 89
            "type": "array"
66 90
          },
91 +
          "loop": {
92 +
            "description": "The range its creator loops over while working on it. Optional: absent is no loop range. A reader that does not loop, such as a renderer, ignores it: an arrangement played through is played once, from start to end.",
93 +
            "ref": "#loopRange",
94 +
            "type": "ref"
95 +
          },
67 96
          "markers": {
68 97
            "description": "Named moments, in order of `at`.",
69 98
            "items": {
70 99
              "ref": "at.atmosynth.defs#marker",
71 100
              "type": "ref"
72 101
            },
73 102
            "maxLength": 1024,
74 103
            "type": "array"
75 104
          },
76 105
          "meter": {
77 106
            "description": "The meter map: the first point at 0, each later one on a bar line of the meter before it. Optional: absent is 4/4 throughout.",
78 107
            "items": {
79 108
              "ref": "at.atmosynth.defs#meterPoint",
80 109
              "type": "ref"
81 110
            },
82 111
            "maxLength": 1024,
83 112
            "type": "array"
84 113
          },
85 114
          "name": {
86 115
            "maxLength": 200,
87 116
            "minLength": 1,
88 117
            "type": "string"
89 118
          },
90 119
          "openToParts": {
91 120
            "description": "Whether parts offered to this arrangement and not yet included are shown to everybody, rather than to its creator alone. Anybody may write a part naming any arrangement in their own repository; this only decides what the arrangement's own page lists. Optional: absent is its creator alone, and only `true` is written.",
92 121
            "type": "boolean"
93 122
          },
94 123
          "parts": {
95 124
            "description": "Parts other people wrote for this arrangement, in their own repositories, which its creator has included. An included part is heard as it is now; a part its writer has since deleted is no longer heard.",
96 125
            "items": {
97 126
              "ref": "#includedPart",
98 127
              "type": "ref"
99 128
            },
100 129
            "maxLength": 64,
101 130
            "type": "array"
102 131
          },
103 132
          "tags": {
104 133
            "description": "Freely created tags, lower-cased on write.",
105 134
            "items": {
106 135
              "maxLength": 128,
107 136
              "type": "string"
108 137
            },
109 138
            "maxLength": 32,
110 139
            "type": "array"
111 140
          },
112 141
          "tempo": {
113 142
            "description": "The tempo map: the first point at 0, each later than the one before. One point is an arrangement at one tempo. A player that is a host with a clock of its own, a DAW, plays at its tempo instead.",
114 143
            "items": {
115 144
              "ref": "at.atmosynth.defs#tempoPoint",
116 145
              "type": "ref"
117 146
            },
118 147
            "maxLength": 1024,
119 148
            "minLength": 1,
120 149
            "type": "array"
121 150
          },
122 151
          "tracks": {
123 152
            "description": "The tracks, in the order they are shown. One of them is the bus `master`, which every track reaches in the end and which alone goes to the speakers.",
124 153
            "items": {
125 154
              "ref": "at.atmosynth.defs#track",
126 155
              "type": "ref"
127 156
            },
128 157
            "maxLength": 256,
129 158
            "minLength": 1,
130 159
            "type": "array"
131 160
          }
132 161
        },
133 162
        "required": [
134 163
          "name",
135 164
          "tempo",
136 165
          "tracks",
137 166
          "createdAt"
138 167
        ],
139 168
        "type": "object"
140 169
      },
141 170
      "type": "record"
142 171
    },
143 172
    "partMix": {
144 173
      "description": "The arrangement creator's mix of one track of an included part.",
145 174
      "properties": {
146 175
        "strip": {
147 176
          "ref": "at.atmosynth.defs#strip",
148 177
          "type": "ref"
149 178
        },
150 179
        "to": {
151 180
          "description": "The id of the bus in this arrangement the track goes to, in place of the part's own `to`.",
152 181
          "maxLength": 64,
153 182
          "type": "string"
154 183
        },
155 184
        "track": {
156 185
          "description": "The id of the track in the part.",
157 186
          "maxLength": 64,
158 187
          "minLength": 1,
159 188
          "type": "string"
160 189
        }
161 190
      },
162 191
      "required": [
163 192
        "track"
164 193
      ],
165 194
      "type": "object"
166 195
    }
167 196
  },
168 197
  "description": "An arrangement: tracks of clips over one timeline, mixed through busses into a master, with the tempo, the meter and the key it is counted in. Its instruments and effects are patches held inside it whole, and what it took from other people's records it holds as copies that remember where they came from. Parts that other people wrote for it in their own repositories are included by address.",
169 198
  "id": "at.atmosynth.arrangement",
170 199
  "lexicon": 1
171 200
}

Compare Other Versions

Lexicon Garden

@