fm.freemix.license.grant
Schema Diff
+2 -2
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
}