fm.freemix.license.grant

lex-publisher.freemix.fm

Schema Diff

+2 -2

From

CID
bafyreidmnq2z457...
Indexed At
2026-04-10 01:36 UTC
View this version

To

CID
bafyreigs3f7a3er...
Indexed At
2026-06-13 06:29 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 1 non-breaking change.

Non-Breaking Changes (1)
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "fm.freemix.license.grant#modifiers.royaltyRate", sort: "maximum", old_value: "100", new_value: "10000" }

Migration Guidance

Constraint Changes

  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "fm.freemix.license.grant#modifiers.royaltyRate", sort: "maximum", old_value: "100", new_value: "10000" }
1 1
{
2 2
  "id": "fm.freemix.license.grant",
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
          "tier",
11 11
          "modifiers",
12 12
          "grants",
13 13
          "requires",
14 14
          "restrictions",
15 15
          "createdAt"
16 16
        ],
17 17
        "properties": {
18 18
          "tier": {
19 19
            "type": "string",
20 20
            "maxLength": 100,
21 21
            "description": "License tier: open (public domain), remix (full rights), noncommercial (NC use), stems (stems for creative use), dj (DJ edits/performance), samples (sample packs, 0% royalty)",
22 22
            "knownValues": [
23 23
              "open",
24 24
              "remix",
25 25
              "noncommercial",
26 26
              "stems",
27 27
              "dj",
28 28
              "samples"
29 29
            ]
30 30
          },
31 31
          "grants": {
32 32
            "ref": "#grants",
33 33
            "type": "ref",
34 34
            "description": "Machine-readable permissions granted by this license"
35 35
          },
36 36
          "requires": {
37 37
            "ref": "#requires",
38 38
            "type": "ref",
39 39
            "description": "Obligations required when using this content"
40 40
          },
41 41
          "createdAt": {
42 42
            "type": "string",
43 43
            "format": "datetime",
44 44
            "maxLength": 100,
45 45
            "description": "Record creation timestamp"
46 46
          },
47 47
          "legalText": {
48 48
            "type": "string",
49 49
            "format": "uri",
50 50
            "maxLength": 3000,
51 51
            "description": "URI to the full license legal text"
52 52
          },
53 53
          "modifiers": {
54 54
            "ref": "#modifiers",
55 55
            "type": "ref",
56 56
            "description": "Optional license modifiers"
57 57
          },
58 58
          "restrictions": {
59 59
            "ref": "#restrictions",
60 60
            "type": "ref",
61 61
            "description": "Restrictions on use"
62 62
          }
63 63
        }
64 64
      },
65 65
      "description": "A FreeMix license grant defining permissions for a track or stem"
66 66
    },
67 67
    "grants": {
68 68
      "type": "object",
69 69
      "required": [
70 70
        "remix",
71 71
        "sample",
72 72
        "redistribute",
73 73
        "commercialUse",
74 74
        "stemAccess",
75 75
        "djPerformance",
76 76
        "djEdit",
77 77
        "mixInclusion",
78 78
        "mixDistribution",
79 79
        "aiTraining"
80 80
      ],
81 81
      "properties": {
82 82
        "remix": {
83 83
          "type": "boolean",
84 84
          "description": "Can create remixes"
85 85
        },
86 86
        "djEdit": {
87 87
          "type": "boolean",
88 88
          "description": "Can create DJ edits (extended intros/outros, instrumentals)"
89 89
        },
90 90
        "sample": {
91 91
          "type": "boolean",
92 92
          "description": "Can sample portions"
93 93
        },
94 94
        "aiTraining": {
95 95
          "type": "boolean",
96 96
          "description": "Can use for AI/ML training"
97 97
        },
98 98
        "stemAccess": {
99 99
          "type": "boolean",
100 100
          "description": "Stems available for use"
101 101
        },
102 102
        "mixInclusion": {
103 103
          "type": "boolean",
104 104
          "description": "Can include in continuous DJ mix"
105 105
        },
106 106
        "redistribute": {
107 107
          "type": "boolean",
108 108
          "description": "Can redistribute full track"
109 109
        },
110 110
        "commercialUse": {
111 111
          "type": "boolean",
112 112
          "description": "Commercial use allowed"
113 113
        },
114 114
        "djPerformance": {
115 115
          "type": "boolean",
116 116
          "description": "Public DJ performance allowed"
117 117
        },
118 118
        "mixDistribution": {
119 119
          "type": "boolean",
120 120
          "description": "Can distribute recorded mix"
121 121
        }
122 122
      },
123 123
      "description": "Machine-readable permissions granted by this license"
124 124
    },
125 125
    "requires": {
126 126
      "type": "object",
127 127
      "required": [
128 128
        "attribution",
129 129
        "attributionCascade",
130 130
        "tracklist",
131 131
        "royalty",
132 132
        "shareAlike",
133 133
        "negotiateCommercial"
134 134
      ],
135 135
      "properties": {
136 136
        "royalty": {
137 137
          "type": "boolean",
138 138
          "description": "Royalty payment required on derivative sales (rate specified in modifiers.royaltyRate)"
139 139
        },
140 140
        "tracklist": {
141 141
          "type": "boolean",
142 142
          "description": "Mixes must include timestamped tracklist"
143 143
        },
144 144
        "shareAlike": {
145 145
          "type": "boolean",
146 146
          "description": "Derivatives must carry FreeMix license"
147 147
        },
148 148
        "attribution": {
149 149
          "type": "boolean",
150 150
          "description": "Must credit original creator"
151 151
        },
152 152
        "attributionCascade": {
153 153
          "type": "boolean",
154 154
          "description": "Attribution required through full remix chain"
155 155
        },
156 156
        "negotiateCommercial": {
157 157
          "type": "boolean",
158 158
          "description": "Commercial use requires separate agreement"
159 159
        }
160 160
      },
161 161
      "description": "Obligations required when using this content"
162 162
    },
163 163
    "modifiers": {
164 164
      "type": "object",
165 165
      "properties": {
166 166
        "mix": {
167 167
          "type": "boolean",
168 168
          "default": false,
169 169
          "description": "Inclusion in DJ mixes allowed"
170 170
        },
171 171
        "noAI": {
172 172
          "type": "boolean",
173 173
          "default": false,
174 174
          "description": "Excludes from AI/ML training"
175 175
        },
176 176
        "credit": {
177 177
          "type": "boolean",
178 178
          "default": false,
179 179
          "description": "Attribution required"
180 180
        },
181 181
        "shareAlike": {
182 182
          "type": "boolean",
183 183
          "default": false,
184 184
          "description": "Derivatives must carry a FreeMix license"
185 185
        },
186 186
        "royaltyRate": {
187 187
          "type": "integer",
188 -
          "maximum": 100,
188 +
          "maximum": 10000,
189 189
          "minimum": 1,
190 -
          "description": "Percentage of gross revenue from derivative sales. Required if tier supports royalty and creator wants it. Not active until Phase 3 but recorded from day one."
190 +
          "description": "Royalty on derivative sales, in BASIS POINTS (x100 of percent): 250 = 2.5%, 500 = 5%, 10000 = 100%. FM-426: scaled to an integer because ATProto has no float type and creators may set fractional rates (e.g. 2.5%); matches the royalty_sales/royalty_legs bps convention. The human percent is rendered in the canonical license string (e.g. Royalty(2.5%)) and the DB licenseModifiers jsonb stays float percent — convert at this PDS-record boundary only. Not active until Phase 3 but recorded from day one."
191 191
        }
192 192
      },
193 193
      "description": "License modifiers that can be combined with tiers"
194 194
    },
195 195
    "restrictions": {
196 196
      "type": "object",
197 197
      "required": [
198 198
        "noFullTrackRedistribution",
199 199
        "noSourceRedistribution",
200 200
        "nonCommercialOnly",
201 201
        "noAiTraining"
202 202
      ],
203 203
      "properties": {
204 204
        "noAiTraining": {
205 205
          "type": "boolean",
206 206
          "description": "Cannot use for AI/ML training"
207 207
        },
208 208
        "nonCommercialOnly": {
209 209
          "type": "boolean",
210 210
          "description": "Only non-commercial use (NonCommercial)"
211 211
        },
212 212
        "noSourceRedistribution": {
213 213
          "type": "boolean",
214 214
          "description": "Cannot redistribute source files (DJ)"
215 215
        },
216 216
        "noFullTrackRedistribution": {
217 217
          "type": "boolean",
218 218
          "description": "Cannot redistribute full track (StemsOnly, DJ)"
219 219
        }
220 220
      },
221 221
      "description": "Restrictions on use"
222 222
    }
223 223
  },
224 224
  "$type": "com.atproto.lexicon.schema",
225 225
  "lexicon": 1
226 226
}

Compare Other Versions

Lexicon Garden

@