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
"id": "fm.freemix.actor.profile",
3
3
"defs": {
4
4
"link": {
5
5
"type": "object",
6
6
"required": [
7
7
"label",
8
8
"url"
9
9
],
10
10
"properties": {
11
11
"url": {
12
12
"type": "string",
13
13
"format": "uri",
14
14
"maxLength": 3000,
15
15
"description": "Link URL"
16
16
},
17
17
"label": {
18
18
"type": "string",
19
19
"maxLength": 50,
20
20
"description": "Link display label (e.g., 'Spotify', 'SoundCloud')"
21
21
}
22
22
}
23
23
},
24
24
"main": {
25
25
"key": "literal:self",
26
26
"type": "record",
27
27
"record": {
28
28
"type": "object",
29
29
"required": [
30
30
"createdAt"
31
31
],
32
32
"properties": {
33
33
"bio": {
34
34
"type": "string",
35
35
"maxLength": 1000,
36
36
"description": "Artist bio (overrides Bluesky bio on FreeMix)"
37
37
},
38
38
"label": {
39
39
"type": "string",
40
40
"maxLength": 200,
41
41
"description": "Record label affiliation"
42
42
},
43
43
"links": {
44
44
"type": "array",
45
45
"items": {
46
46
"ref": "#link",
47
47
"type": "ref"
48
48
},
49
49
"maxLength": 10,
50
50
"description": "External links (Spotify, SoundCloud, Bandcamp, etc.)"
51
51
},
52
52
"roles": {
53
53
"type": "array",
54
54
"items": {
55
55
"type": "string",
56
56
"maxLength": 50
57
57
},
58
58
"maxLength": 10,
59
59
"description": "Artist roles (e.g., producer, DJ, vocalist)"
60
60
},
61
61
"genres": {
62
62
"type": "array",
63
63
"items": {
64
64
"type": "string",
65
65
"maxLength": 50
66
66
},
67
67
"maxLength": 10,
68
68
"description": "Artist's primary genres"
69
69
},
70
70
"avatarUrl": {
71
71
"type": "string",
72
72
"format": "uri",
73
73
"maxLength": 3000,
74
74
"description": "Avatar URL (overrides Bluesky avatar on FreeMix)"
75
75
},
76
76
"createdAt": {
77
77
"type": "string",
78
78
"format": "datetime",
79
79
"maxLength": 100,
80
80
"description": "Record creation timestamp"
81
81
},
82
82
"updatedAt": {
83
83
"type": "string",
84
84
"format": "datetime",
85
85
"maxLength": 100,
86
86
"description": "Last update timestamp"
87
87
},
88
+
"avatarSeed": {
89
+
"type": "string",
90
+
"maxLength": 256,
91
+
"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)."
92
+
},
88
93
"displayName": {
89
94
"type": "string",
90
95
"maxLength": 100,
91
96
"description": "Display name (overrides Bluesky display name on FreeMix)"
92
97
},
93
98
"proAffiliation": {
94
99
"type": "string",
95
100
"maxLength": 100,
96
101
"description": "PRO affiliation (e.g., BMI, ASCAP, PRS, GEMA)"
97
102
}
98
103
}
99
104
},
100
105
"description": "FreeMix-specific profile data that overlays the user's Bluesky profile"
101
106
}
102
107
},
103
108
"$type": "com.atproto.lexicon.schema",
104
109
"lexicon": 1
105
110
}