@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,171 @@
1
+ # Docker
2
+
3
+ On Linux you can have Slopify run in Docker in the background, restarting whenever Docker does. One command installs it, one command updates it, and your project files stay in a normal folder on your computer.
4
+
5
+ **Where to find it:** a terminal, `npx @gentbajko/slopify@latest --docker`. Inside the app, Settings → **Backup & storage** → **Your files** and Settings → **General** show the Docker-specific parts.
6
+
7
+ ## What you need
8
+
9
+ - Linux with Docker Engine and the Docker Compose plugin.
10
+ - Node 26 or newer on the host, to run the installer.
11
+ - Your normal user account, with access to Docker. Don't run the installer with `sudo`. If Docker says permission denied, add yourself to the `docker` group (`sudo usermod -aG docker $USER`), then log out and back in.
12
+
13
+ Refused setups: Docker Desktop, a remote Docker daemon, and rootful Docker with `userns-remap`. Rootless Docker works; the container then runs as user `0:0`, which is you on the host.
14
+
15
+ On Windows, macOS or anything else, run Slopify without Docker ([Install](Install)), or run the compose file yourself ([below](#run-the-compose-file-yourself)).
16
+
17
+ ## Install Slopify in Docker
18
+
19
+ 1. Open a terminal as your normal user.
20
+ 2. Run `npx @gentbajko/slopify@latest --docker`.
21
+ 3. If Claude Code, Codex or Gemini CLI is installed on this computer, the installer asks once whether Slopify may use them (see [The host CLI bridge](#the-host-cli-bridge)). Answer `y` to allow it, or anything else to stop without changing anything. To use API keys only, run the command with `--host-cli=off` instead.
22
+ 4. It asks `Start Slopify when you log in? (Y/n)` once. See [Start at Login](Start-at-Login#docker).
23
+ 5. When it finishes it prints:
24
+ - `Slopify 3.0.0 is running at http://127.0.0.1:6969`
25
+ - `Project files on this machine:` your Projects folder
26
+ - `Backups on this machine:` your Backups folder, on a new install
27
+ - which AI tools it will use (the host CLIs, or API keys only)
28
+ 6. Open `http://127.0.0.1:6969` in your browser and continue with [First Launch and Welcome](First-Launch-and-Welcome).
29
+
30
+ Running the same command again with nothing changed does nothing, apart from starting the container if it was stopped.
31
+
32
+ ## What gets installed
33
+
34
+ | Part | What it is |
35
+ | --- | --- |
36
+ | Image | `ghcr.io/gentbajko/slopify:<version>`, pinned to the version of the installer you ran. It runs as a non-root user and already contains ffmpeg, the caption model and eSpeak NG, so the [System voice](Providers-and-Keys#the-system-voice) can narrate with no key. A healthcheck asks the app whether it is up. |
37
+ | Compose file | Copied to `~/.local/share/slopify/docker/slopify/` with a private `.env` beside it. One service, `slopify`, with `restart: unless-stopped`. |
38
+ | Port | `127.0.0.1:6969` on the host, localhost only. |
39
+ | Data volume | `slopify-data`, mounted at `/data`. It holds the database, provider keys, settings, logs and staging. It is declared external, so `docker compose down` (even with `-v`) never deletes it. |
40
+ | Projects folder | A folder on your computer, mounted at `/data/projects`. |
41
+ | Backups folder | A folder on your computer for scheduled backups, mounted at `/data/backups` (new installs from 3.0). |
42
+ | Host CLI bridge | Optional. A small helper that lets the container use your AI command-line tools. |
43
+ | `install.json` | In the same folder as the compose file. Records the version, port, project folder, user and whether the bridge is on. |
44
+
45
+ ## Where your files go
46
+
47
+ | Install | Projects | Backups |
48
+ | --- | --- | --- |
49
+ | New install (3.0 and later) | `<Documents>/Slopify/Projects` | `<Documents>/Slopify/Backups` |
50
+ | Installed before 3.0 | `~/Slopify/Projects` (kept as it was) | `~/Slopify/Projects/Backups` |
51
+
52
+ `<Documents>` is what `xdg-user-dir DOCUMENTS` answers, then `XDG_DOCUMENTS_DIR` in `~/.config/user-dirs.dirs`, then `~/Documents`.
53
+
54
+ Everything else (database, keys, logs) stays private in the `slopify-data` volume. See [Where Your Files Live](Where-Your-Files-Live).
55
+
56
+ ## Change a setting
57
+
58
+ Run the install again with the setting you want. Settings you leave out are remembered from `install.json`.
59
+
60
+ | Option | What it does |
61
+ | --- | --- |
62
+ | `--port <number>` | Serves Slopify on another host port, still on `127.0.0.1`. |
63
+ | `--projects-dir <folder>` | Uses another folder for project files. The files are copied and checked first; the old folder is left as it was. The new folder must be empty. A `~/` at the start is understood. |
64
+ | `--projects-dir documents` | Moves an existing install's projects to `<Documents>/Slopify/Projects`. |
65
+ | `--host-cli=off` | Turns the host CLI bridge off; Slopify uses API keys only. `off` is the only accepted value. |
66
+ | `--accept-host-cli` | Approves the host CLI bridge without the question, for scripts. |
67
+ | `--autostart` / `--no-autostart` | Answers the start-at-login question without asking. |
68
+
69
+ `--host` and `--data-dir` can't be combined with `--docker`.
70
+
71
+ For several Docker installs on one machine, give each its own `SLOPIFY_DOCKER_NAME` and `SLOPIFY_DOCKER_VOLUME` (letters, digits, dots, dashes and underscores). A second install's Documents folder is `<Documents>/Slopify/<name>/Projects`.
72
+
73
+ ## Move your projects into Documents
74
+
75
+ A container can't move its own mounted folder, so the installer does it from the host.
76
+
77
+ 1. Open Settings → **Backup & storage**. Under **Your files** you see the command to run, with **Copy command**.
78
+ 2. On the computer running Docker, run `npx @gentbajko/slopify@latest update --docker --projects-dir documents`. For another folder, use `--projects-dir <folder>`.
79
+ 3. The installer waits for running work to finish, copies the folder, checks the copy and remounts the new folder.
80
+ 4. The old folder is left as it was. Once your projects open fine, you can delete it.
81
+
82
+ Backups stay where they were (`Projects/Backups` on an older install).
83
+
84
+ ## Update the Docker install
85
+
86
+ Run `npx @gentbajko/slopify@latest update`. With a Docker install on your user account, `update` goes to it automatically (`update --docker` is the same). The **Update** button inside the Docker app shows this command, because a container can't replace itself.
87
+
88
+ The update is one transaction:
89
+
90
+ 1. It waits until nothing is generating. Pressing `Ctrl+C` while it waits changes nothing.
91
+ 2. It stops the container and copies the whole data volume into a recovery volume, `slopify-data-recovery-<id>`, checked file by file.
92
+ 3. It starts the new version and waits up to 2 minutes for it to answer as that version.
93
+ 4. On success it records the new version and removes the older recovery volume, so only the newest one is kept.
94
+ 5. If the new version doesn't answer, it removes it, copies your data back from the recovery volume and starts the previous version with its previous settings.
95
+
96
+ If an install or update is cut off (`Ctrl+C`, a reboot), the next run first finishes putting things back, then continues.
97
+
98
+ The recovery volume covers the database and settings, not your Projects folder. When you make your own backups, keep both the `slopify-data` volume and your Projects folder, or use [Backups](Backups).
99
+
100
+ ## The host CLI bridge
101
+
102
+ If Claude Code, Codex or Gemini CLI is installed on the host, Slopify in Docker can use them with the logins you already have. Nothing about your logins is copied into Docker.
103
+
104
+ - With your OK, the installer sets up a small helper, at the same version as the image, and keeps it in step on every install and update.
105
+ - The helper runs as the systemd user service `slopify-cli-bridge.service`, as you. User lingering is turned on so it runs at boot and after you log out.
106
+ - It talks to the container through a private socket in `~/.local/share/slopify/host-cli/share/`, with a token. There is no network port. Only that `share` folder is mounted into the container, read-only.
107
+ - Codex images, run cost and plan-limit readings work the same as without Docker.
108
+ - The helper only opens folders inside your Projects folder when you press **Open folder**.
109
+ - With the bridge off, Settings shows the CLIs as unavailable, and API keys still work.
110
+
111
+ Check or turn it off:
112
+
113
+ ```sh
114
+ systemctl --user status slopify-cli-bridge.service
115
+ systemctl --user disable --now slopify-cli-bridge.service
116
+ ```
117
+
118
+ Turning it off leaves Docker, your API providers, your data and your host logins as they are. Run the install again after installing or moving a CLI.
119
+
120
+ If the installer can't ask (no interactive terminal), it stops and tells you to rerun with `--accept-host-cli` or `--host-cli=off`. Using the bridge needs systemd user services (`systemctl --user`); without them, use `--host-cli=off`.
121
+
122
+ ## Coming from 2.5.0 or earlier
123
+
124
+ The first run of the new installer takes your existing installation over:
125
+
126
+ - It reuses the `slopify-data` volume by name; it is never deleted or recreated. A container on another volume is refused, with the `SLOPIFY_DOCKER_VOLUME` value to use.
127
+ - It keeps the project folder the old container used (`~/Slopify/Projects`, or your `--projects-dir`). A plain `docker run` container that kept projects inside the volume gets them copied, checked, to `~/Slopify/Projects`; the copy in the volume stays.
128
+ - The old container is stopped and renamed `slopify-previous-<id>` while the new one starts. If the new one fails, the old one is put back exactly as it was. It is removed once the new one is committed.
129
+ - If a 2.5.0 launcher update was left unfinished, nothing is changed. Run `npx @gentbajko/slopify@2.5.0 --docker` once so it finishes or undoes it, then install again.
130
+
131
+ ## Run the compose file yourself
132
+
133
+ Without the installer (any OS with Docker Compose), with API keys only, from a folder containing Slopify's `compose.yaml`:
134
+
135
+ ```sh
136
+ docker volume create slopify-data
137
+ mkdir -p ~/Documents/Slopify/Projects
138
+ SLOPIFY_PROJECTS_DIR=~/Documents/Slopify/Projects SLOPIFY_USER="$(id -u):$(id -g)" \
139
+ docker compose -f compose.yaml up -d
140
+ ```
141
+
142
+ | Variable | Default | What it does |
143
+ | --- | --- | --- |
144
+ | `SLOPIFY_PROJECTS_DIR` | none, required | The host folder for project files. |
145
+ | `SLOPIFY_IMAGE` | `ghcr.io/gentbajko/slopify:latest` | The image to run. |
146
+ | `SLOPIFY_PORT` | `6969` | The host port, bound to `127.0.0.1`. |
147
+ | `SLOPIFY_USER` | `1000:1000` | The user id the container runs as, so project files belong to you. |
148
+ | `SLOPIFY_VOLUME` | `slopify-data` | The data volume's name. It must exist (`docker volume create`). |
149
+ | `SLOPIFY_BACKUPS_DIR` | empty | The host folder for scheduled backups. Without it, backups stay in `Projects/Backups`. |
150
+ | `SLOPIFY_HOST_CLI_SHARE` | empty | The host CLI bridge's share folder, if you set one up. |
151
+ | `SLOPIFY_NAME` | `slopify` | The compose project and container name. |
152
+
153
+ Update by changing `SLOPIFY_IMAGE` and running `docker compose up -d` again. This way has no automatic recovery copy or rollback, and Settings → General can't tell whether Docker starts at login.
154
+
155
+ Keep the `127.0.0.1` binding. Anyone who reaches Slopify's port controls the app and its provider keys.
156
+
157
+ ## Tips
158
+
159
+ - Settings → **General** shows **Starts with Docker: yes / no / unknown**, read by the installer. Run the install command again after changing Docker's own start-up setting so it looks again.
160
+ - Port 6969 taken by a native Slopify? Stop the native one, or give Docker another port with `--port 7070`.
161
+ - To stop Slopify for a while without removing anything, run `docker stop slopify`; `docker start slopify` or the install command starts it again.
162
+
163
+ ## Related pages
164
+
165
+ - [Install](Install)
166
+ - [Where Your Files Live](Where-Your-Files-Live)
167
+ - [Start at Login](Start-at-Login)
168
+ - [Updating and Patch Notes](Updating-and-Patch-Notes)
169
+ - [Uninstalling and Moving](Uninstalling-and-Moving)
170
+ - [AI CLIs](AI-CLIs)
171
+ - [Backups](Backups)
@@ -0,0 +1,207 @@
1
+ # Document Themes
2
+
3
+ A document theme is the look of the PDF Slopify makes from the article: paper size, colours, fonts, spacing, the title page, contents, sources and closing pages, headers and page numbers. Slopify ships a built-in **Plain** theme. Copy it to make themes of your own, with a live preview as you edit.
4
+
5
+ **Where to find it:** **Library → Documents**. Pick a theme on Play's **Document** row, in **Edit project**, or as a channel's default in its brand kit.
6
+
7
+ ## Built-in and your own themes
8
+
9
+ | List | What it holds |
10
+ |---|---|
11
+ | **Built-in themes** | Looks that ship with Slopify and can't be changed. **Plain** is an unbranded flat page and what a new project gets. Press **Copy theme** to make an editable copy. |
12
+ | **Your themes** | Themes you made or copied. Each has **Edit**, **Duplicate** and **Delete**. |
13
+
14
+ A project keeps its own copy of the theme's settings. Editing or deleting a theme never changes a PDF already made or queued.
15
+
16
+ ## Make a theme
17
+
18
+ 1. Open **Library → Documents**.
19
+ 2. Press **New theme** (it starts from Plain), or pick a built-in theme and press **Copy theme**, or press **Duplicate** on one of your themes.
20
+ 3. Type a **Name** (up to 80 characters). This is what the Document row on Play and Edit project shows.
21
+ 4. Open the groups on the left and change what you like (every setting is listed below). The first two groups start open.
22
+ 5. Watch the **Preview** on the right. It lays out a sample article with this theme using the same renderer that makes a project's PDF, redrawn about half a second after you stop typing. It runs on your computer and costs nothing.
23
+ 6. Press **Save**. If a setting is out of range it is highlighted, and Save says "Fix the highlighted settings first."
24
+
25
+ ## Use a theme
26
+
27
+ - **On Play:** open the **Document** row (the PDF output) and pick the theme. See [PDF documents](PDF-Documents).
28
+ - **On a finished project:** open **Edit project** (the **Edit settings** button), pick the theme under **Document theme**, save, and remake the document.
29
+ - **For a channel:** set **Document theme** in the channel's brand kit. Videos whose template picks no theme get it. See [Channels](Channels).
30
+
31
+ ## Delete a theme
32
+
33
+ Press **Delete** on the theme and confirm. Projects that used it keep their own copy of its settings. A channel whose brand kit named it skips it.
34
+
35
+ ## Every setting
36
+
37
+ Sizes are in millimetres (mm) unless marked pt (points; 1 pt is about 0.35 mm). Defaults are the Plain theme's.
38
+
39
+ ### Page
40
+
41
+ | Setting | What it does | Default | Range |
42
+ |---|---|---|---|
43
+ | **Paper size** | A4 (210 × 297 mm) for most of the world, US Letter (216 × 279 mm) for the US and Canada. | A4 | |
44
+ | **Margins** | Blank space on every edge of each page. Wider margins mean shorter lines and more pages. | 22 mm | 5 to 60 |
45
+ | **Text starts at** | How far from the top the text begins on pages with the running header. Raise it when text crowds the header. | 32 mm | 5 to 80 |
46
+ | **Background** | **Parchment texture** stretches an aged-paper picture over every page. **Flat colour** fills each page with the Page colour, slightly darker at the edges. | Flat colour | |
47
+ | **Page colour** | The page colour with Flat colour. Type a hex code or use the picker. | `#fdfaf3` (warm off-white) | |
48
+
49
+ ### Colours
50
+
51
+ | Setting | What it colours | Default |
52
+ |---|---|---|
53
+ | **Heading colour** | Headings, drop caps, the brand name and links | `#1f3a5f` (dark blue) |
54
+ | **Body text colour** | Paragraphs, lists, bold and italic text. Keep it dark against the page. | `#1a1a1a` (near black) |
55
+ | **Muted colour** | Dates, bullets, quotes and the dotted lines on the contents page | `#555555` (mid grey) |
56
+ | **Faint colour** | The running header and page numbers | `#888888` (light grey) |
57
+
58
+ ### Fonts
59
+
60
+ Each font has three controls: the family, its weight or italic, and **Letter spacing (mm)** from −0.5 to 2. The families are **Cinzel** (bundled; four weights, no italics) and **Times**, **Helvetica** and **Courier** (built into every PDF reader).
61
+
62
+ | Setting | Where it is used | Default |
63
+ |---|---|---|
64
+ | **Body font** | Paragraphs and lists | Cinzel Regular, 0.01 mm |
65
+ | **Bold text font** | Bold words in paragraphs | Cinzel Bold, 0.02 mm |
66
+ | **Italic text font** | Italic words in paragraphs (Cinzel has no italics, so this borrows Times) | Times Italic, 0 mm |
67
+ | **Heading font** | The article's headings and the contents, sources and closing page titles | Cinzel Bold, 0.02 mm |
68
+ | **Chapter numbers and brand font** | The big number in a heading like "Chapter 3:" and the brand name on the title page | Cinzel Black, 0.03 mm |
69
+ | **Tagline and link font** | The tagline and linked line on the title page, and the link and closing line on the closing page | Cinzel Medium, 0.015 mm |
70
+ | **Drop cap font** | The large first letter after a heading | Cinzel Black, 0 mm |
71
+ | **Header and page number font** | The running header and page numbers | Times Regular, 0 mm |
72
+
73
+ ### Text sizes
74
+
75
+ | Setting | What it sizes | Default | Range |
76
+ |---|---|---|---|
77
+ | **Title size** | The article's title on the title page | 22 pt | 6 to 72 |
78
+ | **Brand size** | The brand name on the title page (only shown with a brand name) | 31 pt | 6 to 72 |
79
+ | **Top-level heading size** | Top-level headings and the contents, sources and closing page titles | 19 pt | 6 to 72 |
80
+ | **Second-level heading size** | Headings inside a top-level section | 17 pt | 6 to 72 |
81
+ | **Third-level heading size** | Third-level and deeper headings | 13 pt | 6 to 72 |
82
+ | **Body size** | Paragraphs, lists and closing page text. Bigger text means more pages. | 10.5 pt | 6 to 24 |
83
+ | **Date and word count size** | The date, word count and link lines under the title | 10 pt | 5 to 24 |
84
+ | **Header and page number size** | The running header and page numbers | 9 pt | 5 to 24 |
85
+
86
+ ### Spacing
87
+
88
+ | Setting | What it does | Default | Range |
89
+ |---|---|---|---|
90
+ | **Body line height** | Distance from one body line to the next | 8 mm | 3 to 20 |
91
+ | **Heading line height** | Between the lines of a wrapping top- or second-level heading | 11 mm | 3 to 30 |
92
+ | **Subheading line height** | Between the lines of a wrapping third-level heading | 9 mm | 3 to 30 |
93
+ | **After a paragraph** | Extra space after each paragraph, as a share of a body line (0.5 is half a line) | 0.5 | 0 to 3 |
94
+ | **Before a heading** | Extra space above each heading, as a share of a body line | 1 | 0 to 5 |
95
+ | **After a list item** | Extra space after each bulleted or numbered item | 0.2 | 0 to 3 |
96
+ | **List indent** | How far lists are pushed in from the left margin | 6 mm | 0 to 30 |
97
+ | **Quote indent** | How far quotes are pushed in | 8 mm | 0 to 40 |
98
+ | **Divider width** | The width of the short centred line a `---` in the article becomes | 30 mm | 0 to 150 |
99
+
100
+ ### Drop caps
101
+
102
+ | Setting | What it does | Default | Range |
103
+ |---|---|---|---|
104
+ | **Drop caps** | Starts the first paragraph after each heading with a large letter spanning several lines, as in printed books. | On | |
105
+ | **Drop cap lines tall** | How many body lines the letter spans | 3 lines | |
106
+ | **Drop cap letter size** | The letter's size as a multiple of the lines it spans | 3 | 1 to 5 |
107
+ | **Gap beside the drop cap** | Space between the letter and the text beside it | 4 mm | 0 to 20 |
108
+ | **Shortest paragraph** | A paragraph shorter than this many characters starts plainly | 50 | 0 to 2000 |
109
+ | **Room needed** | With less than this share of the page left, a paragraph starting with a drop cap moves to the next page (0.25 is a quarter) | 0.25 | 0 to 1 |
110
+
111
+ ### Title page
112
+
113
+ | Setting | What it does | Default | Range |
114
+ |---|---|---|---|
115
+ | **Brand from top** | Where the brand name sits, from the top edge | 60 mm | 10 to 200 |
116
+ | **Tagline below brand** | Distance from the brand name down to the tagline | 10 mm | 0 to 60 |
117
+ | **Title from top** | Where the article's title sits, from the top edge | 80 mm | 10 to 250 |
118
+ | **Title line height** | Between the lines of a wrapping title | 10 mm | 3 to 40 |
119
+ | **Details below title** | Distance from the title to the date and word count, when there is no cover picture | 20 mm | 0 to 100 |
120
+ | **Details line height** | Between the date, word count and link lines | 10 mm | 3 to 30 |
121
+ | **Show the date** | Prints "Written on" and the date the PDF was made | On | |
122
+ | **Show the word count** | Prints the article's word count | On | |
123
+ | **Thumbnail as cover** | Puts the project's thumbnail between the title and the date, when there is one | On | |
124
+ | **Space around cover** | Space above and below the cover picture | 6 mm | 0 to 40 |
125
+ | **Cover height at most** | The tallest the cover may be; it keeps its shape and shrinks when needed | 110 mm | 20 to 200 |
126
+
127
+ ### Branding
128
+
129
+ | Setting | What it does | Default |
130
+ |---|---|---|
131
+ | **Brand name** | Your channel or brand, printed large at the top of the title page and before the title in the running header ("Brand \| Title"). Empty shows no brand. | Empty |
132
+ | **Tagline** | A short line under the brand name. Empty hides it. | Empty |
133
+ | **Website** | The address the brand name and the title-page link open when clicked in the PDF. | Empty |
134
+ | **Link text** | The words of a linked line under the word count on the title page; it opens Website. Empty hides the line. | Empty |
135
+
136
+ ### Contents page
137
+
138
+ | Setting | What it does | Default | Range |
139
+ |---|---|---|---|
140
+ | **Contents page** | Adds a table of contents after the title page, each entry a link to its page | On | |
141
+ | **Contents page title** | The heading of the contents page (up to 300 characters) | Table of Contents | |
142
+ | **Lists headings down to** | Top level only, second level, or third level. Deeper lists can add a page. | Second level | |
143
+ | **Contents title position** | From the top margin to the contents title | 20 mm | 0 to 100 |
144
+ | **First entry position** | From the top margin to the first entry | 40 mm | 0 to 150 |
145
+ | **Contents line height** | From one entry to the next | 8 mm | 3 to 30 |
146
+ | **Indent per level** | How much further each deeper level is indented | 5 mm | 0 to 30 |
147
+
148
+ ### Header and footer
149
+
150
+ | Setting | What it does | Default | Range |
151
+ |---|---|---|---|
152
+ | **Running header** | Prints "Brand \| Title" at the top of every page after the title page | On | |
153
+ | **Header from top** | From the top edge to the header | 15 mm | 3 to 60 |
154
+ | **Header title at most** | A longer title is cut short in the header to fit one line | 35 characters | 5 to 200 |
155
+ | **Page numbers** | Prints a page number at the bottom of every page after the title page | On | |
156
+ | **Page number text** | The words around the number; `{page}` becomes the number, so `Page {page}` prints "Page 4" | `Page {page}` | |
157
+ | **Page number from the bottom** | From the bottom edge to the page number | 10 mm | 3 to 60 |
158
+ | **Space kept above page number** | Space kept free above the number so body text stops short of it | 15 mm | 0 to 60 |
159
+
160
+ ### Sources page
161
+
162
+ | Setting | What it does | Default | Range |
163
+ |---|---|---|---|
164
+ | **Sources page** | Adds a page listing the web links the article and its research used, each clickable | On | |
165
+ | **Sources page title** | Its heading (up to 300 characters) | Sources Consulted | |
166
+ | **Sources title position** | From the top margin to the title | 20 mm | 0 to 100 |
167
+ | **Sources list position** | From the top margin to the first source | 40 mm | 0 to 150 |
168
+ | **Sources line height** | Between the lines of one source | 8 mm | 3 to 30 |
169
+ | **Gap between sources** | Extra space between sources | 2 mm | 0 to 20 |
170
+
171
+ ### Closing page
172
+
173
+ | Setting | What it does | Default | Range |
174
+ |---|---|---|---|
175
+ | **Closing page** | Adds a last page with your own text, such as an about section or a thank-you | Off | |
176
+ | **Closing page title** | Its heading (up to 300 characters) | About | |
177
+ | **Closing page text** | One line per row, up to 60 lines of 300 characters. A line starting with `•` becomes a muted bullet, one ending with `:` a bold label, an empty line a gap. | Empty | |
178
+ | **Add date, word and page counts** | Adds a Document Details list: date written, total words and total pages | On | |
179
+ | **Closing page link** | A clickable line after your text: **Link text** and **Link address**. Without an address the words show without a link. | Off | |
180
+ | **Closing line** | A last line, such as a sign-off, in the decorative font. Empty leaves it out. | Empty | |
181
+ | **Closing title position** | From the top margin to the title | 20 mm | 0 to 100 |
182
+ | **Closing text position** | From the top margin to the first line | 40 mm | 0 to 150 |
183
+
184
+ ### PDF details
185
+
186
+ These appear in a PDF reader's document properties, not on the pages.
187
+
188
+ | Setting | What it does | Default |
189
+ |---|---|---|
190
+ | **PDF author** | The author shown in the properties. `{title}` becomes the article title. | Empty |
191
+ | **PDF subject** | The subject shown in the properties. | `{title}` |
192
+ | **PDF keywords** | Search words, usually separated by commas (up to 1,000 characters) | Empty |
193
+ | **PDF creator** | The app or person shown as the creator | Empty |
194
+
195
+ ## Tips
196
+
197
+ - Change one group at a time and watch the preview; it redraws as you type.
198
+ - For a book-like PDF, turn on **Parchment texture**, keep drop caps on and raise **Body line height** a little.
199
+ - For a plain handout, set Body font to Helvetica, turn drop caps off and set **Lists headings down to** top level.
200
+ - Put your channel name in **Brand name** and your site in **Website** so every PDF links back to you.
201
+
202
+ ## Related pages
203
+
204
+ - [PDF documents](PDF-Documents)
205
+ - [Channels](Channels)
206
+ - [Library overview](Library-Overview)
207
+ - [Play outputs](Play-Outputs)
@@ -0,0 +1,204 @@
1
+ # Editing a Project
2
+
3
+ You can change almost anything about a project after it has run: the article, a narration chunk, one image, the prompts, the providers, the captions or the volume. Slopify saves each change as a new revision and remakes only the outputs the change affects, after you have seen what that costs.
4
+
5
+ **Where to find it:** a project → **Edit settings** (top right), or **Settings** in the section rail. The form is called **Edit project**.
6
+
7
+ ## How editing works
8
+
9
+ 1. **Edit.** You change settings or content in the Edit project form. Nothing runs while you edit.
10
+ 2. **Save.** **Save changes** stores a new revision. Saving never starts work. Outputs the change affects turn **outdated** and keep their old version until they are remade.
11
+ 3. **Remake.** The next action button offers the first group of outdated outputs, for example **Remake the outdated narration** or **Remake 4 outdated images**. Press it, or open **Choose what to remake** to see the full list, the cost, and what is kept.
12
+
13
+ Remaking one group can make the next group outdated in turn (new narration outdates the video); the next action then names that group.
14
+
15
+ ## Edit project sections
16
+
17
+ The form has its own section list on the left. Some sections appear only when the project uses them.
18
+
19
+ | Section | What you change there |
20
+ | --- | --- |
21
+ | **Inputs** | **Project title**, **Channel** and brand kit, **Stages** (the source of each stage: Research, Article, Audio, Images, Thumbnail, Video, Document), **Document theme**, **Timing** (silence, seconds per image, zoom, motion), **Cuts and look**, **Ambient sound**, **Pauses and volume**, **Intro and outro**, **Research notes**. |
22
+ | **Article** | The **Article text** itself. Shows an "edited" badge once you have changed it. |
23
+ | **Providers** | Language, text, narration and image providers, models, voice, speakers, Pronunciation Glossary, narration aliases, **Describe tables and figures**, chunking and Narration Preparation. |
24
+ | **Prompts** | The **YouTube description** switch (turn it on for a project that has no description yet) and its **Description prompt**, every prompt the project uses, and the keywords. |
25
+ | **Reviews** | Automatic reviews. See [Reviews and Checkpoints](Reviews-and-Checkpoints). |
26
+ | **Shorts** | Shorts settings, the Shorts preview and picked clips. See [Shorts](Shorts). |
27
+ | **Subtitles** | Caption mode, font, size, position and the style preview. See [Video Editing](Video-Editing#subtitles). |
28
+ | **Images** | **Image prompts**, **More images for long videos**, the establishing image, thumbnail count, replacing provided files, and the image list. The badge shows how many images there are. |
29
+ | **Narration** | The narration chunks (only when narration is generated). |
30
+ | **Captions** | Caption text and timing. The badge shows how many captions you have loaded. |
31
+
32
+ At the bottom: **Save changes** saves a revision, **Discard changes** drops the draft. While a file is uploading the bar says "Waiting for uploads to finish…" and saving waits.
33
+
34
+ If someone (or another tab) saved the project while you were editing, the bar says "A newer revision is available. Your unsaved changes are kept below." Press **Reload current revision and discard my draft** to start from the newer one.
35
+
36
+ ## Change the article text
37
+
38
+ 1. Open **Edit project → Article**.
39
+ 2. Edit the **Article text** (Markdown; headings become chapters).
40
+ 3. Press **Save changes**.
41
+
42
+ Your edit is kept when other settings change, and saved as a new revision. The narration, images and video made from the old text turn outdated and are remade when you choose.
43
+
44
+ ### Regenerate the article
45
+
46
+ **Regenerate article after review** (under the article text, when the article is generated) marks the article to be written again by the text model, one or more paid text calls. Nothing runs yet: the rebuild review lists it with the narration, images and video it outdates, and you start it there. It replaces any edits you made to the article.
47
+
48
+ ## Edit narration
49
+
50
+ **Edit project → Narration** shows the narration split into the chunks it was spoken in. Only the chunks you touch are made again, paid per character, and the video is rendered again with them.
51
+
52
+ | Control | What it does |
53
+ | --- | --- |
54
+ | **Text for narration chunk N** | What the narrator says in this chunk. Editing it has the chunk spoken again by your voice provider when you remake outdated outputs. The other chunks keep their audio; captions and the video follow. It does not change the article. |
55
+ | **Replace narration chunk N** | Uses your own audio file for this chunk. |
56
+ | **Regenerate narration chunk N after review** | Speaks the chunk again with the same text and voice, for a new take when a word came out wrong. Paid per character. The current audio stays until then. **Keep narration chunk N** takes the mark off. |
57
+
58
+ When the project was narrated as one whole request (Chunking set to the whole article), the form says so: editing its text rebuilds the whole narration request.
59
+
60
+ ## Edit images
61
+
62
+ **Edit project → Images** lists every image of the video in the order it is shown. Changes apply after you save.
63
+
64
+ | Control | What it does |
65
+ | --- | --- |
66
+ | **Prompt for image N** | The words this image is drawn from, with keywords in double braces filled in from the project. Editing it outdates only this image and the video; it is drawn again, one image call, when you remake. |
67
+ | **Use saved wording as template for image N** | Copies the prompt as sent into the box so you can edit it. |
68
+ | **Replace image N** | Uses your own picture in its place. |
69
+ | **Move image N earlier** / **later** | Changes the order. |
70
+ | **Delete image N** | Removes it. Deleting the last image also turns Images and Video off. |
71
+ | **Regenerate image N after review** | Draws the image again from its prompt, one paid image call, with a new result. The current image stays until the new one is made. |
72
+ | **Add generated image** | Adds a new image with an empty prompt at the end. |
73
+ | **Add provided image** | Adds your own picture at the end. |
74
+ | **Add a video clip** | Adds a clip (MP4, MOV, M4V, WebM or MKV). It plays muted in an image's place, trimmed, slowed (to half speed at most) or looped to fit. |
75
+
76
+ A project holds at most 60 images, or 240 with **More images for long videos** on.
77
+
78
+ The **Regenerate** button on an image in the project's Images section does the same thing: it opens Edit project with the change applied to the draft, and saving marks the image outdated.
79
+
80
+ ### Image prompts and More images for long videos
81
+
82
+ - **Image prompts** is the same control as on Play: which Library image prompts the project uses and how many images each makes (its Number). The line under it says what saving will do. Raising a Number adds images right after that prompt's last one, lowering it drops its last ones, unticking a prompt drops its images, and a newly ticked prompt adds new images at the end. Images left as they were are kept and reused.
83
+ - **More images for long videos** sets extra images by length: **Every N minutes** or **N per hour**. Saving plans the extra images and keeps every existing one.
84
+
85
+ ### Establishing image and provided files
86
+
87
+ The establishing image can be changed or made again in the Images section. When a stage uses your own file (narration or thumbnail set to Provide), **Replace provided audio** and **Replace provided thumbnail** take a new file.
88
+
89
+ ## Edit captions
90
+
91
+ 1. Open **Edit project → Captions**.
92
+ 2. Press **Edit existing caption cues**. This works once the current narration has finished and its subtitle timing is ready.
93
+ 3. Change a caption's words, or its start and end in seconds from the start of the narration.
94
+ 4. Press **Apply caption edits to draft**.
95
+ 5. Press **Save changes**.
96
+
97
+ **Apply caption edits to draft** checks every caption (text present, times in order, inside the narration) and puts your edits into the draft. Captions must not overlap and must end after they start; each problem is named, for example "Caption 4: enter caption text." Nothing is saved until **Save changes**, and the video is rendered again only when you remake outdated outputs. Caption edits cost nothing; only the subtitle files and the video are made again. The narration is not changed. **Discard caption edits** drops them.
98
+
99
+ If the narration changed since you edited the captions, the form says the edits belong to an earlier narration: check them against the current one, apply and save.
100
+
101
+ ## Prompts
102
+
103
+ **Edit project → Prompts** shows every prompt the project used (the article, Narration Preparation, YouTube description, Shorts, Shorts image style, thumbnail, establishing image, intro, outro and each image prompt).
104
+
105
+ | Control | What it does |
106
+ | --- | --- |
107
+ | **Use saved template for ...** | Copies a prompt from your Library into this project, replacing the raw prompt. Pick it in **Choose a saved template**. |
108
+ | **Raw prompt for ...** | This project's own copy of the prompt, with keywords still in double braces such as `{{Topic}}`. Edit it to change what the model is asked, for this project only; the Library prompt is untouched. |
109
+ | **Saved rendered prompt** | The prompt as it was sent, with keywords filled in. |
110
+ | **Use the Library version for ...** | Shown when the Library prompt changed since the project copied it. Copies the new wording in. |
111
+ | **Keywords** | The keyword values, each with everything it feeds. |
112
+
113
+ The project keeps its own copy of each prompt, so later Library edits reach it only when you pick it again or press **Use the Library version**. Saving fills the keywords in again, and whatever was made from the old wording turns outdated. Nothing is remade until you choose.
114
+
115
+ **Write the description again after review** marks the YouTube description to be written again, one paid text call, when you save and continue or start the rebuild review. **Keep the current description** takes the mark off. See [YouTube Description](YouTube-Description).
116
+
117
+ ## Narration options in Providers
118
+
119
+ | Control | What it does |
120
+ | --- | --- |
121
+ | **Also use pronunciations from my other projects** → **Update from other projects** | Copies your other projects' Pronunciation Glossary terms into this project again, picking up any added since the last copy. After you save, only the chunks whose words those terms change are spoken again, paid per character. |
122
+ | **Use narration aliases** → **Update from Library** | Copies Library → Aliases into this project again. A Library edit reaches the project only when you press this. After you save, only the chunks the changed aliases touch are spoken again. |
123
+ | **Describe tables and figures in the narration** | The text model writes a short spoken passage for each table, figure, equation and code block. Turning it on costs one text call per block, and after you save the chunks that contain a block are spoken again (the whole narration when Chunking is the whole article). **Leave code out** skips code blocks. |
124
+
125
+ **Show tables and figures on screen** (in **Inputs → Cuts and look**, when Describe tables and figures is on) shows each described block in the video while its description is spoken, as the article's picture or a card drawn on your computer at no cost. Turning it on or off renders the video again, and any Shorts that include a card; the narration is kept.
126
+
127
+ See [Narration Aliases and Glossary](Narration-Aliases-and-Glossary).
128
+
129
+ ## Pauses and volume
130
+
131
+ **Edit project → Inputs → Pauses and volume** holds four settings. All run on your computer with no API calls.
132
+
133
+ | Option | What it does | Default / range |
134
+ | --- | --- | --- |
135
+ | **Pause between sentences (seconds)** | The least quiet after each sentence. Adds silence where the pause is shorter; never shortens one or cuts a word. About 0.25 s is brisk, 0.35 to 0.45 natural, 0.5 to 0.8 an audiobook's pace, 0.8 and up sleep content. 0 keeps the voice's own. | 0.4; 0 to 2 in steps of 0.05 |
136
+ | **Pause between paragraphs (seconds)** | The least quiet at the end of a paragraph, when you want more than between sentences. At 0 paragraphs get the sentence pause. Try 0.8 to 1.2 for a slower read. A speaker's turn gap is set under Speakers instead. | 0; 0 to 2 |
137
+ | **Level the volume** | Brings every narration piece to one loudness before they are joined, then sets the video, shorts and audio files to a finished loudness. | On for new runs (Settings → General → **Level the volume for new runs**) |
138
+ | **Video volume** | How loud the video and shorts are, in dB from the recommended level (0 dB is -14 LUFS, what YouTube and Spotify play at). -6 dB is about 50%, +4 dB about 158%. Peaks stay under -1.5 dBTP. | 0 dB; -10 to +4 dB in 0.5 dB steps |
139
+ | **Audio files volume** | How loud the WAV, MP3 and M4B are, in dB from -18 LUFS (what audiobook shops such as ACX ask for). Peaks stay under -3 dBTP. | 0 dB; -10 to +4 dB |
140
+
141
+ You can type a volume in dB or as a percentage of the recommended level.
142
+
143
+ What changing them remakes:
144
+
145
+ - **Pauses**: the narration is joined again from the pieces it already has and timed again, which remakes what is timed from it: captions, the video and, when on, the YouTube description and the shorts' pick (those two are text calls). No speech is made again.
146
+ - **Level the volume on or off**: the levelled narration is joined again and the exports rendered again. No speech is made again, and word timing, description, shorts' pick and reviews are not redone.
147
+ - **A volume only**: the exports are mastered again, nothing else.
148
+
149
+ An uploaded narration is never levelled piece by piece; only the final master reaches it. Turn Level the volume off to keep the exports at your file's own level.
150
+
151
+ ## Choose what to remake
152
+
153
+ **Choose what to remake** opens the rebuild review for every outdated or failed output. Open it from the **Settings** view, **More project actions → Choose what to remake…**, or the command palette.
154
+
155
+ The review shows:
156
+
157
+ - Counts of work items: **to make**, **built on this computer**, **to confirm**, **kept as they are**, and **can't run**, plus the known cost range. CLI work reads "$0 on your plan", with what the same work would cost via API.
158
+ - **Changed inputs**: each changed input with **Before** and **After**.
159
+ - **Work items**: every item, why it is made or kept, and **View request text** for the exact request.
160
+ - **Cost by step**.
161
+
162
+ Press **Remake N outputs** to start, or **Keep things as they are** to close it with nothing spent. When the button is off, the line beside it says why, for example that an item can't run (its reasons are listed above) or that a box needs ticking:
163
+
164
+ | Tick box | When it appears |
165
+ | --- | --- |
166
+ | **Keep the provided content for ...** | An output uses a file or text you supplied, and something it depends on (such as the narration) has changed since. Tick to confirm it still fits. To use something else, close the review and replace the file in Edit project first. |
167
+ | **I understand that N cost estimates are unknown.** | Some steps use a model with no published price, so their cost is left out of the total. Tick to start anyway; the real cost is recorded under Cost once they run. |
168
+
169
+ The next action button and **Remake everything outdated** in the command palette start the remake at once when nothing needs ticking; otherwise they open this review.
170
+
171
+ ## History and saved revisions
172
+
173
+ Every save of Edit project is a revision: a snapshot of the settings and content. Continuing a run always uses the current one.
174
+
175
+ When the editor is closed, the **Settings** view shows **Saved revision** with each output's state: **Ready**, **Outdated; the retained version stays until it is remade**, **Provided content needs review**, or **Retained file missing**.
176
+
177
+ ### Look at or restore an earlier revision
178
+
179
+ 1. Open **History** in the section rail.
180
+ 2. Pick a revision from **Project history** (the current one is marked **Current**).
181
+ 3. At the top, one row of buttons: **Restore this revision** (the main action), **Download all images** (a zip of that revision's images) and one **Open folder** for the revision.
182
+ 4. Below, each output is listed with its state, **Download** and **Preview retained output**. Earlier results are marked **Earlier result**. Retained narration parts play in Slopify's own audio player, and text parts can be opened too.
183
+ 5. Press **Restore this revision** to make it current again.
184
+
185
+ Restoring adds a new revision with the old settings and outputs, so nothing after it is lost. A restored revision takes its channel back.
186
+
187
+ ## Save as template
188
+
189
+ **More project actions → Save as template…** saves this project's settings as a template for Play and Schedules. Keywords the title names are saved empty; other keyword values are kept. See [Templates](Templates).
190
+
191
+ ## Tips
192
+
193
+ - Several edits can go into one save. Make them all, save once, then review the remake.
194
+ - A rejected save lists each problem next to its field; fix those and save again.
195
+ - To redo a whole stage from scratch rather than one piece, use the section's own More menu on the project page (see [Project Page](Project-Page#re-run-a-whole-stage)).
196
+
197
+ ## Related pages
198
+
199
+ - [Project Page](Project-Page)
200
+ - [Video Editing](Video-Editing)
201
+ - [Recovery and Retries](Recovery-and-Retries)
202
+ - [Prompts](Prompts)
203
+ - [Narration Aliases and Glossary](Narration-Aliases-and-Glossary)
204
+ - [Costs and Run Cost](Costs-and-Run-Cost)