@gentbajko/slopify 2.5.0 → 3.0.1

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 (542) hide show
  1. package/LICENSE +201 -21
  2. package/NOTICE +12 -0
  3. package/README.md +24 -41
  4. package/SUBTITLES.md +1 -1
  5. package/dist/adapter-registry.js +31 -0
  6. package/dist/adapters/alignment/cache.js +4 -1
  7. package/dist/adapters/alignment/ctc.js +25 -23
  8. package/dist/adapters/alignment/index.js +37 -6
  9. package/dist/adapters/alignment/multilingual.js +267 -0
  10. package/dist/adapters/alignment/protocol.js +11 -0
  11. package/dist/adapters/alignment/quality.js +4 -3
  12. package/dist/adapters/alignment/sentences.js +95 -0
  13. package/dist/adapters/alignment/spec.js +24 -0
  14. package/dist/adapters/alignment/spell.js +769 -0
  15. package/dist/adapters/alignment/text.js +56 -9
  16. package/dist/adapters/alignment/window.js +34 -30
  17. package/dist/adapters/alignment/worker.js +23 -21
  18. package/dist/adapters/explain.js +11 -11
  19. package/dist/adapters/host-cli/index.js +44 -5
  20. package/dist/adapters/host-cli/transport.js +7 -5
  21. package/dist/adapters/image/bytes.js +2 -2
  22. package/dist/adapters/image/codex-output.js +1 -1
  23. package/dist/adapters/image/codex.js +87 -22
  24. package/dist/adapters/image/fal.js +13 -5
  25. package/dist/adapters/image/google.js +11 -8
  26. package/dist/adapters/image/openai.js +14 -7
  27. package/dist/adapters/image/reference.js +34 -0
  28. package/dist/adapters/image/replicate.js +7 -2
  29. package/dist/adapters/image/video.js +2 -2
  30. package/dist/adapters/key-probes.js +85 -0
  31. package/dist/adapters/llm/claude-code.js +168 -32
  32. package/dist/adapters/llm/cli-login-error.js +1 -1
  33. package/dist/adapters/llm/codex-limits.js +157 -0
  34. package/dist/adapters/llm/codex.js +99 -12
  35. package/dist/adapters/llm/document-workspace.js +2 -2
  36. package/dist/adapters/llm/gemini-workspace.js +1 -1
  37. package/dist/adapters/llm/gemini.js +16 -3
  38. package/dist/adapters/llm/image-workspace.js +58 -0
  39. package/dist/adapters/llm/openrouter.js +11 -3
  40. package/dist/adapters/llm/run-cli.js +12 -7
  41. package/dist/adapters/tts/cartesia.js +10 -0
  42. package/dist/adapters/tts/elevenlabs.js +31 -9
  43. package/dist/adapters/tts/gemini.js +206 -0
  44. package/dist/adapters/tts/inworld-async.js +9 -5
  45. package/dist/adapters/tts/inworld.js +17 -3
  46. package/dist/adapters/tts/openai.js +3 -0
  47. package/dist/adapters/tts/pcm-mp3.js +62 -0
  48. package/dist/adapters/tts/system.js +147 -0
  49. package/dist/adapters/tts/voice-languages.js +80 -0
  50. package/dist/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
  51. package/dist/assets/fonts/noto/NotoSansArabic-Regular.ttf +0 -0
  52. package/dist/assets/fonts/noto/NotoSansDevanagari-Regular.ttf +0 -0
  53. package/dist/assets/fonts/noto/NotoSansHebrew-Regular.ttf +0 -0
  54. package/dist/assets/fonts/noto/NotoSansThai-Regular.ttf +0 -0
  55. package/dist/assets/fonts/noto/OFL.txt +93 -0
  56. package/dist/assets/fonts/noto/SOURCE.txt +18 -0
  57. package/dist/assets/models.yaml +38 -0
  58. package/dist/assets/sample/sample-audiobook.tar +0 -0
  59. package/dist/assets/sample/sample-podcast.tar +0 -0
  60. package/dist/assets/sample/sample-project.tar +0 -0
  61. package/dist/assets/style-preview/narration.mp3 +0 -0
  62. package/dist/assets/style-preview/tall-1.jpg +0 -0
  63. package/dist/assets/style-preview/tall-2.jpg +0 -0
  64. package/dist/assets/style-preview/tall-3.jpg +0 -0
  65. package/dist/assets/style-preview/wide-1.jpg +0 -0
  66. package/dist/assets/style-preview/wide-2.jpg +0 -0
  67. package/dist/assets/style-preview/wide-3.jpg +0 -0
  68. package/dist/catalog/merge.js +132 -0
  69. package/dist/catalog/registry.js +17 -14
  70. package/dist/catalog/schema.js +2 -0
  71. package/dist/catalog/store.js +147 -8
  72. package/dist/catalog/validate.js +2 -2
  73. package/dist/compose.yaml +71 -0
  74. package/dist/edge/autostart/docker-record.js +32 -0
  75. package/dist/edge/autostart/docker.js +118 -0
  76. package/dist/edge/autostart/index.js +78 -0
  77. package/dist/edge/autostart/launcher.js +176 -0
  78. package/dist/edge/autostart/model.js +3 -0
  79. package/dist/edge/autostart/native.js +210 -0
  80. package/dist/edge/autostart/prompt.js +72 -0
  81. package/dist/edge/autostart/service.js +90 -0
  82. package/dist/edge/cli-args.js +71 -0
  83. package/dist/edge/cli.js +64 -63
  84. package/dist/edge/docker-install/activation.js +56 -0
  85. package/dist/edge/docker-install/apply.js +458 -0
  86. package/dist/edge/docker-install/engine.js +362 -0
  87. package/dist/edge/docker-install/run.js +160 -0
  88. package/dist/edge/docker-install/state.js +146 -0
  89. package/dist/edge/{docker-projects → docker-install}/volume.js +1 -5
  90. package/dist/edge/docker.js +14 -22
  91. package/dist/edge/events/hub.js +3 -1
  92. package/dist/edge/host-cli.js +1 -1
  93. package/dist/edge/http/actions.js +38 -11
  94. package/dist/edge/http/app.js +60 -2
  95. package/dist/edge/http/auditions.js +70 -0
  96. package/dist/edge/http/autostart.js +37 -0
  97. package/dist/edge/http/byte-range.js +42 -0
  98. package/dist/edge/http/channel-memory.js +92 -0
  99. package/dist/edge/http/channels.js +128 -0
  100. package/dist/edge/http/diagnostics.js +1 -0
  101. package/dist/edge/http/draft-files.js +2 -4
  102. package/dist/edge/http/entries.js +22 -3
  103. package/dist/edge/http/files.js +11 -7
  104. package/dist/edge/http/folder-location.js +1 -1
  105. package/dist/edge/http/home.js +39 -0
  106. package/dist/edge/http/host-cli.js +29 -5
  107. package/dist/edge/http/narration-peaks.js +76 -0
  108. package/dist/edge/http/onboarding.js +212 -0
  109. package/dist/edge/http/open-folder.js +1 -1
  110. package/dist/edge/http/patch-notes.js +45 -0
  111. package/dist/edge/http/planning.js +4 -2
  112. package/dist/edge/http/project-create.js +87 -0
  113. package/dist/edge/http/project-templates.js +19 -2
  114. package/dist/edge/http/projects.js +37 -100
  115. package/dist/edge/http/prompts.js +40 -3
  116. package/dist/edge/http/pronunciations.js +23 -4
  117. package/dist/edge/http/providers.js +119 -3
  118. package/dist/edge/http/reviews.js +131 -0
  119. package/dist/edge/http/revision-files.js +3 -5
  120. package/dist/edge/http/revisions.js +1 -1
  121. package/dist/edge/http/run-cost.js +25 -0
  122. package/dist/edge/http/schedules.js +115 -6
  123. package/dist/edge/http/settings.js +84 -6
  124. package/dist/edge/http/storage-files.js +50 -0
  125. package/dist/edge/http/storage.js +43 -2
  126. package/dist/edge/http/studio.js +287 -0
  127. package/dist/edge/http/style-preview.js +61 -0
  128. package/dist/edge/http/subtitles.js +1 -1
  129. package/dist/edge/http/trash.js +69 -0
  130. package/dist/edge/http/tutorials.js +59 -0
  131. package/dist/edge/http/update.js +24 -3
  132. package/dist/edge/http/whats-new.js +15 -0
  133. package/dist/edge/http/youtube-edits.js +92 -0
  134. package/dist/edge/native-update.js +62 -0
  135. package/dist/extension/slopify-studio-chrome.zip +0 -0
  136. package/dist/extension/slopify-studio-firefox.zip +0 -0
  137. package/dist/host-cli/gemini-login.js +83 -0
  138. package/dist/host-cli/open-folder.js +10 -10
  139. package/dist/host-cli/runtime.js +9 -1
  140. package/dist/host-cli/status.js +4 -2
  141. package/dist/kernel/db/migrations/0025-automatic-reviews.sql +40 -0
  142. package/dist/kernel/db/migrations/0026-schedule-topic-generation.sql +23 -0
  143. package/dist/kernel/db/migrations/0027-run-cost.sql +58 -0
  144. package/dist/kernel/db/migrations/0030-automatic-retries.sql +18 -0
  145. package/dist/kernel/db/migrations/0031-prompt-history-and-description-edits.sql +33 -0
  146. package/dist/kernel/db/migrations/0032-channels.sql +65 -0
  147. package/dist/kernel/db/migrations/0034-script-prompts.sql +23 -0
  148. package/dist/kernel/db/migrations/0035-narration-aliases.sql +13 -0
  149. package/dist/kernel/db/migrations/0037-project-uploads.sql +8 -0
  150. package/dist/kernel/db/migrations/0038-voice-languages.sql +7 -0
  151. package/dist/kernel/db/migrations/0039-channel-essentials.sql +64 -0
  152. package/dist/kernel/db/migrations/0040-standalone-usage.sql +35 -0
  153. package/dist/kernel/db/migrations/0041-cast-hosts.sql +3 -0
  154. package/dist/kernel/paths.js +27 -6
  155. package/dist/kernel/pipeline.js +4 -1
  156. package/dist/kernel/ports/host-cli.js +122 -14
  157. package/dist/kernel/ports/key-probe.js +1 -0
  158. package/dist/kernel/ports/languages.js +157 -0
  159. package/dist/kernel/ports/model.js +10 -5
  160. package/dist/kernel/ports/narration-aliases.js +60 -0
  161. package/dist/kernel/ports/plan-limits.js +36 -0
  162. package/dist/kernel/ports/system-speech.js +203 -0
  163. package/dist/kernel/runner/attempt.js +17 -8
  164. package/dist/kernel/runner/audition.js +36 -0
  165. package/dist/kernel/runner/graph.js +40 -5
  166. package/dist/kernel/runner/index.js +39 -9
  167. package/dist/kernel/runner/meter.js +1 -0
  168. package/dist/kernel/runner/providers.js +142 -7
  169. package/dist/kernel/runner/retry-policy.js +43 -0
  170. package/dist/kernel/runner/standalone.js +134 -0
  171. package/dist/kernel/runner/work-authority.js +28 -2
  172. package/dist/main.js +277 -16
  173. package/dist/model-catalog.js +2 -0
  174. package/dist/patch-notes/0.4.2-to-1.0.md +93 -0
  175. package/dist/patch-notes/1.0-to-2.0.md +74 -0
  176. package/dist/patch-notes/2.0-to-3.0.md +257 -0
  177. package/dist/patch-notes/3.0.0.md +70 -0
  178. package/dist/patch-notes/3.0.1.md +105 -0
  179. package/dist/patch-notes/index.json +32 -0
  180. package/dist/slices/admission/model.js +27 -0
  181. package/dist/slices/admission/repo.js +24 -4
  182. package/dist/slices/admission/rules.js +80 -2
  183. package/dist/slices/admission/schema.js +58 -1
  184. package/dist/slices/admission/short-mode.js +47 -0
  185. package/dist/slices/admission/start.js +42 -6
  186. package/dist/slices/article/continuation.js +2 -2
  187. package/dist/slices/article/provided-entries.js +2 -2
  188. package/dist/slices/article/run.js +6 -2
  189. package/dist/slices/article/segments.js +3 -3
  190. package/dist/slices/backups/folder.js +14 -6
  191. package/dist/slices/batch/index.js +7 -2
  192. package/dist/slices/cancel/index.js +1 -1
  193. package/dist/slices/channels/cast-images.js +110 -0
  194. package/dist/slices/channels/cast-match.js +32 -0
  195. package/dist/slices/channels/images.js +19 -0
  196. package/dist/slices/channels/model.js +5 -0
  197. package/dist/slices/channels/rebrand.js +100 -0
  198. package/dist/slices/channels/repo.js +221 -0
  199. package/dist/slices/channels/runs.js +129 -0
  200. package/dist/slices/channels/schema.js +152 -0
  201. package/dist/slices/channels/service.js +180 -0
  202. package/dist/slices/channels/studio-csv.js +110 -0
  203. package/dist/slices/channels/videos.js +120 -0
  204. package/dist/slices/checkpoints/recovery.js +10 -0
  205. package/dist/slices/control/index.js +5 -2
  206. package/dist/slices/control/providers.js +4 -1
  207. package/dist/slices/document/fonts.js +1 -1
  208. package/dist/slices/document/render.js +1 -1
  209. package/dist/slices/episodes/related.js +90 -0
  210. package/dist/slices/episodes/repo.js +60 -0
  211. package/dist/slices/episodes/service.js +58 -0
  212. package/dist/slices/episodes/summarize.js +170 -0
  213. package/dist/slices/estimate/index.js +109 -28
  214. package/dist/slices/estimate/requests.js +68 -2
  215. package/dist/slices/eta/history.js +56 -0
  216. package/dist/slices/eta/model.js +63 -0
  217. package/dist/slices/eta/view.js +25 -0
  218. package/dist/slices/fixes/rules.js +73 -0
  219. package/dist/slices/fonts/coverage.js +82 -0
  220. package/dist/slices/fonts/sfnt.js +74 -0
  221. package/dist/slices/images/run.js +8 -5
  222. package/dist/slices/images/scale.js +84 -0
  223. package/dist/slices/library/diff.js +122 -0
  224. package/dist/slices/library/history.js +100 -0
  225. package/dist/slices/library/model.js +3 -0
  226. package/dist/slices/library/photorealistic.js +49 -0
  227. package/dist/slices/library/repo.js +19 -14
  228. package/dist/slices/library/save.js +62 -12
  229. package/dist/slices/library/slots.js +7 -1
  230. package/dist/slices/library/used-by.js +153 -0
  231. package/dist/slices/loudness/level-pieces.js +41 -0
  232. package/dist/slices/loudness/loudnorm.js +164 -0
  233. package/dist/slices/loudness/model.js +153 -0
  234. package/dist/slices/model-upkeep/model.js +10 -0
  235. package/dist/slices/model-upkeep/switch.js +217 -0
  236. package/dist/slices/model-upkeep/usage.js +185 -0
  237. package/dist/slices/narration/aliases-library.js +31 -0
  238. package/dist/slices/narration/aliases-schema.js +53 -0
  239. package/dist/slices/narration/aliases.js +49 -0
  240. package/dist/slices/narration/blocks.js +352 -0
  241. package/dist/slices/narration/chunk.js +19 -7
  242. package/dist/slices/narration/concat.js +2 -2
  243. package/dist/slices/narration/describe.js +45 -0
  244. package/dist/slices/narration/pauses-model.js +63 -0
  245. package/dist/slices/narration/pauses.js +269 -0
  246. package/dist/slices/narration/peaks-model.js +1 -0
  247. package/dist/slices/narration/peaks.js +94 -0
  248. package/dist/slices/narration/preparation.js +21 -3
  249. package/dist/slices/narration/pronunciation-chunks.js +3 -3
  250. package/dist/slices/narration/pronunciation.js +72 -25
  251. package/dist/slices/narration/run.js +6 -6
  252. package/dist/slices/narration/shared-glossary.js +1 -1
  253. package/dist/slices/narration/steering.js +15 -4
  254. package/dist/slices/notifications/notifier.js +47 -3
  255. package/dist/slices/notifications/rules.js +48 -3
  256. package/dist/slices/onboarding/copy.js +143 -0
  257. package/dist/slices/onboarding/first-run.js +72 -0
  258. package/dist/slices/onboarding/full-video.js +81 -0
  259. package/dist/slices/onboarding/install.js +119 -0
  260. package/dist/slices/onboarding/model.js +85 -0
  261. package/dist/slices/onboarding/packs.js +491 -0
  262. package/dist/slices/onboarding/quick-short.js +144 -0
  263. package/dist/slices/onboarding/sample.js +132 -0
  264. package/dist/slices/onboarding/state.js +68 -0
  265. package/dist/slices/onboarding/template.js +73 -0
  266. package/dist/slices/patch-notes/library.js +73 -0
  267. package/dist/slices/patch-notes/seen.js +77 -0
  268. package/dist/slices/play-drafts/convert.js +127 -8
  269. package/dist/slices/play-drafts/readiness.js +4 -1
  270. package/dist/slices/play-drafts/repo.js +2 -0
  271. package/dist/slices/play-drafts/review-inputs.js +20 -3
  272. package/dist/slices/play-drafts/schema.js +89 -0
  273. package/dist/slices/play-drafts/service.js +4 -1
  274. package/dist/slices/play-drafts/start.js +43 -18
  275. package/dist/slices/project-templates/from-project.js +59 -6
  276. package/dist/slices/project-templates/next-chapter.js +94 -0
  277. package/dist/slices/project-templates/one-off.js +26 -0
  278. package/dist/slices/project-templates/repo.js +2 -1
  279. package/dist/slices/project-templates/schema.js +7 -1
  280. package/dist/slices/project-templates/service.js +15 -4
  281. package/dist/slices/project-templates/setup.js +18 -2
  282. package/dist/slices/rebuild/admission-repo.js +1 -1
  283. package/dist/slices/rebuild/model.js +6 -0
  284. package/dist/slices/rebuild/preview-details.js +46 -3
  285. package/dist/slices/rebuild/preview-plan.js +13 -6
  286. package/dist/slices/rebuild/recipe-audio-parts.js +40 -7
  287. package/dist/slices/rebuild/recipe-audio.js +66 -12
  288. package/dist/slices/rebuild/recipe-build.js +8 -4
  289. package/dist/slices/rebuild/recipe-cast.js +18 -0
  290. package/dist/slices/rebuild/recipe-checkpoints.js +11 -9
  291. package/dist/slices/rebuild/recipe-describe.js +93 -0
  292. package/dist/slices/rebuild/recipe-edit.js +13 -1
  293. package/dist/slices/rebuild/recipe-exports.js +67 -8
  294. package/dist/slices/rebuild/recipe-input-schema.js +35 -0
  295. package/dist/slices/rebuild/recipe-legacy.js +9 -0
  296. package/dist/slices/rebuild/recipe-loudness.js +45 -0
  297. package/dist/slices/rebuild/recipe-model.js +25 -6
  298. package/dist/slices/rebuild/recipe-pauses.js +7 -0
  299. package/dist/slices/rebuild/recipe-preparation.js +3 -3
  300. package/dist/slices/rebuild/recipe-provider-choice.js +11 -1
  301. package/dist/slices/rebuild/recipe-reference.js +15 -1
  302. package/dist/slices/rebuild/recipe-reviews.js +117 -0
  303. package/dist/slices/rebuild/recipe-save.js +4 -1
  304. package/dist/slices/rebuild/recipe-shorts.js +23 -3
  305. package/dist/slices/rebuild/recipe-text.js +114 -19
  306. package/dist/slices/rebuild/recipe-validation.js +14 -2
  307. package/dist/slices/rebuild/recipe-visual.js +96 -33
  308. package/dist/slices/rebuild/recipe-voices.js +286 -0
  309. package/dist/slices/rebuild/recipe-work.js +77 -6
  310. package/dist/slices/rebuild/recipe-youtube.js +2 -0
  311. package/dist/slices/rebuild/recovery-conflict.js +7 -3
  312. package/dist/slices/rebuild/recovery-model.js +3 -0
  313. package/dist/slices/rebuild/recovery-selection.js +28 -2
  314. package/dist/slices/rebuild/recovery.js +35 -17
  315. package/dist/slices/rebuild/repo.js +3 -3
  316. package/dist/slices/rebuild/retry.js +18 -0
  317. package/dist/slices/rebuild/review-redo.js +125 -0
  318. package/dist/slices/rebuild/runtime-actions.js +5 -0
  319. package/dist/slices/rebuild/runtime-admission.js +4 -1
  320. package/dist/slices/rebuild/runtime-animate.js +4 -4
  321. package/dist/slices/rebuild/runtime-article.js +5 -5
  322. package/dist/slices/rebuild/runtime-document.js +4 -4
  323. package/dist/slices/rebuild/runtime-export-bed.js +43 -0
  324. package/dist/slices/rebuild/runtime-export-edit.js +70 -11
  325. package/dist/slices/rebuild/runtime-export-inputs.js +52 -10
  326. package/dist/slices/rebuild/runtime-export-short.js +85 -0
  327. package/dist/slices/rebuild/runtime-export.js +84 -19
  328. package/dist/slices/rebuild/runtime-figure-card.js +87 -0
  329. package/dist/slices/rebuild/runtime-image.js +21 -2
  330. package/dist/slices/rebuild/runtime-local.js +148 -24
  331. package/dist/slices/rebuild/runtime-materialize.js +8 -0
  332. package/dist/slices/rebuild/runtime-narration-reuse.js +2 -1
  333. package/dist/slices/rebuild/runtime-narration-text.js +7 -7
  334. package/dist/slices/rebuild/runtime-pictures.js +28 -0
  335. package/dist/slices/rebuild/runtime-piece-label.js +27 -0
  336. package/dist/slices/rebuild/runtime-provider.js +126 -18
  337. package/dist/slices/rebuild/runtime-publication.js +21 -5
  338. package/dist/slices/rebuild/runtime-review.js +267 -0
  339. package/dist/slices/rebuild/runtime-run.js +17 -11
  340. package/dist/slices/rebuild/runtime-shorts.js +44 -17
  341. package/dist/slices/rebuild/runtime-store.js +62 -11
  342. package/dist/slices/rebuild/runtime-subtitles.js +72 -19
  343. package/dist/slices/rebuild/runtime-voices.js +103 -0
  344. package/dist/slices/rebuild/runtime-youtube.js +7 -6
  345. package/dist/slices/rebuild/service-readiness.js +3 -3
  346. package/dist/slices/rebuild/soften.js +49 -0
  347. package/dist/slices/rebuild/transition-repo.js +9 -2
  348. package/dist/slices/research/run.js +4 -4
  349. package/dist/slices/research/synthesis.js +2 -2
  350. package/dist/slices/reviews/model.js +105 -0
  351. package/dist/slices/reviews/outcome.js +22 -0
  352. package/dist/slices/reviews/repo.js +118 -0
  353. package/dist/slices/reviews/rules.js +63 -0
  354. package/dist/slices/reviews/verdict.js +71 -0
  355. package/dist/slices/reviews/view.js +30 -0
  356. package/dist/slices/revisions/adopt-content.js +5 -2
  357. package/dist/slices/revisions/adopt.js +3 -1
  358. package/dist/slices/revisions/downloads.js +7 -1
  359. package/dist/slices/revisions/image-plan.js +183 -0
  360. package/dist/slices/revisions/mutation-assets.js +10 -0
  361. package/dist/slices/revisions/mutation-cues.js +71 -0
  362. package/dist/slices/revisions/mutation-request.js +2 -1
  363. package/dist/slices/revisions/mutations.js +97 -3
  364. package/dist/slices/revisions/schema.js +11 -1
  365. package/dist/slices/run-cost/limits.js +128 -0
  366. package/dist/slices/run-cost/meter.js +47 -0
  367. package/dist/slices/run-cost/panel.js +256 -0
  368. package/dist/slices/run-cost/pricing.js +95 -0
  369. package/dist/slices/run-cost/week.js +108 -0
  370. package/dist/slices/schedules/agenda.js +222 -0
  371. package/dist/slices/schedules/repo.js +58 -18
  372. package/dist/slices/schedules/scheduler.js +68 -17
  373. package/dist/slices/schedules/schema.js +179 -1
  374. package/dist/slices/schedules/service.js +43 -4
  375. package/dist/slices/schedules/similar.js +128 -0
  376. package/dist/slices/schedules/topic-list.js +163 -0
  377. package/dist/slices/schedules/topics.js +523 -0
  378. package/dist/slices/settings/first-run.js +106 -0
  379. package/dist/slices/settings/health.js +247 -0
  380. package/dist/slices/settings/key-guides.js +138 -0
  381. package/dist/slices/settings/key-test.js +93 -0
  382. package/dist/slices/settings/keys.js +10 -5
  383. package/dist/slices/settings/model-reach.js +52 -0
  384. package/dist/slices/settings/model.js +55 -1
  385. package/dist/slices/settings/models.js +5 -1
  386. package/dist/slices/settings/playback.js +15 -0
  387. package/dist/slices/settings/readiness.js +14 -2
  388. package/dist/slices/settings/repo.js +17 -3
  389. package/dist/slices/settings/tutorial-schema.js +5 -0
  390. package/dist/slices/settings/voices.js +64 -4
  391. package/dist/slices/settings/whats-new.js +64 -0
  392. package/dist/slices/shorts/captions.js +9 -0
  393. package/dist/slices/shorts/pick.js +3 -3
  394. package/dist/slices/shorts/prompts.js +1 -1
  395. package/dist/slices/shorts/render.js +63 -13
  396. package/dist/slices/storage/asset-name.js +3 -0
  397. package/dist/slices/storage/backup-export.js +48 -9
  398. package/dist/slices/storage/backup-format.js +38 -1
  399. package/dist/slices/storage/backup-import.js +191 -19
  400. package/dist/slices/storage/delete-project.js +7 -4
  401. package/dist/slices/storage/documents.js +87 -0
  402. package/dist/slices/storage/downloads.js +33 -1
  403. package/dist/slices/storage/files-location.js +531 -0
  404. package/dist/slices/storage/layout.js +14 -4
  405. package/dist/slices/storage/model.js +11 -0
  406. package/dist/slices/storage/portable.js +94 -12
  407. package/dist/slices/storage/reconcile.js +14 -1
  408. package/dist/slices/storage/repo.js +4 -1
  409. package/dist/slices/storage/schema.js +11 -0
  410. package/dist/slices/storage/trim.js +146 -0
  411. package/dist/slices/studio/disclosure.js +74 -0
  412. package/dist/slices/studio/model.js +30 -0
  413. package/dist/slices/studio/pack.js +211 -0
  414. package/dist/slices/studio/queue.js +69 -0
  415. package/dist/slices/studio/settings.js +170 -0
  416. package/dist/slices/style-preview/images.js +61 -0
  417. package/dist/slices/style-preview/narration.js +33 -0
  418. package/dist/slices/style-preview/render.js +148 -0
  419. package/dist/slices/style-preview/schema.js +59 -0
  420. package/dist/slices/style-preview/service.js +92 -0
  421. package/dist/slices/style-preview/settings.js +139 -0
  422. package/dist/slices/subtitles/captions.js +42 -9
  423. package/dist/slices/subtitles/model.js +22 -0
  424. package/dist/slices/subtitles/prepare.js +27 -16
  425. package/dist/slices/subtitles/transcript.js +1 -1
  426. package/dist/slices/thumbnail/run.js +7 -7
  427. package/dist/slices/trash/model.js +25 -0
  428. package/dist/slices/trash/service.js +273 -0
  429. package/dist/slices/tutorials/anchors.js +57 -0
  430. package/dist/slices/tutorials/library.js +185 -0
  431. package/dist/slices/uploads/repo.js +20 -0
  432. package/dist/slices/video/ambient-bed-schema.js +15 -0
  433. package/dist/slices/video/ambient-bed.js +95 -0
  434. package/dist/slices/video/ambient-mix.js +72 -0
  435. package/dist/slices/video/audio-inputs.js +2 -2
  436. package/dist/slices/video/cards.js +5 -2
  437. package/dist/slices/video/edit-list.js +23 -2
  438. package/dist/slices/video/edit-settings.js +13 -3
  439. package/dist/slices/video/ffmpeg.js +63 -9
  440. package/dist/slices/video/figure-card.js +492 -0
  441. package/dist/slices/video/figure-spans.js +51 -0
  442. package/dist/slices/video/plan.js +125 -13
  443. package/dist/slices/video/run.js +14 -12
  444. package/dist/slices/video/slideshow.js +39 -4
  445. package/dist/slices/voices/attribution.js +69 -0
  446. package/dist/slices/voices/audio-files.js +87 -0
  447. package/dist/slices/voices/audition.js +25 -0
  448. package/dist/slices/voices/cast.js +74 -0
  449. package/dist/slices/voices/grouping.js +59 -0
  450. package/dist/slices/voices/join.js +35 -0
  451. package/dist/slices/voices/languages.js +25 -0
  452. package/dist/slices/voices/model.js +218 -0
  453. package/dist/slices/voices/palette.js +26 -0
  454. package/dist/slices/voices/panel.js +91 -0
  455. package/dist/slices/voices/portraits.js +55 -0
  456. package/dist/slices/voices/script.js +136 -0
  457. package/dist/slices/voices/timing.js +58 -0
  458. package/dist/slices/youtube/answer.js +1 -1
  459. package/dist/slices/youtube/chapters.js +126 -0
  460. package/dist/slices/youtube/edits-repo.js +84 -0
  461. package/dist/slices/youtube/edits.js +89 -0
  462. package/dist/slices/youtube/placeholders.js +98 -0
  463. package/dist/slices/youtube/transcript.js +11 -4
  464. package/dist/tutorials/AI-CLIs.md +146 -0
  465. package/dist/tutorials/Backups.md +121 -0
  466. package/dist/tutorials/Calendar.md +103 -0
  467. package/dist/tutorials/Cast-Library.md +112 -0
  468. package/dist/tutorials/Channels.md +148 -0
  469. package/dist/tutorials/Costs-and-Run-Cost.md +136 -0
  470. package/dist/tutorials/Docker.md +171 -0
  471. package/dist/tutorials/Document-Themes.md +207 -0
  472. package/dist/tutorials/Editing-a-Project.md +204 -0
  473. package/dist/tutorials/FAQ.md +134 -0
  474. package/dist/tutorials/First-Launch-and-Welcome.md +153 -0
  475. package/dist/tutorials/Home-and-Projects.md +174 -0
  476. package/dist/tutorials/Home.md +119 -0
  477. package/dist/tutorials/Install.md +154 -0
  478. package/dist/tutorials/Intros-and-Outros.md +86 -0
  479. package/dist/tutorials/Keyboard-Shortcuts-and-Command-Palette.md +215 -0
  480. package/dist/tutorials/Library-Overview.md +75 -0
  481. package/dist/tutorials/Models.md +133 -0
  482. package/dist/tutorials/Multiple-Voices.md +161 -0
  483. package/dist/tutorials/Narration-Aliases-and-Glossary.md +129 -0
  484. package/dist/tutorials/Notifications.md +86 -0
  485. package/dist/tutorials/Other-Languages.md +110 -0
  486. package/dist/tutorials/PDF-Documents.md +100 -0
  487. package/dist/tutorials/Play-Images.md +135 -0
  488. package/dist/tutorials/Play-Narration.md +167 -0
  489. package/dist/tutorials/Play-Outputs.md +109 -0
  490. package/dist/tutorials/Play-Overview.md +216 -0
  491. package/dist/tutorials/Play-Title-and-Article.md +135 -0
  492. package/dist/tutorials/Play-Video-and-Style.md +143 -0
  493. package/dist/tutorials/Project-Page.md +228 -0
  494. package/dist/tutorials/Prompts.md +136 -0
  495. package/dist/tutorials/Providers-and-Keys.md +290 -0
  496. package/dist/tutorials/Publishing-to-YouTube.md +135 -0
  497. package/dist/tutorials/Recovery-and-Retries.md +141 -0
  498. package/dist/tutorials/Reviews-and-Checkpoints.md +143 -0
  499. package/dist/tutorials/Schedules.md +154 -0
  500. package/dist/tutorials/Settings-Reference.md +258 -0
  501. package/dist/tutorials/Shorts.md +116 -0
  502. package/dist/tutorials/Start-at-Login.md +126 -0
  503. package/dist/tutorials/Studio-Extension.md +146 -0
  504. package/dist/tutorials/Templates.md +146 -0
  505. package/dist/tutorials/Trash.md +87 -0
  506. package/dist/tutorials/Troubleshooting.md +149 -0
  507. package/dist/tutorials/Uninstalling-and-Moving.md +113 -0
  508. package/dist/tutorials/Updating-and-Patch-Notes.md +120 -0
  509. package/dist/tutorials/Video-Editing.md +135 -0
  510. package/dist/tutorials/Where-Your-Files-Live.md +149 -0
  511. package/dist/tutorials/YouTube-Description.md +132 -0
  512. package/dist/tutorials/Your-First-Short.md +125 -0
  513. package/dist/tutorials/_Footer.md +1 -0
  514. package/dist/tutorials/_Sidebar.md +69 -0
  515. package/dist/updater/service.js +66 -21
  516. package/dist/web/assets/index-DBLSfqA-.css +1 -0
  517. package/dist/web/assets/index-DFdIhmm0.js +307 -0
  518. package/dist/web/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  519. package/dist/web/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  520. package/dist/web/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  521. package/dist/web/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  522. package/dist/web/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  523. package/dist/web/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  524. package/dist/web/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  525. package/dist/web/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  526. package/dist/web/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  527. package/dist/web/assets/{pdf-BLF2i8c2.js → pdf-B9OY1ioX.js} +1 -1
  528. package/dist/web/index.html +2 -2
  529. package/package.json +5 -5
  530. package/dist/edge/docker-launch.js +0 -81
  531. package/dist/edge/docker-projects/activation.js +0 -35
  532. package/dist/edge/docker-projects/claims.js +0 -85
  533. package/dist/edge/docker-projects/committed.js +0 -40
  534. package/dist/edge/docker-projects/engine.js +0 -461
  535. package/dist/edge/docker-projects/install.js +0 -254
  536. package/dist/edge/docker-projects/prune.js +0 -66
  537. package/dist/edge/docker-projects/recover.js +0 -100
  538. package/dist/edge/docker-projects/state.js +0 -225
  539. package/dist/web/assets/index-CktpxlJd.js +0 -171
  540. package/dist/web/assets/index-DB-vOnGU.css +0 -1
  541. package/scripts/docker-run.sh +0 -3
  542. /package/dist/edge/{docker-projects → docker-install}/tree.js +0 -0
@@ -0,0 +1,154 @@
1
+ # Install
2
+
3
+ Slopify is a local web app you start from a terminal. It runs on your own computer, opens in your browser at `http://127.0.0.1:6969`, and uses your own provider keys or the AI command-line tools you are already signed in to.
4
+
5
+ **Where to find it:** a terminal on your computer (PowerShell or Windows Terminal on Windows, Terminal on macOS, any shell on Linux).
6
+
7
+ ## What you need
8
+
9
+ | Requirement | Details |
10
+ | --- | --- |
11
+ | Node.js | Version 26 or newer, with npm (it comes with Node). Get it from nodejs.org. |
12
+ | Operating system | Windows, macOS or Linux for the normal install. The managed Docker install is Linux only (see [Docker](Docker)). |
13
+ | ffmpeg | Nothing to install: Slopify brings its own copy. See [ffmpeg](#ffmpeg) below. |
14
+ | Disk space | Enough for your videos. Every project keeps its video, images, narration and working files. The caption model is a 95 MB download. |
15
+ | Keys or CLIs | Text and images can come from Claude Code, Codex or Gemini CLI, or from API keys. Narration can use a voice provider key, or your computer's own speech for free (the System voice; on Linux, install `espeak-ng`). See [Providers and Keys](Providers-and-Keys) and [AI CLIs](AI-CLIs). |
16
+
17
+ ## Choose how to run it
18
+
19
+ There are three ways. All three give you the same app.
20
+
21
+ | Way | Command | Good for |
22
+ | --- | --- | --- |
23
+ | Run with npx | `npx @gentbajko/slopify@latest` | Trying it, or always starting the newest version. Nothing is installed globally. |
24
+ | Install with npm | `npm install -g @gentbajko/slopify`, then `slopify` | A permanent `slopify` command. |
25
+ | Docker (Linux) | `npx @gentbajko/slopify@latest --docker` | Keeping Slopify running in the background, restarting with Docker. See [Docker](Docker). |
26
+
27
+ ## Start Slopify with npx
28
+
29
+ 1. Open a terminal.
30
+ 2. Run `npx @gentbajko/slopify@latest`.
31
+ 3. Wait while npm downloads the package the first time. Slopify then checks ffmpeg, starts, and prints where everything is:
32
+ - `Slopify is running at http://127.0.0.1:6969`
33
+ - `Slopify data directory:` the hidden data folder (normally `~/.slopify`)
34
+ - `Projects:` where your project folders are (on a new install, `Documents/Slopify/Projects`)
35
+ - `Database:` and `Logs:` inside the data folder
36
+ 4. Your browser opens at `http://127.0.0.1:6969`. If it doesn't, open that address yourself.
37
+ 5. On an interactive terminal Slopify asks once: `Start Slopify when you log in? (Y/n)`. Press Enter for yes, or type `n`. See [Start at Login](Start-at-Login).
38
+ 6. Keep the terminal open while you use Slopify. Press `Ctrl+C` in it to stop Slopify.
39
+
40
+ Continue with [First Launch and Welcome](First-Launch-and-Welcome).
41
+
42
+ ## Install it with npm
43
+
44
+ 1. Run `npm install -g @gentbajko/slopify`.
45
+ 2. Start it any time with `slopify`. The same flags work: `slopify --port 7070`.
46
+
47
+ In-app updates work for both npx and a global install: the new version is installed inside the data folder and later starts take it from there. See [Updating and Patch Notes](Updating-and-Patch-Notes).
48
+
49
+ ## Commands
50
+
51
+ | Command | What it does |
52
+ | --- | --- |
53
+ | `npx @gentbajko/slopify@latest` | Starts Slopify. |
54
+ | `npx @gentbajko/slopify@latest update` | Updates a running Slopify to the newest version, the same way the in-app update button does. It only works while Slopify is running. If you have a Docker install, it updates that one instead. |
55
+ | `npx @gentbajko/slopify@latest --docker` | Installs Slopify in Docker, or re-applies changed Docker settings. Same as `install --docker`. |
56
+ | `npx @gentbajko/slopify@latest update --docker` | Updates the Docker install. |
57
+
58
+ Any other word after the package name is refused with a message listing these commands. Without `--docker` there is nothing to install: `install` on its own is refused.
59
+
60
+ `update` for a normal install needs Slopify to be running. If it isn't, the command says so: start Slopify first, and add `--port <number>` if it runs on another port.
61
+
62
+ ## Options
63
+
64
+ A flag beats the environment variable, and the variable beats the default.
65
+
66
+ | Flag | Variable | Default | What it does |
67
+ | --- | --- | --- | --- |
68
+ | `--port` | `SLOPIFY_PORT` | `6969` | The port Slopify listens on. A whole number from 1 to 65535. |
69
+ | `--host` | `SLOPIFY_HOST` | `127.0.0.1` | The address it binds to. |
70
+ | `--data-dir` | `SLOPIFY_DATA_DIR` | `~/.slopify` | Where the database, settings, keys, logs and caption models live. A relative path is taken from the folder you run the command in. |
71
+ | `--no-open` | `SLOPIFY_NO_OPEN` | opens a browser | Doesn't open a browser tab. For the variable, any value except empty, `0` or `false` counts as on. |
72
+ | `--autostart` / `--no-autostart` | | asks once | Turns [Start at Login](Start-at-Login) on or off without asking. Useful in scripts. |
73
+ | | `SLOPIFY_FFMPEG` | the bundled ffmpeg | The full path of another ffmpeg to use. |
74
+ | | `SLOPIFY_NO_MODEL_PREFETCH` | downloads at start | Set to `1` to skip fetching the 95 MB caption model when Slopify starts. It is then fetched the first time a video needs captions. |
75
+
76
+ Options that only work with `--docker`: `--projects-dir <folder>`, `--host-cli=off` and `--accept-host-cli`. See [Docker](Docker). With `--docker`, `--host` and `--data-dir` are refused, because the Docker version always listens on localhost and keeps its data in a Docker volume.
77
+
78
+ ### A second install or a test install
79
+
80
+ Start Slopify with its own data folder, for example `npx @gentbajko/slopify@latest --data-dir ~/slopify-test --port 7070`. A new install with its own data folder keeps its project files inside that folder instead of in `Documents/Slopify`, so it never shares files with your main install. See [Where Your Files Live](Where-Your-Files-Live).
81
+
82
+ Only one Slopify can use a data folder at a time. A second one on the same folder stops with `Slopify is already running on this data directory`.
83
+
84
+ ## Keep it on 127.0.0.1
85
+
86
+ Slopify has no login. Whoever can reach its port controls the app and every provider key saved in it. The default `127.0.0.1` means only your own computer can reach it.
87
+
88
+ If you start it with another `--host`, the terminal prints a warning: `WARNING: bound to <host> - anyone who reaches this port controls the app and its keys (no login).` Only do that on a network you trust completely.
89
+
90
+ ## ffmpeg
91
+
92
+ Slopify makes its videos with ffmpeg, and you don't need to install it.
93
+
94
+ - A normal install gets a tested ffmpeg for your system through npm when the package is installed. Slopify never uses an ffmpeg from your `PATH` on its own.
95
+ - Before starting, Slopify checks that ffmpeg runs. If the install-time download is missing, it downloads the same build into `<data folder>/bin/`, with its licence and source notice, and reuses it on later starts.
96
+ - The Docker image already contains ffmpeg.
97
+
98
+ To use your own ffmpeg, set `SLOPIFY_FFMPEG` to its full path:
99
+
100
+ ```sh
101
+ SLOPIFY_FFMPEG=/usr/bin/ffmpeg npx @gentbajko/slopify@latest
102
+ ```
103
+
104
+ In Windows PowerShell:
105
+
106
+ ```powershell
107
+ $env:SLOPIFY_FFMPEG = 'C:\tools\ffmpeg\bin\ffmpeg.exe'
108
+ npx @gentbajko/slopify@latest
109
+ ```
110
+
111
+ The bundled ffmpeg is a separate program under the GPL-3.0-or-later licence. Slopify runs it as a separate process and does not link to it.
112
+
113
+ ## The caption model
114
+
115
+ Captions are timed against the narration by a speech model that runs on your computer, at no cost. The English model (95 MB) is downloaded when Slopify starts, in the background, so a run never waits for it later. It is kept in `<data folder>/models/`. Set `SLOPIFY_NO_MODEL_PREFETCH=1` to skip the download at start. Other languages use a separate model that is downloaded the first time a project in that language needs it.
116
+
117
+ ## Anonymous usage stats
118
+
119
+ The first time you open Slopify it shows **Anonymous usage stats**, a notice listing exactly what is counted, with one button, **Got it**. These counts feed the live totals on slopify.stream.
120
+
121
+ | Tracked | Never tracked |
122
+ | --- | --- |
123
+ | Tokens in and out per stage, with provider and model | API keys |
124
+ | Audio seconds, images, thumbnails, videos rendered | Prompt bodies and keyword values |
125
+ | PDF documents, YouTube descriptions and shorts made | Titles, article or research text |
126
+ | Projects created, and that this machine installed Slopify | Files and file names |
127
+ | The time each of those happened | OS, locale, hardware |
128
+
129
+ Each report carries a random id of its own, a random id for this machine and the Slopify version. There is no setting to turn it off. Settings → **Usage** shows the same counters for your machine only.
130
+
131
+ ## If it doesn't start
132
+
133
+ | Message | What to do |
134
+ | --- | --- |
135
+ | `Port 6969 is already in use by another program (maybe another Slopify)` | Stop the other program, or start on another port: `npx @gentbajko/slopify --port 7070`. |
136
+ | `Slopify is not allowed to use port …` | Pick a port above 1024 with `--port`. |
137
+ | `Slopify can't listen on … because that address doesn't belong to this machine` | Leave out `--host` and `SLOPIFY_HOST`. |
138
+ | `Slopify can't write to its data folder …` | Make sure your user owns that folder, or choose another with `--data-dir <folder>`. |
139
+ | `The disk is full` | Free some space and start again. |
140
+ | `Slopify could not download and start ffmpeg` | Check your connection and whether antivirus quarantined it, or set `SLOPIFY_FFMPEG`. |
141
+ | `Slopify is already running on this data directory` | Use the Slopify that is already running, or close it first. If none is running, delete the lock file the message names. |
142
+
143
+ More in [Troubleshooting](Troubleshooting).
144
+
145
+ ## Related pages
146
+
147
+ - [Docker](Docker)
148
+ - [First Launch and Welcome](First-Launch-and-Welcome)
149
+ - [Where Your Files Live](Where-Your-Files-Live)
150
+ - [Start at Login](Start-at-Login)
151
+ - [Updating and Patch Notes](Updating-and-Patch-Notes)
152
+ - [Providers and Keys](Providers-and-Keys)
153
+ - [AI CLIs](AI-CLIs)
154
+ - [Troubleshooting](Troubleshooting)
@@ -0,0 +1,86 @@
1
+ # Intros and Outros
2
+
3
+ Intros and outros are short narrated passages read before and after the body of a video, in the same voice: a greeting, a series tagline, a sign-off, a call to subscribe. Write one as fixed text, or as an instruction the text model answers fresh for each video.
4
+
5
+ **Where to find it:** **Library → Intros & Outros**. Pick them on Play in the **Intro** and **Outro** pickers (Narration row → **Audio Advanced**), in **Edit project**, or as a channel default in the channel's brand kit.
6
+
7
+ ## Text or LLM
8
+
9
+ Each entry has a **Mode**:
10
+
11
+ | Mode | What happens | Extra cost |
12
+ |---|---|---|
13
+ | **Text** (default) | "Text is narrated as written." Keywords are filled in, with no extra call. | Only the voice request |
14
+ | **LLM** | "LLM is an instruction whose answer is narrated." The body goes to the project's text model with the title, the keyword values and the article, and the answer is narrated. The run then needs an LLM. | One text call per entry, plus the voice request |
15
+
16
+ Either way the intro or outro is narrated as its own audio file with the run's voice: one voice request each.
17
+
18
+ ## Write an intro or outro
19
+
20
+ 1. Open **Library → Intros & Outros**.
21
+ 2. Choose **Intros** or **Outros** with **Entry category**.
22
+ 3. Press **New intro or outro**.
23
+ 4. Fill in the editor:
24
+ - **Name**: what Play and Edit project list it by. Up to 200 characters, unique within its category.
25
+ - **Category**: **Intro** (read before the body) or **Outro** (read after it). You can change it later.
26
+ - **Mode**: **Text** or **LLM**.
27
+ - **Body**: in Text mode, the words the narrator says; in LLM mode, the instruction whose answer is said. Each `{{keyword}}` becomes a field on Play, just like in prompts.
28
+ 5. Press **Save** (or `Ctrl+S`).
29
+
30
+ ### Examples
31
+
32
+ A text intro:
33
+
34
+ ```
35
+ Welcome back to the channel. Tonight: {{Topic}}. Get comfortable.
36
+ ```
37
+
38
+ An LLM outro:
39
+
40
+ ```
41
+ Write two sentences that close this video warmly. Mention one idea from the article
42
+ the listener can think about tonight. Do not ask them to subscribe.
43
+ ```
44
+
45
+ ## Use one in a video
46
+
47
+ **On Play:**
48
+
49
+ 1. Open the **Narration** row with **Change**, then open **Audio Advanced**.
50
+ 2. Pick an entry in **Intro** and, if you like, in **Outro**. **Off** reads none.
51
+ 3. Fill in any new keyword fields the entry added.
52
+
53
+ **From the Library:** press **Use in Play** on the entry's row. It is picked in your open Play draft and Play opens on its field.
54
+
55
+ **For a whole channel:** open **Channels** → the channel → **Brand** and set **Intro** and **Outro** under the brand kit. Every video of that channel whose template has no intro or outro of its own gets them. See [Channels](Channels).
56
+
57
+ **In a finished project:** open **Edit project**, pick a different intro or outro, and save. Only the parts that change are remade. See [Editing a project](Editing-a-Project).
58
+
59
+ ## Edit, duplicate, delete and history
60
+
61
+ Entries have the same row actions as prompts:
62
+
63
+ | Action | What it does |
64
+ |---|---|
65
+ | **Edit** | Opens the editor. Change it and press **Save**. |
66
+ | **Duplicate** | Opens the editor with a copy to rename and save. |
67
+ | **Use in Play** | Picks the entry in the open Play draft. |
68
+ | **History** | Versions, compare and **Used by**, exactly as for prompts. See [Prompts](Prompts#history-and-versions). |
69
+ | **Delete** | Asks first, then moves it to **Settings → Trash** for 30 days. |
70
+
71
+ Use **Search intros and outros** (`/`) to find one by name. The pencil beside a name renames the entry in its row, with **Undo** on the notice; see [Rename in the row](Library-Overview#rename-in-the-row).
72
+
73
+ A project keeps its own copy of the intro and outro it started with, so editing an entry here changes only runs started later. Templates keep their own copies too.
74
+
75
+ ## Tips
76
+
77
+ - Keep intros short. Viewers leave during long openings; two sentences is plenty.
78
+ - An LLM outro that summarises the video costs one small text call and never repeats itself across videos.
79
+ - Put the channel's standard intro and outro in the brand kit instead of every template.
80
+
81
+ ## Related pages
82
+
83
+ - [Narration](Play-Narration)
84
+ - [Prompts](Prompts)
85
+ - [Channels](Channels)
86
+ - [Library overview](Library-Overview)
@@ -0,0 +1,215 @@
1
+ # Keyboard Shortcuts and Command Palette
2
+
3
+ The command palette lets you reach every screen, every project and the frequent actions by typing, without hunting for buttons. Keyboard shortcuts cover the most common moves. This page lists both.
4
+
5
+ **Where to find it:** press `Ctrl+K` (`Cmd+K` on a Mac) anywhere, or choose **Search or run a command** at the top of the sidebar. Press `?` for the list of keyboard shortcuts.
6
+
7
+ ## Use the command palette
8
+
9
+ 1. Press `Ctrl+K`.
10
+ 2. Type a few letters of what you want, such as `set` for **Open settings** or `back` for **Back up now**. Letters only need to appear in order, so `nwv` finds **New video**. Commands also match other words, for example `keys` finds **Open settings**. Several words match in any order across the command's name, the project it acts on and its other words: `cleopatra regenerate image 3` finds **Regenerate image 3 in Cleopatra**.
11
+ 3. Use `Up` and `Down` to move through the list, `Home` and `End` to jump to the first or last, and `Enter` to run the highlighted command. You can also click a command.
12
+ 4. Press `Esc` (or `Ctrl+K` again) to close the palette without running anything.
13
+
14
+ The palette lists what you can do from where you are. Commands about the screen in front of you (the project you have open, for example) are listed first, with the project or item name beside them. Some commands are only found once you type: every project by name, and New schedule and Add to calendar from other screens (see [From anywhere](#from-anywhere)). If nothing matches, it says so; try fewer letters or another word.
15
+
16
+ A command that has a shortcut shows its keys beside it.
17
+
18
+ ## Keyboard shortcuts
19
+
20
+ Press `?` anywhere (outside a text field) to see **Keyboard shortcuts**: every key that works on the screen you are on. `Ctrl` works as `Cmd` on a Mac. Keys without `Ctrl` wait while you type in a field, so typing a `c` into a title never opens Play. Two keys like `G` then `H` are pressed one after the other.
21
+
22
+ | Keys | Where | What it does |
23
+ |---|---|---|
24
+ | `Ctrl+K` / `Cmd+K` | Anywhere | Opens or closes the command palette. |
25
+ | `?` | Anywhere | Shows the keyboard shortcuts. |
26
+ | `C` | Anywhere | **New video** (opens Play). |
27
+ | `G` then `H` | Anywhere | Go to Home. |
28
+ | `G` then `P` | Anywhere | Go to Projects. |
29
+ | `G` then `C` | Anywhere | Go to the Calendar. |
30
+ | `G` then `S` | Anywhere | Go to Schedules. |
31
+ | `G` then `L` | Anywhere | Go to the Library. |
32
+ | `G` then `K` | Anywhere | Go to Channels. |
33
+ | `G` then `,` | Anywhere | Go to Settings. |
34
+ | `/` | Projects, Library → Prompts, Library → Intros & Outros | Puts the cursor in the list's search box. |
35
+ | `Shift+N` | A project page | Runs the project's next action (Approve, Try again, Prepare upload…). |
36
+ | `Shift+D` | A project page | Copies the YouTube description. |
37
+ | `Ctrl+S` / `Cmd+S` | The Library editors (prompts, intros and outros, document themes) | Saves, even while you are typing in a field. |
38
+ | `Up` / `Down`, `Home` / `End`, `Enter`, `Esc` | Command palette | Move, jump, run, close. |
39
+ | `Ctrl+Enter` / `Cmd+Enter` | Play | Opens **Review the whole setup** without starting a run. |
40
+ | `Space` or `K`, `J` / `L`, `Left` / `Right`, `M`, `F`, `C`, `0`–`9` | Inside a video or audio player | Play and pause, jump 10 seconds, jump 5 seconds, mute, full screen, captions, jump to a tenth of the way. See [Project Page](Project-Page#the-players). |
41
+ | `Enter` / `Shift+Enter` | Search box in a reading view (research, article, narration text, patch notes) | Next match / previous match. |
42
+ | `Left` / `Right` | Image viewer (an enlarged image or thumbnail on a project) | Previous / next image. |
43
+ | `Esc` | Dialogs, side drawers, the image viewer | Closes them. |
44
+ | `Esc` | Adding another title on Play | Cancels adding it. |
45
+ | `Esc` | Guided tour | Closes an open picker first; press again to leave the tour. |
46
+ | `Left` / `Right`, `Home` / `End` | Tabs (for example on a project page) | Move between the tabs. |
47
+ | `Left` / `Right` | Segmented choices (for example **Appearance** in Settings) | Move between the options. |
48
+
49
+ Everything else is in the palette.
50
+
51
+ ## Palette commands
52
+
53
+ Commands are grouped under headings in the palette. Group names below are the headings you see.
54
+
55
+ ### Go to (everywhere)
56
+
57
+ | Command | What it does |
58
+ |---|---|
59
+ | **Open home** | Goes to Home. |
60
+ | **Open projects** | Goes to Projects. |
61
+ | **Open channels** | Goes to Channels. |
62
+ | **Open schedules** | Goes to Schedules. |
63
+ | **Open calendar** | Goes to the Calendar. |
64
+ | **Open library** | Goes to the Library (Prompts). |
65
+ | **Open settings** | Goes to Settings. |
66
+ | **Open usage and costs** | Goes to Settings → Usage. |
67
+ | **Show patch notes** | Goes to Settings → Patch notes. |
68
+
69
+ ### Create and Channel (everywhere)
70
+
71
+ | Command | What it does |
72
+ |---|---|
73
+ | **New video** (`C`) | Opens Play. |
74
+ | **Show all channels** | Shows every channel's projects, schedules and costs. |
75
+ | **Switch to <channel>** | Shows one channel only. There is one command per channel. |
76
+
77
+ ### From anywhere
78
+
79
+ These are found once you type, from any screen:
80
+
81
+ | Command | What it does |
82
+ |---|---|
83
+ | **Open <project>** | Opens any project by name, for example `hypatia` finds **Open Hypatia of Alexandria**. |
84
+ | **Regenerate image N in <project>** | Type the project, the words and the number, for example `cleopatra regenerate image 3`. It opens that project on its Images and asks before redrawing, as the Regenerate button does. |
85
+ | **New schedule** | Opens Schedules with a new schedule started. |
86
+ | **Add to calendar** | Opens the Calendar with the Add to calendar form. |
87
+ | **Show keyboard shortcuts** (`?`) | Lists every shortcut that works here. |
88
+
89
+ ### Open a tutorial page
90
+
91
+ These tutorial pages are also inside Slopify, under **Help → Tutorials**. Type `tutorial` and a few words of a page's name, then pick **Open tutorial: <page>**, for example **Open tutorial: Install** or **Open tutorial: Shorts**. It opens that page at `/help/tutorials/<Page>`, where a search box finds any page. **Open tutorials** (under Go to) opens the tutorials' home page, and on the tutorials page `/` puts the cursor in that search box.
92
+
93
+ ### Play
94
+
95
+ On the Play screen.
96
+
97
+ | Command | What it does |
98
+ |---|---|
99
+ | **Start run** / **Queue N videos** | Starts the run, or queues every video on the page. If something is missing, it takes you to the field that needs it. |
100
+ | **Add a topic for another video** | Adds another title to make a batch. |
101
+ | **Save as template** | Saves the current setup as a template. |
102
+ | **Review the whole setup** (`Ctrl+Enter`) | Opens the full review. |
103
+ | **Pick a template** | Moves to the template picker. |
104
+ | **Change title and keywords**, **Change article**, **Change narration**, **Change images**, **Change video and style**, **Change outputs**, **Change reviews**, **Change channel** | Opens that part of the setup and scrolls to it. |
105
+
106
+ See [Play-Overview](Play-Overview).
107
+
108
+ ### This project
109
+
110
+ On a project's page. The project's title shows beside each command.
111
+
112
+ | Command | What it does |
113
+ |---|---|
114
+ | The next action (for example **Continue the run**, **Try images again**, **Prepare upload**) (`Shift+N`) | Runs what the project page suggests next. Shows **Show the project's next action** when there is none. |
115
+ | **Pause the run** / **Continue the run** | Pauses or resumes the run. |
116
+ | **Cancel the run** | Asks to cancel the run. |
117
+ | **Prepare upload** | Opens the upload pack once the video has been made. |
118
+ | **Edit project settings** | Opens Edit project. |
119
+ | **Choose what to remake** | Opens the review of everything a change affects. |
120
+ | The first outdated group / **Remake outdated outputs** | Remakes the first group of outdated outputs. Says so when nothing is outdated. |
121
+ | **Remake everything outdated** | Remakes all outdated outputs. |
122
+ | **Save as template** | Saves this project's setup as a template. |
123
+ | **Make my own copy** | On a sample project, makes an editable copy. |
124
+ | **Open the project folder** | Opens the project's folder on this computer. |
125
+ | **Regenerate image N** / **Regenerate on-screen card N** | Redraws that image, including images behind **Show all**. Type the number, for example `regenerate image 12`. It asks first, as the Regenerate button does. |
126
+ | **Regenerate the thumbnail** / **Regenerate thumbnail N** | Redraws a thumbnail. |
127
+ | **Copy description** (`Shift+D`) | Copies the YouTube description, placeholders filled. |
128
+ | **Copy tags** | Copies the YouTube tags. |
129
+
130
+ See [Project-Page](Project-Page) and [Video-Editing](Video-Editing).
131
+
132
+ ### Needs you and Ready to upload
133
+
134
+ On Home.
135
+
136
+ | Command | What it does |
137
+ |---|---|
138
+ | **Approve the article and record**, **Approve and draw the images**, **Approve and render** | Approves a run held at a review. One per held project; **Open the held run** when there is nothing to approve here. |
139
+ | **Mark uploaded** | Takes a finished video off the Ready to upload list. One per video. |
140
+
141
+ See [Home-and-Projects](Home-and-Projects) and [Reviews-and-Checkpoints](Reviews-and-Checkpoints).
142
+
143
+ ### Projects
144
+
145
+ On the Projects list.
146
+
147
+ | Command | What it does |
148
+ |---|---|
149
+ | **Show projects that need you** | Filters to projects waiting for you. |
150
+ | **Show videos ready to upload** | Filters to finished videos. |
151
+ | **Show failed projects** | Filters to failed projects. |
152
+ | **Search projects** (`/`) | Puts the cursor in the search box. |
153
+
154
+ ### Library
155
+
156
+ On any Library tab.
157
+
158
+ | Command | What it does |
159
+ |---|---|
160
+ | **New prompt** | Starts a new prompt (of the kind the tab shows). |
161
+ | **New intro or outro** | Starts a new intro or outro. |
162
+ | **New document theme** | Starts a new document theme. |
163
+ | **Open prompts**, **Open intros and outros**, **Open templates**, **Open document themes** | Switches tab. |
164
+ | **Save a setup as a template** | On the Templates tab: saves a Play setup as a template. |
165
+
166
+ See [Library-Overview](Library-Overview).
167
+
168
+ ### Channels
169
+
170
+ | Command | Where | What it does |
171
+ |---|---|---|
172
+ | **New channel** | Channels | Starts a new channel. |
173
+ | **Add to cast** | A channel's page | Adds a character, creature, place or object to its cast. |
174
+
175
+ See [Channels](Channels) and [Cast-Library](Cast-Library).
176
+
177
+ ### Schedules and Calendar
178
+
179
+ | Command | Where | What it does |
180
+ |---|---|---|
181
+ | **New schedule** | Schedules (from anywhere once you type it) | Starts a new schedule. |
182
+ | **Pause schedule** / **Resume schedule** | Schedules, with one open | Pauses or resumes it. |
183
+ | **Add to calendar** | Calendar (from anywhere once you type it) | Adds topics to the calendar. |
184
+ | **Show the calendar as weeks** / **Show the calendar as a list** | Calendar | Switches the view. |
185
+ | **Queue all suggested topics** | Calendar | Accepts every topic a schedule suggested. One per schedule with suggestions. |
186
+
187
+ See [Schedules](Schedules) and [Calendar](Calendar).
188
+
189
+ ### Settings
190
+
191
+ In Settings.
192
+
193
+ | Command | What it does |
194
+ |---|---|
195
+ | **Check all providers** | Opens Providers and runs Check all. |
196
+ | **Back up now** | Opens Backups and starts a backup. |
197
+ | **Download diagnostics** | Saves `slopify-diagnostics.json`. |
198
+ | **Export everything** | In Backup & storage: downloads the full export. |
199
+ | **Check for new models** | In Models: checks the catalogue now. |
200
+
201
+ See [Settings-Reference](Settings-Reference).
202
+
203
+ ## Tips
204
+
205
+ - The fastest way around: `Ctrl+K`, a few letters, `Enter`. For example `Ctrl+K`, `usage`, `Enter` opens your usage. For the main screens, `G` and a letter is faster still.
206
+ - On a project, `Ctrl+K` lists that project's commands first, so the next action is a few letters away (try `next` or `continue`).
207
+ - On Play, `Ctrl+Enter` is a safe way to check everything: it opens the review and never starts a run.
208
+
209
+ ## Related pages
210
+
211
+ - [Play-Overview](Play-Overview)
212
+ - [Project-Page](Project-Page)
213
+ - [Home-and-Projects](Home-and-Projects)
214
+ - [Settings-Reference](Settings-Reference)
215
+ - [FAQ](FAQ)
@@ -0,0 +1,75 @@
1
+ # Library Overview
2
+
3
+ The Library holds the reusable pieces your videos are made from: prompts, intros and outros, templates, PDF document themes and narration aliases. Write a piece once and pick it on Play for every video that needs it.
4
+
5
+ **Where to find it:** **Library** in the sidebar. It opens on **Prompts**; the tabs across the top switch sections.
6
+
7
+ ## The five tabs
8
+
9
+ | Tab | What it holds | Page |
10
+ |---|---|---|
11
+ | **Prompts** | The instructions for articles, images, thumbnails, narration cues, YouTube descriptions, shorts, reviews and multi-voice scripts, each with `{{keywords}}` where the subject goes | [Prompts](Prompts) |
12
+ | **Intros & Outros** | Short narrated openings and closings, written as text or generated by the text model | [Intros and outros](Intros-and-Outros) |
13
+ | **Templates** | Saved Play setups, and **Add pack** for the starter packs | [Templates](Templates) |
14
+ | **Documents** | Document themes: the look of the PDF made from the article | [Document themes](Document-Themes) |
15
+ | **Aliases** | Words the narrator says differently from how they are written, such as Dr. as Doctor | [Aliases and glossary](Narration-Aliases-and-Glossary) |
16
+
17
+ ## What every Library list has
18
+
19
+ Prompts, Intros & Outros and Templates share the same row actions, in the same order:
20
+
21
+ | Action | What it does |
22
+ |---|---|
23
+ | **Edit** | Opens the item in its editor. (A template has no editor: Edit picks it and shows its keywords beside the list.) |
24
+ | **Duplicate** | Opens the editor with a copy, for you to rename and save. (A template is copied as `<name> copy` at once.) |
25
+ | **Use in Play** | Picks the item in your open Play draft and opens Play on the field that shows it. An article prompt switches the article to Generate, an image prompt is ticked with one image, a thumbnail prompt switches the thumbnail to From prompt, and a Description or Shorts prompt turns that step on. The rest of the draft stays as it was. The button is off while Play is starting a run. |
26
+ | **History** | Opens the item's versions, a side-by-side compare, and what uses it. See [Prompts](Prompts#history-and-versions). |
27
+ | **Delete** | Asks first, then moves the item to **Settings → Trash** for 30 days. See [Trash](Trash). |
28
+
29
+ Your document themes have Edit, Duplicate and Delete, but no Use in Play or History. Built-in themes can only be copied.
30
+
31
+ A press anywhere on a row picks it; the row's own buttons still do their own thing. Beside each list, the selected item shows its text, its **Keywords**, what it is **Used by**, and its latest change.
32
+
33
+ ### Rename in the row
34
+
35
+ In Prompts, Intros & Outros and Templates, the pencil beside a name (**Rename <name>**) turns the name into a field. Type the new name and press **Save name** or Enter; `Esc` or **Cancel** keeps the old one. Only the name changes, and the notice ("Renamed “A” to “B”.") has **Undo**. A prompt's or entry's rename is one History version; a template's is a new template version.
36
+
37
+ ### Save with Ctrl+S
38
+
39
+ In the prompt, intro and outro and document theme editors, `Ctrl+S` (`Cmd+S`) saves, even while you are typing in a field.
40
+
41
+ ## Search and filter
42
+
43
+ - **Prompts** has a **Prompt kind** picker (Article, Image, Thumbnail, Narration Preparation, YouTube Description, Shorts, Review, Script (speakers)) and **Search prompts**.
44
+ - **Intros & Outros** has **Search intros and outros**.
45
+ - **Templates** has **Show templates of** to filter by channel.
46
+ - Press `/` on Prompts or Intros & Outros to jump to the search box.
47
+
48
+ ## Command palette shortcuts
49
+
50
+ Press `Ctrl+K` anywhere and type to find **New prompt**, **New intro or outro**, **New document theme**, **Open prompts**, **Open intros and outros**, **Open templates** or **Open document themes**. See [Keyboard and Ctrl+K](Keyboard-Shortcuts-and-Command-Palette).
51
+
52
+ ## Starter packs
53
+
54
+ **Library → Templates → Add pack** adds a ready-made set for one kind of channel: prompts, a suggested voice and a Play template. There are four packs: Sleep lore, True crime, History and Science explainers. Adding one twice changes nothing, and a pack never replaces a prompt or template of yours with the same name. See [Templates](Templates#starter-packs).
55
+
56
+ ## Fonts
57
+
58
+ The Library has no separate font manager. Fonts live where they are used:
59
+
60
+ - **Caption (subtitle) fonts:** upload your own in the subtitle font picker on Play's video style settings. Uploaded fonts then appear in a channel's brand kit too. See [Video and style](Play-Video-and-Style) and [Channels](Channels).
61
+ - **PDF fonts:** each document theme picks its fonts from the bundled Cinzel and the fonts built into every PDF reader (Times, Helvetica, Courier). See [Document themes](Document-Themes).
62
+
63
+ Uploaded fonts travel in backups, but templates leave them out.
64
+
65
+ ## How changes reach your videos
66
+
67
+ A project copies the prompts, intros, outros, aliases and theme settings it uses when it starts. Editing the Library later changes only runs started afterwards. Templates also keep their own copies, so save a template again to pick up a changed prompt. In a project, **Edit project** shows the project's own copy of each prompt: pick the Library prompt again (or press **Use the Library version**) to bring in your latest edit, and press **Update from Library** under narration aliases to copy the current alias list. See [Editing a project](Editing-a-Project).
68
+
69
+ ## Related pages
70
+
71
+ - [Prompts](Prompts)
72
+ - [Intros and outros](Intros-and-Outros)
73
+ - [Templates](Templates)
74
+ - [Document themes](Document-Themes)
75
+ - [Aliases and glossary](Narration-Aliases-and-Glossary)