@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.
- package/README.md +6 -4
- package/dist/adapter-registry.js +28 -0
- package/dist/adapters/alignment/text.js +3 -1
- package/dist/adapters/key-probes.js +57 -8
- package/dist/adapters/tts/gemini.js +206 -0
- package/dist/adapters/tts/pcm-mp3.js +62 -0
- package/dist/adapters/tts/system.js +147 -0
- package/dist/assets/models.yaml +38 -0
- package/dist/assets/style-preview/narration.mp3 +0 -0
- package/dist/assets/style-preview/tall-1.jpg +0 -0
- package/dist/assets/style-preview/tall-2.jpg +0 -0
- package/dist/assets/style-preview/tall-3.jpg +0 -0
- package/dist/assets/style-preview/wide-1.jpg +0 -0
- package/dist/assets/style-preview/wide-2.jpg +0 -0
- package/dist/assets/style-preview/wide-3.jpg +0 -0
- package/dist/catalog/registry.js +4 -1
- package/dist/catalog/validate.js +2 -2
- package/dist/edge/autostart/docker-record.js +2 -2
- package/dist/edge/autostart/docker.js +68 -0
- package/dist/edge/autostart/prompt.js +7 -1
- package/dist/edge/autostart/service.js +18 -9
- package/dist/edge/cli-args.js +71 -0
- package/dist/edge/cli.js +11 -16
- package/dist/edge/docker-install/run.js +7 -1
- package/dist/edge/events/hub.js +3 -1
- package/dist/edge/http/actions.js +6 -1
- package/dist/edge/http/app.js +2 -0
- package/dist/edge/http/byte-range.js +42 -0
- package/dist/edge/http/diagnostics.js +1 -0
- package/dist/edge/http/draft-files.js +2 -4
- package/dist/edge/http/files.js +10 -6
- package/dist/edge/http/onboarding.js +64 -4
- package/dist/edge/http/project-templates.js +19 -2
- package/dist/edge/http/projects.js +6 -1
- package/dist/edge/http/providers.js +39 -9
- package/dist/edge/http/reviews.js +18 -8
- package/dist/edge/http/revision-files.js +2 -4
- package/dist/edge/http/schedules.js +9 -5
- package/dist/edge/http/storage.js +16 -2
- package/dist/edge/http/studio.js +111 -31
- package/dist/edge/http/style-preview.js +3 -42
- package/dist/edge/http/tutorials.js +59 -0
- package/dist/edge/http/youtube-edits.js +11 -2
- package/dist/extension/slopify-studio-chrome.zip +0 -0
- package/dist/extension/slopify-studio-firefox.zip +0 -0
- package/dist/host-cli/gemini-login.js +83 -0
- package/dist/host-cli/status.js +4 -2
- package/dist/kernel/db/migrations/0041-cast-hosts.sql +3 -0
- package/dist/kernel/ports/model.js +5 -3
- package/dist/kernel/ports/system-speech.js +203 -0
- package/dist/kernel/runner/graph.js +17 -1
- package/dist/kernel/runner/index.js +4 -4
- package/dist/kernel/runner/providers.js +1 -1
- package/dist/main.js +5 -0
- package/dist/model-catalog.js +2 -0
- package/dist/patch-notes/3.0.1.md +105 -0
- package/dist/patch-notes/3.0.2.md +20 -0
- package/dist/patch-notes/index.json +12 -0
- package/dist/slices/admission/rules.js +3 -3
- package/dist/slices/admission/start.js +1 -1
- package/dist/slices/channels/cast-match.js +1 -1
- package/dist/slices/channels/repo.js +3 -0
- package/dist/slices/channels/schema.js +23 -0
- package/dist/slices/channels/service.js +6 -6
- package/dist/slices/control/index.js +3 -1
- package/dist/slices/control/providers.js +4 -1
- package/dist/slices/episodes/related.js +2 -2
- package/dist/slices/estimate/requests.js +9 -1
- package/dist/slices/eta/history.js +56 -0
- package/dist/slices/eta/model.js +63 -0
- package/dist/slices/eta/view.js +25 -0
- package/dist/slices/fixes/rules.js +1 -1
- package/dist/slices/fonts/coverage.js +1 -1
- package/dist/slices/loudness/model.js +1 -1
- package/dist/slices/model-upkeep/usage.js +4 -2
- package/dist/slices/narration/pauses-model.js +1 -1
- package/dist/slices/narration/pronunciation.js +2 -2
- package/dist/slices/notifications/notifier.js +28 -2
- package/dist/slices/notifications/rules.js +26 -2
- package/dist/slices/onboarding/first-run.js +40 -14
- package/dist/slices/onboarding/full-video.js +81 -0
- package/dist/slices/onboarding/model.js +21 -0
- package/dist/slices/onboarding/quick-short.js +25 -10
- package/dist/slices/play-drafts/convert.js +3 -3
- package/dist/slices/play-drafts/readiness.js +1 -1
- package/dist/slices/project-templates/from-project.js +10 -3
- package/dist/slices/project-templates/next-chapter.js +94 -0
- package/dist/slices/project-templates/one-off.js +1 -1
- package/dist/slices/project-templates/schema.js +7 -1
- package/dist/slices/rebuild/recipe-exports.js +5 -0
- package/dist/slices/rebuild/recipe-save.js +1 -1
- package/dist/slices/rebuild/recipe-voices.js +1 -1
- package/dist/slices/rebuild/review-redo.js +15 -0
- package/dist/slices/rebuild/runtime-export-bed.js +1 -1
- package/dist/slices/rebuild/runtime-review.js +35 -5
- package/dist/slices/rebuild/runtime-store.js +23 -1
- package/dist/slices/rebuild/runtime-voices.js +2 -2
- package/dist/slices/rebuild/service-readiness.js +3 -3
- package/dist/slices/reviews/repo.js +16 -4
- package/dist/slices/run-cost/panel.js +30 -8
- package/dist/slices/run-cost/pricing.js +4 -1
- package/dist/slices/schedules/agenda.js +66 -2
- package/dist/slices/schedules/repo.js +1 -1
- package/dist/slices/schedules/scheduler.js +1 -1
- package/dist/slices/schedules/schema.js +43 -2
- package/dist/slices/schedules/similar.js +41 -3
- package/dist/slices/schedules/topic-list.js +2 -2
- package/dist/slices/schedules/topics.js +118 -17
- package/dist/slices/settings/first-run.js +5 -1
- package/dist/slices/settings/health.js +64 -7
- package/dist/slices/settings/key-guides.js +17 -7
- package/dist/slices/settings/key-test.js +12 -4
- package/dist/slices/settings/keys.js +10 -5
- package/dist/slices/settings/model-reach.js +52 -0
- package/dist/slices/settings/model.js +49 -0
- package/dist/slices/settings/models.js +5 -1
- package/dist/slices/settings/readiness.js +14 -2
- package/dist/slices/settings/tutorial-schema.js +5 -0
- package/dist/slices/shorts/render.js +18 -17
- package/dist/slices/storage/documents.js +11 -3
- package/dist/slices/storage/downloads.js +33 -1
- package/dist/slices/storage/portable.js +4 -2
- package/dist/slices/studio/model.js +2 -0
- package/dist/slices/studio/pack.js +6 -4
- package/dist/slices/studio/queue.js +69 -0
- package/dist/slices/studio/settings.js +42 -5
- package/dist/slices/style-preview/narration.js +33 -0
- package/dist/slices/style-preview/render.js +43 -56
- package/dist/slices/style-preview/schema.js +17 -3
- package/dist/slices/style-preview/service.js +3 -4
- package/dist/slices/style-preview/settings.js +75 -25
- package/dist/slices/tutorials/anchors.js +57 -0
- package/dist/slices/tutorials/library.js +185 -0
- package/dist/slices/voices/audio-files.js +7 -2
- package/dist/slices/voices/cast.js +26 -8
- package/dist/slices/voices/grouping.js +10 -0
- package/dist/slices/voices/model.js +49 -10
- package/dist/slices/voices/script.js +1 -1
- package/dist/slices/youtube/edits-repo.js +19 -4
- package/dist/slices/youtube/placeholders.js +2 -2
- package/dist/tutorials/AI-CLIs.md +146 -0
- package/dist/tutorials/Backups.md +121 -0
- package/dist/tutorials/Calendar.md +103 -0
- package/dist/tutorials/Cast-Library.md +112 -0
- package/dist/tutorials/Channels.md +148 -0
- package/dist/tutorials/Costs-and-Run-Cost.md +136 -0
- package/dist/tutorials/Docker.md +171 -0
- package/dist/tutorials/Document-Themes.md +207 -0
- package/dist/tutorials/Editing-a-Project.md +204 -0
- package/dist/tutorials/FAQ.md +134 -0
- package/dist/tutorials/First-Launch-and-Welcome.md +153 -0
- package/dist/tutorials/Home-and-Projects.md +174 -0
- package/dist/tutorials/Home.md +119 -0
- package/dist/tutorials/Install.md +154 -0
- package/dist/tutorials/Intros-and-Outros.md +86 -0
- package/dist/tutorials/Keyboard-Shortcuts-and-Command-Palette.md +215 -0
- package/dist/tutorials/Library-Overview.md +75 -0
- package/dist/tutorials/Models.md +133 -0
- package/dist/tutorials/Multiple-Voices.md +161 -0
- package/dist/tutorials/Narration-Aliases-and-Glossary.md +129 -0
- package/dist/tutorials/Notifications.md +86 -0
- package/dist/tutorials/Other-Languages.md +110 -0
- package/dist/tutorials/PDF-Documents.md +100 -0
- package/dist/tutorials/Play-Images.md +135 -0
- package/dist/tutorials/Play-Narration.md +167 -0
- package/dist/tutorials/Play-Outputs.md +109 -0
- package/dist/tutorials/Play-Overview.md +216 -0
- package/dist/tutorials/Play-Title-and-Article.md +135 -0
- package/dist/tutorials/Play-Video-and-Style.md +143 -0
- package/dist/tutorials/Project-Page.md +228 -0
- package/dist/tutorials/Prompts.md +136 -0
- package/dist/tutorials/Providers-and-Keys.md +290 -0
- package/dist/tutorials/Publishing-to-YouTube.md +135 -0
- package/dist/tutorials/Recovery-and-Retries.md +141 -0
- package/dist/tutorials/Reviews-and-Checkpoints.md +143 -0
- package/dist/tutorials/Schedules.md +154 -0
- package/dist/tutorials/Settings-Reference.md +258 -0
- package/dist/tutorials/Shorts.md +116 -0
- package/dist/tutorials/Start-at-Login.md +126 -0
- package/dist/tutorials/Studio-Extension.md +146 -0
- package/dist/tutorials/Templates.md +146 -0
- package/dist/tutorials/Trash.md +87 -0
- package/dist/tutorials/Troubleshooting.md +149 -0
- package/dist/tutorials/Uninstalling-and-Moving.md +113 -0
- package/dist/tutorials/Updating-and-Patch-Notes.md +120 -0
- package/dist/tutorials/Video-Editing.md +135 -0
- package/dist/tutorials/Where-Your-Files-Live.md +149 -0
- package/dist/tutorials/YouTube-Description.md +132 -0
- package/dist/tutorials/Your-First-Short.md +125 -0
- package/dist/tutorials/_Footer.md +1 -0
- package/dist/tutorials/_Sidebar.md +69 -0
- package/dist/web/assets/index-C4McGNke.js +307 -0
- package/dist/web/assets/index-DBLSfqA-.css +1 -0
- package/dist/web/assets/{pdf-BG8n_uc5.js → pdf-COowcLcz.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +2 -2
- package/dist/web/assets/index-CUA2sUxU.css +0 -1
- package/dist/web/assets/index-CX590kE-.js +0 -303
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Costs and Run Cost
|
|
2
|
+
|
|
3
|
+
Slopify shows what a run is likely to cost before you start it, what it actually cost once it ran, and, for runs on a command-line plan, what the same work would have cost with API keys and how much of your plan it used. All figures are in US dollars, from the providers' published prices.
|
|
4
|
+
|
|
5
|
+
**Where to find it:** Play → **Estimated cost** in the right rail; a project → **Run cost** tab; Home → **This week**; Settings → **Usage**.
|
|
6
|
+
|
|
7
|
+
## Where costs come from
|
|
8
|
+
|
|
9
|
+
- Every successful provider call is recorded against its project with what it used: tokens in and out (and how many were cached) for text, characters for narration, images per model, seconds of animated video, and how long the call took.
|
|
10
|
+
- Each call is priced when it finishes, from the model catalogue (see [Models](Models)). The rates are stored with the call, so a later price change never rewrites a finished run.
|
|
11
|
+
- A model the catalogue has no price for, or a call whose provider reported no usage, is counted as unknown, never as free. Per-minute voices are left unpriced rather than guessed.
|
|
12
|
+
- Failed calls are not charged here. Taxes and credits included in your provider plan are not counted.
|
|
13
|
+
|
|
14
|
+
Your provider bills you directly; Slopify never handles payment. The figures are for planning and checking, not a bill.
|
|
15
|
+
|
|
16
|
+
## Command-line runs: $0 on your plan
|
|
17
|
+
|
|
18
|
+
Claude Code, Codex and Gemini bill your subscription, not per call. So their calls show as **$0 on your plan**. Beside that, Slopify shows what the same tokens would have cost through the API ("via API"), priced as the same model from the catalogue: Claude models as Anthropic's, Codex models as OpenAI's, Gemini models as Google's.
|
|
19
|
+
|
|
20
|
+
There is no API figure for a model the catalogue does not list, for a CLI's default model, or for Codex images. The screens say so ("no API price is listed", "API price unknown").
|
|
21
|
+
|
|
22
|
+
See [AI-CLIs](AI-CLIs#plan-limits-and-waiting-them-out) for the plan limits themselves.
|
|
23
|
+
|
|
24
|
+
## Before you start: Estimated cost on Play
|
|
25
|
+
|
|
26
|
+
The right rail on Play shows **Estimated cost** once the setup is complete. Until then it says "The estimate appears once the setup is complete."
|
|
27
|
+
|
|
28
|
+
| Part | What it shows |
|
|
29
|
+
|---|---|
|
|
30
|
+
| **Estimated total** | The likely range for this run (or all the runs on the page), for example "$0.42 – $0.61". |
|
|
31
|
+
| **Known subtotal** | Shown instead of the total when some stage has no price; a line below says how many stage charges have unavailable pricing. |
|
|
32
|
+
| **Cost by stage** | Fold-out list: each stage's range and what it assumes. A CLI stage reads "$0 on your plan · ~$X via API". |
|
|
33
|
+
| CLI steps line | "CLI steps: $0 on your plan · ~$X via API" for everything on a plan. |
|
|
34
|
+
| Catalogue date | "Catalogue verified <date>". With several videos, rows show combined costs. |
|
|
35
|
+
|
|
36
|
+
**Expected article words per video** drives the estimate for generated articles (and how many images **More images for long videos** adds). About 150 words is one minute. Default: 1500. Once the article is written, its real length is used.
|
|
37
|
+
|
|
38
|
+
The estimate is what the providers are likely to charge, from their published prices. Actual usage can differ, and the estimate does not cap spending.
|
|
39
|
+
|
|
40
|
+
## While a run is going: Cost so far
|
|
41
|
+
|
|
42
|
+
On a running project, the side panel shows **Cost so far**:
|
|
43
|
+
|
|
44
|
+
- **spent**: what has been paid to providers so far ("known, spent" when some calls have no price).
|
|
45
|
+
- **same work via API**: the API equivalent of the CLI calls.
|
|
46
|
+
- One meter per plan window a CLI reported, such as "Codex: 14% of your weekly limit". The meter turns amber once the plan is at 80% or more.
|
|
47
|
+
|
|
48
|
+
When a CLI's plan is used up, the run waits instead of failing: the status reads **Waiting for limits**, for example "Waiting for Codex limits (resets at 14:00)". The run carries on by itself when the plan resets.
|
|
49
|
+
|
|
50
|
+
## After a run: the run cost line
|
|
51
|
+
|
|
52
|
+
When a run has ended, one line at the top of its project page, under the title, sums it up: for example `This run cost $0.42 · ~$3.10 via API · 12 min end to end`. A failed or cancelled run says **Spent so far**, and calls without a known price add "plus unpriced calls". **See cost by stage** opens the full breakdown below. The line doesn't show while the run is going, or when it spent nothing.
|
|
53
|
+
|
|
54
|
+
## After a run: the Run cost tab
|
|
55
|
+
|
|
56
|
+
1. Open the project from **Projects** or **Home**.
|
|
57
|
+
2. Choose **Cost** in the section rail (or **See cost by stage** on the run cost line).
|
|
58
|
+
|
|
59
|
+
If nothing has been spent yet, it says "Nothing has been spent yet. The cost of each provider call appears here as the run makes it."
|
|
60
|
+
|
|
61
|
+
### Summary
|
|
62
|
+
|
|
63
|
+
| Figure | What it is |
|
|
64
|
+
|---|---|
|
|
65
|
+
| **paid to providers** | The total cost of this project's calls. Reads "known cost, paid to providers" when some calls have no price, with a line "Plus N calls the model catalogue has no price for." |
|
|
66
|
+
| **same work via API** | The API equivalent of the calls that ran on a CLI plan. |
|
|
67
|
+
| Plan meters | One per plan window a CLI reported, for example "3% of weekly Codex limit". Hover or read the line below for the level it is at now. |
|
|
68
|
+
| **end to end** | How long the whole run took. |
|
|
69
|
+
|
|
70
|
+
Lines under the summary:
|
|
71
|
+
|
|
72
|
+
- "CLI calls: $0 on your plan · ~$1.20 via API", when any call ran on a plan.
|
|
73
|
+
- "This run used ~3% of your weekly Codex limit (now at 41%, resets Mon 09:00)." Codex reports whole percents, so a short run can read "under 1%".
|
|
74
|
+
- When a CLI reported nothing (Gemini, or a Docker host helper older than the app), it says the share is not known.
|
|
75
|
+
|
|
76
|
+
### By stage
|
|
77
|
+
|
|
78
|
+
**Cost by stage**: what each stage has cost so far, from every provider call it made, retries and remakes included.
|
|
79
|
+
|
|
80
|
+
| Column | What it shows |
|
|
81
|
+
|---|---|
|
|
82
|
+
| **Stage** | Research, Article, Audio, Images, Thumbnail, Video, Document. |
|
|
83
|
+
| **Cost** | What you paid. "$0 on plan" for CLI stages; "Unknown" when no call in it has a price; "$0.40 + unknown" when some do not. |
|
|
84
|
+
| **Via API** | The API equivalent for CLI calls, or "No API price". |
|
|
85
|
+
| **Usage** | Tokens in and out (and cached), characters, images, seconds of video. |
|
|
86
|
+
| **Time** | How long the stage ran. |
|
|
87
|
+
|
|
88
|
+
### By model
|
|
89
|
+
|
|
90
|
+
**Cost by model**: the same spending split by provider and model, with **Cost**, **Via API**, **Usage** and **Calls**. A CLI model shows the API model it was priced as, in brackets after "as". The CLI's own default model shows as "default model".
|
|
91
|
+
|
|
92
|
+
The last lines give the total usage and stage time, and "Priced from the model catalogue of <date> when each call finished."
|
|
93
|
+
|
|
94
|
+
## Across all projects: Home → This week
|
|
95
|
+
|
|
96
|
+
Home's **This week** section, since Monday:
|
|
97
|
+
|
|
98
|
+
- **videos made**.
|
|
99
|
+
- **spent**, followed by "· ~$X via API" and "· N calls without a price" when they apply.
|
|
100
|
+
- One bar per CLI plan: how much of its weekly limit is used, from the tool's last reading. The bar turns amber at 80%.
|
|
101
|
+
|
|
102
|
+
It includes calls that belong to no project: a schedule's topic suggestions, a channel's episode summaries and a cast member's picture. These never appear on a project's Run cost tab. The channel picker at the top of Home narrows the numbers to one channel. See [Home-and-Projects](Home-and-Projects).
|
|
103
|
+
|
|
104
|
+
## Your usage totals: Settings → Usage
|
|
105
|
+
|
|
106
|
+
Settings → **Usage** shows this install's own counters, worked out on this computer from its event log:
|
|
107
|
+
|
|
108
|
+
| Counter | What it counts |
|
|
109
|
+
|---|---|
|
|
110
|
+
| **Videos made** | Videos finished. |
|
|
111
|
+
| **Hours of audio** | Narration made, in hours. |
|
|
112
|
+
| **Images made** | Images drawn. |
|
|
113
|
+
| **Tokens used** | Text tokens, in and out. |
|
|
114
|
+
| **Projects** | Projects made. |
|
|
115
|
+
|
|
116
|
+
Below them, **Tokens by stage** lists **Stage**, **Provider · model**, **Tokens in** and **Tokens out**. A fresh install says "Numbers appear after your first run." The last line shows the install's machine ID and Slopify version.
|
|
117
|
+
|
|
118
|
+
The same counters, anonymised, feed the public totals on slopify.stream. They never include your keys, prompts, keywords, titles, text or files.
|
|
119
|
+
|
|
120
|
+
To jump there, press `Ctrl+K` and run **Open usage and costs**. The old `/usage` address also opens this section.
|
|
121
|
+
|
|
122
|
+
## Tips
|
|
123
|
+
|
|
124
|
+
- Set **Expected article words per video** close to what your prompt really writes; it is the biggest lever on the estimate for a generated article.
|
|
125
|
+
- Compare the **Via API** column with your plan's price to see whether a subscription or a key is cheaper for how you work.
|
|
126
|
+
- If a total says "known cost", check which model has no price in [Models](Models) and add one to your catalogue file if you know it.
|
|
127
|
+
|
|
128
|
+
## Related pages
|
|
129
|
+
|
|
130
|
+
- [Models](Models)
|
|
131
|
+
- [AI-CLIs](AI-CLIs)
|
|
132
|
+
- [Providers-and-Keys](Providers-and-Keys)
|
|
133
|
+
- [Play-Outputs](Play-Outputs)
|
|
134
|
+
- [Project-Page](Project-Page)
|
|
135
|
+
- [Home-and-Projects](Home-and-Projects)
|
|
136
|
+
- [Settings-Reference](Settings-Reference)
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Docker
|
|
2
|
+
|
|
3
|
+
On Linux you can have Slopify run in Docker in the background, restarting whenever Docker does. One command installs it, one command updates it, and your project files stay in a normal folder on your computer.
|
|
4
|
+
|
|
5
|
+
**Where to find it:** a terminal, `npx @gentbajko/slopify@latest --docker`. Inside the app, Settings → **Backup & storage** → **Your files** and Settings → **General** show the Docker-specific parts.
|
|
6
|
+
|
|
7
|
+
## What you need
|
|
8
|
+
|
|
9
|
+
- Linux with Docker Engine and the Docker Compose plugin.
|
|
10
|
+
- Node 26 or newer on the host, to run the installer.
|
|
11
|
+
- Your normal user account, with access to Docker. Don't run the installer with `sudo`. If Docker says permission denied, add yourself to the `docker` group (`sudo usermod -aG docker $USER`), then log out and back in.
|
|
12
|
+
|
|
13
|
+
Refused setups: Docker Desktop, a remote Docker daemon, and rootful Docker with `userns-remap`. Rootless Docker works; the container then runs as user `0:0`, which is you on the host.
|
|
14
|
+
|
|
15
|
+
On Windows, macOS or anything else, run Slopify without Docker ([Install](Install)), or run the compose file yourself ([below](#run-the-compose-file-yourself)).
|
|
16
|
+
|
|
17
|
+
## Install Slopify in Docker
|
|
18
|
+
|
|
19
|
+
1. Open a terminal as your normal user.
|
|
20
|
+
2. Run `npx @gentbajko/slopify@latest --docker`.
|
|
21
|
+
3. If Claude Code, Codex or Gemini CLI is installed on this computer, the installer asks once whether Slopify may use them (see [The host CLI bridge](#the-host-cli-bridge)). Answer `y` to allow it, or anything else to stop without changing anything. To use API keys only, run the command with `--host-cli=off` instead.
|
|
22
|
+
4. It asks `Start Slopify when you log in? (Y/n)` once. See [Start at Login](Start-at-Login#docker).
|
|
23
|
+
5. When it finishes it prints:
|
|
24
|
+
- `Slopify 3.0.0 is running at http://127.0.0.1:6969`
|
|
25
|
+
- `Project files on this machine:` your Projects folder
|
|
26
|
+
- `Backups on this machine:` your Backups folder, on a new install
|
|
27
|
+
- which AI tools it will use (the host CLIs, or API keys only)
|
|
28
|
+
6. Open `http://127.0.0.1:6969` in your browser and continue with [First Launch and Welcome](First-Launch-and-Welcome).
|
|
29
|
+
|
|
30
|
+
Running the same command again with nothing changed does nothing, apart from starting the container if it was stopped.
|
|
31
|
+
|
|
32
|
+
## What gets installed
|
|
33
|
+
|
|
34
|
+
| Part | What it is |
|
|
35
|
+
| --- | --- |
|
|
36
|
+
| Image | `ghcr.io/gentbajko/slopify:<version>`, pinned to the version of the installer you ran. It runs as a non-root user and already contains ffmpeg, the caption model and eSpeak NG, so the [System voice](Providers-and-Keys#the-system-voice) can narrate with no key. A healthcheck asks the app whether it is up. |
|
|
37
|
+
| Compose file | Copied to `~/.local/share/slopify/docker/slopify/` with a private `.env` beside it. One service, `slopify`, with `restart: unless-stopped`. |
|
|
38
|
+
| Port | `127.0.0.1:6969` on the host, localhost only. |
|
|
39
|
+
| Data volume | `slopify-data`, mounted at `/data`. It holds the database, provider keys, settings, logs and staging. It is declared external, so `docker compose down` (even with `-v`) never deletes it. |
|
|
40
|
+
| Projects folder | A folder on your computer, mounted at `/data/projects`. |
|
|
41
|
+
| Backups folder | A folder on your computer for scheduled backups, mounted at `/data/backups` (new installs from 3.0). |
|
|
42
|
+
| Host CLI bridge | Optional. A small helper that lets the container use your AI command-line tools. |
|
|
43
|
+
| `install.json` | In the same folder as the compose file. Records the version, port, project folder, user and whether the bridge is on. |
|
|
44
|
+
|
|
45
|
+
## Where your files go
|
|
46
|
+
|
|
47
|
+
| Install | Projects | Backups |
|
|
48
|
+
| --- | --- | --- |
|
|
49
|
+
| New install (3.0 and later) | `<Documents>/Slopify/Projects` | `<Documents>/Slopify/Backups` |
|
|
50
|
+
| Installed before 3.0 | `~/Slopify/Projects` (kept as it was) | `~/Slopify/Projects/Backups` |
|
|
51
|
+
|
|
52
|
+
`<Documents>` is what `xdg-user-dir DOCUMENTS` answers, then `XDG_DOCUMENTS_DIR` in `~/.config/user-dirs.dirs`, then `~/Documents`.
|
|
53
|
+
|
|
54
|
+
Everything else (database, keys, logs) stays private in the `slopify-data` volume. See [Where Your Files Live](Where-Your-Files-Live).
|
|
55
|
+
|
|
56
|
+
## Change a setting
|
|
57
|
+
|
|
58
|
+
Run the install again with the setting you want. Settings you leave out are remembered from `install.json`.
|
|
59
|
+
|
|
60
|
+
| Option | What it does |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| `--port <number>` | Serves Slopify on another host port, still on `127.0.0.1`. |
|
|
63
|
+
| `--projects-dir <folder>` | Uses another folder for project files. The files are copied and checked first; the old folder is left as it was. The new folder must be empty. A `~/` at the start is understood. |
|
|
64
|
+
| `--projects-dir documents` | Moves an existing install's projects to `<Documents>/Slopify/Projects`. |
|
|
65
|
+
| `--host-cli=off` | Turns the host CLI bridge off; Slopify uses API keys only. `off` is the only accepted value. |
|
|
66
|
+
| `--accept-host-cli` | Approves the host CLI bridge without the question, for scripts. |
|
|
67
|
+
| `--autostart` / `--no-autostart` | Answers the start-at-login question without asking. |
|
|
68
|
+
|
|
69
|
+
`--host` and `--data-dir` can't be combined with `--docker`.
|
|
70
|
+
|
|
71
|
+
For several Docker installs on one machine, give each its own `SLOPIFY_DOCKER_NAME` and `SLOPIFY_DOCKER_VOLUME` (letters, digits, dots, dashes and underscores). A second install's Documents folder is `<Documents>/Slopify/<name>/Projects`.
|
|
72
|
+
|
|
73
|
+
## Move your projects into Documents
|
|
74
|
+
|
|
75
|
+
A container can't move its own mounted folder, so the installer does it from the host.
|
|
76
|
+
|
|
77
|
+
1. Open Settings → **Backup & storage**. Under **Your files** you see the command to run, with **Copy command**.
|
|
78
|
+
2. On the computer running Docker, run `npx @gentbajko/slopify@latest update --docker --projects-dir documents`. For another folder, use `--projects-dir <folder>`.
|
|
79
|
+
3. The installer waits for running work to finish, copies the folder, checks the copy and remounts the new folder.
|
|
80
|
+
4. The old folder is left as it was. Once your projects open fine, you can delete it.
|
|
81
|
+
|
|
82
|
+
Backups stay where they were (`Projects/Backups` on an older install).
|
|
83
|
+
|
|
84
|
+
## Update the Docker install
|
|
85
|
+
|
|
86
|
+
Run `npx @gentbajko/slopify@latest update`. With a Docker install on your user account, `update` goes to it automatically (`update --docker` is the same). The **Update** button inside the Docker app shows this command, because a container can't replace itself.
|
|
87
|
+
|
|
88
|
+
The update is one transaction:
|
|
89
|
+
|
|
90
|
+
1. It waits until nothing is generating. Pressing `Ctrl+C` while it waits changes nothing.
|
|
91
|
+
2. It stops the container and copies the whole data volume into a recovery volume, `slopify-data-recovery-<id>`, checked file by file.
|
|
92
|
+
3. It starts the new version and waits up to 2 minutes for it to answer as that version.
|
|
93
|
+
4. On success it records the new version and removes the older recovery volume, so only the newest one is kept.
|
|
94
|
+
5. If the new version doesn't answer, it removes it, copies your data back from the recovery volume and starts the previous version with its previous settings.
|
|
95
|
+
|
|
96
|
+
If an install or update is cut off (`Ctrl+C`, a reboot), the next run first finishes putting things back, then continues.
|
|
97
|
+
|
|
98
|
+
The recovery volume covers the database and settings, not your Projects folder. When you make your own backups, keep both the `slopify-data` volume and your Projects folder, or use [Backups](Backups).
|
|
99
|
+
|
|
100
|
+
## The host CLI bridge
|
|
101
|
+
|
|
102
|
+
If Claude Code, Codex or Gemini CLI is installed on the host, Slopify in Docker can use them with the logins you already have. Nothing about your logins is copied into Docker.
|
|
103
|
+
|
|
104
|
+
- With your OK, the installer sets up a small helper, at the same version as the image, and keeps it in step on every install and update.
|
|
105
|
+
- The helper runs as the systemd user service `slopify-cli-bridge.service`, as you. User lingering is turned on so it runs at boot and after you log out.
|
|
106
|
+
- It talks to the container through a private socket in `~/.local/share/slopify/host-cli/share/`, with a token. There is no network port. Only that `share` folder is mounted into the container, read-only.
|
|
107
|
+
- Codex images, run cost and plan-limit readings work the same as without Docker.
|
|
108
|
+
- The helper only opens folders inside your Projects folder when you press **Open folder**.
|
|
109
|
+
- With the bridge off, Settings shows the CLIs as unavailable, and API keys still work.
|
|
110
|
+
|
|
111
|
+
Check or turn it off:
|
|
112
|
+
|
|
113
|
+
```sh
|
|
114
|
+
systemctl --user status slopify-cli-bridge.service
|
|
115
|
+
systemctl --user disable --now slopify-cli-bridge.service
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Turning it off leaves Docker, your API providers, your data and your host logins as they are. Run the install again after installing or moving a CLI.
|
|
119
|
+
|
|
120
|
+
If the installer can't ask (no interactive terminal), it stops and tells you to rerun with `--accept-host-cli` or `--host-cli=off`. Using the bridge needs systemd user services (`systemctl --user`); without them, use `--host-cli=off`.
|
|
121
|
+
|
|
122
|
+
## Coming from 2.5.0 or earlier
|
|
123
|
+
|
|
124
|
+
The first run of the new installer takes your existing installation over:
|
|
125
|
+
|
|
126
|
+
- It reuses the `slopify-data` volume by name; it is never deleted or recreated. A container on another volume is refused, with the `SLOPIFY_DOCKER_VOLUME` value to use.
|
|
127
|
+
- It keeps the project folder the old container used (`~/Slopify/Projects`, or your `--projects-dir`). A plain `docker run` container that kept projects inside the volume gets them copied, checked, to `~/Slopify/Projects`; the copy in the volume stays.
|
|
128
|
+
- The old container is stopped and renamed `slopify-previous-<id>` while the new one starts. If the new one fails, the old one is put back exactly as it was. It is removed once the new one is committed.
|
|
129
|
+
- If a 2.5.0 launcher update was left unfinished, nothing is changed. Run `npx @gentbajko/slopify@2.5.0 --docker` once so it finishes or undoes it, then install again.
|
|
130
|
+
|
|
131
|
+
## Run the compose file yourself
|
|
132
|
+
|
|
133
|
+
Without the installer (any OS with Docker Compose), with API keys only, from a folder containing Slopify's `compose.yaml`:
|
|
134
|
+
|
|
135
|
+
```sh
|
|
136
|
+
docker volume create slopify-data
|
|
137
|
+
mkdir -p ~/Documents/Slopify/Projects
|
|
138
|
+
SLOPIFY_PROJECTS_DIR=~/Documents/Slopify/Projects SLOPIFY_USER="$(id -u):$(id -g)" \
|
|
139
|
+
docker compose -f compose.yaml up -d
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
| Variable | Default | What it does |
|
|
143
|
+
| --- | --- | --- |
|
|
144
|
+
| `SLOPIFY_PROJECTS_DIR` | none, required | The host folder for project files. |
|
|
145
|
+
| `SLOPIFY_IMAGE` | `ghcr.io/gentbajko/slopify:latest` | The image to run. |
|
|
146
|
+
| `SLOPIFY_PORT` | `6969` | The host port, bound to `127.0.0.1`. |
|
|
147
|
+
| `SLOPIFY_USER` | `1000:1000` | The user id the container runs as, so project files belong to you. |
|
|
148
|
+
| `SLOPIFY_VOLUME` | `slopify-data` | The data volume's name. It must exist (`docker volume create`). |
|
|
149
|
+
| `SLOPIFY_BACKUPS_DIR` | empty | The host folder for scheduled backups. Without it, backups stay in `Projects/Backups`. |
|
|
150
|
+
| `SLOPIFY_HOST_CLI_SHARE` | empty | The host CLI bridge's share folder, if you set one up. |
|
|
151
|
+
| `SLOPIFY_NAME` | `slopify` | The compose project and container name. |
|
|
152
|
+
|
|
153
|
+
Update by changing `SLOPIFY_IMAGE` and running `docker compose up -d` again. This way has no automatic recovery copy or rollback, and Settings → General can't tell whether Docker starts at login.
|
|
154
|
+
|
|
155
|
+
Keep the `127.0.0.1` binding. Anyone who reaches Slopify's port controls the app and its provider keys.
|
|
156
|
+
|
|
157
|
+
## Tips
|
|
158
|
+
|
|
159
|
+
- Settings → **General** shows **Starts with Docker: yes / no / unknown**, read by the installer. Run the install command again after changing Docker's own start-up setting so it looks again.
|
|
160
|
+
- Port 6969 taken by a native Slopify? Stop the native one, or give Docker another port with `--port 7070`.
|
|
161
|
+
- To stop Slopify for a while without removing anything, run `docker stop slopify`; `docker start slopify` or the install command starts it again.
|
|
162
|
+
|
|
163
|
+
## Related pages
|
|
164
|
+
|
|
165
|
+
- [Install](Install)
|
|
166
|
+
- [Where Your Files Live](Where-Your-Files-Live)
|
|
167
|
+
- [Start at Login](Start-at-Login)
|
|
168
|
+
- [Updating and Patch Notes](Updating-and-Patch-Notes)
|
|
169
|
+
- [Uninstalling and Moving](Uninstalling-and-Moving)
|
|
170
|
+
- [AI CLIs](AI-CLIs)
|
|
171
|
+
- [Backups](Backups)
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Document Themes
|
|
2
|
+
|
|
3
|
+
A document theme is the look of the PDF Slopify makes from the article: paper size, colours, fonts, spacing, the title page, contents, sources and closing pages, headers and page numbers. Slopify ships a built-in **Plain** theme. Copy it to make themes of your own, with a live preview as you edit.
|
|
4
|
+
|
|
5
|
+
**Where to find it:** **Library → Documents**. Pick a theme on Play's **Document** row, in **Edit project**, or as a channel's default in its brand kit.
|
|
6
|
+
|
|
7
|
+
## Built-in and your own themes
|
|
8
|
+
|
|
9
|
+
| List | What it holds |
|
|
10
|
+
|---|---|
|
|
11
|
+
| **Built-in themes** | Looks that ship with Slopify and can't be changed. **Plain** is an unbranded flat page and what a new project gets. Press **Copy theme** to make an editable copy. |
|
|
12
|
+
| **Your themes** | Themes you made or copied. Each has **Edit**, **Duplicate** and **Delete**. |
|
|
13
|
+
|
|
14
|
+
A project keeps its own copy of the theme's settings. Editing or deleting a theme never changes a PDF already made or queued.
|
|
15
|
+
|
|
16
|
+
## Make a theme
|
|
17
|
+
|
|
18
|
+
1. Open **Library → Documents**.
|
|
19
|
+
2. Press **New theme** (it starts from Plain), or pick a built-in theme and press **Copy theme**, or press **Duplicate** on one of your themes.
|
|
20
|
+
3. Type a **Name** (up to 80 characters). This is what the Document row on Play and Edit project shows.
|
|
21
|
+
4. Open the groups on the left and change what you like (every setting is listed below). The first two groups start open.
|
|
22
|
+
5. Watch the **Preview** on the right. It lays out a sample article with this theme using the same renderer that makes a project's PDF, redrawn about half a second after you stop typing. It runs on your computer and costs nothing.
|
|
23
|
+
6. Press **Save**. If a setting is out of range it is highlighted, and Save says "Fix the highlighted settings first."
|
|
24
|
+
|
|
25
|
+
## Use a theme
|
|
26
|
+
|
|
27
|
+
- **On Play:** open the **Document** row (the PDF output) and pick the theme. See [PDF documents](PDF-Documents).
|
|
28
|
+
- **On a finished project:** open **Edit project** (the **Edit settings** button), pick the theme under **Document theme**, save, and remake the document.
|
|
29
|
+
- **For a channel:** set **Document theme** in the channel's brand kit. Videos whose template picks no theme get it. See [Channels](Channels).
|
|
30
|
+
|
|
31
|
+
## Delete a theme
|
|
32
|
+
|
|
33
|
+
Press **Delete** on the theme and confirm. Projects that used it keep their own copy of its settings. A channel whose brand kit named it skips it.
|
|
34
|
+
|
|
35
|
+
## Every setting
|
|
36
|
+
|
|
37
|
+
Sizes are in millimetres (mm) unless marked pt (points; 1 pt is about 0.35 mm). Defaults are the Plain theme's.
|
|
38
|
+
|
|
39
|
+
### Page
|
|
40
|
+
|
|
41
|
+
| Setting | What it does | Default | Range |
|
|
42
|
+
|---|---|---|---|
|
|
43
|
+
| **Paper size** | A4 (210 × 297 mm) for most of the world, US Letter (216 × 279 mm) for the US and Canada. | A4 | |
|
|
44
|
+
| **Margins** | Blank space on every edge of each page. Wider margins mean shorter lines and more pages. | 22 mm | 5 to 60 |
|
|
45
|
+
| **Text starts at** | How far from the top the text begins on pages with the running header. Raise it when text crowds the header. | 32 mm | 5 to 80 |
|
|
46
|
+
| **Background** | **Parchment texture** stretches an aged-paper picture over every page. **Flat colour** fills each page with the Page colour, slightly darker at the edges. | Flat colour | |
|
|
47
|
+
| **Page colour** | The page colour with Flat colour. Type a hex code or use the picker. | `#fdfaf3` (warm off-white) | |
|
|
48
|
+
|
|
49
|
+
### Colours
|
|
50
|
+
|
|
51
|
+
| Setting | What it colours | Default |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| **Heading colour** | Headings, drop caps, the brand name and links | `#1f3a5f` (dark blue) |
|
|
54
|
+
| **Body text colour** | Paragraphs, lists, bold and italic text. Keep it dark against the page. | `#1a1a1a` (near black) |
|
|
55
|
+
| **Muted colour** | Dates, bullets, quotes and the dotted lines on the contents page | `#555555` (mid grey) |
|
|
56
|
+
| **Faint colour** | The running header and page numbers | `#888888` (light grey) |
|
|
57
|
+
|
|
58
|
+
### Fonts
|
|
59
|
+
|
|
60
|
+
Each font has three controls: the family, its weight or italic, and **Letter spacing (mm)** from −0.5 to 2. The families are **Cinzel** (bundled; four weights, no italics) and **Times**, **Helvetica** and **Courier** (built into every PDF reader).
|
|
61
|
+
|
|
62
|
+
| Setting | Where it is used | Default |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| **Body font** | Paragraphs and lists | Cinzel Regular, 0.01 mm |
|
|
65
|
+
| **Bold text font** | Bold words in paragraphs | Cinzel Bold, 0.02 mm |
|
|
66
|
+
| **Italic text font** | Italic words in paragraphs (Cinzel has no italics, so this borrows Times) | Times Italic, 0 mm |
|
|
67
|
+
| **Heading font** | The article's headings and the contents, sources and closing page titles | Cinzel Bold, 0.02 mm |
|
|
68
|
+
| **Chapter numbers and brand font** | The big number in a heading like "Chapter 3:" and the brand name on the title page | Cinzel Black, 0.03 mm |
|
|
69
|
+
| **Tagline and link font** | The tagline and linked line on the title page, and the link and closing line on the closing page | Cinzel Medium, 0.015 mm |
|
|
70
|
+
| **Drop cap font** | The large first letter after a heading | Cinzel Black, 0 mm |
|
|
71
|
+
| **Header and page number font** | The running header and page numbers | Times Regular, 0 mm |
|
|
72
|
+
|
|
73
|
+
### Text sizes
|
|
74
|
+
|
|
75
|
+
| Setting | What it sizes | Default | Range |
|
|
76
|
+
|---|---|---|---|
|
|
77
|
+
| **Title size** | The article's title on the title page | 22 pt | 6 to 72 |
|
|
78
|
+
| **Brand size** | The brand name on the title page (only shown with a brand name) | 31 pt | 6 to 72 |
|
|
79
|
+
| **Top-level heading size** | Top-level headings and the contents, sources and closing page titles | 19 pt | 6 to 72 |
|
|
80
|
+
| **Second-level heading size** | Headings inside a top-level section | 17 pt | 6 to 72 |
|
|
81
|
+
| **Third-level heading size** | Third-level and deeper headings | 13 pt | 6 to 72 |
|
|
82
|
+
| **Body size** | Paragraphs, lists and closing page text. Bigger text means more pages. | 10.5 pt | 6 to 24 |
|
|
83
|
+
| **Date and word count size** | The date, word count and link lines under the title | 10 pt | 5 to 24 |
|
|
84
|
+
| **Header and page number size** | The running header and page numbers | 9 pt | 5 to 24 |
|
|
85
|
+
|
|
86
|
+
### Spacing
|
|
87
|
+
|
|
88
|
+
| Setting | What it does | Default | Range |
|
|
89
|
+
|---|---|---|---|
|
|
90
|
+
| **Body line height** | Distance from one body line to the next | 8 mm | 3 to 20 |
|
|
91
|
+
| **Heading line height** | Between the lines of a wrapping top- or second-level heading | 11 mm | 3 to 30 |
|
|
92
|
+
| **Subheading line height** | Between the lines of a wrapping third-level heading | 9 mm | 3 to 30 |
|
|
93
|
+
| **After a paragraph** | Extra space after each paragraph, as a share of a body line (0.5 is half a line) | 0.5 | 0 to 3 |
|
|
94
|
+
| **Before a heading** | Extra space above each heading, as a share of a body line | 1 | 0 to 5 |
|
|
95
|
+
| **After a list item** | Extra space after each bulleted or numbered item | 0.2 | 0 to 3 |
|
|
96
|
+
| **List indent** | How far lists are pushed in from the left margin | 6 mm | 0 to 30 |
|
|
97
|
+
| **Quote indent** | How far quotes are pushed in | 8 mm | 0 to 40 |
|
|
98
|
+
| **Divider width** | The width of the short centred line a `---` in the article becomes | 30 mm | 0 to 150 |
|
|
99
|
+
|
|
100
|
+
### Drop caps
|
|
101
|
+
|
|
102
|
+
| Setting | What it does | Default | Range |
|
|
103
|
+
|---|---|---|---|
|
|
104
|
+
| **Drop caps** | Starts the first paragraph after each heading with a large letter spanning several lines, as in printed books. | On | |
|
|
105
|
+
| **Drop cap lines tall** | How many body lines the letter spans | 3 lines | |
|
|
106
|
+
| **Drop cap letter size** | The letter's size as a multiple of the lines it spans | 3 | 1 to 5 |
|
|
107
|
+
| **Gap beside the drop cap** | Space between the letter and the text beside it | 4 mm | 0 to 20 |
|
|
108
|
+
| **Shortest paragraph** | A paragraph shorter than this many characters starts plainly | 50 | 0 to 2000 |
|
|
109
|
+
| **Room needed** | With less than this share of the page left, a paragraph starting with a drop cap moves to the next page (0.25 is a quarter) | 0.25 | 0 to 1 |
|
|
110
|
+
|
|
111
|
+
### Title page
|
|
112
|
+
|
|
113
|
+
| Setting | What it does | Default | Range |
|
|
114
|
+
|---|---|---|---|
|
|
115
|
+
| **Brand from top** | Where the brand name sits, from the top edge | 60 mm | 10 to 200 |
|
|
116
|
+
| **Tagline below brand** | Distance from the brand name down to the tagline | 10 mm | 0 to 60 |
|
|
117
|
+
| **Title from top** | Where the article's title sits, from the top edge | 80 mm | 10 to 250 |
|
|
118
|
+
| **Title line height** | Between the lines of a wrapping title | 10 mm | 3 to 40 |
|
|
119
|
+
| **Details below title** | Distance from the title to the date and word count, when there is no cover picture | 20 mm | 0 to 100 |
|
|
120
|
+
| **Details line height** | Between the date, word count and link lines | 10 mm | 3 to 30 |
|
|
121
|
+
| **Show the date** | Prints "Written on" and the date the PDF was made | On | |
|
|
122
|
+
| **Show the word count** | Prints the article's word count | On | |
|
|
123
|
+
| **Thumbnail as cover** | Puts the project's thumbnail between the title and the date, when there is one | On | |
|
|
124
|
+
| **Space around cover** | Space above and below the cover picture | 6 mm | 0 to 40 |
|
|
125
|
+
| **Cover height at most** | The tallest the cover may be; it keeps its shape and shrinks when needed | 110 mm | 20 to 200 |
|
|
126
|
+
|
|
127
|
+
### Branding
|
|
128
|
+
|
|
129
|
+
| Setting | What it does | Default |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| **Brand name** | Your channel or brand, printed large at the top of the title page and before the title in the running header ("Brand \| Title"). Empty shows no brand. | Empty |
|
|
132
|
+
| **Tagline** | A short line under the brand name. Empty hides it. | Empty |
|
|
133
|
+
| **Website** | The address the brand name and the title-page link open when clicked in the PDF. | Empty |
|
|
134
|
+
| **Link text** | The words of a linked line under the word count on the title page; it opens Website. Empty hides the line. | Empty |
|
|
135
|
+
|
|
136
|
+
### Contents page
|
|
137
|
+
|
|
138
|
+
| Setting | What it does | Default | Range |
|
|
139
|
+
|---|---|---|---|
|
|
140
|
+
| **Contents page** | Adds a table of contents after the title page, each entry a link to its page | On | |
|
|
141
|
+
| **Contents page title** | The heading of the contents page (up to 300 characters) | Table of Contents | |
|
|
142
|
+
| **Lists headings down to** | Top level only, second level, or third level. Deeper lists can add a page. | Second level | |
|
|
143
|
+
| **Contents title position** | From the top margin to the contents title | 20 mm | 0 to 100 |
|
|
144
|
+
| **First entry position** | From the top margin to the first entry | 40 mm | 0 to 150 |
|
|
145
|
+
| **Contents line height** | From one entry to the next | 8 mm | 3 to 30 |
|
|
146
|
+
| **Indent per level** | How much further each deeper level is indented | 5 mm | 0 to 30 |
|
|
147
|
+
|
|
148
|
+
### Header and footer
|
|
149
|
+
|
|
150
|
+
| Setting | What it does | Default | Range |
|
|
151
|
+
|---|---|---|---|
|
|
152
|
+
| **Running header** | Prints "Brand \| Title" at the top of every page after the title page | On | |
|
|
153
|
+
| **Header from top** | From the top edge to the header | 15 mm | 3 to 60 |
|
|
154
|
+
| **Header title at most** | A longer title is cut short in the header to fit one line | 35 characters | 5 to 200 |
|
|
155
|
+
| **Page numbers** | Prints a page number at the bottom of every page after the title page | On | |
|
|
156
|
+
| **Page number text** | The words around the number; `{page}` becomes the number, so `Page {page}` prints "Page 4" | `Page {page}` | |
|
|
157
|
+
| **Page number from the bottom** | From the bottom edge to the page number | 10 mm | 3 to 60 |
|
|
158
|
+
| **Space kept above page number** | Space kept free above the number so body text stops short of it | 15 mm | 0 to 60 |
|
|
159
|
+
|
|
160
|
+
### Sources page
|
|
161
|
+
|
|
162
|
+
| Setting | What it does | Default | Range |
|
|
163
|
+
|---|---|---|---|
|
|
164
|
+
| **Sources page** | Adds a page listing the web links the article and its research used, each clickable | On | |
|
|
165
|
+
| **Sources page title** | Its heading (up to 300 characters) | Sources Consulted | |
|
|
166
|
+
| **Sources title position** | From the top margin to the title | 20 mm | 0 to 100 |
|
|
167
|
+
| **Sources list position** | From the top margin to the first source | 40 mm | 0 to 150 |
|
|
168
|
+
| **Sources line height** | Between the lines of one source | 8 mm | 3 to 30 |
|
|
169
|
+
| **Gap between sources** | Extra space between sources | 2 mm | 0 to 20 |
|
|
170
|
+
|
|
171
|
+
### Closing page
|
|
172
|
+
|
|
173
|
+
| Setting | What it does | Default | Range |
|
|
174
|
+
|---|---|---|---|
|
|
175
|
+
| **Closing page** | Adds a last page with your own text, such as an about section or a thank-you | Off | |
|
|
176
|
+
| **Closing page title** | Its heading (up to 300 characters) | About | |
|
|
177
|
+
| **Closing page text** | One line per row, up to 60 lines of 300 characters. A line starting with `•` becomes a muted bullet, one ending with `:` a bold label, an empty line a gap. | Empty | |
|
|
178
|
+
| **Add date, word and page counts** | Adds a Document Details list: date written, total words and total pages | On | |
|
|
179
|
+
| **Closing page link** | A clickable line after your text: **Link text** and **Link address**. Without an address the words show without a link. | Off | |
|
|
180
|
+
| **Closing line** | A last line, such as a sign-off, in the decorative font. Empty leaves it out. | Empty | |
|
|
181
|
+
| **Closing title position** | From the top margin to the title | 20 mm | 0 to 100 |
|
|
182
|
+
| **Closing text position** | From the top margin to the first line | 40 mm | 0 to 150 |
|
|
183
|
+
|
|
184
|
+
### PDF details
|
|
185
|
+
|
|
186
|
+
These appear in a PDF reader's document properties, not on the pages.
|
|
187
|
+
|
|
188
|
+
| Setting | What it does | Default |
|
|
189
|
+
|---|---|---|
|
|
190
|
+
| **PDF author** | The author shown in the properties. `{title}` becomes the article title. | Empty |
|
|
191
|
+
| **PDF subject** | The subject shown in the properties. | `{title}` |
|
|
192
|
+
| **PDF keywords** | Search words, usually separated by commas (up to 1,000 characters) | Empty |
|
|
193
|
+
| **PDF creator** | The app or person shown as the creator | Empty |
|
|
194
|
+
|
|
195
|
+
## Tips
|
|
196
|
+
|
|
197
|
+
- Change one group at a time and watch the preview; it redraws as you type.
|
|
198
|
+
- For a book-like PDF, turn on **Parchment texture**, keep drop caps on and raise **Body line height** a little.
|
|
199
|
+
- For a plain handout, set Body font to Helvetica, turn drop caps off and set **Lists headings down to** top level.
|
|
200
|
+
- Put your channel name in **Brand name** and your site in **Website** so every PDF links back to you.
|
|
201
|
+
|
|
202
|
+
## Related pages
|
|
203
|
+
|
|
204
|
+
- [PDF documents](PDF-Documents)
|
|
205
|
+
- [Channels](Channels)
|
|
206
|
+
- [Library overview](Library-Overview)
|
|
207
|
+
- [Play outputs](Play-Outputs)
|