screenkit 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/docker.yml +46 -0
  3. data/.github/workflows/ruby-tests.yml +21 -1
  4. data/Brewfile +5 -0
  5. data/CHANGELOG.md +11 -0
  6. data/CONTRIBUTING.md +25 -0
  7. data/DOCUMENTATION.md +136 -41
  8. data/Dockerfile +107 -0
  9. data/lib/screen_kit.rb +15 -16
  10. data/lib/screenkit/animation_filters.rb +16 -0
  11. data/lib/screenkit/callout/styles/base.rb +12 -0
  12. data/lib/screenkit/callout/styles/file_copy.rb +26 -0
  13. data/lib/screenkit/callout/styles/inline_block.rb +6 -9
  14. data/lib/screenkit/callout/styles/{default.rb → shadow_block.rb} +9 -11
  15. data/lib/screenkit/callout.rb +1 -1
  16. data/lib/screenkit/cli/episode.rb +2 -3
  17. data/lib/screenkit/cli/root.rb +1 -1
  18. data/lib/screenkit/config/episode.rb +6 -0
  19. data/lib/screenkit/config/project.rb +5 -2
  20. data/lib/screenkit/exporter/demotape.rb +8 -0
  21. data/lib/screenkit/exporter/episode.rb +37 -17
  22. data/lib/screenkit/exporter/segment.rb +262 -71
  23. data/lib/screenkit/generators/episode/callouts/001.yml +12 -0
  24. data/lib/screenkit/generators/episode/config.yml.erb +8 -8
  25. data/lib/screenkit/generators/project/screenkit.yml +46 -15
  26. data/lib/screenkit/schema_validator.rb +1 -1
  27. data/lib/screenkit/schemas/callout_styles/file_copy.json +8 -0
  28. data/lib/screenkit/schemas/callout_styles/inline_block.json +20 -0
  29. data/lib/screenkit/schemas/{callouts/default.json → callout_styles/shadow_block.json} +2 -2
  30. data/lib/screenkit/schemas/callouts/inline_block.json +20 -11
  31. data/lib/screenkit/schemas/callouts/shadow_block.json +39 -0
  32. data/lib/screenkit/schemas/episode.json +6 -43
  33. data/lib/screenkit/schemas/project.json +4 -5
  34. data/lib/screenkit/schemas/refs/anchor.json +1 -1
  35. data/lib/screenkit/schemas/refs/animation.json +1 -1
  36. data/lib/screenkit/schemas/refs/background.json +1 -1
  37. data/lib/screenkit/schemas/refs/{callout.json → callout_style.json} +6 -8
  38. data/lib/screenkit/schemas/refs/color.json +1 -1
  39. data/lib/screenkit/schemas/refs/demotape.json +1 -1
  40. data/lib/screenkit/schemas/refs/demotape_themes.json +1 -1
  41. data/lib/screenkit/schemas/refs/directory.json +1 -1
  42. data/lib/screenkit/schemas/refs/duration.json +1 -1
  43. data/lib/screenkit/schemas/refs/intro.json +1 -1
  44. data/lib/screenkit/schemas/refs/logo.json +1 -1
  45. data/lib/screenkit/schemas/refs/outro.json +1 -1
  46. data/lib/screenkit/schemas/refs/position.json +1 -1
  47. data/lib/screenkit/schemas/refs/scenes.json +1 -1
  48. data/lib/screenkit/schemas/refs/size.json +1 -1
  49. data/lib/screenkit/schemas/refs/sound.json +1 -1
  50. data/lib/screenkit/schemas/refs/spacing.json +1 -1
  51. data/lib/screenkit/schemas/refs/text_style.json +1 -1
  52. data/lib/screenkit/schemas/refs/transition.json +1 -1
  53. data/lib/screenkit/schemas/refs/tts.json +4 -41
  54. data/lib/screenkit/schemas/refs/tts_builtin.json +23 -0
  55. data/lib/screenkit/schemas/refs/watermark.json +1 -1
  56. data/lib/screenkit/schemas/tts/elevenlabs.json +11 -2
  57. data/lib/screenkit/schemas/tts/espeak.json +26 -0
  58. data/lib/screenkit/schemas/tts/say.json +11 -1
  59. data/lib/screenkit/shell.rb +6 -0
  60. data/lib/screenkit/time_formatter.rb +14 -0
  61. data/lib/screenkit/tts/base.rb +21 -0
  62. data/lib/screenkit/tts/eleven_labs.rb +8 -9
  63. data/lib/screenkit/tts/espeak.rb +30 -0
  64. data/lib/screenkit/tts/say.rb +5 -6
  65. data/lib/screenkit/utils.rb +6 -0
  66. data/lib/screenkit/version.rb +1 -1
  67. metadata +21 -42
  68. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans-Bold.ttf +0 -0
  69. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans-BoldItalic.ttf +0 -0
  70. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans-ExtraBoldItalic.ttf +0 -0
  71. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans-Italic.ttf +0 -0
  72. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans-Light.ttf +0 -0
  73. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans-LightItalic.ttf +0 -0
  74. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans-Medium.ttf +0 -0
  75. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans-MediumItalic.ttf +0 -0
  76. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans-Regular.ttf +0 -0
  77. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans-SemiBoldItalic.ttf +0 -0
  78. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_Condensed-Bold.ttf +0 -0
  79. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_Condensed-BoldItalic.ttf +0 -0
  80. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_Condensed-ExtraBold.ttf +0 -0
  81. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_Condensed-ExtraBoldItalic.ttf +0 -0
  82. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_Condensed-Italic.ttf +0 -0
  83. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_Condensed-Light.ttf +0 -0
  84. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_Condensed-LightItalic.ttf +0 -0
  85. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_Condensed-Medium.ttf +0 -0
  86. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_Condensed-MediumItalic.ttf +0 -0
  87. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_Condensed-Regular.ttf +0 -0
  88. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_Condensed-SemiBold.ttf +0 -0
  89. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_Condensed-SemiBoldItalic.ttf +0 -0
  90. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_SemiCondensed-Bold.ttf +0 -0
  91. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_SemiCondensed-BoldItalic.ttf +0 -0
  92. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_SemiCondensed-ExtraBold.ttf +0 -0
  93. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_SemiCondensed-ExtraBoldItalic.ttf +0 -0
  94. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_SemiCondensed-Italic.ttf +0 -0
  95. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_SemiCondensed-Light.ttf +0 -0
  96. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_SemiCondensed-LightItalic.ttf +0 -0
  97. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_SemiCondensed-Medium.ttf +0 -0
  98. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_SemiCondensed-MediumItalic.ttf +0 -0
  99. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_SemiCondensed-Regular.ttf +0 -0
  100. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_SemiCondensed-SemiBold.ttf +0 -0
  101. data/lib/screenkit/generators/project/resources/fonts/open-sans/OpenSans_SemiCondensed-SemiBoldItalic.ttf +0 -0
@@ -1,5 +1,5 @@
1
1
  ---
2
- # yaml-language-server: $schema=../../../screenkit/lib/screenkit/schemas/episode.json
2
+ # yaml-language-server: $schema=https://screenkit.dev/schemas/episode.json
3
3
 
4
4
  # The episode title. When there are no linebreaks, they will be inferred based
5
5
  # on the approximate text width.
@@ -10,7 +10,7 @@ title: "CREATING SCREENCASTS WITH SCREENKIT"
10
10
  #
11
11
  # The project's configuration can define the callout structure, while the
12
12
  # episode configuration can define the content and timing.
13
- callouts:
13
+ callouts_styles:
14
14
  - type: info
15
15
  title: "ScreenKit"
16
16
  body: "Visit https://github.com/fnando/screenkit to learn more."
@@ -45,7 +45,7 @@ callouts:
45
45
  # title:
46
46
  # x: 100
47
47
  # y: 300
48
- # font_path: lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-ExtraBold.ttf
48
+ # font_path: open-sans/OpenSans-ExtraBold.ttf
49
49
  # size: 144
50
50
  # color: "#ffffff"
51
51
  #
@@ -53,7 +53,7 @@ callouts:
53
53
  # # Works best with a transparent PNG file in high resolution (at least 2x the
54
54
  # # size it'll be displayed).
55
55
  # logo:
56
- # path: lib/screenkit/generators/project/resources/images/logo.png
56
+ # path: images/logo.png
57
57
  # x: 100
58
58
  # y: 200
59
59
  # width: 200
@@ -62,7 +62,7 @@ callouts:
62
62
  # # The sound to be played along with the logo in the intro.
63
63
  # # This must correspond to a sound file in the sounds directory, with any
64
64
  # # audio extension (e.g. mp3, m4a, wav).
65
- # sound: lib/screenkit/generators/project/resources/sounds/chime.mp3
65
+ # sound: sounds/chime.mp3
66
66
  #
67
67
  # outro:
68
68
  # # The duration of the outro scene in seconds.
@@ -78,11 +78,11 @@ callouts:
78
78
  # background: "#100f50"
79
79
  #
80
80
  # # The sound to be played along with the logo in the outro.
81
- # sound: lib/screenkit/generators/project/resources/sounds/chime.mp3
81
+ # sound: sounds/chime.mp3
82
82
  #
83
83
  # # The logo to be displayed in the video outro.
84
84
  # logo:
85
- # path: lib/screenkit/generators/project/resources/images/logo.png
85
+ # path: images/logo.png
86
86
  # x: center
87
87
  # y: center
88
88
  # width: 500
@@ -95,7 +95,7 @@ callouts:
95
95
  # When present, this will have higher precedence over the project's
96
96
  # configuration, so you can have different intro/outro segments for each
97
97
  # episode.
98
- # voice:
98
+ # tts:
99
99
  # engine: elevenlabs
100
100
  # voice_id: 56AoDkrOh6qfVPDXZ7Pt
101
101
  # language_code: en
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  # yaml-language-server: $schema=../../schemas/project.json
3
+ ## yaml-language-server: $schema=https://screenkit.dev/schemas/project.json
3
4
 
4
5
  # ScreenKit project configuration file.
5
6
  schema: 1
@@ -76,19 +77,35 @@ watermark:
76
77
  margin: 100
77
78
 
78
79
  # TTS configuration.
79
- # To disable voiceover entirely, set `tts: false`.
80
- # tts:
81
- # engine: elevenlabs
82
- # voice_id: 56AoDkrOh6qfVPDXZ7Pt
83
- # language_code: en
84
- # voice_settings:
85
- # speed: 0.9
86
- # stability: 0.5
87
- # similarity: 0.75
88
- # style: 0.0
80
+ # To disable voiceover entirely, set `tts: false` or disable all engines
81
+ # individually.
82
+ #
83
+ # You can set up multiple TTS engines to be used as fallbacks in case one fails.
84
+ # Each TTS engine has its own detection mechanism. For instance, say and espeak
85
+ # checks for a binary with the same name. ElevenLabs checks for the presence of
86
+ # `--tts-api-key`.
89
87
  tts:
90
- engine: say
91
- rate: 150
88
+ # Apple Say TTS engine configuration.
89
+ - engine: say
90
+ rate: 150
91
+ enabled: true
92
+
93
+ # eSpeak TTS engine configuration.
94
+ - engine: espeak
95
+ rate: 150
96
+ voice: en-us
97
+ enabled: true
98
+
99
+ # Eleven Labs TTS engine configuration.
100
+ - engine: eleven_labs
101
+ enabled: true
102
+ voice_id: 56AoDkrOh6qfVPDXZ7Pt
103
+ language_code: en
104
+ voice_settings:
105
+ speed: 0.9
106
+ stability: 0.5
107
+ similarity: 0.75
108
+ style: 0.0
92
109
 
93
110
  # Scene configurations define how different scenes in the video are rendered.
94
111
  # There are three types of scenes: intro, outro, and segment.
@@ -227,9 +244,10 @@ demotape:
227
244
  # in the video. Callouts are visual elements that highlight important
228
245
  # information. Each callout type can have its own settings for icon, background,
229
246
  # text styles, animations, and sounds.
230
- callouts:
231
- info:
232
- # yaml-language-server: $schema=../../schemas/callouts/default.json
247
+ callout_styles:
248
+ shadow_block:
249
+ # yaml-language-server: $schema=https://screenkit.dev/schemas/callout_styles/default.json
250
+ style: shadow_block
233
251
  background_color: "#ffff00"
234
252
  shadow: "#2242d3"
235
253
  title_style:
@@ -252,3 +270,16 @@ callouts:
252
270
  sound:
253
271
  path: pop.mp3
254
272
  volume: 0.7
273
+
274
+ inline_block:
275
+ # yaml-language-server: $schema=https://screenkit.dev/schemas/callout_styles/inline_block.json
276
+ style: inline_block
277
+ anchor: [left, bottom]
278
+ margin: 100
279
+ animation: fade
280
+ in_transition:
281
+ duration: 0.4s
282
+ sound: pop.mp3
283
+ out_transition:
284
+ duration: 0.4s
285
+ sound: pop.mp3
@@ -6,7 +6,7 @@ module ScreenKit
6
6
  errors = JSON::Validator
7
7
  .fully_validate("file://#{schema_path}", attributes)
8
8
 
9
- return if errors.empty?
9
+ return true if errors.empty?
10
10
 
11
11
  raise ArgumentError, "Invalid attributes: #{errors.first}"
12
12
  end
@@ -0,0 +1,8 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "$id": "https://screenkit.dev/schemas/callout_styles/file_copy.json",
4
+ "title": "File Copy Callout",
5
+ "type": "object",
6
+ "required": ["file_path"],
7
+ "properties": { "file_path": { "type": "string", "format": "uri" } }
8
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "$id": "https://screenkit.dev/schemas/callout_styles/inline_block.json",
4
+ "title": "Inline Block Callout",
5
+ "type": "object",
6
+ "required": ["background_color", "text_style"],
7
+ "properties": {
8
+ "background_color": { "$ref": "../refs/color.json" },
9
+ "width": {
10
+ "type": "number",
11
+ "description": "The callout width"
12
+ },
13
+ "text_style": {
14
+ "$ref": "../refs/text_style.json"
15
+ },
16
+ "padding": {
17
+ "$ref": "../refs/spacing.json"
18
+ }
19
+ }
20
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/callouts/basic.json",
4
- "title": "Basic Callout",
3
+ "$id": "https://screenkit.dev/schemas/callout_styles/shadow_block.json",
4
+ "title": "Shadow Block Callout",
5
5
  "type": "object",
6
6
  "required": [
7
7
  "background_color",
@@ -1,20 +1,29 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/callouts/inline_block.json",
4
- "title": "Inline Block Callout",
3
+ "$id": "https://screenkit.dev/schemas/callouts/inline_block.json",
4
+ "title": "Callout — Inline Block",
5
5
  "type": "object",
6
- "required": ["background_color", "text_style"],
6
+ "required": ["type", "text", "duration", "starts_at"],
7
7
  "properties": {
8
- "background_color": { "$ref": "../refs/color.json" },
9
- "width": {
10
- "type": "number",
11
- "description": "The callout width"
8
+ "type": {
9
+ "type": "string",
10
+ "enum": ["inline_block"],
11
+ "description": "The callout type"
12
12
  },
13
- "text_style": {
14
- "$ref": "../refs/text_style.json"
13
+ "text": {
14
+ "type": "string",
15
+ "description": "The callout text"
15
16
  },
16
- "padding": {
17
- "$ref": "../refs/spacing.json"
17
+ "duration": { "$ref": "../refs/duration.json" },
18
+ "starts_at": {
19
+ "oneOf": [
20
+ {
21
+ "type": "string",
22
+ "pattern": "^(\\d{1,2}:)?(\\d{1,2}):(\\d{1,2})$",
23
+ "description": "A pattern like 00:00:00"
24
+ },
25
+ { "type": "integer", "description": "The position in seconds" }
26
+ ]
18
27
  }
19
28
  }
20
29
  }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "$id": "https://screenkit.dev/schemas/callouts/shadow_block.json",
4
+ "title": "Callout — Shadow Block",
5
+ "type": "object",
6
+ "required": ["type", "duration", "starts_at"],
7
+ "anyOf": [{ "required": ["title"] }, { "required": ["body"] }],
8
+ "properties": {
9
+ "type": {
10
+ "type": "string",
11
+ "enum": ["shadow_block"],
12
+ "description": "The callout type"
13
+ },
14
+ "title": {
15
+ "type": "string",
16
+ "description": "The callout text"
17
+ },
18
+ "body": {
19
+ "type": "string",
20
+ "description": "The callout body text"
21
+ },
22
+ "width": {
23
+ "type": "number",
24
+ "description": "The callout width",
25
+ "minimum": 0
26
+ },
27
+ "duration": { "$ref": "../refs/duration.json" },
28
+ "starts_at": {
29
+ "oneOf": [
30
+ {
31
+ "type": "string",
32
+ "pattern": "^\\d{2}:\\d{2}:\\d{2}$",
33
+ "description": "A pattern like 00:00:00"
34
+ },
35
+ { "type": "integer", "description": "The position in seconds" }
36
+ ]
37
+ }
38
+ }
39
+ }
@@ -1,8 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/episode.json",
4
- "title": "ScreenKit Episode Configuration",
5
- "description": "Schema for ScreenKit episode configuration file (config.yml)",
3
+ "$id": "https://screenkit.dev/schemas/episode.json",
4
+ "title": "ScreenKit Episode Configuration (config.yml)",
6
5
  "type": "object",
7
6
  "required": ["title"],
8
7
  "properties": {
@@ -17,46 +16,10 @@
17
16
  "pattern": "\\S"
18
17
  },
19
18
  "demotape": { "$ref": "refs/demotape.json" },
20
- "callouts": {
21
- "type": "array",
22
- "description": "List of callouts to be used in the episode",
23
- "items": {
24
- "type": "object",
25
- "required": ["type", "starts_at", "duration"],
26
- "additionalProperties": true,
27
- "properties": {
28
- "type": {
29
- "type": "string",
30
- "description": "Callout type identifier",
31
- "minLength": 1,
32
- "pattern": "\\S"
33
- },
34
- "starts_at": {
35
- "oneOf": [
36
- {
37
- "type": "string",
38
- "description": "Callout start time in HH:MM:SS format (e.g. 00:01:30)"
39
- },
40
- {
41
- "type": "number",
42
- "description": "Callout start time in seconds (e.g. 90)"
43
- }
44
- ]
45
- },
46
- "duration": { "$ref": "refs/duration.json" },
47
- "width": {
48
- "oneOf": [
49
- {
50
- "type": "string",
51
- "description": "Callout width in percentage (e.g. 50%)"
52
- },
53
- {
54
- "type": "number",
55
- "description": "Callout width in pixels (e.g. 300)"
56
- }
57
- ]
58
- }
59
- }
19
+ "callout_styles": {
20
+ "type": "object",
21
+ "additionalProperties": {
22
+ "$ref": "refs/callout_style.json"
60
23
  }
61
24
  }
62
25
  }
@@ -1,8 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/project.json",
4
- "title": "ScreenKit Project Configuration",
5
- "description": "Schema for ScreenKit project configuration file (screenkit.yml)",
3
+ "$id": "https://screenkit.dev/schemas/project.json",
4
+ "title": "ScreenKit Project Configuration (screenkit.yml)",
6
5
  "type": "object",
7
6
  "required": ["schema", "resources_dir", "episode_dir", "output_dir"],
8
7
  "properties": {
@@ -26,10 +25,10 @@
26
25
  "description": "Directory where generated video files will be saved. Supports placeholders like %{episode_number}, %{episode_slug} and %{date}.",
27
26
  "format": "uri"
28
27
  },
29
- "callouts": {
28
+ "callout_styles": {
30
29
  "type": "object",
31
30
  "additionalProperties": {
32
- "$ref": "refs/callout.json"
31
+ "$ref": "refs/callout_style.json"
33
32
  }
34
33
  },
35
34
  "demotape": { "$ref": "refs/demotape.json" }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/anchor.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/anchor.json",
4
4
  "title": "Anchor",
5
5
  "type": "array",
6
6
  "description": "Anchor position [horizontal, vertical]",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/animation.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/animation.json",
4
4
  "title": "Animation Type",
5
5
  "type": "string",
6
6
  "enum": ["slide", "fade"]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/background.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/background.json",
4
4
  "title": "Background",
5
5
  "anyOf": [
6
6
  {
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/callout.json",
4
- "title": "Callout",
3
+ "$id": "https://screenkit.dev/schemas/refs/callout_style.json",
4
+ "title": "Callout Style",
5
5
  "type": "object",
6
6
  "required": [
7
7
  "in_transition",
8
8
  "out_transition",
9
9
  "anchor",
10
10
  "margin",
11
- "animation"
11
+ "animation",
12
+ "style"
12
13
  ],
13
14
  "properties": {
14
15
  "in_transition": { "$ref": "transition.json" },
@@ -17,11 +18,8 @@
17
18
  "margin": { "$ref": "spacing.json" },
18
19
  "style": {
19
20
  "type": "string",
20
- "description": "Callout style name (defaults to 'default')",
21
- "default": "default"
21
+ "description": "Callout style name"
22
22
  },
23
- "anchor": {
24
- "$ref": "anchor.json"
25
- }
23
+ "anchor": { "$ref": "anchor.json" }
26
24
  }
27
25
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/color.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/color.json",
4
4
  "title": "Color type with optional alpha channel",
5
5
  "type": "string",
6
6
  "pattern": "^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/demotape.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/demotape.json",
4
4
  "title": "Demo Tape settings (https://github.com/fnando/demotape)",
5
5
  "type": "object",
6
6
  "properties": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/demotape_themes.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/demotape_themes.json",
4
4
  "title": "Demo Tape themes",
5
5
  "type": "string",
6
6
  "enum": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/project.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/project.json",
4
4
  "title": "Directory",
5
5
  "oneOf": [
6
6
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/duration.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/duration.json",
4
4
  "title": "Duration",
5
5
  "oneOf": [
6
6
  { "type": "string", "pattern": "^\\d+(\\.\\d+)?(ms|s|m|h)?$" },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/intro.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/intro.json",
4
4
  "title": "Intro",
5
5
  "properties": {
6
6
  "duration": { "$ref": "duration.json" },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/logo.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/logo.json",
4
4
  "title": "Logo",
5
5
  "type": "object",
6
6
  "required": ["path"],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/outro.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/outro.json",
4
4
  "title": "Outro",
5
5
  "required": ["logo"],
6
6
  "properties": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/position.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/position.json",
4
4
  "title": "Position",
5
5
  "type": "object",
6
6
  "properties": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/scenes.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/scenes.json",
4
4
  "title": "Scenes",
5
5
  "type": "object",
6
6
  "required": ["intro", "outro", "segment"],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/size.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/size.json",
4
4
  "title": "Size",
5
5
  "type": "object",
6
6
  "required": ["width", "height"],
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/sound.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/sound.json",
4
4
  "title": "Sound",
5
5
  "oneOf": [
6
6
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/spacing.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/spacing.json",
4
4
  "title": "Spacing (Padding/Margin)",
5
5
  "oneOf": [
6
6
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/text_style.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/text_style.json",
4
4
  "title": "Text Style",
5
5
  "properties": {
6
6
  "font_path": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/transition.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/transition.json",
4
4
  "type": "object",
5
5
  "title": "Transition",
6
6
  "required": ["duration", "sound"],
@@ -1,47 +1,10 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-04/schema#",
3
- "$id": "https://github.com/fnando/screenkit/schemas/refs/tts.json",
3
+ "$id": "https://screenkit.dev/schemas/refs/tts.json",
4
4
  "title": "The TTS engine used for voiceover",
5
5
  "oneOf": [
6
- {
7
- "type": "boolean",
8
- "enum": [false]
9
- },
10
- {
11
- "type": "object",
12
- "$ref": "../tts/say.json",
13
- "properties": {
14
- "engine": {
15
- "type": "string",
16
- "enum": ["say"],
17
- "description": "The TTS engine to use"
18
- }
19
- }
20
- },
21
- {
22
- "type": "object",
23
- "$ref": "../tts/elevenlabs.json",
24
- "properties": {
25
- "engine": {
26
- "type": "string",
27
- "enum": ["elevenlabs"],
28
- "description": "The TTS engine to use"
29
- }
30
- }
31
- },
32
- {
33
- "type": "object",
34
- "required": ["engine"],
35
- "additionalProperties": true,
36
- "properties": {
37
- "engine": {
38
- "type": "string",
39
- "description": "The TTS engine to use",
40
- "not": {
41
- "enum": ["say", "elevenlabs"]
42
- }
43
- }
44
- }
45
- }
6
+ { "type": "boolean", "enum": [false] },
7
+ { "$ref": "tts_builtin.json" },
8
+ { "type": "array", "items": { "$ref": "tts_builtin.json" } }
46
9
  ]
47
10
  }
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "$id": "https://screenkit.dev/schemas/refs/tts_builtin.json",
4
+ "oneOf": [
5
+ { "$ref": "../tts/say.json" },
6
+ { "$ref": "../tts/espeak.json" },
7
+ { "$ref": "../tts/elevenlabs.json" },
8
+ {
9
+ "type": "object",
10
+ "required": ["engine"],
11
+ "additionalProperties": true,
12
+ "properties": {
13
+ "engine": {
14
+ "type": "string",
15
+ "description": "The TTS engine to use",
16
+ "not": {
17
+ "enum": ["say", "eleven_labs", "espeak"]
18
+ }
19
+ }
20
+ }
21
+ }
22
+ ]
23
+ }