screenkit 0.0.0 → 0.0.2

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 (107) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/docker.yml +44 -0
  3. data/.github/workflows/ruby-tests.yml +21 -1
  4. data/Brewfile +5 -0
  5. data/CHANGELOG.md +13 -1
  6. data/CONTRIBUTING.md +25 -0
  7. data/DOCUMENTATION.md +132 -48
  8. data/Dockerfile +107 -0
  9. data/lib/screen_kit.rb +17 -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 +1 -1
  17. data/lib/screenkit/config/episode.rb +6 -0
  18. data/lib/screenkit/config/project.rb +5 -2
  19. data/lib/screenkit/duration.rb +5 -0
  20. data/lib/screenkit/exporter/demotape.rb +20 -2
  21. data/lib/screenkit/exporter/episode.rb +42 -16
  22. data/lib/screenkit/exporter/intro.rb +4 -4
  23. data/lib/screenkit/exporter/outro.rb +5 -5
  24. data/lib/screenkit/exporter/segment.rb +270 -74
  25. data/lib/screenkit/generators/episode/callouts/001.yml +12 -0
  26. data/lib/screenkit/generators/episode/config.yml.erb +8 -8
  27. data/lib/screenkit/generators/project/screenkit.yml +123 -27
  28. data/lib/screenkit/schema_validator.rb +1 -1
  29. data/lib/screenkit/schemas/callout_styles/file_copy.json +8 -0
  30. data/lib/screenkit/schemas/callout_styles/inline_block.json +20 -0
  31. data/lib/screenkit/schemas/{callouts/default.json → callout_styles/shadow_block.json} +2 -2
  32. data/lib/screenkit/schemas/callouts/inline_block.json +20 -11
  33. data/lib/screenkit/schemas/callouts/shadow_block.json +39 -0
  34. data/lib/screenkit/schemas/episode.json +7 -55
  35. data/lib/screenkit/schemas/project.json +6 -6
  36. data/lib/screenkit/schemas/refs/anchor.json +1 -1
  37. data/lib/screenkit/schemas/refs/animation.json +1 -1
  38. data/lib/screenkit/schemas/refs/background.json +1 -1
  39. data/lib/screenkit/schemas/refs/{callout.json → callout_style.json} +6 -8
  40. data/lib/screenkit/schemas/refs/color.json +1 -1
  41. data/lib/screenkit/schemas/refs/demotape.json +48 -0
  42. data/lib/screenkit/schemas/refs/demotape_themes.json +367 -0
  43. data/lib/screenkit/schemas/refs/directory.json +1 -1
  44. data/lib/screenkit/schemas/refs/duration.json +9 -0
  45. data/lib/screenkit/schemas/refs/intro.json +4 -16
  46. data/lib/screenkit/schemas/refs/logo.json +1 -1
  47. data/lib/screenkit/schemas/refs/outro.json +4 -16
  48. data/lib/screenkit/schemas/refs/position.json +1 -1
  49. data/lib/screenkit/schemas/refs/scenes.json +2 -6
  50. data/lib/screenkit/schemas/refs/size.json +1 -1
  51. data/lib/screenkit/schemas/refs/sound.json +1 -1
  52. data/lib/screenkit/schemas/refs/spacing.json +1 -1
  53. data/lib/screenkit/schemas/refs/text_style.json +1 -1
  54. data/lib/screenkit/schemas/refs/transition.json +2 -6
  55. data/lib/screenkit/schemas/refs/tts.json +4 -41
  56. data/lib/screenkit/schemas/refs/tts_builtin.json +23 -0
  57. data/lib/screenkit/schemas/refs/watermark.json +1 -1
  58. data/lib/screenkit/schemas/tts/elevenlabs.json +11 -2
  59. data/lib/screenkit/schemas/tts/espeak.json +26 -0
  60. data/lib/screenkit/schemas/tts/say.json +12 -2
  61. data/lib/screenkit/shell.rb +6 -0
  62. data/lib/screenkit/time_formatter.rb +14 -0
  63. data/lib/screenkit/tts/base.rb +21 -0
  64. data/lib/screenkit/tts/eleven_labs.rb +8 -9
  65. data/lib/screenkit/tts/espeak.rb +30 -0
  66. data/lib/screenkit/tts/say.rb +5 -6
  67. data/lib/screenkit/utils.rb +6 -0
  68. data/lib/screenkit/version.rb +1 -1
  69. metadata +29 -46
  70. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Bold.ttf +0 -0
  71. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-BoldItalic.ttf +0 -0
  72. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-ExtraBoldItalic.ttf +0 -0
  73. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Italic.ttf +0 -0
  74. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Light.ttf +0 -0
  75. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-LightItalic.ttf +0 -0
  76. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Medium.ttf +0 -0
  77. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-MediumItalic.ttf +0 -0
  78. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Regular.ttf +0 -0
  79. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-SemiBoldItalic.ttf +0 -0
  80. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Bold.ttf +0 -0
  81. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-BoldItalic.ttf +0 -0
  82. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-ExtraBold.ttf +0 -0
  83. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-ExtraBoldItalic.ttf +0 -0
  84. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Italic.ttf +0 -0
  85. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Light.ttf +0 -0
  86. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-LightItalic.ttf +0 -0
  87. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Medium.ttf +0 -0
  88. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-MediumItalic.ttf +0 -0
  89. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Regular.ttf +0 -0
  90. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-SemiBold.ttf +0 -0
  91. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-SemiBoldItalic.ttf +0 -0
  92. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Bold.ttf +0 -0
  93. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-BoldItalic.ttf +0 -0
  94. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-ExtraBold.ttf +0 -0
  95. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-ExtraBoldItalic.ttf +0 -0
  96. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Italic.ttf +0 -0
  97. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Light.ttf +0 -0
  98. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-LightItalic.ttf +0 -0
  99. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Medium.ttf +0 -0
  100. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-MediumItalic.ttf +0 -0
  101. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Regular.ttf +0 -0
  102. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-SemiBold.ttf +0 -0
  103. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-SemiBoldItalic.ttf +0 -0
  104. /data/lib/screenkit/generators/project/resources/fonts/{opensans → open-sans}/OFL.txt +0 -0
  105. /data/lib/screenkit/generators/project/resources/fonts/{opensans → open-sans}/OpenSans-ExtraBold.ttf +0 -0
  106. /data/lib/screenkit/generators/project/resources/fonts/{opensans → open-sans}/OpenSans-SemiBold.ttf +0 -0
  107. /data/lib/screenkit/generators/project/resources/fonts/{opensans → open-sans}/README.txt +0 -0
@@ -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": {
@@ -16,58 +15,11 @@
16
15
  "minLength": 1,
17
16
  "pattern": "\\S"
18
17
  },
19
- "callouts": {
20
- "type": "array",
21
- "description": "List of callouts to be used in the episode",
22
- "items": {
23
- "type": "object",
24
- "required": ["type", "starts_at", "duration"],
25
- "additionalProperties": true,
26
- "properties": {
27
- "type": {
28
- "type": "string",
29
- "description": "Callout type identifier",
30
- "minLength": 1,
31
- "pattern": "\\S"
32
- },
33
- "starts_at": {
34
- "oneOf": [
35
- {
36
- "type": "string",
37
- "description": "Callout start time in HH:MM:SS format (e.g. 00:01:30)"
38
- },
39
- {
40
- "type": "number",
41
- "description": "Callout start time in seconds (e.g. 90)"
42
- }
43
- ]
44
- },
45
- "duration": {
46
- "oneOf": [
47
- {
48
- "type": "string",
49
- "description": "Callout duration time (e.g. 5s)",
50
- "pattern": "/^\\d+(s|m|h)$/"
51
- },
52
- {
53
- "type": "number",
54
- "description": "Callout duration time in seconds (e.g. 5)"
55
- }
56
- ]
57
- },
58
- "width": {
59
- "oneOf": [
60
- {
61
- "type": "string",
62
- "description": "Callout width in percentage (e.g. 50%)"
63
- },
64
- {
65
- "type": "number",
66
- "description": "Callout width in pixels (e.g. 300)"
67
- }
68
- ]
69
- }
70
- }
18
+ "demotape": { "$ref": "refs/demotape.json" },
19
+ "callout_styles": {
20
+ "type": "object",
21
+ "additionalProperties": {
22
+ "$ref": "refs/callout_style.json"
71
23
  }
72
24
  }
73
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,12 +25,13 @@
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
+ },
34
+ "demotape": { "$ref": "refs/demotape.json" }
35
35
  },
36
36
  "additionalProperties": false
37
37
  }
@@ -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})?$"
@@ -0,0 +1,48 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/schema#",
3
+ "$id": "https://screenkit.dev/schemas/refs/demotape.json",
4
+ "title": "Demo Tape settings (https://github.com/fnando/demotape)",
5
+ "type": "object",
6
+ "properties": {
7
+ "typing_speed": { "$ref": "duration.json" },
8
+ "variable_typing": { "type": "number" },
9
+ "shell": {
10
+ "type": "string",
11
+ "enum": ["bash", "zsh", "fish"]
12
+ },
13
+ "no_rc": {
14
+ "type": "boolean"
15
+ },
16
+ "rc_file": {
17
+ "type": "string",
18
+ "format": "uri"
19
+ },
20
+ "theme": {
21
+ "oneOf": [
22
+ { "$ref": "demotape_themes.json" },
23
+ { "type": "string", "pattern": "^[./]|^[a-zA-Z]:" }
24
+ ]
25
+ },
26
+ "font_size": { "type": "integer" },
27
+ "font_family": { "type": "string" },
28
+ "line_height": { "type": "number" },
29
+ "cursor_blink": { "type": "boolean" },
30
+ "cursor_width": { "type": "number" },
31
+ "cursor_style": { "type": "string", "enum": ["block", "underline", "bar"] },
32
+ "letter_spacing": { "type": "number" },
33
+ "padding": { "type": "number", "minLength": 1, "maxLength": 4 },
34
+ "margin": { "type": "number", "minLength": 1, "maxLength": 4 },
35
+ "margin_fill": {
36
+ "oneOf": [
37
+ {
38
+ "type": "string",
39
+ "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
40
+ },
41
+ { "type": "string", "pattern": "^[./]|^[a-zA-Z]:" }
42
+ ]
43
+ },
44
+ "border_radius": { "type": "integer" },
45
+ "run_enter_delay": { "$ref": "duration.json" },
46
+ "run_sleep": { "$ref": "duration.json" }
47
+ }
48
+ }