@gentbajko/slopify 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/README.md +6 -4
  2. package/dist/adapter-registry.js +28 -0
  3. package/dist/adapters/alignment/text.js +3 -1
  4. package/dist/adapters/key-probes.js +57 -8
  5. package/dist/adapters/tts/gemini.js +206 -0
  6. package/dist/adapters/tts/pcm-mp3.js +62 -0
  7. package/dist/adapters/tts/system.js +147 -0
  8. package/dist/assets/models.yaml +38 -0
  9. package/dist/assets/style-preview/narration.mp3 +0 -0
  10. package/dist/assets/style-preview/tall-1.jpg +0 -0
  11. package/dist/assets/style-preview/tall-2.jpg +0 -0
  12. package/dist/assets/style-preview/tall-3.jpg +0 -0
  13. package/dist/assets/style-preview/wide-1.jpg +0 -0
  14. package/dist/assets/style-preview/wide-2.jpg +0 -0
  15. package/dist/assets/style-preview/wide-3.jpg +0 -0
  16. package/dist/catalog/registry.js +4 -1
  17. package/dist/catalog/validate.js +2 -2
  18. package/dist/edge/autostart/docker-record.js +2 -2
  19. package/dist/edge/autostart/docker.js +68 -0
  20. package/dist/edge/autostart/prompt.js +7 -1
  21. package/dist/edge/autostart/service.js +18 -9
  22. package/dist/edge/cli-args.js +71 -0
  23. package/dist/edge/cli.js +11 -16
  24. package/dist/edge/docker-install/run.js +7 -1
  25. package/dist/edge/events/hub.js +3 -1
  26. package/dist/edge/http/actions.js +6 -1
  27. package/dist/edge/http/app.js +2 -0
  28. package/dist/edge/http/byte-range.js +42 -0
  29. package/dist/edge/http/diagnostics.js +1 -0
  30. package/dist/edge/http/draft-files.js +2 -4
  31. package/dist/edge/http/files.js +10 -6
  32. package/dist/edge/http/onboarding.js +64 -4
  33. package/dist/edge/http/project-templates.js +19 -2
  34. package/dist/edge/http/projects.js +6 -1
  35. package/dist/edge/http/providers.js +39 -9
  36. package/dist/edge/http/reviews.js +18 -8
  37. package/dist/edge/http/revision-files.js +2 -4
  38. package/dist/edge/http/schedules.js +9 -5
  39. package/dist/edge/http/storage.js +16 -2
  40. package/dist/edge/http/studio.js +111 -31
  41. package/dist/edge/http/style-preview.js +3 -42
  42. package/dist/edge/http/tutorials.js +59 -0
  43. package/dist/edge/http/youtube-edits.js +11 -2
  44. package/dist/extension/slopify-studio-chrome.zip +0 -0
  45. package/dist/extension/slopify-studio-firefox.zip +0 -0
  46. package/dist/host-cli/gemini-login.js +83 -0
  47. package/dist/host-cli/status.js +4 -2
  48. package/dist/kernel/db/migrations/0041-cast-hosts.sql +3 -0
  49. package/dist/kernel/ports/model.js +5 -3
  50. package/dist/kernel/ports/system-speech.js +203 -0
  51. package/dist/kernel/runner/graph.js +17 -1
  52. package/dist/kernel/runner/index.js +4 -4
  53. package/dist/kernel/runner/providers.js +1 -1
  54. package/dist/main.js +5 -0
  55. package/dist/model-catalog.js +2 -0
  56. package/dist/patch-notes/3.0.1.md +105 -0
  57. package/dist/patch-notes/3.0.2.md +20 -0
  58. package/dist/patch-notes/index.json +12 -0
  59. package/dist/slices/admission/rules.js +3 -3
  60. package/dist/slices/admission/start.js +1 -1
  61. package/dist/slices/channels/cast-match.js +1 -1
  62. package/dist/slices/channels/repo.js +3 -0
  63. package/dist/slices/channels/schema.js +23 -0
  64. package/dist/slices/channels/service.js +6 -6
  65. package/dist/slices/control/index.js +3 -1
  66. package/dist/slices/control/providers.js +4 -1
  67. package/dist/slices/episodes/related.js +2 -2
  68. package/dist/slices/estimate/requests.js +9 -1
  69. package/dist/slices/eta/history.js +56 -0
  70. package/dist/slices/eta/model.js +63 -0
  71. package/dist/slices/eta/view.js +25 -0
  72. package/dist/slices/fixes/rules.js +1 -1
  73. package/dist/slices/fonts/coverage.js +1 -1
  74. package/dist/slices/loudness/model.js +1 -1
  75. package/dist/slices/model-upkeep/usage.js +4 -2
  76. package/dist/slices/narration/pauses-model.js +1 -1
  77. package/dist/slices/narration/pronunciation.js +2 -2
  78. package/dist/slices/notifications/notifier.js +28 -2
  79. package/dist/slices/notifications/rules.js +26 -2
  80. package/dist/slices/onboarding/first-run.js +40 -14
  81. package/dist/slices/onboarding/full-video.js +81 -0
  82. package/dist/slices/onboarding/model.js +21 -0
  83. package/dist/slices/onboarding/quick-short.js +25 -10
  84. package/dist/slices/play-drafts/convert.js +3 -3
  85. package/dist/slices/play-drafts/readiness.js +1 -1
  86. package/dist/slices/project-templates/from-project.js +10 -3
  87. package/dist/slices/project-templates/next-chapter.js +94 -0
  88. package/dist/slices/project-templates/one-off.js +1 -1
  89. package/dist/slices/project-templates/schema.js +7 -1
  90. package/dist/slices/rebuild/recipe-exports.js +5 -0
  91. package/dist/slices/rebuild/recipe-save.js +1 -1
  92. package/dist/slices/rebuild/recipe-voices.js +1 -1
  93. package/dist/slices/rebuild/review-redo.js +15 -0
  94. package/dist/slices/rebuild/runtime-export-bed.js +1 -1
  95. package/dist/slices/rebuild/runtime-review.js +35 -5
  96. package/dist/slices/rebuild/runtime-store.js +23 -1
  97. package/dist/slices/rebuild/runtime-voices.js +2 -2
  98. package/dist/slices/rebuild/service-readiness.js +3 -3
  99. package/dist/slices/reviews/repo.js +16 -4
  100. package/dist/slices/run-cost/panel.js +30 -8
  101. package/dist/slices/run-cost/pricing.js +4 -1
  102. package/dist/slices/schedules/agenda.js +66 -2
  103. package/dist/slices/schedules/repo.js +1 -1
  104. package/dist/slices/schedules/scheduler.js +1 -1
  105. package/dist/slices/schedules/schema.js +43 -2
  106. package/dist/slices/schedules/similar.js +41 -3
  107. package/dist/slices/schedules/topic-list.js +2 -2
  108. package/dist/slices/schedules/topics.js +118 -17
  109. package/dist/slices/settings/first-run.js +5 -1
  110. package/dist/slices/settings/health.js +64 -7
  111. package/dist/slices/settings/key-guides.js +17 -7
  112. package/dist/slices/settings/key-test.js +12 -4
  113. package/dist/slices/settings/keys.js +10 -5
  114. package/dist/slices/settings/model-reach.js +52 -0
  115. package/dist/slices/settings/model.js +49 -0
  116. package/dist/slices/settings/models.js +5 -1
  117. package/dist/slices/settings/readiness.js +14 -2
  118. package/dist/slices/settings/tutorial-schema.js +5 -0
  119. package/dist/slices/shorts/render.js +18 -17
  120. package/dist/slices/storage/documents.js +11 -3
  121. package/dist/slices/storage/downloads.js +33 -1
  122. package/dist/slices/storage/portable.js +4 -2
  123. package/dist/slices/studio/model.js +2 -0
  124. package/dist/slices/studio/pack.js +6 -4
  125. package/dist/slices/studio/queue.js +69 -0
  126. package/dist/slices/studio/settings.js +42 -5
  127. package/dist/slices/style-preview/narration.js +33 -0
  128. package/dist/slices/style-preview/render.js +43 -56
  129. package/dist/slices/style-preview/schema.js +17 -3
  130. package/dist/slices/style-preview/service.js +3 -4
  131. package/dist/slices/style-preview/settings.js +75 -25
  132. package/dist/slices/tutorials/anchors.js +57 -0
  133. package/dist/slices/tutorials/library.js +185 -0
  134. package/dist/slices/voices/audio-files.js +7 -2
  135. package/dist/slices/voices/cast.js +26 -8
  136. package/dist/slices/voices/grouping.js +10 -0
  137. package/dist/slices/voices/model.js +49 -10
  138. package/dist/slices/voices/script.js +1 -1
  139. package/dist/slices/youtube/edits-repo.js +19 -4
  140. package/dist/slices/youtube/placeholders.js +2 -2
  141. package/dist/tutorials/AI-CLIs.md +146 -0
  142. package/dist/tutorials/Backups.md +121 -0
  143. package/dist/tutorials/Calendar.md +103 -0
  144. package/dist/tutorials/Cast-Library.md +112 -0
  145. package/dist/tutorials/Channels.md +148 -0
  146. package/dist/tutorials/Costs-and-Run-Cost.md +136 -0
  147. package/dist/tutorials/Docker.md +171 -0
  148. package/dist/tutorials/Document-Themes.md +207 -0
  149. package/dist/tutorials/Editing-a-Project.md +204 -0
  150. package/dist/tutorials/FAQ.md +134 -0
  151. package/dist/tutorials/First-Launch-and-Welcome.md +153 -0
  152. package/dist/tutorials/Home-and-Projects.md +174 -0
  153. package/dist/tutorials/Home.md +119 -0
  154. package/dist/tutorials/Install.md +154 -0
  155. package/dist/tutorials/Intros-and-Outros.md +86 -0
  156. package/dist/tutorials/Keyboard-Shortcuts-and-Command-Palette.md +215 -0
  157. package/dist/tutorials/Library-Overview.md +75 -0
  158. package/dist/tutorials/Models.md +133 -0
  159. package/dist/tutorials/Multiple-Voices.md +161 -0
  160. package/dist/tutorials/Narration-Aliases-and-Glossary.md +129 -0
  161. package/dist/tutorials/Notifications.md +86 -0
  162. package/dist/tutorials/Other-Languages.md +110 -0
  163. package/dist/tutorials/PDF-Documents.md +100 -0
  164. package/dist/tutorials/Play-Images.md +135 -0
  165. package/dist/tutorials/Play-Narration.md +167 -0
  166. package/dist/tutorials/Play-Outputs.md +109 -0
  167. package/dist/tutorials/Play-Overview.md +216 -0
  168. package/dist/tutorials/Play-Title-and-Article.md +135 -0
  169. package/dist/tutorials/Play-Video-and-Style.md +143 -0
  170. package/dist/tutorials/Project-Page.md +228 -0
  171. package/dist/tutorials/Prompts.md +136 -0
  172. package/dist/tutorials/Providers-and-Keys.md +290 -0
  173. package/dist/tutorials/Publishing-to-YouTube.md +135 -0
  174. package/dist/tutorials/Recovery-and-Retries.md +141 -0
  175. package/dist/tutorials/Reviews-and-Checkpoints.md +143 -0
  176. package/dist/tutorials/Schedules.md +154 -0
  177. package/dist/tutorials/Settings-Reference.md +258 -0
  178. package/dist/tutorials/Shorts.md +116 -0
  179. package/dist/tutorials/Start-at-Login.md +126 -0
  180. package/dist/tutorials/Studio-Extension.md +146 -0
  181. package/dist/tutorials/Templates.md +146 -0
  182. package/dist/tutorials/Trash.md +87 -0
  183. package/dist/tutorials/Troubleshooting.md +149 -0
  184. package/dist/tutorials/Uninstalling-and-Moving.md +113 -0
  185. package/dist/tutorials/Updating-and-Patch-Notes.md +120 -0
  186. package/dist/tutorials/Video-Editing.md +135 -0
  187. package/dist/tutorials/Where-Your-Files-Live.md +149 -0
  188. package/dist/tutorials/YouTube-Description.md +132 -0
  189. package/dist/tutorials/Your-First-Short.md +125 -0
  190. package/dist/tutorials/_Footer.md +1 -0
  191. package/dist/tutorials/_Sidebar.md +69 -0
  192. package/dist/web/assets/index-C4McGNke.js +307 -0
  193. package/dist/web/assets/index-DBLSfqA-.css +1 -0
  194. package/dist/web/assets/{pdf-BG8n_uc5.js → pdf-COowcLcz.js} +1 -1
  195. package/dist/web/index.html +2 -2
  196. package/package.json +2 -2
  197. package/dist/web/assets/index-CUA2sUxU.css +0 -1
  198. package/dist/web/assets/index-CX590kE-.js +0 -303
@@ -0,0 +1,146 @@
1
+ # AI CLIs
2
+
3
+ Slopify can write the text with the Claude Code, Codex or Gemini command-line tools, and draw the images with Codex, using the sign-in you already have. You need no API key for those steps, and their calls count toward your plan's limits instead of costing per call.
4
+
5
+ **Where to find it:** Settings → Providers → the **Text** list (Claude Code CLI, Codex CLI, Gemini CLI) and the **Images** list (Codex CLI).
6
+
7
+ ## What each tool does
8
+
9
+ | Tool | Command | Used for | Signs in with | Calls at once |
10
+ |---|---|---|---|---|
11
+ | **Claude Code CLI** | `claude` | Text: research, script, article, titles, descriptions, reviews | Your Claude account | 3 |
12
+ | **Codex CLI** | `codex` | Text | Your ChatGPT account | 3 |
13
+ | **Gemini CLI** | `gemini` | Text | Your Google account | 3 |
14
+ | **Codex CLI** (Images) | `codex` | Images and thumbnails | Your ChatGPT account (the same sign-in and path as Codex text) | 4 |
15
+
16
+ Codex text and Codex images share one sign-in, one executable path and one plan allowance.
17
+
18
+ Codex CLI must be version 0.149.1 or newer. An older Codex shows **Needs attention** and says to update it.
19
+
20
+ ## Set up a CLI
21
+
22
+ 1. Install the tool on the computer that runs Slopify, following the tool's own instructions.
23
+ 2. Sign in once in a terminal:
24
+ - Claude Code: `claude auth login`
25
+ - Codex: `codex login`
26
+ - Gemini: run `gemini` and follow its login steps.
27
+ 3. Open **Settings → Providers** (reload the page if it was already open).
28
+ 4. Pick the tool in the **Text** or **Images** list. Its row should say **Ready**, and its setup shows **Installed, version …** and the **Command** Slopify runs.
29
+ 5. Choose **Check all** to confirm it is signed in.
30
+
31
+ On the very first launch, before any key is saved, Slopify looks for all three tools. If it finds any, it says so and picks one for text on new Play drafts, preferring Claude Code, then Codex, then Gemini, and Codex for images when found. The CLIs can't speak, but the narration needs no key either: without a voice key, the [System voice](Providers-and-Keys#the-system-voice) reads it with your computer's own speech. See [First-Launch-and-Welcome](First-Launch-and-Welcome).
32
+
33
+ ## Row states
34
+
35
+ | State | Meaning |
36
+ |---|---|
37
+ | **Ready** | Found, new enough and not reporting a sign-in problem. |
38
+ | **Needs attention** | Found, but something is wrong (for example an old Codex version). The detail says what. |
39
+ | **Not found** | Not on PATH, or not at the saved path. |
40
+
41
+ ## Set the executable path
42
+
43
+ Slopify finds each tool on PATH, the list of folders your terminal searches. Set a path when the tool is installed somewhere else, or you have more than one copy.
44
+
45
+ 1. Pick the tool in **Settings → Providers**.
46
+ 2. Choose **Change path**.
47
+ 3. In **Executable path**, type the absolute path to the program file, without quotes or arguments. Leave it blank to go back to finding it on PATH.
48
+ 4. Choose **Save path**. Slopify checks the tool answers before saving; a folder or a missing file is refused with the reason.
49
+ 5. Choose **Close path** to fold the field away.
50
+
51
+ | Option | What it does | Default |
52
+ |---|---|---|
53
+ | **Executable path** | Where the tool is on this computer. | Blank (found on PATH) |
54
+
55
+ ## Check the sign-in
56
+
57
+ **Check all** (Settings → Providers) asks each tool:
58
+
59
+ - **Installed**: found, with its version.
60
+ - **Signed in**: Slopify asks Claude Code and Codex directly. If one is signed out, the line tells you the command to run (`claude auth login` or `codex login`). For Gemini CLI, Slopify reads the sign-in from its own files in `~/.gemini`, without starting it: the method saved in `settings.json`, then a Google sign-in in `oauth_creds.json` or a `GEMINI_API_KEY`. When the files don't say, it asks you to run `gemini` in a terminal once to confirm.
61
+ - **Chosen models**: every model your templates, schedules, drafts and unfinished projects pick is still offered by the tool.
62
+
63
+ Each tool's row has **Check again**, to check that tool alone after you fix something.
64
+
65
+ If a run fails because a tool's sign-in expired, the project offers **Copy sign-in command** and **Check again**: run the copied command in a terminal on the computer running the tool and sign in, then press **Check again**. Once the tool answers that it is signed in, the step runs again by itself. See [Recovery and Retries](Recovery-and-Retries#sign-a-cli-in-again).
66
+
67
+ ## Pick a model and thinking level
68
+
69
+ A CLI's model list comes from the tool installed on your computer, not from the model catalogue. On Play:
70
+
71
+ 1. Pick the tool as the text provider (or Codex CLI for images).
72
+ 2. Pick a **Text model** from the list. The refresh button beside it (**Refresh models**) asks the tool for its current list; **Custom ID** lets you type a model the list does not show.
73
+ 3. If the model offers it, pick **Thinking** (text) or **Effort** (images). **Model default** leaves it to the tool. The levels come from the model: for example Low, Medium, High and Xhigh. Higher levels can write or draw more carefully, but take longer and use more of your plan.
74
+
75
+ If a model is missing when a run reaches it, the run stops with "The chosen model is not available in the AI command-line tool on your computer." Update the tool, or pick another model in **Edit project** under Providers, then **Continue the run**. A thinking level the model does not support stops the same way.
76
+
77
+ ## Codex images
78
+
79
+ Codex draws each image as its own job.
80
+
81
+ - **Codex default** runs with the tool's own defaults: no model and no effort on the command line.
82
+ - Any other model is one of Codex's own models (the same list the Codex text provider shows), run with the **Effort** you pick. With a chosen model or effort, or a reference picture to match, the agent may look at its work and redraw it.
83
+ - Each image may take several minutes; the time limit for one image is 30 minutes.
84
+ - Up to 4 images are drawn at once.
85
+
86
+ Codex images count toward your Codex plan. There is no API price for agent-drawn images, so the cost pages show them as $0 on your plan with no API figure.
87
+
88
+ ## Plan limits and waiting them out
89
+
90
+ The CLIs bill your subscription, which gives a share of a 5-hour and a weekly allowance rather than a bill. Slopify shows what the tools report:
91
+
92
+ - **Claude Code** reports its 5-hour and 7-day windows during each call.
93
+ - **Codex** is asked before and after each call. It reports whole percents, so a short run can show "under 1%".
94
+ - **Gemini** reports none.
95
+
96
+ You see these on a project's **Run cost** tab, in the run's **Cost so far** panel, and on Home under **This week**. See [Costs-and-Run-Cost](Costs-and-Run-Cost).
97
+
98
+ When a tool says its allowance is used up, the run does not fail:
99
+
100
+ 1. Slopify stores the reset time the tool gave (per tool, not per project).
101
+ 2. Every call to that tool, from any project, waits until 2 minutes after the reset. Without a stated time, it checks again every 30 minutes.
102
+ 3. The project's status reads **Waiting for limits**, with a line such as "Waiting for Codex limits (resets at 14:00)." The same words show on Home's Running now, the Projects row and the Calendar.
103
+ 4. When the reset passes, the run continues by itself.
104
+
105
+ Other providers are not held up: a project whose narration uses a key carries on while its Codex images wait. The wait survives a restart; a project that was waiting when Slopify stopped resumes on the next start and waits again. A project you paused or cancelled meanwhile is left alone.
106
+
107
+ Gemini's daily quota is handled the same way ("Slopify waits and tries again later by itself").
108
+
109
+ ## In Docker: the host helper
110
+
111
+ A container cannot use the CLIs installed on your computer directly. On Linux, the Docker installer offers a small helper that runs the tools on your computer, outside the container, with the sign-ins they already have.
112
+
113
+ 1. Install and sign in to the CLIs on your computer first.
114
+ 2. Run the Docker installer (`npx @gentbajko/slopify@latest --docker`). If a CLI is found, it asks once whether to set up the helper. `--accept-host-cli` approves without asking; `--host-cli=off` skips it.
115
+ 3. In Settings → Providers the tools show **Managed on host**. Their path cannot be changed there.
116
+
117
+ What to know:
118
+
119
+ - The helper runs as you, as the user service `slopify-cli-bridge.service`, and talks to the container over a private socket. No network port is opened and no sign-in is copied into Docker.
120
+ - After you install, update or remove a CLI, run the Docker installer again so Slopify sees the change.
121
+ - Run cost and plan-limit shares work the same as without Docker. An older helper may not pass them through, and the cost page then says the share is not known.
122
+ - With the helper off, Settings shows the CLIs as unavailable. API-key providers still work.
123
+
124
+ Check or turn off the helper:
125
+
126
+ ```sh
127
+ systemctl --user status slopify-cli-bridge.service
128
+ systemctl --user disable --now slopify-cli-bridge.service
129
+ ```
130
+
131
+ Turning it off leaves Docker, your API providers, your data and your host sign-ins as they are. See [Docker](Docker).
132
+
133
+ ## Tips
134
+
135
+ - A CLI step on Play's estimate reads "$0 on your plan · ~$X via API": what the same tokens would cost with a key.
136
+ - If your plan runs out often, split the work: keep text on a CLI and put images on a keyed provider, or the other way round.
137
+ - Use **Check all** after updating a CLI; a newer tool can drop a model your template still names.
138
+
139
+ ## Related pages
140
+
141
+ - [Providers-and-Keys](Providers-and-Keys)
142
+ - [Models](Models)
143
+ - [Costs-and-Run-Cost](Costs-and-Run-Cost)
144
+ - [Docker](Docker)
145
+ - [Recovery-and-Retries](Recovery-and-Retries)
146
+ - [Troubleshooting](Troubleshooting)
@@ -0,0 +1,121 @@
1
+ # Backups
2
+
3
+ A backup is one `.tar` file with everything you made in Slopify: every project with its files and history, your library, templates, schedules, channels and settings. Make one by hand at any time with **Export everything**, or let Slopify write one every day. Bring one back with **Import a backup**. Provider keys are never included.
4
+
5
+ **Where to find it:** **Settings → Backup & storage** (Export everything, Import a backup) and **Settings → Backups** (daily backups, Back up now).
6
+
7
+ ## What a backup holds
8
+
9
+ | Included | Left out on purpose |
10
+ |---|---|
11
+ | Every project with its files and history, and its channel | Provider keys |
12
+ | Automatic review verdicts and run cost of each project | The Notification URL |
13
+ | Prompts, intros and outros, with their history | The Studio extension's pairing |
14
+ | Document themes and uploaded fonts | The tutorial's progress |
15
+ | Templates, schedules and Play drafts | The daily backups' folder and status |
16
+ | Channels: brand kit, series brief, episode memory and AI disclosure settings, cast with pictures, end screen images, episode summaries, existing videos, and the last **Keep only titles containing** filter | The telemetry machine id |
17
+ | Channel links and the provider defaults a new Play form starts with | State that only matters while this install runs: the queue, plan-limit waits |
18
+ | AI use marks: voices marked as a real person, image prompts marked photorealistic, projects with real footage | |
19
+ | Settings and usage history | |
20
+ | The trash: trashed items come back still in the trash, with their original date | |
21
+
22
+ After an import you add your provider keys again in [Providers and keys](Providers-and-Keys).
23
+
24
+ ## Export everything (a backup right now, downloaded)
25
+
26
+ 1. Finish or pause any running project. Nothing is copied while a project is being made, because its files are still being written.
27
+ 2. Open **Settings → Backup & storage**.
28
+ 3. Press **Export everything**.
29
+ 4. Your browser downloads `slopify-backup-YYYY-MM-DD.tar`. Progress shows in the browser's downloads. A backup can be many gigabytes.
30
+
31
+ You can also run **Export everything** from the `Ctrl+K` palette while on Settings.
32
+
33
+ ## Import a backup
34
+
35
+ Importing adds to this install and replaces nothing.
36
+
37
+ 1. Finish or pause any running project.
38
+ 2. Open **Settings → Backup & storage**.
39
+ 3. Press **Import a backup** and choose the `.tar` file made with Export everything or a daily backup. (A `.zip` made with **Export backup** in older versions also works, up to 100 MB.)
40
+ 4. Wait while it uploads and imports. Slopify says "Backup imported." with what it added.
41
+
42
+ How an import merges:
43
+
44
+ - Projects already here are skipped.
45
+ - A name that is already taken arrives with "(imported)" after it.
46
+ - Schedules arrive paused, so nothing starts by surprise. Resume them on **Calendar → Schedules**.
47
+ - Channels merge by id. The default channel "My channel" takes the backup's settings only while this install's default is untouched; otherwise yours is kept. Cast members, pictures, episode memories and existing videos come into the channel that is here. A video title the channel already has is skipped.
48
+ - A prompt's history comes with the prompt when the prompt itself came in.
49
+ - Pictures stored in the database are checked against their SHA-256 hash on import.
50
+
51
+ If the import fails, Slopify says: "The backup wasn't imported. Check it is a file made with Export everything (.tar) or Export backup (.zip), then try again."
52
+
53
+ ## Turn on daily backups
54
+
55
+ Daily backups are off by default, because each backup holds every project's video and can fill a disk.
56
+
57
+ 1. Open **Settings → Backups**.
58
+ 2. Turn **Back up automatically** on.
59
+ 3. Set **Time of day**, **Keep last** and optionally **Folder** (see below).
60
+ 4. Press **Save**.
61
+
62
+ | Setting | What it does | Default |
63
+ |---|---|---|
64
+ | **Back up automatically** | Turns the daily backup on or off. **Back up now** works either way. | Off |
65
+ | **Time of day** | When the daily backup runs, in this browser's time zone. Pick a time the computer is usually on and idle. | 03:00 |
66
+ | **Keep last** | How many of Slopify's own backups stay in the folder. After each new backup, the oldest beyond this number are deleted. | 5 (from 1 to 30) |
67
+ | **Folder** | Where backups are written. Empty uses the **Backups** folder beside your projects: `Documents/Slopify/Backups` on a new install. Point it at another disk or a synced folder to keep copies away from this disk. | Empty |
68
+
69
+ The screen shows the last backup's time and size, the result of the last attempt (with **Why the last backup stopped** when it failed), and when the next one runs.
70
+
71
+ ### When the daily backup runs
72
+
73
+ - A timer checks once a minute. At most one automatic backup runs per day, once the day's time has passed.
74
+ - Turning backups on, or changing the time, waits for the next time of day. Use **Back up now** for one at once.
75
+ - If Slopify was off at the time, it backs up about two minutes after it starts, unless a backup already succeeded in the last 20 hours.
76
+ - A failed backup is tried again an hour later, until the next day's time.
77
+ - A backup waits while projects are being made. It shows "Waiting for … to finish", looks again every ten minutes, and starts by itself once those projects finish or pause.
78
+
79
+ ## Back up now
80
+
81
+ 1. Open **Settings → Backups**.
82
+ 2. Press **Back up now**. Slopify says "Backup started. Its result shows here when it finishes."
83
+
84
+ It writes the same file into the backup folder. It says which projects it is waiting for, if any, and is refused while another backup is being written.
85
+
86
+ ## Where the files go and what they are called
87
+
88
+ - Daily backups are named `slopify-backup-YYYY-MM-DDTHHMMSSZ.tar` (the time is UTC). Export everything downloads are named `slopify-backup-YYYY-MM-DD.tar`.
89
+ - Slopify only ever deletes its own daily backup files. An Export everything download, a renamed copy, or anything else in the folder is never touched.
90
+ - Installs from before 3.0 keep backups inside the projects folder (`~/Slopify/Projects/Backups` for Docker, `<data dir>/projects/Backups` natively). **Settings → Backup & storage → Your files → Move to Documents/Slopify** takes the backups along. See [Where your files live](Where-Your-Files-Live).
91
+ - A folder you choose must be a full path, and may not be inside the projects folder (other than its `Backups` folder) or Slopify's own staging, logs or model folders.
92
+ - In [Docker](Docker), a folder outside the projects folder exists only inside the container's private volume; the screen says so. Keep the default to see backups on your computer.
93
+
94
+ ## Safety
95
+
96
+ - A backup is written under a hidden `.partial` name and renamed only when it is complete, so a crash, a full disk or a stop never leaves a file that looks finished.
97
+ - Free space is checked first. A backup that would not fit fails with the sizes.
98
+ - Backup files are readable by your user only.
99
+ - An update waits for a backup that is being written.
100
+ - Every failure is explained on **Settings → Backups** with what to change, for example free space, lower **Keep last**, or pick another **Folder**.
101
+
102
+ ## Other storage tools on Backup & storage
103
+
104
+ - **Clean orphan files** deletes files that no project, draft or template uses any more. Slopify also does this each time it starts.
105
+ - **Keep outputs only** on a finished project deletes its working files and keeps the finished outputs.
106
+
107
+ Both are explained in [Where your files live](Where-Your-Files-Live).
108
+
109
+ ## Tips
110
+
111
+ - Before moving to a new computer or between Docker and a native install, press **Export everything** and import the file on the other side. See [Uninstalling and moving](Uninstalling-and-Moving).
112
+ - Point **Folder** at a synced or external disk so a disk failure doesn't take your backups with it.
113
+ - Keep **Keep last** low if your projects are large.
114
+
115
+ ## Related pages
116
+
117
+ - [Where your files live](Where-Your-Files-Live)
118
+ - [Uninstalling and moving](Uninstalling-and-Moving)
119
+ - [Settings reference](Settings-Reference)
120
+ - [Trash](Trash)
121
+ - [Docker](Docker)
@@ -0,0 +1,103 @@
1
+ # Calendar
2
+
3
+ The calendar shows the coming four weeks on one screen: what needs you, every scheduled run with the topic and title it will use, the projects running or finished on their day, and the batch queue. You can drag a topic to another day, move it to another schedule, add topics, and accept or reject topics Slopify suggested.
4
+
5
+ **Where to find it:** **Calendar** in the sidebar. It has two tabs: **Coming weeks**, described here, and **Schedules**, where you create, edit, pause and resume the schedules themselves (see [Schedules](Schedules)).
6
+
7
+ ## What the calendar shows
8
+
9
+ The calendar starts on this week's Monday and shows four weeks, Monday to Sunday.
10
+
11
+ - **Scheduled runs**, each with the project title it will make. A run shows **Queued** when a topic is lined up, **Needs a topic** when its topic is still waiting for your approval or for generation, and **Paused** when its schedule is paused.
12
+ - **Needs you**, above the weeks: every project that is waiting on you or ready to upload (see below).
13
+ - **Projects** running or finished on their day, with their state: **Running**, **Paused**, **Waiting**, **Failed**, **Done with problems**, **Done** or **Canceled**. A project waiting for a CLI plan says so, for example **Waiting for Codex limits (resets at 14:00)**.
14
+ - **Batch queue**: projects waiting to start (see below).
15
+ - **Suggested topics**, beside the weeks, for schedules that hold generated topics for approval.
16
+
17
+ The calendar follows the channel picked in the sidebar, or shows every channel. See [Channels](Channels).
18
+
19
+ ## Needs you
20
+
21
+ Above the weeks, **Needs you** lists what cannot move on without you, then what is ready to upload. Its heading counts them, for example "2 waiting for you · 1 ready to upload". It is hidden when there is nothing.
22
+
23
+ | Item | Status | Button |
24
+ | --- | --- | --- |
25
+ | A failed project | **Failed** | **Open to fix** |
26
+ | A project you paused | **Paused** | **Open to continue** |
27
+ | A project held at a review checkpoint, or with an automatic review that flagged an item and waits for **Overrule** or **Redo** | **Waiting for your review** | **Open to review** |
28
+ | A finished video not marked uploaded | **Ready to upload** | **Prepare upload** |
29
+
30
+ The bundled samples never show here. A press anywhere on an entry opens its project. See [Reviews and Checkpoints](Reviews-and-Checkpoints) and [Publishing to YouTube](Publishing-to-YouTube).
31
+
32
+ ## The batch queue
33
+
34
+ Videos started together, such as extra videos queued from Play, run one at a time. **Batch queue** lists them in the order they run, numbered (**1 in line**, **2 in line**, …), each marked **Running now**, **Waiting its turn** or **Paused**. Its heading says how many are waiting to start. Pausing a queued project holds the whole queue; when one fails or is cancelled, the next one starts. The batch queue is only shown on the calendar; Projects links here and has a **Queued** filter. It is hidden when nothing is queued.
35
+
36
+ ## Switch between weeks and a list
37
+
38
+ Use **Calendar view** at the top:
39
+
40
+ - **Weeks** (the default) shows the four weeks as a grid.
41
+ - **List** shows the same runs day by day, with buttons to move each topic.
42
+
43
+ This browser remembers your choice.
44
+
45
+ ## Move a topic to another day
46
+
47
+ **With a mouse:** drag the topic onto another day of the same schedule's runs. The topic takes that run.
48
+
49
+ **With the keyboard:** focus the topic and press `Alt+Left` or `Alt+Up` to move it earlier, `Alt+Right` or `Alt+Down` to move it later.
50
+
51
+ **In the list view:** press the move-earlier or move-later arrow button on the topic's row.
52
+
53
+ Earlier and later swap the topic with its neighbour in the same schedule's queue, so it takes the other's run. No schedule runs outside its own times, so a topic can only land on a day where its schedule has a run. A drop the calendar can't carry out (a day with no run, or a run with no queued topic) says why.
54
+
55
+ ## Move a topic to another schedule
56
+
57
+ - **With a mouse:** drop the topic onto another schedule's run. It joins that schedule's queue at that place.
58
+ - **In the list view:** open the **Move to…** menu on the topic's row and pick the schedule. The topic goes to the end of that schedule's queue and takes its next free run.
59
+
60
+ The topic now runs with the other schedule's template.
61
+
62
+ ## Add topics
63
+
64
+ 1. Press **Add to calendar**.
65
+ 2. Pick the **Schedule** the topics join. Only active and paused schedules are listed, each with the number of topics already queued.
66
+ 3. Type or paste **Topics, one per line**. Blank lines are skipped.
67
+ 4. Press **Add N topics** (the button counts them). **Keep the calendar as it is** closes the form without adding anything.
68
+
69
+ The topics go to the end of the schedule's queue, in order, and take its next free runs. Each topic fills the schedule's topic keyword; every other keyword keeps its every-run value. To give topics their own values, edit the schedule's topics as a table on the **Schedules** tab (see [Schedules](Schedules)).
70
+
71
+ If you have no schedule yet, the calendar offers **Create a schedule**.
72
+
73
+ ## Accept or reject suggested topics
74
+
75
+ Schedules set to **Generate and hold for approval** list their suggestions under **Suggested topics**, one block per schedule.
76
+
77
+ - **Queue** adds a topic to the end of that schedule's queue.
78
+ - **Reject** drops it for good; it is never suggested again.
79
+ - **Queue all** adds every suggestion of that schedule, in order.
80
+ - **Suggest topics now** asks the schedule's LLM for more at once (one LLM call).
81
+
82
+ While Slopify is asking, the panel says so and the topics appear when it finishes. If the last try failed, the panel says so with the reason. When nothing is waiting it says **No suggestions are waiting.**
83
+
84
+ Editing a suggestion's words before approving it is done under **Topics waiting** on the schedule itself.
85
+
86
+ ## The Schedules tab
87
+
88
+ **Schedules**, the calendar's second tab, is where the schedules themselves live: the list with **Edit**, **Pause** or **Resume** and **Delete** on each row, **New schedule**, and the picked schedule's detail with its queued topics, topics waiting for approval and run history. The number beside the tab counts the schedules that aren't deleted. Links to the old schedules page open this tab. See [Schedules](Schedules).
89
+
90
+ ## Tips
91
+
92
+ - Use the list view if dragging is fiddly, for example on a touch screen or a narrow window.
93
+ - A browser notification for new suggestions opens the calendar's **Suggested topics** when you click it. See [Notifications](Notifications).
94
+ - `Ctrl+K` → **Add to calendar** works from any screen: it opens the calendar with the form. `G` then `C` goes to the calendar.
95
+ - To change a schedule's queued topics one by one (rename, reorder, remove), use the **Schedules** tab. See [Schedules](Schedules#edit-the-queued-topics-in-place).
96
+ - To start one video right now instead of waiting for a run, use [Play](Play-Overview).
97
+
98
+ ## Related pages
99
+
100
+ - [Schedules](Schedules)
101
+ - [Templates](Templates)
102
+ - [Channels](Channels)
103
+ - [Home and Projects](Home-and-Projects)
@@ -0,0 +1,112 @@
1
+ # Cast Library
2
+
3
+ A channel's cast is its recurring characters, creatures, places and objects. Each member has a name, a description and up to four reference pictures. Whenever a video's title or an image's brief names a member, its pictures go with that image request, so the member looks the same in every image and every episode. A cast member can also have a voice for multi-voice videos.
4
+
5
+ **Where to find it:** **Channels** → a channel → **Cast** tab. **Add to cast** opens the editor beside the list.
6
+
7
+ ## Add a cast member
8
+
9
+ 1. Open **Channels**, pick the channel, and open the **Cast** tab.
10
+ 2. Press **Add to cast**.
11
+ 3. Fill in the fields (see the table below). At least give it a **Name**: "Name it first, then give it reference pictures."
12
+ 4. Press **Add to cast**. The member is saved and the picture section opens.
13
+ 5. Add one to four reference pictures: upload them or generate them (below).
14
+
15
+ To change a member later, press **Edit** on it, change what you need and press **Save**. To remove one, press its delete button and confirm with **Delete from cast**.
16
+
17
+ ## Fields
18
+
19
+ | Field | What it does | Limit |
20
+ |---|---|---|
21
+ | **Kind** | Character, creature, place or object. A generated reference picture of a character or creature is portrait (9:16), of a place or object landscape (16:9), and its starting prompt asks for the whole figure, place or object in view. It doesn't change how the member is matched. | |
22
+ | **Name** | The name matched against video titles and image briefs, as whole words, ignoring case. | Up to 200 characters |
23
+ | **Aliases** | Other names that count as this member, such as plurals and titles ("the Queen of the Nile"). Type one and press `Enter` to add it. | Up to 20 |
24
+ | **Description for the image model** | What the member looks like, in a sentence. It goes to the image model with the member's pictures for every image that names it, and starts the prompt of a generated picture. | Up to 2,000 characters |
25
+ | **Reference pictures** | Pictures sent with every image whose brief, or the video's title, names this member. | Up to 4, PNG or JPEG up to 10 MB each |
26
+ | **Cast voice** | How this member speaks in multi-voice runs (see below). | |
27
+
28
+ ## How names are matched
29
+
30
+ A name or alias matches as a **whole word, ignoring case**:
31
+
32
+ - "Hypatia" is found in "Hypatia's school" and "(Hypatia)".
33
+ - "Hypatia" is **not** found in "Hypatian" or "Hypatias".
34
+
35
+ So add plurals and other spellings as aliases.
36
+
37
+ Which images get which members:
38
+
39
+ - Each image's own brief picks its members.
40
+ - The establishing image and the thumbnail also take the members the video's title mentions.
41
+ - At most four members go with one image.
42
+ - When the establishing image is on, the member pictures go after it.
43
+
44
+ ## Add reference pictures
45
+
46
+ ### Upload a picture
47
+
48
+ 1. Open the member in the editor.
49
+ 2. Under **Reference pictures**, press **Upload a picture** and choose a PNG or JPEG up to 10 MB.
50
+
51
+ ### Generate a picture
52
+
53
+ 1. Under **Make a picture**, pick an **Image provider** and **Image model**.
54
+ 2. Check **Picture to make**. It starts from the name, the description and a request for a plain background. Edit it as you like (up to 4,000 characters).
55
+ 3. Press **Generate a picture**. Wait until "Making the picture…" finishes.
56
+
57
+ Each press is one image call on that provider, billed at its price for one image. A plain background with the whole figure in view makes the best reference.
58
+
59
+ To remove a picture, press its delete button. A member with no picture is not sent with any image.
60
+
61
+ ## Which image providers use the pictures
62
+
63
+ | Provider | What happens |
64
+ |---|---|
65
+ | Codex, OpenAI, Google, and fal.ai edit models (FLUX.2 and Nano Banana 2 edit) | The member's pictures are sent as input pictures. |
66
+ | Models that take no input pictures (Replicate, other fal.ai models) | The member is described in words instead, from its description. |
67
+
68
+ See [Images](Play-Images) and [Providers and keys](Providers-and-Keys).
69
+
70
+ ## Give a cast member a voice
71
+
72
+ In multi-voice formats (audiobook, podcast, radio drama, interview) a cast member can speak with the same voice in every episode.
73
+
74
+ 1. In the member's editor, under **Cast voice**, pick a **Voice provider**, **Voice model** and **Voice**. The list shows voices that speak the channel's language. If it says "No voices. Add one in Settings.", add a voice in **Settings → Voices** first.
75
+ 2. Pick a **Pace**: 0.8, 0.9, 1 (normal), 1.1 or 1.2.
76
+ 3. Press **Save**.
77
+ 4. On Play, pick the member under **Speakers**. They read with this voice, model and pace.
78
+
79
+ Leave the provider empty for no voice. A run keeps the voice it started with. See [Multiple voices](Multiple-Voices).
80
+
81
+ ### Make a member one of the channel's hosts
82
+
83
+ A channel's regular presenters can join every new podcast or interview on their own.
84
+
85
+ 1. In the member's editor, give it a voice (above).
86
+ 2. Turn on **One of the channel's hosts**. Without a voice it warns: "A host joins new podcasts and interviews only with a voice. Pick one under Voice above."
87
+ 3. Press **Save**. The cast list shows **Host** beside the member.
88
+
89
+ When you pick **Podcast** or **Interview** on Play for a draft of this channel with no speakers yet, the speakers start with the channel's hosts that have a voice. You can still add or remove speakers on the draft. Projects already made are not changed.
90
+
91
+ A picture that fails to generate because a CLI is signed out shows the same **Copy sign-in command** and **Check again** buttons as a project. See [Recovery and Retries](Recovery-and-Retries#sign-a-cli-in-again).
92
+
93
+ ## What happens to finished videos
94
+
95
+ A run keeps the cast as it was when it started. Editing the cast later never makes a finished video outdated. Only images that actually mention a member change their fingerprint, so only they would be remade if you remake the project's images.
96
+
97
+ ## Backups
98
+
99
+ Cast members and their pictures travel in a backup made with **Export everything**. When you import one, members come into the channel that is here. If a restored project's cast picture is missing, Slopify says so when that image is made again. See [Backups](Backups).
100
+
101
+ ## Tips
102
+
103
+ - Upload or generate a picture with the whole figure on a plain background. Busy backgrounds leak into every image.
104
+ - Keep the description short and visual: colours, shape, clothing, one distinctive feature.
105
+ - Add the plural and possessive-free forms as aliases ("pharaohs", "the Queen"). Matching is whole-word only.
106
+
107
+ ## Related pages
108
+
109
+ - [Channels](Channels)
110
+ - [Images](Play-Images)
111
+ - [Multiple voices](Multiple-Voices)
112
+ - [Providers and keys](Providers-and-Keys)
@@ -0,0 +1,148 @@
1
+ # Channels
2
+
3
+ A channel is one series: its brand kit, series brief, cast, templates and schedules. Every template belongs to one channel, and every run from it uses that channel's look, cast and language. Use channels when you make more than one kind of video, so each series keeps its own look and its own topic ideas.
4
+
5
+ **Where to find it:** **Channels** in the sidebar. On Play, the **Channel** picker sits under the title. The channel picker in the sidebar filters what Home, Projects and the Calendar show.
6
+
7
+ ## The default channel
8
+
9
+ Every install has one default channel, **My channel**. Everything made before channels existed (templates, schedules, projects) belongs to it, unchanged. The default channel can't be deleted.
10
+
11
+ ## The Channels page
12
+
13
+ The list shows each channel with **Open**, **Rename** and **Delete** (not on the default channel), and a line such as "Default · 3 templates · 5 in the cast". A press anywhere on a row picks it. Beside the list, on a wide screen, **About <channel>** sums up the picked channel: its templates and cast counts, its series brief (or "No series brief yet. Open the channel to say what it covers.") and its brand kit's intro, outro, document theme and end screen text, with **Open channel**.
14
+
15
+ ## Create a channel
16
+
17
+ 1. Open **Channels** and press **New channel**.
18
+ 2. Type a **Channel name** (up to 200 characters). It stays inside Slopify and doesn't have to match your YouTube channel.
19
+ 3. Press **Create channel**.
20
+ 4. Open the new channel and fill in its **Brand** tab (below).
21
+
22
+ To rename a channel, press **Rename** on it, change the name and press **Rename channel**. To delete one, press **Delete channel**: its cast goes with it, and its videos move to the default channel and keep what they were made with. A channel that still has templates can't be deleted; move them to another channel first (see [Templates](Templates#move-a-template-to-another-channel)).
23
+
24
+ ## Which channel a video is in
25
+
26
+ - On Play, pick the **Channel** under the title. A draft opened from a template starts in that template's channel; a new draft starts in the default one.
27
+ - A template saved from Play lands in the draft's channel, or the one you pick in **Save a setup**.
28
+ - A schedule belongs to the channel of the template it runs, so moving the template moves its schedules.
29
+
30
+ ## Show one channel's work
31
+
32
+ The channel picker in the sidebar (**Current channel**) makes Home, Projects and the Calendar show only that channel's work. **All channels** shows everything. It only filters what you see; projects and schedules of other channels keep running. This browser remembers your choice.
33
+
34
+ ## The channel's tabs
35
+
36
+ A channel page has six tabs: **Brand**, **Cast**, **Templates**, **Schedules**, **Episodes** and **Existing videos**.
37
+
38
+ ### Brand
39
+
40
+ **YouTube AI disclosure.** Studio's **AI use** answer for this channel's videos and Shorts, given by Prepare upload and the Studio extension. It saves as soon as you pick.
41
+
42
+ | Option | What it does |
43
+ |---|---|
44
+ | **Automatic** (default) | Says Yes only in YouTube's three cases: a voice marked as imitating a real person, real footage altered, or photorealistic AI pictures from an Image prompt marked as such. Otherwise No. |
45
+ | **Always Yes** | Always answers Yes. |
46
+ | **Always No** | Always answers No. |
47
+
48
+ Mark voices in **Settings → Voices** and Image prompts in **Library → Prompts**. See [Publishing to YouTube](Publishing-to-YouTube).
49
+
50
+ **Series brief.** What the channel covers, its style and what makes a topic worth a video. Topic generation reads it for every schedule of this channel that has no brief of its own. It doesn't change how videos are written. Up to 10,000 characters. See [Schedules](Schedules#topics-that-find-themselves).
51
+
52
+ **Language of new projects.** The language this channel's new projects are written and narrated in when Play or the template picks none. It applies even with the brand kit off, since it is not styling. Pick voices that speak it. Not set means English. Projects already made keep their language. See [Other languages](Other-Languages).
53
+
54
+ **Brand kit.** The look every template of this channel gets unless it sets its own. Every field is optional, each fills only what a template leaves at its default, and a blank field adds nothing.
55
+
56
+ | Field | What it does |
57
+ |---|---|
58
+ | **Caption font** | The subtitle font for videos whose template leaves the font at Default. Fonts you upload in the subtitle font picker on Play appear here. |
59
+ | **Caption colour** | Subtitle text colour as `#` and six hex digits, such as `#FFFFFF`. |
60
+ | **Caption outline** | The colour of the line around each subtitle letter, such as `#000000`. A dark outline keeps light captions readable on bright pictures. |
61
+ | **Title font** | The font of chapter cards and the end screen, for videos whose template sets no title style. |
62
+ | **Title colour** | The text colour of chapter cards and the end screen, such as `#FFD700`. |
63
+ | **End screen text** | A line shown centred over the last 5 seconds of every video, such as "Subscribe for more". Up to 200 characters. Blank shows none. |
64
+ | **Intro** / **Outro** | An entry from **Library → Intros & Outros**, narrated before or after the body of every video whose template has none. Each is narrated with the video's voice, so each costs one voice request per video (plus a text call for an LLM entry), and it shows in the estimate. See [Intros and outros](Intros-and-Outros). |
65
+ | **Document theme** | The look of the PDF for videos whose template picks no theme. A saved theme that was deleted is skipped. |
66
+ | **Ambient sound** | Rain, Fireplace or Wind under the long video's narration, with its level (−40 to −6 dB, default −18), fade-in (0 to 30 s, default 3) and tail (0 to 30 s, default 6). Used when the template leaves its own ambient sound on "The channel's". A channel can't hold your own audio file. |
67
+
68
+ **Channel links.** This channel's named links, such as `Patreon` or `Discord`, that a YouTube description fills when it names them in braces (`{{Patreon}}`). See [Channel links](#channel-links).
69
+
70
+ Press **Save channel** when you are done.
71
+
72
+ To keep one video exactly as its template was saved, untick **Use the channel's brand kit** on Play or in Edit project. The cast and language still apply. Nothing in the kit reaches a project that already started; a project keeps what it was started with.
73
+
74
+ ### Cast
75
+
76
+ Recurring characters, creatures, places and objects, each with reference pictures that go with every image that names them. A cast member with a voice can also be one of the channel's hosts: a new podcast or interview on Play then starts with them as its speakers. See [Cast library](Cast-Library).
77
+
78
+ ### Templates
79
+
80
+ The channel's templates. Each has a channel picker: choosing another channel moves the template, and every schedule that runs it, to that channel. Their next runs use the new channel's brand kit, cast and series brief. Projects already made keep what they were made with.
81
+
82
+ ### Schedules
83
+
84
+ The schedules that run this channel's templates, with their status and next run. Edit them on **Calendar → Schedules**; see [Schedules](Schedules).
85
+
86
+ ### Episodes (episode memory)
87
+
88
+ With **Episode memory** on, every finished video of the channel leaves a short summary, and new episodes about the same things read it so they agree with what came before.
89
+
90
+ How it works:
91
+
92
+ 1. When a video of this channel finishes, one short call to its text model writes a summary of up to 150 words: what the episode covered, the facts it stated, who appeared and what happened to them. The call shows on the project's **Run cost**. Finishing the same article again asks nothing, and a failed call never touches the project.
93
+ 2. When a new episode's article (or multi-voice script) is written by Slopify, the summaries of up to 5 related earlier episodes are added to its writing prompt under "Earlier episodes".
94
+ 3. An episode is related when it features a cast member the new title or keywords mention (strongest), or shares words of its title. Words most of the channel's titles share, such as a template's fixed prefix, and one- or two-letter words don't count. An episode with the very same title is a remake, not an earlier episode, and is left out.
95
+ 4. The summaries are copied into the project when it starts, so later edits never make a finished video outdated.
96
+
97
+ On the tab:
98
+
99
+ - **Open** a summary to read or edit it. Your edited text is kept, even if the video finishes again.
100
+ - **Delete** removes a summary from later prompts. The video itself is not changed.
101
+
102
+ Default: on for new channels. Channels that existed before 3.0 start with it off.
103
+
104
+ ### Existing videos
105
+
106
+ Titles this channel published before or outside Slopify. Topic generation and its duplicate checks skip them, as they skip the videos made here.
107
+
108
+ **Paste titles:**
109
+
110
+ 1. Type or paste titles into **Paste titles**, one per line.
111
+ 2. Press **Add titles**. A title already listed (in any case) is skipped.
112
+
113
+ **Import a YouTube Studio CSV:**
114
+
115
+ 1. In YouTube Studio, open **Analytics → Content → Advanced mode** and export the table as a CSV (comma-separated values).
116
+ 2. In Slopify, press **Import a YouTube Studio CSV…** and choose the file. It is read on this machine.
117
+ 3. Slopify lists every title with a tick, all ticked. It finds the title column by its header ("Video title", else "Title", else "Content") and skips Studio's "Total" row.
118
+ 4. If the export holds several series, type into **Keep only titles containing…** (for example a series name, any case). Only titles holding that text stay ticked. **Tick all** and **Untick all** reset the ticks, and you can tick each title by hand.
119
+ 5. Press **Add N ticked titles**. The import says how many were added and how many were skipped as already listed.
120
+
121
+ The filter text is remembered for this channel's next import. **Remove** deletes one title, and **Remove all** clears the list.
122
+
123
+ ## Channel links
124
+
125
+ Each channel keeps its own named links, under **Channel links** on its **Brand** tab. Write a link's name in braces in a description prompt or a description, such as `{{Patreon}}`, and it is filled with this channel's link when the description is shown, copied or downloaded.
126
+
127
+ 1. Open **Channels** → the channel → **Brand**.
128
+ 2. Under **Channel links**, press **Add link**, type the **name** (for example `Patreon`) and the URL (`https://…`). **Remove** takes one off.
129
+ 3. Press **Save channel**.
130
+
131
+ Names match whatever their case or spacing. `{{Previous video}}` works the same way, but a project can set its own on its **YouTube** section (**Previous video for this project**, then **Save links**), which wins over the channel's. A placeholder with no link stays as typed, and the YouTube section says "No link is saved for {{…}}, so it stays as typed." with where to add it.
132
+
133
+ Links saved in **Settings → Channel links** before channels had their own still fill the default channel's descriptions until you save its Brand tab; that Settings section now only points here (**Open the default channel's links**). Channel links travel in backups with their channel. See [YouTube description](YouTube-Description) and [Publishing to YouTube](Publishing-to-YouTube).
134
+
135
+ ## Tips
136
+
137
+ - Give each series its own channel, even if you upload them to one YouTube channel. The brand kit, cast and topic ideas stay separate.
138
+ - Import your existing videos before turning on topic generation, so Slopify doesn't suggest what you already made.
139
+ - Edit an episode summary when it gets a fact wrong. Later episodes will follow your version.
140
+
141
+ ## Related pages
142
+
143
+ - [Cast library](Cast-Library)
144
+ - [Templates](Templates)
145
+ - [Schedules](Schedules)
146
+ - [Play video and style](Play-Video-and-Style)
147
+ - [Publishing to YouTube](Publishing-to-YouTube)
148
+ - [Other languages](Other-Languages)