screenkit 0.0.0

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 (142) hide show
  1. checksums.yaml +7 -0
  2. data/.github/CODEOWNERS +4 -0
  3. data/.github/FUNDING.yml +4 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +41 -0
  5. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  6. data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
  7. data/.github/PULL_REQUEST_TEMPLATE.md +38 -0
  8. data/.github/dependabot.yml +15 -0
  9. data/.github/workflows/ruby-tests.yml +51 -0
  10. data/.gitignore +12 -0
  11. data/.rubocop.yml +14 -0
  12. data/CHANGELOG.md +16 -0
  13. data/CODE_OF_CONDUCT.md +74 -0
  14. data/CONTRIBUTING.md +80 -0
  15. data/DOCUMENTATION.md +972 -0
  16. data/Gemfile +5 -0
  17. data/LICENSE.md +20 -0
  18. data/README.md +49 -0
  19. data/Rakefile +15 -0
  20. data/bin/console +16 -0
  21. data/bin/setup +10 -0
  22. data/exe/screenkit +5 -0
  23. data/lib/screen_kit.rb +79 -0
  24. data/lib/screenkit/anchor.rb +19 -0
  25. data/lib/screenkit/animation_filters.rb +114 -0
  26. data/lib/screenkit/banner.rb +46 -0
  27. data/lib/screenkit/callout/styles/base.rb +101 -0
  28. data/lib/screenkit/callout/styles/default.rb +144 -0
  29. data/lib/screenkit/callout/styles/inline_block.rb +123 -0
  30. data/lib/screenkit/callout/text_style.rb +44 -0
  31. data/lib/screenkit/callout.rb +98 -0
  32. data/lib/screenkit/cli/base.rb +24 -0
  33. data/lib/screenkit/cli/episode.rb +78 -0
  34. data/lib/screenkit/cli/root.rb +73 -0
  35. data/lib/screenkit/cli.rb +9 -0
  36. data/lib/screenkit/config/base.rb +51 -0
  37. data/lib/screenkit/config/episode.rb +42 -0
  38. data/lib/screenkit/config/project.rb +47 -0
  39. data/lib/screenkit/content_type.rb +12 -0
  40. data/lib/screenkit/core_ext/json.rb +47 -0
  41. data/lib/screenkit/core_ext/string.rb +28 -0
  42. data/lib/screenkit/exporter/demotape.rb +26 -0
  43. data/lib/screenkit/exporter/episode.rb +565 -0
  44. data/lib/screenkit/exporter/image.rb +31 -0
  45. data/lib/screenkit/exporter/intro.rb +261 -0
  46. data/lib/screenkit/exporter/outro.rb +183 -0
  47. data/lib/screenkit/exporter/segment.rb +258 -0
  48. data/lib/screenkit/exporter/video.rb +33 -0
  49. data/lib/screenkit/generators/episode/config.yml.erb +106 -0
  50. data/lib/screenkit/generators/episode/content/001.tape +4 -0
  51. data/lib/screenkit/generators/episode/scripts/001.txt +1 -0
  52. data/lib/screenkit/generators/episode.rb +31 -0
  53. data/lib/screenkit/generators/project/Gemfile.erb +7 -0
  54. data/lib/screenkit/generators/project/resources/backtracks/default.aac +0 -0
  55. data/lib/screenkit/generators/project/resources/fonts/opensans/OFL.txt +93 -0
  56. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Bold.ttf +0 -0
  57. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-BoldItalic.ttf +0 -0
  58. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-ExtraBold.ttf +0 -0
  59. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-ExtraBoldItalic.ttf +0 -0
  60. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Italic.ttf +0 -0
  61. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Light.ttf +0 -0
  62. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-LightItalic.ttf +0 -0
  63. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Medium.ttf +0 -0
  64. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-MediumItalic.ttf +0 -0
  65. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Regular.ttf +0 -0
  66. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-SemiBold.ttf +0 -0
  67. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-SemiBoldItalic.ttf +0 -0
  68. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Bold.ttf +0 -0
  69. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-BoldItalic.ttf +0 -0
  70. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-ExtraBold.ttf +0 -0
  71. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-ExtraBoldItalic.ttf +0 -0
  72. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Italic.ttf +0 -0
  73. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Light.ttf +0 -0
  74. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-LightItalic.ttf +0 -0
  75. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Medium.ttf +0 -0
  76. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-MediumItalic.ttf +0 -0
  77. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Regular.ttf +0 -0
  78. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-SemiBold.ttf +0 -0
  79. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-SemiBoldItalic.ttf +0 -0
  80. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Bold.ttf +0 -0
  81. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-BoldItalic.ttf +0 -0
  82. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-ExtraBold.ttf +0 -0
  83. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-ExtraBoldItalic.ttf +0 -0
  84. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Italic.ttf +0 -0
  85. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Light.ttf +0 -0
  86. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-LightItalic.ttf +0 -0
  87. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Medium.ttf +0 -0
  88. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-MediumItalic.ttf +0 -0
  89. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Regular.ttf +0 -0
  90. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-SemiBold.ttf +0 -0
  91. data/lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-SemiBoldItalic.ttf +0 -0
  92. data/lib/screenkit/generators/project/resources/fonts/opensans/README.txt +100 -0
  93. data/lib/screenkit/generators/project/resources/images/logo.png +0 -0
  94. data/lib/screenkit/generators/project/resources/images/watermark.png +0 -0
  95. data/lib/screenkit/generators/project/resources/sounds/chime.mp3 +0 -0
  96. data/lib/screenkit/generators/project/resources/sounds/pop.mp3 +0 -0
  97. data/lib/screenkit/generators/project/resources/sounds/whoosh.mp3 +0 -0
  98. data/lib/screenkit/generators/project/screenkit.yml +189 -0
  99. data/lib/screenkit/generators/project.rb +34 -0
  100. data/lib/screenkit/logfile.rb +33 -0
  101. data/lib/screenkit/parallel_processor.rb +50 -0
  102. data/lib/screenkit/path_lookup.rb +27 -0
  103. data/lib/screenkit/resources/mute.mp3 +0 -0
  104. data/lib/screenkit/resources/transparent.png +0 -0
  105. data/lib/screenkit/schema_validator.rb +14 -0
  106. data/lib/screenkit/schemas/callouts/default.json +44 -0
  107. data/lib/screenkit/schemas/callouts/inline_block.json +20 -0
  108. data/lib/screenkit/schemas/episode.json +74 -0
  109. data/lib/screenkit/schemas/project.json +37 -0
  110. data/lib/screenkit/schemas/refs/anchor.json +17 -0
  111. data/lib/screenkit/schemas/refs/animation.json +7 -0
  112. data/lib/screenkit/schemas/refs/background.json +14 -0
  113. data/lib/screenkit/schemas/refs/callout.json +27 -0
  114. data/lib/screenkit/schemas/refs/color.json +7 -0
  115. data/lib/screenkit/schemas/refs/directory.json +20 -0
  116. data/lib/screenkit/schemas/refs/intro.json +30 -0
  117. data/lib/screenkit/schemas/refs/logo.json +26 -0
  118. data/lib/screenkit/schemas/refs/outro.json +26 -0
  119. data/lib/screenkit/schemas/refs/position.json +38 -0
  120. data/lib/screenkit/schemas/refs/scenes.json +27 -0
  121. data/lib/screenkit/schemas/refs/size.json +19 -0
  122. data/lib/screenkit/schemas/refs/sound.json +36 -0
  123. data/lib/screenkit/schemas/refs/spacing.json +22 -0
  124. data/lib/screenkit/schemas/refs/text_style.json +18 -0
  125. data/lib/screenkit/schemas/refs/transition.json +15 -0
  126. data/lib/screenkit/schemas/refs/tts.json +47 -0
  127. data/lib/screenkit/schemas/refs/watermark.json +18 -0
  128. data/lib/screenkit/schemas/tts/elevenlabs.json +67 -0
  129. data/lib/screenkit/schemas/tts/say.json +16 -0
  130. data/lib/screenkit/shell.rb +58 -0
  131. data/lib/screenkit/sound.rb +44 -0
  132. data/lib/screenkit/spacing.rb +23 -0
  133. data/lib/screenkit/spinner.rb +39 -0
  134. data/lib/screenkit/transition.rb +16 -0
  135. data/lib/screenkit/tts/eleven_labs.rb +51 -0
  136. data/lib/screenkit/tts/say.rb +31 -0
  137. data/lib/screenkit/utils.rb +87 -0
  138. data/lib/screenkit/version.rb +5 -0
  139. data/lib/screenkit/watermark.rb +34 -0
  140. data/lib/screenkit.rb +3 -0
  141. data/screenkit.gemspec +56 -0
  142. metadata +426 -0
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ScreenKit
4
+ module Utils
5
+ def fps(path)
6
+ cmd = "ffprobe -v error -select_streams v:0 -show_entries " \
7
+ "stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1"
8
+ rate = `#{cmd} #{path}`.strip
9
+
10
+ if rate.include?("/")
11
+ numerator, denominator = rate.split("/").map(&:to_f)
12
+ numerator / denominator
13
+ else
14
+ rate.to_f
15
+ end
16
+ end
17
+
18
+ def duration(path)
19
+ return 0.0 unless path.file?
20
+
21
+ cmd = "ffprobe -v error -show_entries format=duration -of " \
22
+ "default=noprint_wrappers=1:nokey=1"
23
+ `#{cmd} #{path}`.strip.to_f
24
+ end
25
+
26
+ def elapsed
27
+ started = Process.clock_gettime(Process::CLOCK_MONOTONIC)
28
+ result = yield
29
+ finished = Process.clock_gettime(Process::CLOCK_MONOTONIC)
30
+
31
+ [finished - started, result]
32
+ end
33
+
34
+ def relative_path(path, from: Pathname.pwd)
35
+ path = Pathname(path)
36
+ candidate = path.relative_path_from(from)
37
+ parent = ["..", File::SEPARATOR, ".."].join
38
+
39
+ return path.expand_path if candidate.to_s.start_with?(parent)
40
+
41
+ candidate
42
+ end
43
+
44
+ def image_size(path, hi_res: true)
45
+ factor = hi_res ? 2 : 1
46
+ image = MiniMagick::Image.open(path.to_s)
47
+ [image.width / factor, image.height / factor]
48
+ end
49
+
50
+ def video_file?(path)
51
+ ContentType.video.include?(File.extname(path).downcase.delete_prefix("."))
52
+ end
53
+
54
+ def calculate_position(
55
+ anchor:,
56
+ margin:,
57
+ width:,
58
+ height:,
59
+ base_width: 1920,
60
+ base_height: 1080
61
+ )
62
+ x = case anchor.horizontal
63
+ when "left"
64
+ margin.left
65
+ when "center"
66
+ ((base_width - width) / 2.0).round
67
+ when "right"
68
+ (base_width - width - margin.right)
69
+ else
70
+ 0
71
+ end
72
+
73
+ y = case anchor.vertical
74
+ when "top"
75
+ margin.top
76
+ when "center"
77
+ ((base_height - height) / 2.0).round
78
+ when "bottom"
79
+ (base_height - height - margin.bottom)
80
+ else
81
+ 0
82
+ end
83
+
84
+ [x, y]
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ScreenKit
4
+ VERSION = "0.0.0"
5
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ScreenKit
4
+ class Watermark
5
+ # The path to the watermark image.
6
+ attr_reader :path
7
+
8
+ # The margin spacing for the watermark.
9
+ attr_reader :margin
10
+
11
+ # The anchor position for the watermark.
12
+ attr_reader :anchor
13
+
14
+ # The opacity of the watermark.
15
+ attr_reader :opacity
16
+
17
+ def initialize(value)
18
+ @path = nil
19
+ @margin = Spacing.new(100)
20
+ @anchor = Anchor.new(%w[bottom right])
21
+ @opacity = 0.1
22
+
23
+ case value
24
+ when String
25
+ @path = value
26
+ when Hash
27
+ @path = value[:path] if value[:path]
28
+ @margin = Spacing.new(value[:margin]) if value[:margin]
29
+ @anchor = Anchor.new(value[:anchor]) if value[:anchor]
30
+ @opacity = value[:opacity] if value[:opacity]
31
+ end
32
+ end
33
+ end
34
+ end
data/lib/screenkit.rb ADDED
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "screen_kit"
data/screenkit.gemspec ADDED
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/screenkit/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "screenkit"
7
+ spec.version = ScreenKit::VERSION
8
+ spec.authors = ["Nando Vieira"]
9
+ spec.email = ["me@fnando.com"]
10
+ spec.metadata = {"rubygems_mfa_required" => "true"}
11
+
12
+ spec.summary = "Terminal to screencast, simplified"
13
+ spec.description = spec.summary
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = Gem::Requirement.new(">= 3.4.0")
16
+
17
+ github_url = "https://github.com/fnando/screenkit"
18
+ github_tree_url = "#{github_url}/tree/v#{spec.version}"
19
+
20
+ spec.homepage = github_url
21
+ spec.metadata["homepage_uri"] = spec.homepage
22
+ spec.metadata["bug_tracker_uri"] = "#{github_url}/issues"
23
+ spec.metadata["source_code_uri"] = github_tree_url
24
+ spec.metadata["changelog_uri"] = "#{github_tree_url}/CHANGELOG.md"
25
+ spec.metadata["documentation_uri"] = "#{github_tree_url}/README.md"
26
+ spec.metadata["license_uri"] = "#{github_tree_url}/LICENSE.md"
27
+
28
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
29
+ `git ls-files -z`
30
+ .split("\x0")
31
+ .reject {|f| f.match(%r{^(test|spec|features)/}) }
32
+ end
33
+
34
+ spec.bindir = "exe"
35
+ spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
36
+ spec.require_paths = ["lib"]
37
+
38
+ spec.add_dependency "aitch"
39
+ spec.add_dependency "demotape"
40
+ spec.add_dependency "etc"
41
+ spec.add_dependency "json-schema"
42
+ spec.add_dependency "mini_magick"
43
+ spec.add_dependency "openssl"
44
+ spec.add_dependency "securerandom"
45
+ spec.add_dependency "thor"
46
+ spec.add_dependency "thor-completion"
47
+ spec.add_dependency "tty-spinner"
48
+ spec.add_dependency "yaml"
49
+
50
+ spec.add_development_dependency "minitest"
51
+ spec.add_development_dependency "minitest-utils"
52
+ spec.add_development_dependency "rake"
53
+ spec.add_development_dependency "rubocop"
54
+ spec.add_development_dependency "rubocop-fnando"
55
+ spec.add_development_dependency "simplecov"
56
+ end
metadata ADDED
@@ -0,0 +1,426 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: screenkit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Nando Vieira
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: aitch
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: demotape
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: etc
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: json-schema
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: mini_magick
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: openssl
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: securerandom
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: thor
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: thor-completion
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ - !ruby/object:Gem::Dependency
139
+ name: tty-spinner
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ type: :runtime
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ - !ruby/object:Gem::Dependency
153
+ name: yaml
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ type: :runtime
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ - !ruby/object:Gem::Dependency
167
+ name: minitest
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ type: :development
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ - !ruby/object:Gem::Dependency
181
+ name: minitest-utils
182
+ requirement: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ type: :development
188
+ prerelease: false
189
+ version_requirements: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ - !ruby/object:Gem::Dependency
195
+ name: rake
196
+ requirement: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ type: :development
202
+ prerelease: false
203
+ version_requirements: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ - !ruby/object:Gem::Dependency
209
+ name: rubocop
210
+ requirement: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ type: :development
216
+ prerelease: false
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ - !ruby/object:Gem::Dependency
223
+ name: rubocop-fnando
224
+ requirement: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: '0'
229
+ type: :development
230
+ prerelease: false
231
+ version_requirements: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '0'
236
+ - !ruby/object:Gem::Dependency
237
+ name: simplecov
238
+ requirement: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - ">="
241
+ - !ruby/object:Gem::Version
242
+ version: '0'
243
+ type: :development
244
+ prerelease: false
245
+ version_requirements: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: '0'
250
+ description: Terminal to screencast, simplified
251
+ email:
252
+ - me@fnando.com
253
+ executables:
254
+ - screenkit
255
+ extensions: []
256
+ extra_rdoc_files: []
257
+ files:
258
+ - ".github/CODEOWNERS"
259
+ - ".github/FUNDING.yml"
260
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
261
+ - ".github/ISSUE_TEMPLATE/config.yml"
262
+ - ".github/ISSUE_TEMPLATE/feature_request.md"
263
+ - ".github/PULL_REQUEST_TEMPLATE.md"
264
+ - ".github/dependabot.yml"
265
+ - ".github/workflows/ruby-tests.yml"
266
+ - ".gitignore"
267
+ - ".rubocop.yml"
268
+ - CHANGELOG.md
269
+ - CODE_OF_CONDUCT.md
270
+ - CONTRIBUTING.md
271
+ - DOCUMENTATION.md
272
+ - Gemfile
273
+ - LICENSE.md
274
+ - README.md
275
+ - Rakefile
276
+ - bin/console
277
+ - bin/setup
278
+ - exe/screenkit
279
+ - lib/screen_kit.rb
280
+ - lib/screenkit.rb
281
+ - lib/screenkit/anchor.rb
282
+ - lib/screenkit/animation_filters.rb
283
+ - lib/screenkit/banner.rb
284
+ - lib/screenkit/callout.rb
285
+ - lib/screenkit/callout/styles/base.rb
286
+ - lib/screenkit/callout/styles/default.rb
287
+ - lib/screenkit/callout/styles/inline_block.rb
288
+ - lib/screenkit/callout/text_style.rb
289
+ - lib/screenkit/cli.rb
290
+ - lib/screenkit/cli/base.rb
291
+ - lib/screenkit/cli/episode.rb
292
+ - lib/screenkit/cli/root.rb
293
+ - lib/screenkit/config/base.rb
294
+ - lib/screenkit/config/episode.rb
295
+ - lib/screenkit/config/project.rb
296
+ - lib/screenkit/content_type.rb
297
+ - lib/screenkit/core_ext/json.rb
298
+ - lib/screenkit/core_ext/string.rb
299
+ - lib/screenkit/exporter/demotape.rb
300
+ - lib/screenkit/exporter/episode.rb
301
+ - lib/screenkit/exporter/image.rb
302
+ - lib/screenkit/exporter/intro.rb
303
+ - lib/screenkit/exporter/outro.rb
304
+ - lib/screenkit/exporter/segment.rb
305
+ - lib/screenkit/exporter/video.rb
306
+ - lib/screenkit/generators/episode.rb
307
+ - lib/screenkit/generators/episode/config.yml.erb
308
+ - lib/screenkit/generators/episode/content/001.tape
309
+ - lib/screenkit/generators/episode/scripts/001.txt
310
+ - lib/screenkit/generators/project.rb
311
+ - lib/screenkit/generators/project/Gemfile.erb
312
+ - lib/screenkit/generators/project/resources/backtracks/default.aac
313
+ - lib/screenkit/generators/project/resources/fonts/opensans/OFL.txt
314
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Bold.ttf
315
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-BoldItalic.ttf
316
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-ExtraBold.ttf
317
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-ExtraBoldItalic.ttf
318
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Italic.ttf
319
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Light.ttf
320
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-LightItalic.ttf
321
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Medium.ttf
322
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-MediumItalic.ttf
323
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-Regular.ttf
324
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-SemiBold.ttf
325
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans-SemiBoldItalic.ttf
326
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Bold.ttf
327
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-BoldItalic.ttf
328
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-ExtraBold.ttf
329
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-ExtraBoldItalic.ttf
330
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Italic.ttf
331
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Light.ttf
332
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-LightItalic.ttf
333
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Medium.ttf
334
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-MediumItalic.ttf
335
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-Regular.ttf
336
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-SemiBold.ttf
337
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_Condensed-SemiBoldItalic.ttf
338
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Bold.ttf
339
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-BoldItalic.ttf
340
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-ExtraBold.ttf
341
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-ExtraBoldItalic.ttf
342
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Italic.ttf
343
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Light.ttf
344
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-LightItalic.ttf
345
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Medium.ttf
346
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-MediumItalic.ttf
347
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-Regular.ttf
348
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-SemiBold.ttf
349
+ - lib/screenkit/generators/project/resources/fonts/opensans/OpenSans_SemiCondensed-SemiBoldItalic.ttf
350
+ - lib/screenkit/generators/project/resources/fonts/opensans/README.txt
351
+ - lib/screenkit/generators/project/resources/images/logo.png
352
+ - lib/screenkit/generators/project/resources/images/watermark.png
353
+ - lib/screenkit/generators/project/resources/sounds/chime.mp3
354
+ - lib/screenkit/generators/project/resources/sounds/pop.mp3
355
+ - lib/screenkit/generators/project/resources/sounds/whoosh.mp3
356
+ - lib/screenkit/generators/project/screenkit.yml
357
+ - lib/screenkit/logfile.rb
358
+ - lib/screenkit/parallel_processor.rb
359
+ - lib/screenkit/path_lookup.rb
360
+ - lib/screenkit/resources/mute.mp3
361
+ - lib/screenkit/resources/transparent.png
362
+ - lib/screenkit/schema_validator.rb
363
+ - lib/screenkit/schemas/callouts/default.json
364
+ - lib/screenkit/schemas/callouts/inline_block.json
365
+ - lib/screenkit/schemas/episode.json
366
+ - lib/screenkit/schemas/project.json
367
+ - lib/screenkit/schemas/refs/anchor.json
368
+ - lib/screenkit/schemas/refs/animation.json
369
+ - lib/screenkit/schemas/refs/background.json
370
+ - lib/screenkit/schemas/refs/callout.json
371
+ - lib/screenkit/schemas/refs/color.json
372
+ - lib/screenkit/schemas/refs/directory.json
373
+ - lib/screenkit/schemas/refs/intro.json
374
+ - lib/screenkit/schemas/refs/logo.json
375
+ - lib/screenkit/schemas/refs/outro.json
376
+ - lib/screenkit/schemas/refs/position.json
377
+ - lib/screenkit/schemas/refs/scenes.json
378
+ - lib/screenkit/schemas/refs/size.json
379
+ - lib/screenkit/schemas/refs/sound.json
380
+ - lib/screenkit/schemas/refs/spacing.json
381
+ - lib/screenkit/schemas/refs/text_style.json
382
+ - lib/screenkit/schemas/refs/transition.json
383
+ - lib/screenkit/schemas/refs/tts.json
384
+ - lib/screenkit/schemas/refs/watermark.json
385
+ - lib/screenkit/schemas/tts/elevenlabs.json
386
+ - lib/screenkit/schemas/tts/say.json
387
+ - lib/screenkit/shell.rb
388
+ - lib/screenkit/sound.rb
389
+ - lib/screenkit/spacing.rb
390
+ - lib/screenkit/spinner.rb
391
+ - lib/screenkit/transition.rb
392
+ - lib/screenkit/tts/eleven_labs.rb
393
+ - lib/screenkit/tts/say.rb
394
+ - lib/screenkit/utils.rb
395
+ - lib/screenkit/version.rb
396
+ - lib/screenkit/watermark.rb
397
+ - screenkit.gemspec
398
+ homepage: https://github.com/fnando/screenkit
399
+ licenses:
400
+ - MIT
401
+ metadata:
402
+ rubygems_mfa_required: 'true'
403
+ homepage_uri: https://github.com/fnando/screenkit
404
+ bug_tracker_uri: https://github.com/fnando/screenkit/issues
405
+ source_code_uri: https://github.com/fnando/screenkit/tree/v0.0.0
406
+ changelog_uri: https://github.com/fnando/screenkit/tree/v0.0.0/CHANGELOG.md
407
+ documentation_uri: https://github.com/fnando/screenkit/tree/v0.0.0/README.md
408
+ license_uri: https://github.com/fnando/screenkit/tree/v0.0.0/LICENSE.md
409
+ rdoc_options: []
410
+ require_paths:
411
+ - lib
412
+ required_ruby_version: !ruby/object:Gem::Requirement
413
+ requirements:
414
+ - - ">="
415
+ - !ruby/object:Gem::Version
416
+ version: 3.4.0
417
+ required_rubygems_version: !ruby/object:Gem::Requirement
418
+ requirements:
419
+ - - ">="
420
+ - !ruby/object:Gem::Version
421
+ version: '0'
422
+ requirements: []
423
+ rubygems_version: 3.6.9
424
+ specification_version: 4
425
+ summary: Terminal to screencast, simplified
426
+ test_files: []