fm.freemix.actor.profile
Schema Diff
+5 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 2 non-breaking changes.
Non-Breaking Changes (2)
- AddedVertex AddedVertex { vertex_id: "fm.freemix.actor.profile:body.avatarSeed" }
- AddedEdge AddedEdge { src: "fm.freemix.actor.profile:body", tgt: "fm.freemix.actor.profile:body.avatarSeed", kind: "prop", name: Some("avatarSeed") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "fm.freemix.actor.profile:body.avatarSeed" }
Additional Notes
- Non-breaking: AddedEdge { src: "fm.freemix.actor.profile:body", tgt: "fm.freemix.actor.profile:body.avatarSeed", kind: "prop", name: Some("avatarSeed") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"link": {
5
5
"properties": {
6
6
"label": {
7
7
"description": "Link display label (e.g., 'Spotify', 'SoundCloud')",
8
8
"maxLength": 50,
9
9
"type": "string"
10
10
},
11
11
"url": {
12
12
"description": "Link URL",
13
13
"format": "uri",
14
14
"maxLength": 3000,
15
15
"type": "string"
16
16
}
17
17
},
18
18
"required": [
19
19
"label",
20
20
"url"
21
21
],
22
22
"type": "object"
23
23
},
24
24
"main": {
25
25
"description": "FreeMix-specific profile data that overlays the user's Bluesky profile",
26
26
"key": "literal:self",
27
27
"record": {
28
28
"properties": {
29
+
"avatarSeed": {
30
+
"description": "FM-730: seed the generative avatar placeholder is drawn from. Optional — absent means fall back to the DID/handle derivation. Never an empty string (an empty seed collapses the generator).",
31
+
"maxLength": 256,
32
+
"type": "string"
33
+
},
29
34
"avatarUrl": {
30
35
"description": "Avatar URL (overrides Bluesky avatar on FreeMix)",
31
36
"format": "uri",
32
37
"maxLength": 3000,
33
38
"type": "string"
34
39
},
35
40
"bio": {
36
41
"description": "Artist bio (overrides Bluesky bio on FreeMix)",
37
42
"maxLength": 1000,
38
43
"type": "string"
39
44
},
40
45
"createdAt": {
41
46
"description": "Record creation timestamp",
42
47
"format": "datetime",
43
48
"maxLength": 100,
44
49
"type": "string"
45
50
},
46
51
"displayName": {
47
52
"description": "Display name (overrides Bluesky display name on FreeMix)",
48
53
"maxLength": 100,
49
54
"type": "string"
50
55
},
51
56
"genres": {
52
57
"description": "Artist's primary genres",
53
58
"items": {
54
59
"maxLength": 50,
55
60
"type": "string"
56
61
},
57
62
"maxLength": 10,
58
63
"type": "array"
59
64
},
60
65
"label": {
61
66
"description": "Record label affiliation",
62
67
"maxLength": 200,
63
68
"type": "string"
64
69
},
65
70
"links": {
66
71
"description": "External links (Spotify, SoundCloud, Bandcamp, etc.)",
67
72
"items": {
68
73
"ref": "#link",
69
74
"type": "ref"
70
75
},
71
76
"maxLength": 10,
72
77
"type": "array"
73
78
},
74
79
"proAffiliation": {
75
80
"description": "PRO affiliation (e.g., BMI, ASCAP, PRS, GEMA)",
76
81
"maxLength": 100,
77
82
"type": "string"
78
83
},
79
84
"roles": {
80
85
"description": "Artist roles (e.g., producer, DJ, vocalist)",
81
86
"items": {
82
87
"maxLength": 50,
83
88
"type": "string"
84
89
},
85
90
"maxLength": 10,
86
91
"type": "array"
87
92
},
88
93
"updatedAt": {
89
94
"description": "Last update timestamp",
90
95
"format": "datetime",
91
96
"maxLength": 100,
92
97
"type": "string"
93
98
}
94
99
},
95
100
"required": [
96
101
"createdAt"
97
102
],
98
103
"type": "object"
99
104
},
100
105
"type": "record"
101
106
}
102
107
},
103
108
"id": "fm.freemix.actor.profile",
104
109
"lexicon": 1
105
110
}