app.greengale.blog.defs
Schema Diff
+19 -0
1
1
{
2
2
"id": "app.greengale.blog.defs",
3
3
"defs": {
4
4
"ogp": {
5
5
"type": "object",
6
6
"required": [
7
7
"url"
8
8
],
9
9
"properties": {
10
10
"url": {
11
11
"type": "string",
12
12
"format": "uri",
13
13
"maxLength": 2048,
14
14
"description": "URL of the OGP image"
15
15
},
16
16
"width": {
17
17
"type": "integer",
18
18
"description": "Image width in pixels"
19
19
},
20
20
"height": {
21
21
"type": "integer",
22
22
"description": "Image height in pixels"
23
23
}
24
24
},
25
25
"description": "Open Graph Protocol metadata for social sharing"
26
26
},
27
27
"theme": {
28
28
"type": "object",
29
29
"properties": {
30
30
"custom": {
31
31
"ref": "#customColors",
32
32
"type": "ref",
33
33
"description": "Custom color overrides"
34
34
},
35
35
"preset": {
36
36
"enum": [
37
37
"github-light",
38
38
"github-dark",
39
39
"dracula",
40
40
"nord",
41
41
"solarized-light",
42
42
"solarized-dark",
43
43
"monokai"
44
44
],
45
45
"type": "string",
46
46
"maxLength": 32,
47
47
"description": "Predefined color theme"
48
48
}
49
49
},
50
50
"description": "Theme configuration for a blog entry"
51
51
},
52
52
"selfLabel": {
53
53
"type": "object",
54
54
"required": [
55
55
"val"
56
56
],
57
57
"properties": {
58
58
"val": {
59
59
"type": "string",
60
60
"maxLength": 128,
61
61
"description": "The short string name of the value or type of this label"
62
62
}
63
63
},
64
64
"description": "Metadata tag on an atproto resource, published by the author"
65
65
},
66
66
"selfLabels": {
67
67
"type": "object",
68
68
"required": [
69
69
"values"
70
70
],
71
71
"properties": {
72
72
"values": {
73
73
"type": "array",
74
74
"items": {
75
75
"ref": "#selfLabel",
76
76
"type": "ref"
77
77
},
78
78
"maxLength": 10
79
79
}
80
80
},
81
81
"description": "Metadata tags on an atproto resource, published by the author"
82
82
},
83
+
"voiceTheme": {
84
+
"type": "object",
85
+
"properties": {
86
+
"pitch": {
87
+
"type": "integer",
88
+
"description": "Pitch multiplier x100 (100 = normal, range 50-150)"
89
+
},
90
+
"speed": {
91
+
"type": "integer",
92
+
"description": "Playback speed multiplier x100 (100 = normal, range 50-200)"
93
+
},
94
+
"voice": {
95
+
"type": "string",
96
+
"maxLength": 32,
97
+
"description": "Voice ID for TTS (e.g., 'af_heart', 'am_adam')"
98
+
}
99
+
},
100
+
"description": "Voice theme configuration for TTS playback"
101
+
},
83
102
"blobMetadata": {
84
103
"type": "object",
85
104
"required": [
86
105
"blobref"
87
106
],
88
107
"properties": {
89
108
"alt": {
90
109
"type": "string",
91
110
"maxLength": 1000,
92
111
"description": "Alt text for accessibility"
93
112
},
94
113
"name": {
95
114
"type": "string",
96
115
"maxLength": 256,
97
116
"description": "Original filename"
98
117
},
99
118
"labels": {
100
119
"ref": "#selfLabels",
101
120
"type": "ref",
102
121
"description": "Content labels (self-labels) for this image"
103
122
},
104
123
"blobref": {
105
124
"type": "blob",
106
125
"accept": [
107
126
"*/*"
108
127
],
109
128
"description": "Reference to the blob"
110
129
}
111
130
},
112
131
"description": "Metadata for uploaded binary content"
113
132
},
114
133
"customColors": {
115
134
"type": "object",
116
135
"properties": {
117
136
"text": {
118
137
"type": "string",
119
138
"maxLength": 64,
120
139
"description": "Primary text color"
121
140
},
122
141
"accent": {
123
142
"type": "string",
124
143
"maxLength": 64,
125
144
"description": "Accent/link color"
126
145
},
127
146
"background": {
128
147
"type": "string",
129
148
"maxLength": 64,
130
149
"description": "Background color"
131
150
},
132
151
"codeBackground": {
133
152
"type": "string",
134
153
"maxLength": 64,
135
154
"description": "Code block background color"
136
155
}
137
156
},
138
157
"description": "Custom color values (CSS color strings)"
139
158
}
140
159
},
141
160
"$type": "com.atproto.lexicon.schema",
142
161
"lexicon": 1
143
162
}