@gentbajko/slopify 4.0.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. package/dist/adapters/account-limits.js +1 -1
  2. package/dist/adapters/alignment/audio.js +1 -1
  3. package/dist/adapters/alignment/cache.js +1 -1
  4. package/dist/adapters/alignment/multilingual.js +2 -1
  5. package/dist/adapters/alignment/runner.js +1 -1
  6. package/dist/adapters/alignment/worker.js +1 -1
  7. package/dist/adapters/explain.js +10 -9
  8. package/dist/adapters/host-cli/index.js +2 -1
  9. package/dist/adapters/host-cli/transport.js +2 -1
  10. package/dist/adapters/image/bytes.js +2 -1
  11. package/dist/adapters/image/codex.js +6 -5
  12. package/dist/adapters/image/fal.js +4 -3
  13. package/dist/adapters/image/google.js +3 -2
  14. package/dist/adapters/image/models.js +2 -2
  15. package/dist/adapters/image/openai.js +2 -1
  16. package/dist/adapters/image/replicate.js +3 -2
  17. package/dist/adapters/image/video.js +2 -1
  18. package/dist/adapters/key-probes.js +1 -1
  19. package/dist/adapters/llm/antigravity-models.js +1 -1
  20. package/dist/adapters/llm/antigravity.js +7 -6
  21. package/dist/adapters/llm/assistant-cli.js +1 -1
  22. package/dist/adapters/llm/claude-code-models.js +1 -1
  23. package/dist/adapters/llm/claude-code.js +3 -2
  24. package/dist/adapters/llm/codex-models.js +1 -1
  25. package/dist/adapters/llm/document-workspace.js +3 -2
  26. package/dist/adapters/llm/image-workspace.js +3 -2
  27. package/dist/adapters/llm/openrouter.js +2 -1
  28. package/dist/adapters/llm/run-cli.js +3 -2
  29. package/dist/adapters/tts/gemini.js +2 -1
  30. package/dist/adapters/tts/inworld-async.js +2 -1
  31. package/dist/adapters/tts/inworld.js +3 -2
  32. package/dist/adapters/tts/system.js +2 -1
  33. package/dist/catalog/registry.js +20 -13
  34. package/dist/catalog/schema.js +2 -1
  35. package/dist/catalog/validate.js +5 -2
  36. package/dist/edge/http/actions.js +7 -7
  37. package/dist/edge/http/app.js +5 -3
  38. package/dist/edge/http/assistant.js +3 -1
  39. package/dist/edge/http/backups.js +1 -1
  40. package/dist/edge/http/channel-memory.js +2 -2
  41. package/dist/edge/http/channels.js +1 -1
  42. package/dist/edge/http/checkpoints.js +7 -5
  43. package/dist/edge/http/design-templates.js +3 -3
  44. package/dist/edge/http/designs.js +1 -1
  45. package/dist/edge/http/document-themes.js +3 -3
  46. package/dist/edge/http/draft-problem.js +1 -1
  47. package/dist/edge/http/extension-auth.js +1 -1
  48. package/dist/edge/http/home.js +9 -1
  49. package/dist/edge/http/model-checks.js +4 -4
  50. package/dist/edge/http/onboarding.js +29 -12
  51. package/dist/edge/http/outputs.js +3 -2
  52. package/dist/edge/http/patch-notes.js +2 -2
  53. package/dist/edge/http/planning.js +1 -1
  54. package/dist/edge/http/project-create.js +1 -1
  55. package/dist/edge/http/project-templates.js +2 -2
  56. package/dist/edge/http/projects.js +22 -4
  57. package/dist/edge/http/prompts.js +2 -2
  58. package/dist/edge/http/pronunciation-check.js +133 -0
  59. package/dist/edge/http/pronunciations.js +26 -0
  60. package/dist/edge/http/providers.js +9 -10
  61. package/dist/edge/http/refusal.js +1 -1
  62. package/dist/edge/http/remote-access.js +4 -4
  63. package/dist/edge/http/remote-guard.js +2 -2
  64. package/dist/edge/http/reviews.js +1 -1
  65. package/dist/edge/http/revision-files.js +1 -1
  66. package/dist/edge/http/revisions.js +4 -4
  67. package/dist/edge/http/schedules.js +13 -11
  68. package/dist/edge/http/settings.js +6 -2
  69. package/dist/edge/http/social.js +5 -4
  70. package/dist/edge/http/staging.js +1 -1
  71. package/dist/edge/http/storage.js +12 -4
  72. package/dist/edge/http/studio.js +71 -19
  73. package/dist/edge/http/style-preview.js +2 -2
  74. package/dist/edge/http/template-studio.js +12 -9
  75. package/dist/edge/http/trash.js +1 -1
  76. package/dist/edge/http/youtube-edits.js +1 -1
  77. package/dist/edge/mcp/excluded-routes.js +4 -3
  78. package/dist/edge/mcp/instructions.js +3 -3
  79. package/dist/edge/mcp/library-tools.js +8 -5
  80. package/dist/edge/mcp/remake-tools.js +7 -4
  81. package/dist/edge/mcp/server.js +1 -1
  82. package/dist/edge/mcp/tools-channels.js +9 -9
  83. package/dist/edge/mcp/tools-designs.js +9 -9
  84. package/dist/edge/mcp/tools-library.js +31 -7
  85. package/dist/edge/mcp/tools-planning.js +18 -18
  86. package/dist/edge/mcp/tools-projects.js +10 -10
  87. package/dist/edge/mcp/tools-publishing.js +9 -9
  88. package/dist/edge/mcp/tools-runs.js +9 -9
  89. package/dist/edge/mcp/tools-schedules.js +6 -6
  90. package/dist/edge/mcp/tools-setup.js +20 -14
  91. package/dist/edge/mcp/tools-social.js +5 -4
  92. package/dist/edge/mcp/tools-storage.js +3 -3
  93. package/dist/edge/mcp/tools-template-studio.js +18 -18
  94. package/dist/edge/remote-access/model.js +1 -1
  95. package/dist/extension/slopify-studio-chrome.zip +0 -0
  96. package/dist/extension/slopify-studio-firefox.zip +0 -0
  97. package/dist/kernel/db/migrations/0078-uploaded-from-links.sql +7 -0
  98. package/dist/kernel/pipeline.js +12 -0
  99. package/dist/kernel/ports/settings-places.js +31 -0
  100. package/dist/kernel/ports/system-speech.js +31 -3
  101. package/dist/kernel/runner/attempt.js +11 -3
  102. package/dist/kernel/runner/providers.js +3 -2
  103. package/dist/kernel/runner/standalone.js +2 -2
  104. package/dist/main.js +5 -3
  105. package/dist/model-catalog.js +20 -0
  106. package/dist/patch-notes/4.0.0.md +13 -13
  107. package/dist/patch-notes/4.1.0.md +42 -0
  108. package/dist/patch-notes/4.2.0.md +28 -0
  109. package/dist/patch-notes/index.json +12 -0
  110. package/dist/slices/admission/listing-facts.js +95 -0
  111. package/dist/slices/admission/repo.js +9 -6
  112. package/dist/slices/admission/rules.js +7 -7
  113. package/dist/slices/admission/schema.js +2 -0
  114. package/dist/slices/admission/start.js +7 -0
  115. package/dist/slices/admission/state-words.js +34 -5
  116. package/dist/slices/assistant/cost.js +1 -1
  117. package/dist/slices/assistant/gate.js +1 -0
  118. package/dist/slices/assistant/model.js +10 -3
  119. package/dist/slices/assistant/turn.js +5 -3
  120. package/dist/slices/autopilot/warnings.js +1 -1
  121. package/dist/slices/backups/service.js +5 -5
  122. package/dist/slices/channels/cast-images.js +1 -1
  123. package/dist/slices/channels/schema.js +1 -1
  124. package/dist/slices/channels/videos.js +1 -1
  125. package/dist/slices/control/providers.js +2 -2
  126. package/dist/slices/designs/budget.js +1 -1
  127. package/dist/slices/designs/calls.js +2 -2
  128. package/dist/slices/designs/check-context.js +4 -4
  129. package/dist/slices/designs/fields.js +4 -4
  130. package/dist/slices/designs/gate.js +7 -5
  131. package/dist/slices/designs/render-input.js +1 -1
  132. package/dist/slices/designs/requests.js +1 -1
  133. package/dist/slices/designs/runner.js +1 -1
  134. package/dist/slices/designs/sample.js +2 -1
  135. package/dist/slices/designs/service.js +1 -1
  136. package/dist/slices/designs/template-checks.js +2 -2
  137. package/dist/slices/designs/template-make.js +3 -3
  138. package/dist/slices/designs/templates.js +3 -3
  139. package/dist/slices/document/fonts.js +1 -1
  140. package/dist/slices/document/model.js +7 -4
  141. package/dist/slices/document/render.js +2 -1
  142. package/dist/slices/document/theme-schema.js +1 -1
  143. package/dist/slices/document/theme.js +49 -3
  144. package/dist/slices/episodes/summarize.js +2 -2
  145. package/dist/slices/estimate/index.js +28 -22
  146. package/dist/slices/estimate/requests.js +4 -4
  147. package/dist/slices/fixes/rules.js +3 -1
  148. package/dist/slices/fonts/catalog.js +2 -1
  149. package/dist/slices/fonts/coverage.js +2 -1
  150. package/dist/slices/images/appearance.js +2 -1
  151. package/dist/slices/images/scenes.js +2 -1
  152. package/dist/slices/keywords/digest.js +2 -1
  153. package/dist/slices/keywords/rules.js +2 -2
  154. package/dist/slices/keywords/specs.js +5 -5
  155. package/dist/slices/keywords/values.js +1 -1
  156. package/dist/slices/library/transfer.js +3 -3
  157. package/dist/slices/loudness/loudnorm.js +2 -1
  158. package/dist/slices/loudness/model.js +3 -2
  159. package/dist/slices/loudness/sentence-level.js +2 -1
  160. package/dist/slices/model-checks/rules.js +13 -0
  161. package/dist/slices/model-upkeep/model.js +1 -1
  162. package/dist/slices/model-upkeep/switch.js +3 -3
  163. package/dist/slices/model-upkeep/usage.js +13 -2
  164. package/dist/slices/narration/breaths.js +2 -1
  165. package/dist/slices/narration/clean-pieces.js +2 -1
  166. package/dist/slices/narration/pauses-model.js +3 -2
  167. package/dist/slices/narration/pronunciation-check.js +226 -0
  168. package/dist/slices/narration/pronunciation.js +7 -2
  169. package/dist/slices/narration/pronunciations-library.js +94 -0
  170. package/dist/slices/notifications/subject.js +2 -2
  171. package/dist/slices/onboarding/copy.js +19 -2
  172. package/dist/slices/onboarding/first-run.js +13 -38
  173. package/dist/slices/onboarding/install.js +2 -1
  174. package/dist/slices/onboarding/model.js +26 -21
  175. package/dist/slices/onboarding/preferred-model.js +14 -0
  176. package/dist/slices/onboarding/quick-short.js +103 -64
  177. package/dist/slices/onboarding/sample.js +4 -1
  178. package/dist/slices/onboarding/state.js +7 -0
  179. package/dist/slices/onboarding/template.js +6 -5
  180. package/dist/slices/outputs/add.js +3 -2
  181. package/dist/slices/outputs/service.js +2 -2
  182. package/dist/slices/patch-notes/library.js +1 -1
  183. package/dist/slices/play-drafts/readiness.js +3 -3
  184. package/dist/slices/play-drafts/review-inputs.js +1 -1
  185. package/dist/slices/play-drafts/service.js +17 -7
  186. package/dist/slices/project-templates/next-chapter.js +2 -1
  187. package/dist/slices/project-templates/provider-defaults.js +22 -0
  188. package/dist/slices/project-templates/setup-sections.js +26 -0
  189. package/dist/slices/project-templates/setup.js +6 -1
  190. package/dist/slices/rebuild/preview-details.js +5 -5
  191. package/dist/slices/rebuild/recipe-preparation.js +1 -1
  192. package/dist/slices/rebuild/recipe-save.js +2 -2
  193. package/dist/slices/rebuild/recipe-text.js +16 -4
  194. package/dist/slices/rebuild/recipe-validation.js +5 -4
  195. package/dist/slices/rebuild/recipe-voices.js +3 -2
  196. package/dist/slices/rebuild/recipe-work.js +4 -4
  197. package/dist/slices/rebuild/recovery.js +6 -6
  198. package/dist/slices/rebuild/remake-outdated.js +5 -5
  199. package/dist/slices/rebuild/review-redo.js +1 -1
  200. package/dist/slices/rebuild/runtime-animate.js +2 -2
  201. package/dist/slices/rebuild/runtime-article.js +4 -3
  202. package/dist/slices/rebuild/runtime-document.js +5 -4
  203. package/dist/slices/rebuild/runtime-export-bed.js +2 -1
  204. package/dist/slices/rebuild/runtime-export-edit.js +2 -1
  205. package/dist/slices/rebuild/runtime-export-inputs.js +5 -4
  206. package/dist/slices/rebuild/runtime-export-short.js +1 -1
  207. package/dist/slices/rebuild/runtime-export.js +4 -3
  208. package/dist/slices/rebuild/runtime-image.js +4 -3
  209. package/dist/slices/rebuild/runtime-local.js +3 -2
  210. package/dist/slices/rebuild/runtime-narration-text.js +3 -2
  211. package/dist/slices/rebuild/runtime-provider.js +7 -6
  212. package/dist/slices/rebuild/runtime-review.js +6 -5
  213. package/dist/slices/rebuild/runtime-shorts.js +6 -5
  214. package/dist/slices/rebuild/runtime-store.js +17 -2
  215. package/dist/slices/rebuild/runtime-subtitles.js +13 -12
  216. package/dist/slices/rebuild/runtime-voices.js +2 -1
  217. package/dist/slices/rebuild/runtime-youtube.js +3 -2
  218. package/dist/slices/rebuild/service-readiness.js +11 -3
  219. package/dist/slices/research/synthesis.js +3 -2
  220. package/dist/slices/reviews/external-model.js +1 -1
  221. package/dist/slices/reviews/holds.js +5 -4
  222. package/dist/slices/reviews/model.js +8 -5
  223. package/dist/slices/reviews/rules.js +3 -3
  224. package/dist/slices/reviews/verdict.js +2 -1
  225. package/dist/slices/revisions/image-plan.js +1 -1
  226. package/dist/slices/revisions/mutation-assets.js +2 -1
  227. package/dist/slices/revisions/mutations.js +3 -2
  228. package/dist/slices/schedules/agenda.js +7 -5
  229. package/dist/slices/schedules/design-check.js +4 -4
  230. package/dist/slices/schedules/design-run.js +3 -3
  231. package/dist/slices/schedules/repo.js +6 -5
  232. package/dist/slices/schedules/schema.js +3 -0
  233. package/dist/slices/schedules/topics.js +5 -5
  234. package/dist/slices/settings/first-run.js +6 -32
  235. package/dist/slices/settings/health.js +30 -15
  236. package/dist/slices/settings/key-test.js +1 -1
  237. package/dist/slices/settings/model.js +4 -2
  238. package/dist/slices/settings/playback.js +2 -2
  239. package/dist/slices/shorts/keep.js +2 -1
  240. package/dist/slices/shorts/pick.js +4 -3
  241. package/dist/slices/shorts/prompts.js +2 -1
  242. package/dist/slices/shorts/render.js +3 -2
  243. package/dist/slices/social/media.js +5 -4
  244. package/dist/slices/social/pack.js +1 -1
  245. package/dist/slices/social/post-prompt.js +2 -1
  246. package/dist/slices/social/reshape.js +2 -2
  247. package/dist/slices/social/serve.js +1 -1
  248. package/dist/slices/social/service.js +3 -2
  249. package/dist/slices/social/state.js +1 -1
  250. package/dist/slices/storage/backup-import.js +2 -2
  251. package/dist/slices/storage/portable.js +1 -1
  252. package/dist/slices/storage/trim.js +23 -13
  253. package/dist/slices/studio/calendar.js +3 -1
  254. package/dist/slices/studio/disclosure.js +4 -4
  255. package/dist/slices/studio/model.js +1 -1
  256. package/dist/slices/studio/pack.js +9 -8
  257. package/dist/slices/studio/plan.js +1 -1
  258. package/dist/slices/studio/settings.js +6 -6
  259. package/dist/slices/studio/videos.js +23 -4
  260. package/dist/slices/style-preview/render.js +3 -3
  261. package/dist/slices/style-preview/schema.js +1 -1
  262. package/dist/slices/subtitles/captions.js +1 -1
  263. package/dist/slices/template-studio/anatomy-view.js +46 -3
  264. package/dist/slices/template-studio/bakeoff.js +3 -3
  265. package/dist/slices/template-studio/budget.js +6 -3
  266. package/dist/slices/template-studio/cards.js +78 -0
  267. package/dist/slices/template-studio/checks.js +99 -50
  268. package/dist/slices/template-studio/for-all.js +5 -5
  269. package/dist/slices/template-studio/free-video.js +1 -1
  270. package/dist/slices/template-studio/free.js +5 -5
  271. package/dist/slices/template-studio/model.js +19 -15
  272. package/dist/slices/template-studio/pack-import.js +14 -14
  273. package/dist/slices/template-studio/pack.js +9 -7
  274. package/dist/slices/template-studio/paid.js +12 -5
  275. package/dist/slices/template-studio/quote.js +18 -11
  276. package/dist/slices/template-studio/ready.js +7 -7
  277. package/dist/slices/template-studio/runner.js +1 -1
  278. package/dist/slices/template-studio/save.js +12 -12
  279. package/dist/slices/template-studio/say-it-as.js +3 -3
  280. package/dist/slices/template-studio/schedule-gate.js +1 -1
  281. package/dist/slices/template-studio/schedule-price.js +3 -1
  282. package/dist/slices/template-studio/schedule-sample.js +5 -1
  283. package/dist/slices/template-studio/schema.js +25 -0
  284. package/dist/slices/template-studio/service.js +3 -1
  285. package/dist/slices/template-studio/status.js +26 -9
  286. package/dist/slices/template-studio/topic.js +3 -3
  287. package/dist/slices/thumbnail/by-llm.js +1 -1
  288. package/dist/slices/uploads/repo.js +37 -1
  289. package/dist/slices/uploads/rules.js +3 -2
  290. package/dist/slices/video/edit-list.js +2 -2
  291. package/dist/slices/video/edit-settings.js +1 -1
  292. package/dist/slices/video/encoding.js +14 -5
  293. package/dist/slices/video/ffmpeg.js +2 -2
  294. package/dist/slices/video/plan.js +2 -1
  295. package/dist/slices/video/slideshow.js +1 -1
  296. package/dist/slices/voices/attribution.js +3 -2
  297. package/dist/slices/voices/model.js +9 -8
  298. package/dist/slices/voices/script.js +2 -1
  299. package/dist/slices/youtube/answer.js +2 -1
  300. package/dist/slices/youtube/edits-repo.js +1 -1
  301. package/dist/tutorials/AI-CLIs.md +25 -25
  302. package/dist/tutorials/Agents-MCP.md +32 -32
  303. package/dist/tutorials/Assistant.md +5 -5
  304. package/dist/tutorials/Backups.md +7 -7
  305. package/dist/tutorials/Calendar.md +17 -25
  306. package/dist/tutorials/Cast-Library.md +19 -19
  307. package/dist/tutorials/Channels.md +40 -35
  308. package/dist/tutorials/Costs-and-Run-Cost.md +38 -40
  309. package/dist/tutorials/Create-Article.md +114 -0
  310. package/dist/tutorials/Create-Extras.md +112 -0
  311. package/dist/tutorials/Create-Images.md +165 -0
  312. package/dist/tutorials/Create-Narration.md +178 -0
  313. package/dist/tutorials/Create-Overview.md +244 -0
  314. package/dist/tutorials/Create-Video-and-Style.md +144 -0
  315. package/dist/tutorials/Docker.md +3 -3
  316. package/dist/tutorials/Document-Themes.md +32 -32
  317. package/dist/tutorials/Editing-a-Project.md +95 -94
  318. package/dist/tutorials/FAQ.md +18 -18
  319. package/dist/tutorials/First-Launch-and-Welcome.md +50 -64
  320. package/dist/tutorials/Home-and-Projects.md +101 -76
  321. package/dist/tutorials/Home.md +33 -33
  322. package/dist/tutorials/Install.md +13 -13
  323. package/dist/tutorials/Intros-and-Outros.md +33 -34
  324. package/dist/tutorials/Keyboard-Shortcuts-and-Command-Palette.md +62 -58
  325. package/dist/tutorials/Keywords-Slopify-Fills.md +21 -21
  326. package/dist/tutorials/Models.md +27 -27
  327. package/dist/tutorials/Multiple-Voices.md +41 -40
  328. package/dist/tutorials/Narration-Aliases-and-Glossary.md +101 -19
  329. package/dist/tutorials/Notifications.md +21 -17
  330. package/dist/tutorials/Other-Languages.md +15 -15
  331. package/dist/tutorials/PDF-Documents.md +38 -29
  332. package/dist/tutorials/Posting-to-Social-Sites.md +12 -12
  333. package/dist/tutorials/Project-Page.md +118 -120
  334. package/dist/tutorials/Prompts-and-Templates.md +84 -0
  335. package/dist/tutorials/Prompts.md +45 -45
  336. package/dist/tutorials/Providers-and-Keys.md +105 -98
  337. package/dist/tutorials/Publishing-to-YouTube.md +31 -31
  338. package/dist/tutorials/Recovery-and-Retries.md +31 -31
  339. package/dist/tutorials/Remote-Access.md +2 -2
  340. package/dist/tutorials/Reviews-and-Checkpoints.md +90 -93
  341. package/dist/tutorials/Schedules.md +27 -28
  342. package/dist/tutorials/Settings-Reference.md +183 -204
  343. package/dist/tutorials/Shorts.md +34 -33
  344. package/dist/tutorials/Start-at-Login.md +3 -3
  345. package/dist/tutorials/Studio-Extension.md +22 -24
  346. package/dist/tutorials/Template-Studio.md +45 -42
  347. package/dist/tutorials/Templates.md +50 -79
  348. package/dist/tutorials/Trash.md +4 -4
  349. package/dist/tutorials/Troubleshooting.md +44 -44
  350. package/dist/tutorials/Uninstalling-and-Moving.md +5 -5
  351. package/dist/tutorials/Updating-and-Patch-Notes.md +18 -18
  352. package/dist/tutorials/Video-Editing.md +34 -34
  353. package/dist/tutorials/Where-Your-Files-Live.md +10 -10
  354. package/dist/tutorials/YouTube-Description.md +26 -26
  355. package/dist/tutorials/Your-First-Short.md +35 -35
  356. package/dist/tutorials/_Sidebar.md +15 -15
  357. package/dist/web/assets/index-BNftKQrA.css +1 -0
  358. package/dist/web/assets/index-CQASqwjT.js +460 -0
  359. package/dist/web/assets/pdf-BKh8f7R6.js +56 -0
  360. package/dist/web/assets/pdf.worker.min-BmVo14Nb.mjs +28 -0
  361. package/dist/web/assets/pdf.worker.min-D7i8o3wR.js +1 -0
  362. package/dist/web/index.html +2 -2
  363. package/package.json +2 -2
  364. package/dist/tutorials/Library-Overview.md +0 -76
  365. package/dist/tutorials/Play-Images.md +0 -165
  366. package/dist/tutorials/Play-Narration.md +0 -167
  367. package/dist/tutorials/Play-Outputs.md +0 -109
  368. package/dist/tutorials/Play-Overview.md +0 -227
  369. package/dist/tutorials/Play-Title-and-Article.md +0 -136
  370. package/dist/tutorials/Play-Video-and-Style.md +0 -143
  371. package/dist/web/assets/index-CkAI_2E7.css +0 -1
  372. package/dist/web/assets/index-DcD0cdfo.js +0 -334
  373. package/dist/web/assets/pdf-TODRwF31.js +0 -54
  374. package/dist/web/assets/pdf.worker.min-Dswkl-cV.mjs +0 -29
  375. package/dist/web/assets/pdf.worker.min-zC6nfbxG.js +0 -1
@@ -1,60 +1,60 @@
1
1
  # Prompts
2
2
 
3
- Prompts are the instructions Slopify gives your models: how to write the article, what each picture shows, what the thumbnail looks like, how to write the YouTube description, which moments become shorts, and more. You write a prompt once, with `{{keywords}}` where the subject goes, and Play turns each keyword into a field you fill in per video.
3
+ Prompts are the instructions Slopify gives your models: how to write the article, what each picture shows, what the thumbnail looks like, how to write the YouTube description, which moments become shorts, and more. You write a prompt once, with `{{keywords}}` where the subject goes, and Create asks you for each keyword every time you make a video.
4
4
 
5
- **Where to find it:** **Library → Prompts**. Pick the kind with **Prompt kind** at the top.
5
+ **Where to find it:** **Prompts** in the rail. Pick the kind in the list on the left, which says how many of each you have; **Intros** and **Outros** are at its foot (see [Intros and Outros](Intros-and-Outros)).
6
6
 
7
7
  ## Prompt kinds
8
8
 
9
- The kind decides where Play offers the prompt.
9
+ The kind decides where Create offers the prompt.
10
10
 
11
11
  | Kind | What it does | What it costs |
12
12
  |---|---|---|
13
- | **Article** | The instruction the text model gets to write the video's article, which becomes the narration. Research notes go first when research ran. The answer's sources and pronunciation sections are never narrated. | One call on the project's LLM, plus up to 3 more when the answer runs out of room |
14
- | **Image** | Sent as written to the image model, with the keywords filled in. No text model rewrites it. Play sets how many pictures each prompt makes (1 to 20, at most 60 a run). Pictures show for 15 s each by default and repeat until the video ends. | One image call per picture |
15
- | **Thumbnail** | Describes the thumbnail. With Thumbnail set to **Prompt by LLM**, the text model first turns it into a picture prompt using the title and article. 1 thumbnail by default, or 3: the second a close-up, the third a wider shot. | One image call per thumbnail, plus one text call with Prompt by LLM |
16
- | **Narration Preparation** | Tells the text model how the narration should be delivered. It only adds cues, such as a short speaking direction or a laugh or sigh, and never rewrites the words. Works with the Inworld TTS-2 voice model. | One call each for the body, the intro and the outro |
17
- | **YouTube Description** | Tells the text model how to write the description, chapters, hashtags and tags from the timestamped transcript. A project that picks none uses the built-in wording. | One call per video |
18
- | **Shorts** | Tells the text model which moments to cut into vertical shorts (3 of 60 to 120 s by default). A project that picks none uses the built-in wording. | One call to pick them, one per short for its picture prompts, one image call per picture |
13
+ | **Article** | The instruction the AI gets to write the video's article, which becomes the narration. Research notes go first when research ran. The answer's sources and pronunciation sections are never narrated. | One AI call (**Written by**), plus up to 3 more when the answer runs out of room |
14
+ | **Image** | Sent as written to the image model, with the keywords filled in. No AI rewrites it. Create sets how many pictures each prompt makes (1 to 20, at most 60 a run). Pictures show for 15 s each by default and repeat until the video ends. | One image call per picture |
15
+ | **Thumbnail** | Describes the thumbnail. With the thumbnail set to **Let the AI write the prompt**, the AI first turns it into a picture prompt using the title and article. 1 thumbnail by default, or 3: the second a close-up, the third a wider shot. | One image call per thumbnail, plus one AI call with Let the AI write the prompt |
16
+ | **Narration preparation** | Tells the AI how the narration should be delivered. It only adds cues, such as a short speaking direction or a laugh or sigh, and never rewrites the words. Works with the Inworld TTS-2 voice model. | One call each for the body, the intro and the outro |
17
+ | **YouTube Description** | Tells the AI how to write the description, chapters, hashtags and tags from the timestamped transcript. A project that picks none uses the built-in wording. | One call per video |
18
+ | **Shorts** | Tells the AI which moments to cut into vertical shorts (3 of 60 to 120 s by default). A project that picks none uses the built-in wording. | One call to pick them, one per short for its picture prompts, one image call per picture |
19
19
  | **Review** | Tells the reviewer what to check in a finished article, set of images, narration, thumbnail or shorts, and when to flag or redo it. Pictures can only be judged by the Claude Code and Codex reviewers. A stage with none picked uses its own built-in wording. | One reviewer call per item checked |
20
- | **Script (speakers)** | Used instead of an Article prompt when a run has several voices. The text model answers with `#` section headings and `Name: words` turns, one speaker per paragraph. Text in `[square brackets]` is not spoken. | One call on the project's LLM |
21
- | **Post** | Writes a project's post for X, LinkedIn, Instagram, TikTok, Reddit or Bluesky from the article. Slopify gives it the site's length limit and asks again when the answer is over it, then adds the hashtags and the link itself. Picked per site in a template's Upload pack (text **Written by a post prompt**); a site set to a post prompt with none picked uses the built-in wording. See [Posting to social sites](Posting-to-Social-Sites#post-prompts). | One call per site that uses it, on the project's LLM |
20
+ | **Script** | Used instead of an Article prompt when a run has several voices. The AI answers with `#` section headings and `Name: words` turns, one speaker per paragraph. Text in `[square brackets]` is not spoken. | One AI call (**Written by**) |
21
+ | **Post** | Writes a project's post for X, LinkedIn, Instagram, TikTok, Reddit or Bluesky from the article. Slopify gives it the site's length limit and asks again when the answer is over it, then adds the hashtags and the link itself. Picked per site in the post settings, on Create's **Extras** row or in Edit template's **YouTube description and posts** (text **Written by a post prompt**); a site set to a post prompt with none picked uses the built-in wording. See [Posting to social sites](Posting-to-Social-Sites#post-prompts). | One AI call per site that uses it |
22
22
 
23
- See [Title and article](Play-Title-and-Article), [Images](Play-Images), [Narration](Play-Narration), [YouTube description](YouTube-Description), [Shorts](Shorts), [Reviews and checkpoints](Reviews-and-Checkpoints), [Multiple voices](Multiple-Voices) and [Posting to social sites](Posting-to-Social-Sites) for how each is used.
23
+ See [Create: Article](Create-Article), [Create: Images](Create-Images), [Create: Narration](Create-Narration), [YouTube description](YouTube-Description), [Shorts](Shorts), [Pauses and checks](Reviews-and-Checkpoints), [Multiple voices](Multiple-Voices) and [Posting to social sites](Posting-to-Social-Sites) for how each is used.
24
24
 
25
25
  ## Write a new prompt
26
26
 
27
- 1. Open **Library → Prompts** and pick the **Prompt kind**.
27
+ 1. Open **Prompts** and pick the kind on the left.
28
28
  2. Press **New prompt**.
29
- 3. Type a **Name**: up to 200 characters, unique within its kind. Play and Edit project list the prompt by this name.
30
- 4. Write the **Body**, up to 100,000 characters. Put a keyword in double braces wherever the subject goes, for example:
29
+ 3. Type a **Name**: up to 200 characters, unique within its kind. Create and a project's Edit settings list the prompt by this name.
30
+ 4. Write the instructions (the box is named for the kind, for example **Article prompt instructions**), up to 100,000 characters. **Start from an example** fills it from a built-in text of the kind or from one of your prompts of that kind. Put a keyword in double braces wherever the subject goes, for example:
31
31
 
32
32
  ```
33
33
  Write a 1,500-word documentary narration about {{Topic}} for a general audience.
34
34
  Open with a question. End with one surprising fact.
35
35
  ```
36
36
 
37
- 5. Watch **Detected slots** (the keyword list) fill in as you type.
37
+ 5. Watch **Asks you for** (the keyword list) fill in as you type.
38
38
  6. For an Image prompt that draws photo-like pictures, see [Mark an image prompt as photorealistic](#mark-an-image-prompt-as-photorealistic).
39
39
  7. Press **Save** (or `Ctrl+S`). A tick shows when it is saved.
40
40
 
41
41
  If **Save** won't go, the sentence beside it names the first problem, such as "Enter a name." or a keyword that is never closed.
42
42
 
43
- ### Start from ready-made text
43
+ ### Start from an example
44
44
 
45
- Some kinds have a starter button above the body:
45
+ **Start from an example**, beside the instructions, lists text to start from, for every kind, whether or not you added starter templates. Create's **New prompt** drawer has the same list while its box is empty:
46
46
 
47
- - **Narration Preparation:** **Use Documentary Starter** fills in documentary delivery cues.
48
- - **YouTube Description**, **Shorts** and **Post:** **Use Built-in Starter** fills in the wording Slopify uses when no prompt is picked.
47
+ - **Built in**: the starter templates' prompts of the kind (for example **Sleep lore · Story** for an Article prompt), and Slopify's own wording where the kind has one: **Documentary delivery** for Narration preparation, **Slopify's own wording** for YouTube description, Shorts and Post, a check for each stage for Review (**Article check**, **Image check** and so on), and **Two-voice conversation** for Script.
48
+ - **Your prompts**: your other prompts of the same kind, by name. A starter template's prompt you added is listed once, here.
49
49
 
50
- When the body already has text, Slopify asks "Replace this prompt body?" first. Nothing is saved until you press **Save**.
50
+ When the box already has text, Slopify asks "Replace the text with “…”?" first. Nothing is saved until you press **Save**.
51
51
 
52
- ## Keywords (slots)
52
+ ## Keywords
53
53
 
54
- Every `{{keyword}}` in the body becomes one field on Play, except the two Slopify fills itself (below).
54
+ Every `{{keyword}}` in the body becomes one question on Create, except the two Slopify fills itself (below).
55
55
 
56
56
  - You type a keyword's value once per video, and it is filled into every prompt, intro and outro that names it.
57
- - Names are case-sensitive: `{{Topic}}` and `{{topic}}` are two fields.
57
+ - Names are case-sensitive: `{{Topic}}` and `{{topic}}` are two keywords.
58
58
  - A keyword the project title also names (for example a title of `History: {{Topic}}`) is typed per video, and templates save it empty.
59
59
  - A prompt with no keywords runs as written.
60
60
 
@@ -66,9 +66,9 @@ Mistakes the editor refuses, with the line and column:
66
66
 
67
67
  ### Keywords Slopify fills
68
68
 
69
- Keywords written with the `Slopify_` prefix, like `{{Slopify_Title}}`, `{{Slopify_Summary}}` or `{{Slopify_Setting}}`, never become fields either: Slopify fills them itself, and the editor's **Insert** bar lists the ones each kind of prompt can use. See [Keywords Slopify fills](Keywords-Slopify-Fills) for every one, where it works and what it costs. Any other name starting with `Slopify_` is refused when you save.
69
+ Keywords written with the `Slopify_` prefix, like `{{Slopify_Title}}`, `{{Slopify_Summary}}` or `{{Slopify_Setting}}`, never become questions either: Slopify fills them itself, and the editor's **Insert a keyword Slopify fills** menu lists the ones each kind of prompt can use. See [Keywords Slopify fills](Keywords-Slopify-Fills) for every one, where it works and what it costs. Any other name starting with `Slopify_` is refused when you save.
70
70
 
71
- `{{Scene}}` and `{{Appearance}}` are the old names of `{{Slopify_Scene}}` and `{{Slopify_Appearance}}`. They never become fields. The project's AI model writes them during the run, once the article exists, and the picture waits for them:
71
+ `{{Scene}}` and `{{Appearance}}` are the old names of `{{Slopify_Scene}}` and `{{Slopify_Appearance}}`. They never become questions. The project's AI model writes them during the run, once the article exists, and the picture waits for them:
72
72
 
73
73
  | Keyword | Filled with | Works in | Needs |
74
74
  | --- | --- | --- | --- |
@@ -88,7 +88,7 @@ Looks: {{Appearance}}
88
88
  - Each costs one more AI call per video (the looks call searches the web).
89
89
  - In the shorts' image prompt (**Shorts → Image prompt**), `{{Appearance}}` gives each short the subject's look and those of the figures its clip names. A `{{Scene}}` line is left out there: each short's images already show what is said at that moment.
90
90
 
91
- See [Play Images](Play-Images#scenes-from-the-article) for how the scenes and looks are chosen.
91
+ See [Create: Images](Create-Images#scenes-from-the-article) for how the scenes and looks are chosen.
92
92
 
93
93
  ## Mark an image prompt as photorealistic
94
94
 
@@ -97,31 +97,31 @@ YouTube asks whether a video contains realistic-looking AI scenes. Slopify answe
97
97
  1. Save the Image prompt first. (Before it is saved, the editor says "Save this Image prompt first, then choose whether it draws photorealistic pictures.")
98
98
  2. Turn on **Draws photorealistic pictures** when the prompt's style looks like real photos or film. Leave it off for painterly or illustrated styles.
99
99
 
100
- It applies at once, without pressing Save. Prepare upload then answers Yes to YouTube's AI use question for videos and shorts drawn with this prompt. A channel set to **Always Yes** or **Always No** wins. Default: off. See [Publishing to YouTube](Publishing-to-YouTube).
100
+ It applies at once, without pressing Save. Copy for YouTube Studio then answers Yes to YouTube's AI use question for videos and shorts drawn with this prompt. A channel set to **Always Yes** or **Always No** wins. Default: off. See [Publishing to YouTube](Publishing-to-YouTube).
101
101
 
102
102
  ## Edit, duplicate, use and delete
103
103
 
104
- Each prompt's row has, in order:
104
+ Each prompt's row has **Edit**, **Make a video** and **More** (**Duplicate**, **Versions**, **Delete**):
105
105
 
106
106
  | Action | What it does |
107
107
  |---|---|
108
108
  | **Edit** | Opens the editor. Change the text and press **Save**. |
109
109
  | **Duplicate** | Opens the editor with a copy. Give it a new name and save. |
110
- | **Use in Play** | Picks the prompt in your open Play draft and opens Play on its field. 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, a Description or Shorts prompt turns that step on, and a Post prompt writes every site's post that is on (X's, when none is). |
111
- | **History** | Opens the prompt's history (below). |
112
- | **Delete** | Asks first, then moves the prompt to **Settings → Backup & storage → Trash** for 30 days, where **Restore** brings it back. |
110
+ | **Make a video** | Picks the prompt in your open draft and opens Create on its field. An article prompt switches the article to **Write it for me**, an image prompt is ticked, a thumbnail prompt turns the thumbnail on with **From my thumbnail prompt**, a Description or Shorts prompt turns that extra on, and a Post prompt writes every site's post that is on (X's, when none is). |
111
+ | **Versions** | Opens the prompt's versions (below). |
112
+ | **Delete** | Asks first, then moves the prompt to **Settings → Trash** for 30 days, where **Restore** brings it back. |
113
113
 
114
- Use **Search prompts** (`/`) to find one by name. A press anywhere on a row picks it.
114
+ Use **Search all prompts** (`/`) to find one by name or text, in every kind and in the intros and outros too. While you search, the number beside each kind is how many match there, and picking a kind ends the search. A press anywhere on a row picks it.
115
115
 
116
116
  ### Rename a prompt
117
117
 
118
- Press the pencil (**Rename <name>**) beside the name, type the new name and press **Save name** or Enter. `Esc` or **Cancel** keeps the old one. The text stays as it is, the rename is one version in **History**, and the notice ("Renamed “A” to “B”.") has **Undo**.
118
+ Press the pencil (**Rename <name>**) beside the name, type the new name and press **Save name** or Enter. `Esc` or **Cancel** keeps the old one. The text stays as it is, the rename is one version in **Versions**, and the notice ("Renamed “A” to “B”.") has **Undo**.
119
119
 
120
120
  ## What happens when you edit a prompt
121
121
 
122
- Projects keep their own copy of every prompt they used. Editing a prompt here changes only runs started later. Templates remember a prompt by name and use its current text. Renaming a prompt renames it in every version of every template, so a template, and a schedule running an older version marked ready, keeps using it. A template uses the copy saved with it only once the prompt is deleted.
122
+ Projects keep their own copy of every prompt they used. Editing a prompt here changes only runs started later. Templates remember a prompt by name and use its current text. Renaming a prompt renames it in every version of every template, so a template, and a schedule running an older version approved for schedules, keeps using it. A template uses the copy saved with it only once the prompt is deleted.
123
123
 
124
- To bring a new prompt version into an existing project, open the project's **Edit project**, and on the prompt press **Use the Library version** (or pick it again). What was made from the old wording turns outdated, and nothing is remade until you choose. See [Editing a project](Editing-a-Project).
124
+ To bring a new prompt version into an existing project, open the project's **Edit settings**, and on the prompt press **Use the new wording** (or pick it again with **Use a saved prompt for …**). What was made from the old wording turns outdated, and nothing is made again until you choose. See [Editing a project](Editing-a-Project).
125
125
 
126
126
  ## Used by
127
127
 
@@ -129,20 +129,20 @@ The panel beside the list shows what uses the selected prompt:
129
129
 
130
130
  - **Templates** that name it,
131
131
  - **Schedules** (active or paused) by the template version they run,
132
- - **Projects**, with how many of their revisions used it and whether the current one does.
132
+ - **Projects**, with how many of their versions used it and whether the current one does.
133
133
 
134
- It matches by name within the kind. If nothing uses it, it says "Nothing uses it yet."
134
+ It matches by name within the kind. If nothing uses it, the line under its name ends "not used yet".
135
135
 
136
136
  ## History and versions
137
137
 
138
138
  Every save that changes the name or text adds a version, and every version is kept. A save that changed nothing adds none.
139
139
 
140
- 1. Press **History** on the prompt's row (the clock icon).
140
+ 1. Open **More** on the prompt's row and choose **Versions**, or press **Compare versions** beside the prompt once it has two.
141
141
  2. The drawer shows the latest change with the changed words marked.
142
142
 
143
143
  **Compare:** pick any two versions under **Older** and **Newer**. They are shown side by side, with removed words marked on the left and added words on the right. A rename between them is said above the text.
144
144
 
145
- **Versions:** every saved version, newest first. **Restore** saves an older version again as a new version ("restored from version 2"), so nothing after it is lost. If another prompt has taken its name since, rename that one first. Projects already made keep their text.
145
+ **Every version:** every saved version, newest first. **Restore** saves an older version again as a new version ("restored from version 2"), so nothing after it is lost. If another prompt has taken its name since, rename that one first. Projects already made keep their text.
146
146
 
147
147
  Prompts saved before history existed start with their current text as version 1. A prompt imported from a backup starts its history from its imported text, unless the backup carried its history.
148
148
 
@@ -150,14 +150,14 @@ Prompts saved before history existed start with their current text as version 1.
150
150
 
151
151
  - Keep one keyword for the subject (`{{Topic}}`) and put it in the video title too. Then templates and schedules work without extra setup.
152
152
  - Ask the article prompt for a Pronunciation Glossary of names in IPA if you use Inworld voices. See [Aliases and glossary](Narration-Aliases-and-Glossary).
153
- - Write image prompts as the picture itself ("A candle-lit scriptorium, oil painting, warm light"), not as an instruction to a person. No text model rewrites them.
154
- - Use **Duplicate** before a big change, or rely on **History** and **Restore**.
153
+ - Write image prompts as the picture itself ("A candle-lit scriptorium, oil painting, warm light"), not as an instruction to a person. No AI rewrites them.
154
+ - Use **Duplicate** before a big change, or rely on **Versions** and **Restore**.
155
155
 
156
156
  ## Related pages
157
157
 
158
- - [Library overview](Library-Overview)
159
- - [Title and article](Play-Title-and-Article)
160
- - [Images](Play-Images)
158
+ - [Prompts and Templates](Prompts-and-Templates)
159
+ - [Create: Article](Create-Article)
160
+ - [Create: Images](Create-Images)
161
161
  - [Keywords Slopify fills](Keywords-Slopify-Fills)
162
162
  - [Templates](Templates)
163
163
  - [Editing a project](Editing-a-Project)
@@ -1,38 +1,45 @@
1
- # Providers and Keys
1
+ # Keys and Services
2
2
 
3
- Slopify does no AI work itself: it calls providers you set up, on your own accounts. This page lists every provider, where to get each key, how to save and test it, how **Check all** checks everything at once, and how to add voices in **Settings → Voices**.
3
+ Slopify does no AI work itself: it calls services you set up, on your own accounts. This page lists every service, where to get each key, how to save and test it, how **Check every service** checks everything at once, and how to add voices in **Settings → Voices**.
4
4
 
5
- **Where to find it:** Settings → Providers (keys, command-line tools and the system voice), Settings → Voices (voice IDs).
5
+ **Where to find it:** Settings → **Keys & services** (keys, sign-in tools and the system voice), Settings → **Voices** (the voices narration can use). Settings opens on Keys & services.
6
6
 
7
- ## How providers are organised
7
+ ## How the page is laid out
8
8
 
9
- Settings → Providers shows three lists, one per kind of work. Each row says whether the provider is ready. Pick a row to open its setup beside the list: the steps, the key field or the command, and the actions.
9
+ **Keys & services** opens with three lines saying what your videos have now, each with its state in words (**Ready**, **No key** or **No voice saved**, the same words as the first-run screen):
10
10
 
11
- | List | What it makes | Providers |
11
+ | Line | Ready when | Its button while not ready |
12
12
  |---|---|---|
13
- | **Text** | Research, script, article, titles, descriptions, reviews | OpenRouter (API key), Claude Code CLI, Codex CLI, Antigravity CLI (command line) |
14
- | **Speech** | Narration | ElevenLabs, OpenAI, Cartesia, Inworld, Google Gemini (API key), System voice (built in, no key) |
15
- | **Images** | Images, thumbnails, animated clips | fal.ai, Replicate, OpenAI, Google (API key), Codex CLI (command line) |
13
+ | **Article** | A writing service is ready. The line names the one Create picks, for example "Claude Code CLI (Create picks it)". | **Set up a writing service** |
14
+ | **Narration** | A voice service can narrate: an OpenAI key (the first short saves its voice), the system voice found, or another voice service with a key and a voice saved under **Voices**. A key with no voice saved reads **No voice saved**. Otherwise "No voice service yet, so videos have no narration." | **Set up a voice service**, or **Save a voice** |
15
+ | **Images** | An image service is ready. Otherwise "No image service yet, so videos have no pictures." | **Set up an image service** |
16
16
 
17
- Row states:
17
+ A ready line has no button: its services are listed right under it.
18
18
 
19
- | State | Meaning |
20
- |---|---|
21
- | **Key saved** | A key is stored for this provider. |
22
- | **No key** | No key yet; the provider is not selectable on Play. |
23
- | **Ready** | A command-line tool was found and is usable. |
24
- | **Needs attention** | The tool was found but something is wrong, for example Codex CLI is older than 0.149.1. |
25
- | **Not found** | The tool is not on this computer (or not at the saved path). For the System voice: no speech program was found. |
19
+ Under them, **Check every service** (see below), then three lists, one per kind of work. Each row names the service, how it connects (**API key**, **Sign-in** or **Built in**) and its state. Pick a row to open its setup: beside the list on a wide window, under its own row on a narrower one (a laptop with the Settings list beside it, or a phone). The setup holds what it does and how it bills, the key box or the tool's path, and the steps to get a key. A link from the first-run screen or Create opens the service it names and scrolls to its key box, with **Back to the welcome** (or **Back to Create**) beside it, which becomes **Done · back to …** once a key is saved.
26
20
 
27
- Each row also says what kind it is: **Command line**, **Built in, no key** or **API key**.
21
+ | List | What it makes | Services |
22
+ |---|---|---|
23
+ | **Writing services** | Research, the article, titles, descriptions, checks | OpenRouter (API key), Claude Code CLI, Codex CLI, Antigravity CLI (sign-in) |
24
+ | **Voice services** | Narration | ElevenLabs, OpenAI, Cartesia, Inworld, Google Gemini (API key), System voice (built in, no key) |
25
+ | **Image services** | Images, thumbnails, animated clips | fal.ai, Replicate, OpenAI, Google (API key), Codex CLI (sign-in) |
28
26
 
29
- The command-line tools (Claude Code, Codex, Gemini) need no key: they use the sign-in you already have. They are covered on [AI CLIs](AI-CLIs).
27
+ Row states, the same here, on Voices and in the check:
30
28
 
31
- On a fresh install with no key saved, the page says **Paste a key to make its provider selectable on Play.** On the first launch Slopify also looks for the command-line tools. If it finds one it says so, names what it found and picks it on Play; choose **Got it** to hide that message. Narration needs no key either: without a voice key, the [System voice](#the-system-voice) reads it with your computer's own speech.
29
+ | State | Meaning |
30
+ |---|---|
31
+ | **Ready** | A key is saved, or the tool was found and is signed in. |
32
+ | **No key** | No key yet; Create lists the service with "No key" and can't use it. |
33
+ | **Not found** | The tool is not on this computer (or not at the saved path). |
34
+ | **Signed out** | The tool was found but is not signed in. |
35
+ | **Needs fixing** | The tool was found but something else is wrong, for example Codex CLI older than 0.149.1. |
36
+ | **Not installed** | The System voice found no speech program on this computer. |
37
+
38
+ The sign-in tools (Claude Code, Codex, Antigravity) need no key: they use the sign-in you already have. They are covered on [AI CLIs](AI-CLIs). Narration needs no key either: without a voice key, the [System voice](#the-system-voice) reads it with your computer's own speech.
32
39
 
33
40
  ## Where your keys are kept
34
41
 
35
- - A key is stored on this computer only and sent only to its own provider.
42
+ - A key is stored on this computer only and sent only to its own service.
36
43
  - It is never put in a backup or an export. After you import a backup on another computer, enter your keys again.
37
44
  - A saved key is shown as a fixed row of dots, never any part of it.
38
45
  - Slopify reads the key when each call starts, so a key you change mid-run is used from the next call.
@@ -40,55 +47,53 @@ On a fresh install with no key saved, the page says **Paste a key to make its pr
40
47
 
41
48
  ## Add a key
42
49
 
43
- 1. Open **Settings → Providers**.
44
- 2. Pick the provider in its list (for example **ElevenLabs** under **Speech**).
45
- 3. Follow the numbered steps shown beside it. They link to the provider's sign-up page, the page that makes the key and, where there is one, its billing page. Once a key is saved, the steps fold under **Where to get a key**.
46
- 4. Paste the key in **<Provider> API key**.
47
- 5. Optional: choose **Test** to check the pasted key before you keep it. See [Test a key](#test-a-key).
48
- 6. Choose **Save**. A tick shows beside Save for a moment.
50
+ 1. Open **Settings → Keys & services**.
51
+ 2. Pick the service in its list (for example **ElevenLabs** under **Voice services**), or press the **Set up …** button of the line that needs it.
52
+ 3. Follow the steps under **Where to get a key**. They link to the service's sign-up page, the page that makes the key and, where there is one, its billing page.
53
+ 4. Paste the key in **<Service> API key**.
54
+ 5. Press **Save**.
55
+ 6. Optional: press **Test the key (free)** to check it. See [Test a key](#test-a-key).
49
56
 
50
- To replace a key, paste the new one and choose **Save**. To remove it, choose **Remove**, then **Remove key**. Projects that used that provider cannot retry until a key is saved again.
57
+ To replace a key, paste the new one and press **Save**. To remove it, press **Remove the key** and confirm. Projects that used that service cannot try again until a key is saved again.
51
58
 
52
- The info button beside each provider's name says what it does and how it bills.
59
+ When you came from Create or the welcome screen to add a key, **Done · back to …** takes you back once it is saved. With a voice key saved but no voice for it yet, the line under the key offers **Add an ElevenLabs voice** (or the service's name).
53
60
 
54
61
  ## Test a key
55
62
 
56
- **Test** asks the provider whether a key works, with the cheapest harmless call it allows (such as listing its models). Nothing is generated or billed. The answer waits up to 15 seconds.
57
-
58
- - **Before saving:** with a key pasted in the field, Test checks that pasted key. It is sent only to its own provider, never stored and never logged. When it passes, the answer adds "It is not saved yet: choose Save to keep it."
59
- - **After saving:** with the field empty, Test checks the saved key.
63
+ **Test the key (free)** appears once a key is pasted or saved. It asks the service whether the key works, with the cheapest harmless call it allows (such as listing its models). Nothing is made or billed. The answer waits up to 15 seconds.
60
64
 
61
- With neither, Test is greyed out: "Paste a key first."
65
+ - **Before saving:** with a key pasted in the box, it checks that pasted key. It is sent only to its own service, never stored and never logged. When it passes, the answer says it is not saved yet.
66
+ - **After saving:** with the box empty, it checks the saved key.
62
67
 
63
68
  | Answer | What it means | What to do |
64
69
  |---|---|---|
65
- | Accepted | The key works. Except for OpenRouter, credit is only checked when Slopify first generates with it. | Nothing. |
66
- | Did not accept (HTTP 401) | Mistyped, revoked or for another account. | Make a new key, Save, Test. |
67
- | No credit (HTTP 402) | Key accepted, but the account has no credit or payment method. | Add credit on the provider's billing page. |
68
- | Refused (HTTP 403) | The key is restricted, or the account needs verifying or billing set up. | Check the permissions listed for that provider below. |
69
- | Too many requests (HTTP 429) | The key is usually valid. | Wait a minute and Test again. |
70
- | Problem on its side (HTTP 5xx) | The provider is having trouble. | Wait a few minutes and Test again. |
70
+ | Accepted | The key works. Except for OpenRouter, credit is only checked when Slopify first makes something with it. | Nothing. |
71
+ | Did not accept (HTTP 401) | Mistyped, revoked or for another account. | Make a new key, save it, test it. |
72
+ | No credit (HTTP 402) | Key accepted, but the account has no credit or payment method. | Add credit on the service's billing page. |
73
+ | Refused (HTTP 403) | The key is restricted, or the account needs verifying or billing set up. | Check the permissions listed for that service below. |
74
+ | Too many requests (HTTP 429) | The key is usually valid. | Wait a minute and test again. |
75
+ | Problem on its side (HTTP 5xx) | The service is having trouble. | Wait a few minutes and test again. |
71
76
  | Did not answer / could not reach | No answer within 15 seconds, or no connection. | Check your internet, firewall or proxy. |
72
- | Unexpected answer | Anything else. | Check the key; if it keeps happening, use **Download diagnostics** in Settings and report it. |
77
+ | Unexpected answer | Anything else. | Check the key; if it keeps happening, use **Download diagnostics** in Settings → About and report it. |
73
78
 
74
- ## Text providers
79
+ ## Writing services
75
80
 
76
81
  ### OpenRouter
77
82
 
78
- Writes the text with hundreds of models from many companies through one key. Charged per token from credit you buy on OpenRouter; prices follow the model catalogue (see [Models](Models)).
83
+ Writes the text with hundreds of models from many companies through one key. Charged per token from credit you buy on OpenRouter; prices follow the model list (see [Models](Models)).
79
84
 
80
85
  1. Sign up at openrouter.ai/sign-up.
81
86
  2. Open **Credits** (openrouter.ai/settings/credits) and buy credit. Paid models are charged from it; a negative balance stops even free models.
82
87
  3. Open **Keys** (openrouter.ai/settings/keys), choose **Create API key**, and copy it.
83
- 4. Paste it in Slopify, **Save**, then **Test**.
88
+ 4. Paste it in Slopify, **Save**, then **Test the key (free)**.
84
89
 
85
- Keys have no scopes. If you set a credit limit on the key, keep it above what a run costs. OpenRouter is the only provider whose Test also shows missing credit.
90
+ Keys have no scopes. If you set a credit limit on the key, keep it above what a run costs. OpenRouter is the only service whose test also shows missing credit.
86
91
 
87
92
  ### Claude Code CLI, Codex CLI, Antigravity CLI
88
93
 
89
- No key. See [AI CLIs](AI-CLIs).
94
+ No key. Pick the tool's row to see its command, whether it was found and signed in, and **Change path** to point Slopify at it (**Executable path**, then **Save path**). See [AI CLIs](AI-CLIs).
90
95
 
91
- ## Speech providers
96
+ ## Voice services
92
97
 
93
98
  ### ElevenLabs
94
99
 
@@ -96,9 +101,9 @@ Narrates with ElevenLabs voices, including voices you added to your ElevenLabs a
96
101
 
97
102
  1. Sign up at elevenlabs.io/app/sign-up.
98
103
  2. Open **Developers → API keys** (elevenlabs.io/app/developers/api-keys), choose **Create key**, and copy it.
99
- 3. Paste it in Slopify, **Save**, then **Test**.
104
+ 3. Paste it in Slopify, **Save**, then **Test the key (free)**.
100
105
 
101
- A restricted key needs **Text to Speech** access and **Models** read access (models_read) for Test; Voices read helps when picking voices. Remove any credit quota or IP allowlist that would block this computer.
106
+ A restricted key needs **Text to Speech** access and **Models** read access (models_read) for the test; Voices read helps when picking voices. Remove any credit quota or IP allowlist that would block this computer.
102
107
 
103
108
  ### OpenAI (speech)
104
109
 
@@ -107,11 +112,11 @@ Narrates with OpenAI's text-to-speech voices. Billed per character or per audio
107
112
  1. Sign up or sign in at platform.openai.com/signup.
108
113
  2. Open **Billing** and buy prepaid credit. New accounts need at least $5 before any call works.
109
114
  3. Open **API keys** (platform.openai.com/api-keys), choose **Create new secret key**, and copy it. It is shown once.
110
- 4. Paste it in Slopify, **Save**, then **Test**.
115
+ 4. Paste it in Slopify, **Save**, then **Test the key (free)**.
111
116
 
112
- A key with All permissions works. A restricted key needs **Models: Read** (for Test) and **Model capabilities: Request** (for speech and images).
117
+ A key with All permissions works. A restricted key needs **Models: Read** (for the test) and **Model capabilities: Request** (for speech and images).
113
118
 
114
- OpenAI appears twice in Settings, once under **Speech** and once under **Images**. Each has its own key field, so you can key one without the other. You can paste the same OpenAI key into both.
119
+ OpenAI appears twice in Keys & services, once under **Voice services** and once under **Image services**. Each keeps its own key, so you can key one without the other. You can paste the same OpenAI key into both.
115
120
 
116
121
  ### Cartesia
117
122
 
@@ -119,7 +124,7 @@ Narrates with Cartesia voices, billed in characters from your Cartesia plan. The
119
124
 
120
125
  1. Sign up at play.cartesia.ai/sign-up.
121
126
  2. Open **API Keys** (play.cartesia.ai/keys), create a key, and copy it. It starts with `sk_car_`.
122
- 3. Paste it in Slopify, **Save**, then **Test**.
127
+ 3. Paste it in Slopify, **Save**, then **Test the key (free)**.
123
128
 
124
129
  Keys have no scopes.
125
130
 
@@ -130,22 +135,22 @@ Narrates with Inworld voices, billed per character from your Inworld account.
130
135
  1. Sign up at platform.inworld.ai/signup.
131
136
  2. Open **API Keys** (platform.inworld.ai/api-keys) and choose **Generate new key**. It must be a Standard key; Realtime-only keys do not work.
132
137
  3. Copy the **Base64 credentials** value exactly as shown, without encoding it again.
133
- 4. Paste it in Slopify, **Save**, then **Test**.
138
+ 4. Paste it in Slopify, **Save**, then **Test the key (free)**.
134
139
 
135
- On Play, choose the TTS-2 or TTS-2 Flash model and an Inworld voice (for example `Dennis`, or a voice from your workspace).
140
+ On Create, choose the TTS-2 or TTS-2 Flash model and an Inworld voice (for example `Dennis`, or a voice from your workspace).
136
141
 
137
142
  How long text is handled:
138
143
 
139
144
  - Short text streams straight away.
140
145
  - With TTS-2, text over 4,000 characters goes as one async job of up to 100,000 characters. Inworld caps On-Demand accounts at 10,000. The audio is ready once the job finishes.
141
- - TTS-2 Flash sends parts of at most 4,000 characters. For long articles, pick paragraph chunking.
142
- - Pausing stops Slopify's own requests, but Inworld may still finish and bill a job it already accepted. Resuming starts a new request for any unfinished narration.
146
+ - TTS-2 Flash sends parts of at most 4,000 characters. For long articles, split the narration by paragraph.
147
+ - Pausing stops Slopify's own requests, but Inworld may still finish and bill a job it already accepted. Continuing starts a new request for any unfinished narration.
143
148
 
144
- Some features need Inworld: Narration Preparation and pronunciations need an Inworld TTS-2 model. See [Play-Narration](Play-Narration) and [Narration-Aliases-and-Glossary](Narration-Aliases-and-Glossary).
149
+ Some features need Inworld: narration preparation and pronunciations need an Inworld TTS-2 model. See [Create: Narration](Create-Narration) and [Narration Aliases and Glossary](Narration-Aliases-and-Glossary).
145
150
 
146
151
  ### Google Gemini (speech)
147
152
 
148
- Narrates with Gemini's 30 prebuilt voices, billed per text and audio token on your Gemini API key. It uses the key saved for [Google images](#google): with one saved there, nothing is needed here. You can also save a key of its own under **Google Gemini** in the **Speech** list.
153
+ Narrates with Gemini's 30 prebuilt voices, billed per text and audio token on your Gemini API key. It uses the key saved for [Google images](#google): with one saved there, nothing is needed here. You can also save a key of its own under **Google Gemini** in the **Voice services** list.
149
154
 
150
155
  Pick a Gemini voice in Settings → **Voices** (see [Add a voice](#add-a-voice)). With two speakers on Gemini voices (a podcast or interview, see [Multiple Voices](Multiple-Voices)), their consecutive turns go in one two-speaker request; a third voice starts a new request.
151
156
 
@@ -162,18 +167,18 @@ Slopify looks for a speech program each time and uses the best one it finds:
162
167
  | Linux | Piper, SVOX Pico, eSpeak NG or eSpeak, best first. Install one, for example `sudo apt install espeak-ng`, `sudo pacman -S espeak-ng` or `sudo dnf install espeak-ng`. Piper needs its voice models listed in `SLOPIFY_PIPER_VOICES`, and counts only when `piper --help` shows Piper's own options (the mouse settings app also called piper is left out). |
163
168
  | Docker | The image includes eSpeak NG. If it is missing, update the image. |
164
169
 
165
- Pick **System voice** in the **Speech** list to see what was found: "Found *engine*. Narration with it is free; a keyed voice (ElevenLabs, OpenAI) sounds better.", each program with its number of voices, and **Add a system voice**, which opens Settings → **Voices**. When nothing is found, it says what to install on your system. On Play it is offered as a TTS provider like the others, greyed out as **Speech Program Missing** when nothing is found.
170
+ Pick **System voice** in the **Voice services** list to see what was found: "Found *program*. Narration with it is free; a voice service with a key sounds better.", each program with its number of voices, and **Add a system voice**, which opens Settings → **Voices**. When nothing is found, the row says **Not installed** and the panel says what to install on your system. On Create it is offered as a voice service like the others, marked **Not found** when nothing is installed.
166
171
 
167
- ## Image providers
172
+ ## Image services
168
173
 
169
174
  ### fal.ai
170
175
 
171
- Draws images and thumbnails with the models fal.ai hosts, charged per image from prepaid credit. fal.ai locks the account when the balance runs out, so a run stops at the images step until you add credit.
176
+ Draws images and thumbnails with the models fal.ai hosts, charged per image from prepaid credit. fal.ai locks the account when the balance runs out, so a run stops at the images until you add credit.
172
177
 
173
178
  1. Sign up at fal.ai/login.
174
179
  2. Open **Billing** (fal.ai/dashboard/billing) and buy credit.
175
180
  3. Open **Keys** (fal.ai/dashboard/keys), choose **Add key** with the **API** scope, and copy it.
176
- 4. Paste it in Slopify, **Save**, then **Test**.
181
+ 4. Paste it in Slopify, **Save**, then **Test the key (free)**.
177
182
 
178
183
  The API scope is enough; Slopify does not need an ADMIN key.
179
184
 
@@ -184,7 +189,7 @@ Draws images and thumbnails with the models Replicate hosts, charged per image o
184
189
  1. Sign in at replicate.com/signin.
185
190
  2. Open **Billing** (replicate.com/account/billing) and buy credit. Replicate needs credit before it runs paid models.
186
191
  3. Open **API tokens** (replicate.com/account/api-tokens), create a token, and copy it. It starts with `r8_`.
187
- 4. Paste it in Slopify, **Save**, then **Test**.
192
+ 4. Paste it in Slopify, **Save**, then **Test the key (free)**.
188
193
 
189
194
  Tokens have no scopes.
190
195
 
@@ -199,7 +204,7 @@ Draws images and thumbnails with Google's Gemini image models, charged per image
199
204
  1. Sign in to Google AI Studio (aistudio.google.com) with your Google account.
200
205
  2. Open **Projects** and choose **Set up billing** next to your project. Gemini image models are not on the free tier.
201
206
  3. Open **API keys** (aistudio.google.com/apikey), choose **Create API key**, and copy it.
202
- 4. Paste it in Slopify, **Save**, then **Test**.
207
+ 4. Paste it in Slopify, **Save**, then **Test the key (free)**.
203
208
 
204
209
  Use a key made in AI Studio. An older Google Cloud key must be set to **Restrict to Gemini API only**, or Google rejects it.
205
210
 
@@ -211,72 +216,74 @@ Draws images with your ChatGPT sign-in instead of a key. See [AI CLIs](AI-CLIs#c
211
216
 
212
217
  ## How many calls run at once
213
218
 
214
- | Provider | Calls at once |
219
+ | Service | Calls at once |
215
220
  |---|---|
216
221
  | OpenRouter, ElevenLabs, OpenAI (speech and images), Cartesia, fal.ai, Replicate, Google | 3 |
217
222
  | Inworld | 5 |
218
- | Claude Code, Codex, Gemini (text) | 3 |
223
+ | Claude Code, Codex, Antigravity (writing) | 3 |
219
224
  | Codex CLI (images) | 4 |
220
225
 
221
- The keyed providers' numbers come from the model catalogue.
226
+ The keyed services' numbers come from the model list.
222
227
 
223
- ## Check all providers
228
+ ## Check every service
224
229
 
225
- **Check all** runs every check at once. Run it after changing a key, or when a run stops at a provider.
230
+ **Check every service** runs every check at once. Run it after changing a key, or when a run stops at a service.
226
231
 
227
- 1. Open **Settings → Providers**.
228
- 2. Choose **Check all** at the top of the page (or press `Ctrl+K` and run **Check all providers**).
229
- 3. Read the **Health check** section under the lists.
232
+ 1. Open **Settings → Keys & services**.
233
+ 2. Press **Check every service** (or press `Ctrl+K` and run **Check every service**). The line beside it says when it last checked.
234
+ 3. Read the result under the button: one row for each service that needs something, then one line naming the services that are **Ready**, and one naming those not set up and not used anywhere.
230
235
 
231
- For each provider it checks:
236
+ For each service it checks:
232
237
 
233
- - **Installed** and **Signed in** for a command-line tool. For Antigravity CLI, Slopify runs `agy models`: a model list means signed in, "Please sign in" means signed out (run `agy` in a terminal), and anything else shows as unknown.
238
+ - **Installed** and **Signed in** for a sign-in tool. For Antigravity CLI, Slopify runs `agy models`: a model list means signed in, "Please sign in" means signed out (run `agy` in a terminal), and anything else shows as unknown.
234
239
  - **Speech program found** for the System voice, with the program it speaks with.
235
- - **Key saved** and **Key valid** for a keyed provider, using the same call as **Test**. Nothing is generated or billed.
236
- - **Model reachable** for a keyed provider: Slopify asks the provider, with the saved key, about each model you chose (its model page, or the model list for OpenRouter and ElevenLabs), without generating anything. It reads, for example, "OpenRouter answered for … with this key." A provider with no such check says so.
237
- - **Chosen models**: that the models your templates, schedules, drafts and unfinished projects use are still offered. A retired one points you to **Switch** in Settings → Models (see [Models](Models#switch-away-from-a-retired-model)).
240
+ - **Key** and **Key valid** for a keyed service, using the same call as **Test the key (free)**. Nothing is made or billed. A service chosen somewhere with no key saved shows **No key**, with where it is chosen and where to paste its key.
241
+ - **Model reachable** for a keyed service: Slopify asks the service, with the saved key, about each model you chose (its model page, or the model list for OpenRouter and ElevenLabs), without making anything.
242
+ - **Chosen models**: that the models your templates, schedules, drafts and unfinished projects use are still offered. A retired one points you to Settings → Models (see [Models](Models#switch-away-from-a-retired-model)).
238
243
 
239
- Each provider's row has **Check again**, which checks that provider alone; its result replaces the row until the next **Check all**. It is the quick way to confirm a fix, such as signing a CLI in again.
244
+ Each service's row has **Check again**, which checks that service alone; its result replaces the row until the next full check. It is the quick way to confirm a fix, such as signing a tool in again.
240
245
 
241
246
  | Result | Meaning |
242
247
  |---|---|
243
248
  | **Ready** | Every check passed. |
244
- | **Check** | Something might stop a run, such as a rate limit or the provider being down during the check. |
249
+ | **May need fixing** | Something might stop a run, such as a rate limit or the service being down during the check. |
245
250
  | **Needs fixing** | Something will stop a run. The line says how to fix it. |
251
+ | **No key** | The service is chosen somewhere (a template, a schedule, a Create draft or a project) and has no key saved. |
246
252
  | **Not set up** | Neither set up nor used anywhere. These are listed together on one line. |
247
253
 
248
- The report stays while you move between Settings sections.
254
+ The result stays while you move between Settings pages.
249
255
 
250
256
  ## Add a voice
251
257
 
252
- Narration needs a voice ID from your speech provider. Slopify does not check the ID when you add it; a wrong ID fails when a run's narration uses it.
258
+ Narration needs a voice from your voice service. Slopify does not check a pasted voice ID when you add it; a wrong ID fails when a run's narration uses it.
253
259
 
254
- 1. Save a key for the speech provider in **Settings → Providers** (the Provider list only shows speech providers).
255
- 2. Find the voice ID in the provider's voice library and copy it.
256
- 3. Open **Settings → Voices**.
257
- 4. Under **Add a voice**, fill in the fields and choose **Add voice**.
260
+ 1. Save a key for the voice service in **Settings → Keys & services**. (You can add a voice before, but it can't narrate until the key is saved.)
261
+ 2. Open **Settings → Voices**.
262
+ 3. Under **Add a voice**, fill in the fields and press **Add voice**. Until it can add, the line beside it says what is still missing, such as "Pick a voice first".
258
263
 
259
264
  | Field | What it does | Rules |
260
265
  |---|---|---|
261
- | **Voice name** | The name you pick the voice by on Play and in Edit project. Only you see it. | Required, up to 200 characters. Names can repeat. |
262
- | **Provider** | The text-to-speech service the ID belongs to. | Speech providers only. |
263
- | **Voice ID** | The provider's own ID for the voice. For Inworld, use an ID such as `Dennis`, or one from your workspace. For **System voice** it is a list of the voices found on this computer, grouped by speech program (**Pick a voice**); for **Google Gemini**, a list of Gemini's voices (**Pick a Gemini voice**). Picking one fills in the name too. | Required, up to 200 characters, unique per provider. |
264
- | **Languages** | The languages the voice speaks, as codes such as `es, de`. Play lists the voice only for projects in these languages. | 2 or 3 letter codes. Blank asks the provider when it can say; a voice with unknown languages shows as **Any (not known)** and is offered for every language. |
266
+ | **Voice service** | The service the voice belongs to. Each says when it has no key or is not installed. | Voice services only. |
267
+ | **Voice** | Pick from the service's own list (for example **Pick an OpenAI voice**), or **A voice of my own (paste its ID)** and paste the service's ID for it, from its voice library. For Inworld, an ID such as `Dennis`, or one from your workspace. For **System voice** it is a list of the voices found on this computer, grouped by speech program, with a filter and **Listen**. | Required, up to 200 characters, one per voice and service. |
268
+ | **Name** | How you pick it on Create. Only you see it. | Required, up to 200 characters. Names can repeat. |
269
+ | **Languages it speaks** | The languages the voice speaks, picked by name; each picked one has its own remove button. Create lists the voice only for projects in these languages. | **Any language** until you pick one: the service is asked when it can say, and otherwise the voice is offered for every language. |
265
270
 
266
271
  ## Manage your voices
267
272
 
268
- The **Voices** table lists **Name**, **Provider**, **Voice ID**, **Languages** and **Real person** for each voice.
273
+ Each voice is one row: its name, its service (and that service's state) and its ID, with **Listen** and **Remove**; under them what it **Speaks** and **Sounds like a real person**. When a voice's service has no key, a line above the list says so with a button to add the key.
269
274
 
270
- - **Edit** in the Languages cell changes the codes; choose **Save** or **Cancel**.
271
- - **Real person**: turn it on for a voice cloned from, or made to sound like, a real person. Prepare upload then answers Yes to YouTube's AI use question for videos it narrates. An AI voice that imitates no one stays off. Default: off. See [Publishing-to-YouTube](Publishing-to-YouTube).
272
- - **Remove**, then **Remove voice**, deletes it from the list. Projects that used the voice keep the audio they made with it.
275
+ - **Speaks** changes the voice's languages in place: pick one from the list to add it, or remove one. Each change is saved at once.
276
+ - **Sounds like a real person**: turn it on for a voice cloned from, or made to sound like, someone real. YouTube asks you to say so when you upload; Copy for YouTube Studio answers Yes for you. An AI voice that imitates no one stays off. Default: off. See [Publishing to YouTube](Publishing-to-YouTube).
277
+ - **Listen** reads one sentence aloud: free with the system voice, one short paid request with a service that has a key.
278
+ - **Remove**, then confirm, deletes it from the list. Projects that used the voice keep the audio they made with it.
279
+ - **Pronunciation** under the table opens the narration aliases: how names and words are said. See [Narration Aliases and Glossary](Narration-Aliases-and-Glossary).
273
280
 
274
- For projects with more than one narrator, see [Multiple-Voices](Multiple-Voices). For voices in other languages, see [Other-Languages](Other-Languages).
281
+ For projects with more than one narrator, see [Multiple Voices](Multiple-Voices). For voices in other languages, see [Other Languages](Other-Languages).
275
282
 
276
283
  ## Tips
277
284
 
278
- - The cheapest way to start: sign in to a command-line tool for text and images, and use the System voice (free) or Cartesia's free plan for narration.
279
- - A Test that passes does not prove the account has credit (except on OpenRouter). The first real generation does.
285
+ - The cheapest way to start: sign in to a tool for writing and images, and use the System voice (free) or Cartesia's free plan for narration.
286
+ - A test that passes does not prove the account has credit (except on OpenRouter). The first real call does.
280
287
  - If you share a machine, keep Slopify bound to `127.0.0.1`: anyone who reaches its port can use your keys.
281
288
 
282
289
  ## Related pages
@@ -285,6 +292,6 @@ For projects with more than one narrator, see [Multiple-Voices](Multiple-Voices)
285
292
  - [Models](Models)
286
293
  - [Costs and Run Cost](Costs-and-Run-Cost)
287
294
  - [Settings Reference](Settings-Reference)
288
- - [Play Narration](Play-Narration)
295
+ - [Create: Narration](Create-Narration)
289
296
  - [Multiple Voices](Multiple-Voices)
290
297
  - [Troubleshooting](Troubleshooting)