@gentbajko/slopify 2.5.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -21
- package/NOTICE +12 -0
- package/README.md +24 -41
- package/SUBTITLES.md +1 -1
- package/dist/adapter-registry.js +31 -0
- package/dist/adapters/alignment/cache.js +4 -1
- package/dist/adapters/alignment/ctc.js +25 -23
- package/dist/adapters/alignment/index.js +37 -6
- package/dist/adapters/alignment/multilingual.js +267 -0
- package/dist/adapters/alignment/protocol.js +11 -0
- package/dist/adapters/alignment/quality.js +4 -3
- package/dist/adapters/alignment/sentences.js +95 -0
- package/dist/adapters/alignment/spec.js +24 -0
- package/dist/adapters/alignment/spell.js +769 -0
- package/dist/adapters/alignment/text.js +56 -9
- package/dist/adapters/alignment/window.js +34 -30
- package/dist/adapters/alignment/worker.js +23 -21
- package/dist/adapters/explain.js +11 -11
- package/dist/adapters/host-cli/index.js +44 -5
- package/dist/adapters/host-cli/transport.js +7 -5
- package/dist/adapters/image/bytes.js +2 -2
- package/dist/adapters/image/codex-output.js +1 -1
- package/dist/adapters/image/codex.js +87 -22
- package/dist/adapters/image/fal.js +13 -5
- package/dist/adapters/image/google.js +11 -8
- package/dist/adapters/image/openai.js +14 -7
- package/dist/adapters/image/reference.js +34 -0
- package/dist/adapters/image/replicate.js +7 -2
- package/dist/adapters/image/video.js +2 -2
- package/dist/adapters/key-probes.js +85 -0
- package/dist/adapters/llm/claude-code.js +168 -32
- package/dist/adapters/llm/cli-login-error.js +1 -1
- package/dist/adapters/llm/codex-limits.js +157 -0
- package/dist/adapters/llm/codex.js +99 -12
- package/dist/adapters/llm/document-workspace.js +2 -2
- package/dist/adapters/llm/gemini-workspace.js +1 -1
- package/dist/adapters/llm/gemini.js +16 -3
- package/dist/adapters/llm/image-workspace.js +58 -0
- package/dist/adapters/llm/openrouter.js +11 -3
- package/dist/adapters/llm/run-cli.js +12 -7
- package/dist/adapters/tts/cartesia.js +10 -0
- package/dist/adapters/tts/elevenlabs.js +31 -9
- package/dist/adapters/tts/gemini.js +206 -0
- package/dist/adapters/tts/inworld-async.js +9 -5
- package/dist/adapters/tts/inworld.js +17 -3
- package/dist/adapters/tts/openai.js +3 -0
- package/dist/adapters/tts/pcm-mp3.js +62 -0
- package/dist/adapters/tts/system.js +147 -0
- package/dist/adapters/tts/voice-languages.js +80 -0
- package/dist/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
- package/dist/assets/fonts/noto/NotoSansArabic-Regular.ttf +0 -0
- package/dist/assets/fonts/noto/NotoSansDevanagari-Regular.ttf +0 -0
- package/dist/assets/fonts/noto/NotoSansHebrew-Regular.ttf +0 -0
- package/dist/assets/fonts/noto/NotoSansThai-Regular.ttf +0 -0
- package/dist/assets/fonts/noto/OFL.txt +93 -0
- package/dist/assets/fonts/noto/SOURCE.txt +18 -0
- package/dist/assets/models.yaml +38 -0
- package/dist/assets/sample/sample-audiobook.tar +0 -0
- package/dist/assets/sample/sample-podcast.tar +0 -0
- package/dist/assets/sample/sample-project.tar +0 -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/merge.js +132 -0
- package/dist/catalog/registry.js +17 -14
- package/dist/catalog/schema.js +2 -0
- package/dist/catalog/store.js +147 -8
- package/dist/catalog/validate.js +2 -2
- package/dist/compose.yaml +71 -0
- package/dist/edge/autostart/docker-record.js +32 -0
- package/dist/edge/autostart/docker.js +118 -0
- package/dist/edge/autostart/index.js +78 -0
- package/dist/edge/autostart/launcher.js +176 -0
- package/dist/edge/autostart/model.js +3 -0
- package/dist/edge/autostart/native.js +210 -0
- package/dist/edge/autostart/prompt.js +72 -0
- package/dist/edge/autostart/service.js +90 -0
- package/dist/edge/cli-args.js +71 -0
- package/dist/edge/cli.js +64 -63
- package/dist/edge/docker-install/activation.js +56 -0
- package/dist/edge/docker-install/apply.js +458 -0
- package/dist/edge/docker-install/engine.js +362 -0
- package/dist/edge/docker-install/run.js +160 -0
- package/dist/edge/docker-install/state.js +146 -0
- package/dist/edge/{docker-projects → docker-install}/volume.js +1 -5
- package/dist/edge/docker.js +14 -22
- package/dist/edge/events/hub.js +3 -1
- package/dist/edge/host-cli.js +1 -1
- package/dist/edge/http/actions.js +38 -11
- package/dist/edge/http/app.js +60 -2
- package/dist/edge/http/auditions.js +70 -0
- package/dist/edge/http/autostart.js +37 -0
- package/dist/edge/http/byte-range.js +42 -0
- package/dist/edge/http/channel-memory.js +92 -0
- package/dist/edge/http/channels.js +128 -0
- package/dist/edge/http/diagnostics.js +1 -0
- package/dist/edge/http/draft-files.js +2 -4
- package/dist/edge/http/entries.js +22 -3
- package/dist/edge/http/files.js +11 -7
- package/dist/edge/http/folder-location.js +1 -1
- package/dist/edge/http/home.js +39 -0
- package/dist/edge/http/host-cli.js +29 -5
- package/dist/edge/http/narration-peaks.js +76 -0
- package/dist/edge/http/onboarding.js +212 -0
- package/dist/edge/http/open-folder.js +1 -1
- package/dist/edge/http/patch-notes.js +45 -0
- package/dist/edge/http/planning.js +4 -2
- package/dist/edge/http/project-create.js +87 -0
- package/dist/edge/http/project-templates.js +19 -2
- package/dist/edge/http/projects.js +37 -100
- package/dist/edge/http/prompts.js +40 -3
- package/dist/edge/http/pronunciations.js +23 -4
- package/dist/edge/http/providers.js +119 -3
- package/dist/edge/http/reviews.js +131 -0
- package/dist/edge/http/revision-files.js +3 -5
- package/dist/edge/http/revisions.js +1 -1
- package/dist/edge/http/run-cost.js +25 -0
- package/dist/edge/http/schedules.js +115 -6
- package/dist/edge/http/settings.js +84 -6
- package/dist/edge/http/storage-files.js +50 -0
- package/dist/edge/http/storage.js +43 -2
- package/dist/edge/http/studio.js +287 -0
- package/dist/edge/http/style-preview.js +61 -0
- package/dist/edge/http/subtitles.js +1 -1
- package/dist/edge/http/trash.js +69 -0
- package/dist/edge/http/tutorials.js +59 -0
- package/dist/edge/http/update.js +24 -3
- package/dist/edge/http/whats-new.js +15 -0
- package/dist/edge/http/youtube-edits.js +92 -0
- package/dist/edge/native-update.js +62 -0
- 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/open-folder.js +10 -10
- package/dist/host-cli/runtime.js +9 -1
- package/dist/host-cli/status.js +4 -2
- package/dist/kernel/db/migrations/0025-automatic-reviews.sql +40 -0
- package/dist/kernel/db/migrations/0026-schedule-topic-generation.sql +23 -0
- package/dist/kernel/db/migrations/0027-run-cost.sql +58 -0
- package/dist/kernel/db/migrations/0030-automatic-retries.sql +18 -0
- package/dist/kernel/db/migrations/0031-prompt-history-and-description-edits.sql +33 -0
- package/dist/kernel/db/migrations/0032-channels.sql +65 -0
- package/dist/kernel/db/migrations/0034-script-prompts.sql +23 -0
- package/dist/kernel/db/migrations/0035-narration-aliases.sql +13 -0
- package/dist/kernel/db/migrations/0037-project-uploads.sql +8 -0
- package/dist/kernel/db/migrations/0038-voice-languages.sql +7 -0
- package/dist/kernel/db/migrations/0039-channel-essentials.sql +64 -0
- package/dist/kernel/db/migrations/0040-standalone-usage.sql +35 -0
- package/dist/kernel/db/migrations/0041-cast-hosts.sql +3 -0
- package/dist/kernel/paths.js +27 -6
- package/dist/kernel/pipeline.js +4 -1
- package/dist/kernel/ports/host-cli.js +122 -14
- package/dist/kernel/ports/key-probe.js +1 -0
- package/dist/kernel/ports/languages.js +157 -0
- package/dist/kernel/ports/model.js +10 -5
- package/dist/kernel/ports/narration-aliases.js +60 -0
- package/dist/kernel/ports/plan-limits.js +36 -0
- package/dist/kernel/ports/system-speech.js +203 -0
- package/dist/kernel/runner/attempt.js +17 -8
- package/dist/kernel/runner/audition.js +36 -0
- package/dist/kernel/runner/graph.js +40 -5
- package/dist/kernel/runner/index.js +39 -9
- package/dist/kernel/runner/meter.js +1 -0
- package/dist/kernel/runner/providers.js +142 -7
- package/dist/kernel/runner/retry-policy.js +43 -0
- package/dist/kernel/runner/standalone.js +134 -0
- package/dist/kernel/runner/work-authority.js +28 -2
- package/dist/main.js +277 -16
- package/dist/model-catalog.js +2 -0
- package/dist/patch-notes/0.4.2-to-1.0.md +93 -0
- package/dist/patch-notes/1.0-to-2.0.md +74 -0
- package/dist/patch-notes/2.0-to-3.0.md +257 -0
- package/dist/patch-notes/3.0.0.md +70 -0
- package/dist/patch-notes/3.0.1.md +105 -0
- package/dist/patch-notes/index.json +32 -0
- package/dist/slices/admission/model.js +27 -0
- package/dist/slices/admission/repo.js +24 -4
- package/dist/slices/admission/rules.js +80 -2
- package/dist/slices/admission/schema.js +58 -1
- package/dist/slices/admission/short-mode.js +47 -0
- package/dist/slices/admission/start.js +42 -6
- package/dist/slices/article/continuation.js +2 -2
- package/dist/slices/article/provided-entries.js +2 -2
- package/dist/slices/article/run.js +6 -2
- package/dist/slices/article/segments.js +3 -3
- package/dist/slices/backups/folder.js +14 -6
- package/dist/slices/batch/index.js +7 -2
- package/dist/slices/cancel/index.js +1 -1
- package/dist/slices/channels/cast-images.js +110 -0
- package/dist/slices/channels/cast-match.js +32 -0
- package/dist/slices/channels/images.js +19 -0
- package/dist/slices/channels/model.js +5 -0
- package/dist/slices/channels/rebrand.js +100 -0
- package/dist/slices/channels/repo.js +221 -0
- package/dist/slices/channels/runs.js +129 -0
- package/dist/slices/channels/schema.js +152 -0
- package/dist/slices/channels/service.js +180 -0
- package/dist/slices/channels/studio-csv.js +110 -0
- package/dist/slices/channels/videos.js +120 -0
- package/dist/slices/checkpoints/recovery.js +10 -0
- package/dist/slices/control/index.js +5 -2
- package/dist/slices/control/providers.js +4 -1
- package/dist/slices/document/fonts.js +1 -1
- package/dist/slices/document/render.js +1 -1
- package/dist/slices/episodes/related.js +90 -0
- package/dist/slices/episodes/repo.js +60 -0
- package/dist/slices/episodes/service.js +58 -0
- package/dist/slices/episodes/summarize.js +170 -0
- package/dist/slices/estimate/index.js +109 -28
- package/dist/slices/estimate/requests.js +68 -2
- 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 +73 -0
- package/dist/slices/fonts/coverage.js +82 -0
- package/dist/slices/fonts/sfnt.js +74 -0
- package/dist/slices/images/run.js +8 -5
- package/dist/slices/images/scale.js +84 -0
- package/dist/slices/library/diff.js +122 -0
- package/dist/slices/library/history.js +100 -0
- package/dist/slices/library/model.js +3 -0
- package/dist/slices/library/photorealistic.js +49 -0
- package/dist/slices/library/repo.js +19 -14
- package/dist/slices/library/save.js +62 -12
- package/dist/slices/library/slots.js +7 -1
- package/dist/slices/library/used-by.js +153 -0
- package/dist/slices/loudness/level-pieces.js +41 -0
- package/dist/slices/loudness/loudnorm.js +164 -0
- package/dist/slices/loudness/model.js +153 -0
- package/dist/slices/model-upkeep/model.js +10 -0
- package/dist/slices/model-upkeep/switch.js +217 -0
- package/dist/slices/model-upkeep/usage.js +185 -0
- package/dist/slices/narration/aliases-library.js +31 -0
- package/dist/slices/narration/aliases-schema.js +53 -0
- package/dist/slices/narration/aliases.js +49 -0
- package/dist/slices/narration/blocks.js +352 -0
- package/dist/slices/narration/chunk.js +19 -7
- package/dist/slices/narration/concat.js +2 -2
- package/dist/slices/narration/describe.js +45 -0
- package/dist/slices/narration/pauses-model.js +63 -0
- package/dist/slices/narration/pauses.js +269 -0
- package/dist/slices/narration/peaks-model.js +1 -0
- package/dist/slices/narration/peaks.js +94 -0
- package/dist/slices/narration/preparation.js +21 -3
- package/dist/slices/narration/pronunciation-chunks.js +3 -3
- package/dist/slices/narration/pronunciation.js +72 -25
- package/dist/slices/narration/run.js +6 -6
- package/dist/slices/narration/shared-glossary.js +1 -1
- package/dist/slices/narration/steering.js +15 -4
- package/dist/slices/notifications/notifier.js +47 -3
- package/dist/slices/notifications/rules.js +48 -3
- package/dist/slices/onboarding/copy.js +143 -0
- package/dist/slices/onboarding/first-run.js +72 -0
- package/dist/slices/onboarding/full-video.js +81 -0
- package/dist/slices/onboarding/install.js +119 -0
- package/dist/slices/onboarding/model.js +85 -0
- package/dist/slices/onboarding/packs.js +491 -0
- package/dist/slices/onboarding/quick-short.js +144 -0
- package/dist/slices/onboarding/sample.js +132 -0
- package/dist/slices/onboarding/state.js +68 -0
- package/dist/slices/onboarding/template.js +73 -0
- package/dist/slices/patch-notes/library.js +73 -0
- package/dist/slices/patch-notes/seen.js +77 -0
- package/dist/slices/play-drafts/convert.js +127 -8
- package/dist/slices/play-drafts/readiness.js +4 -1
- package/dist/slices/play-drafts/repo.js +2 -0
- package/dist/slices/play-drafts/review-inputs.js +20 -3
- package/dist/slices/play-drafts/schema.js +89 -0
- package/dist/slices/play-drafts/service.js +4 -1
- package/dist/slices/play-drafts/start.js +43 -18
- package/dist/slices/project-templates/from-project.js +59 -6
- package/dist/slices/project-templates/next-chapter.js +94 -0
- package/dist/slices/project-templates/one-off.js +26 -0
- package/dist/slices/project-templates/repo.js +2 -1
- package/dist/slices/project-templates/schema.js +7 -1
- package/dist/slices/project-templates/service.js +15 -4
- package/dist/slices/project-templates/setup.js +18 -2
- package/dist/slices/rebuild/admission-repo.js +1 -1
- package/dist/slices/rebuild/model.js +6 -0
- package/dist/slices/rebuild/preview-details.js +46 -3
- package/dist/slices/rebuild/preview-plan.js +13 -6
- package/dist/slices/rebuild/recipe-audio-parts.js +40 -7
- package/dist/slices/rebuild/recipe-audio.js +66 -12
- package/dist/slices/rebuild/recipe-build.js +8 -4
- package/dist/slices/rebuild/recipe-cast.js +18 -0
- package/dist/slices/rebuild/recipe-checkpoints.js +11 -9
- package/dist/slices/rebuild/recipe-describe.js +93 -0
- package/dist/slices/rebuild/recipe-edit.js +13 -1
- package/dist/slices/rebuild/recipe-exports.js +67 -8
- package/dist/slices/rebuild/recipe-input-schema.js +35 -0
- package/dist/slices/rebuild/recipe-legacy.js +9 -0
- package/dist/slices/rebuild/recipe-loudness.js +45 -0
- package/dist/slices/rebuild/recipe-model.js +25 -6
- package/dist/slices/rebuild/recipe-pauses.js +7 -0
- package/dist/slices/rebuild/recipe-preparation.js +3 -3
- package/dist/slices/rebuild/recipe-provider-choice.js +11 -1
- package/dist/slices/rebuild/recipe-reference.js +15 -1
- package/dist/slices/rebuild/recipe-reviews.js +117 -0
- package/dist/slices/rebuild/recipe-save.js +4 -1
- package/dist/slices/rebuild/recipe-shorts.js +23 -3
- package/dist/slices/rebuild/recipe-text.js +114 -19
- package/dist/slices/rebuild/recipe-validation.js +14 -2
- package/dist/slices/rebuild/recipe-visual.js +96 -33
- package/dist/slices/rebuild/recipe-voices.js +286 -0
- package/dist/slices/rebuild/recipe-work.js +77 -6
- package/dist/slices/rebuild/recipe-youtube.js +2 -0
- package/dist/slices/rebuild/recovery-conflict.js +7 -3
- package/dist/slices/rebuild/recovery-model.js +3 -0
- package/dist/slices/rebuild/recovery-selection.js +28 -2
- package/dist/slices/rebuild/recovery.js +35 -17
- package/dist/slices/rebuild/repo.js +3 -3
- package/dist/slices/rebuild/retry.js +18 -0
- package/dist/slices/rebuild/review-redo.js +125 -0
- package/dist/slices/rebuild/runtime-actions.js +5 -0
- package/dist/slices/rebuild/runtime-admission.js +4 -1
- package/dist/slices/rebuild/runtime-animate.js +4 -4
- package/dist/slices/rebuild/runtime-article.js +5 -5
- package/dist/slices/rebuild/runtime-document.js +4 -4
- package/dist/slices/rebuild/runtime-export-bed.js +43 -0
- package/dist/slices/rebuild/runtime-export-edit.js +70 -11
- package/dist/slices/rebuild/runtime-export-inputs.js +52 -10
- package/dist/slices/rebuild/runtime-export-short.js +85 -0
- package/dist/slices/rebuild/runtime-export.js +84 -19
- package/dist/slices/rebuild/runtime-figure-card.js +87 -0
- package/dist/slices/rebuild/runtime-image.js +21 -2
- package/dist/slices/rebuild/runtime-local.js +148 -24
- package/dist/slices/rebuild/runtime-materialize.js +8 -0
- package/dist/slices/rebuild/runtime-narration-reuse.js +2 -1
- package/dist/slices/rebuild/runtime-narration-text.js +7 -7
- package/dist/slices/rebuild/runtime-pictures.js +28 -0
- package/dist/slices/rebuild/runtime-piece-label.js +27 -0
- package/dist/slices/rebuild/runtime-provider.js +126 -18
- package/dist/slices/rebuild/runtime-publication.js +21 -5
- package/dist/slices/rebuild/runtime-review.js +267 -0
- package/dist/slices/rebuild/runtime-run.js +17 -11
- package/dist/slices/rebuild/runtime-shorts.js +44 -17
- package/dist/slices/rebuild/runtime-store.js +62 -11
- package/dist/slices/rebuild/runtime-subtitles.js +72 -19
- package/dist/slices/rebuild/runtime-voices.js +103 -0
- package/dist/slices/rebuild/runtime-youtube.js +7 -6
- package/dist/slices/rebuild/service-readiness.js +3 -3
- package/dist/slices/rebuild/soften.js +49 -0
- package/dist/slices/rebuild/transition-repo.js +9 -2
- package/dist/slices/research/run.js +4 -4
- package/dist/slices/research/synthesis.js +2 -2
- package/dist/slices/reviews/model.js +105 -0
- package/dist/slices/reviews/outcome.js +22 -0
- package/dist/slices/reviews/repo.js +118 -0
- package/dist/slices/reviews/rules.js +63 -0
- package/dist/slices/reviews/verdict.js +71 -0
- package/dist/slices/reviews/view.js +30 -0
- package/dist/slices/revisions/adopt-content.js +5 -2
- package/dist/slices/revisions/adopt.js +3 -1
- package/dist/slices/revisions/downloads.js +7 -1
- package/dist/slices/revisions/image-plan.js +183 -0
- package/dist/slices/revisions/mutation-assets.js +10 -0
- package/dist/slices/revisions/mutation-cues.js +71 -0
- package/dist/slices/revisions/mutation-request.js +2 -1
- package/dist/slices/revisions/mutations.js +97 -3
- package/dist/slices/revisions/schema.js +11 -1
- package/dist/slices/run-cost/limits.js +128 -0
- package/dist/slices/run-cost/meter.js +47 -0
- package/dist/slices/run-cost/panel.js +256 -0
- package/dist/slices/run-cost/pricing.js +95 -0
- package/dist/slices/run-cost/week.js +108 -0
- package/dist/slices/schedules/agenda.js +222 -0
- package/dist/slices/schedules/repo.js +58 -18
- package/dist/slices/schedules/scheduler.js +68 -17
- package/dist/slices/schedules/schema.js +179 -1
- package/dist/slices/schedules/service.js +43 -4
- package/dist/slices/schedules/similar.js +128 -0
- package/dist/slices/schedules/topic-list.js +163 -0
- package/dist/slices/schedules/topics.js +523 -0
- package/dist/slices/settings/first-run.js +106 -0
- package/dist/slices/settings/health.js +247 -0
- package/dist/slices/settings/key-guides.js +138 -0
- package/dist/slices/settings/key-test.js +93 -0
- package/dist/slices/settings/keys.js +10 -5
- package/dist/slices/settings/model-reach.js +52 -0
- package/dist/slices/settings/model.js +55 -1
- package/dist/slices/settings/models.js +5 -1
- package/dist/slices/settings/playback.js +15 -0
- package/dist/slices/settings/readiness.js +14 -2
- package/dist/slices/settings/repo.js +17 -3
- package/dist/slices/settings/tutorial-schema.js +5 -0
- package/dist/slices/settings/voices.js +64 -4
- package/dist/slices/settings/whats-new.js +64 -0
- package/dist/slices/shorts/captions.js +9 -0
- package/dist/slices/shorts/pick.js +3 -3
- package/dist/slices/shorts/prompts.js +1 -1
- package/dist/slices/shorts/render.js +63 -13
- package/dist/slices/storage/asset-name.js +3 -0
- package/dist/slices/storage/backup-export.js +48 -9
- package/dist/slices/storage/backup-format.js +38 -1
- package/dist/slices/storage/backup-import.js +191 -19
- package/dist/slices/storage/delete-project.js +7 -4
- package/dist/slices/storage/documents.js +87 -0
- package/dist/slices/storage/downloads.js +33 -1
- package/dist/slices/storage/files-location.js +531 -0
- package/dist/slices/storage/layout.js +14 -4
- package/dist/slices/storage/model.js +11 -0
- package/dist/slices/storage/portable.js +94 -12
- package/dist/slices/storage/reconcile.js +14 -1
- package/dist/slices/storage/repo.js +4 -1
- package/dist/slices/storage/schema.js +11 -0
- package/dist/slices/storage/trim.js +146 -0
- package/dist/slices/studio/disclosure.js +74 -0
- package/dist/slices/studio/model.js +30 -0
- package/dist/slices/studio/pack.js +211 -0
- package/dist/slices/studio/queue.js +69 -0
- package/dist/slices/studio/settings.js +170 -0
- package/dist/slices/style-preview/images.js +61 -0
- package/dist/slices/style-preview/narration.js +33 -0
- package/dist/slices/style-preview/render.js +148 -0
- package/dist/slices/style-preview/schema.js +59 -0
- package/dist/slices/style-preview/service.js +92 -0
- package/dist/slices/style-preview/settings.js +139 -0
- package/dist/slices/subtitles/captions.js +42 -9
- package/dist/slices/subtitles/model.js +22 -0
- package/dist/slices/subtitles/prepare.js +27 -16
- package/dist/slices/subtitles/transcript.js +1 -1
- package/dist/slices/thumbnail/run.js +7 -7
- package/dist/slices/trash/model.js +25 -0
- package/dist/slices/trash/service.js +273 -0
- package/dist/slices/tutorials/anchors.js +57 -0
- package/dist/slices/tutorials/library.js +185 -0
- package/dist/slices/uploads/repo.js +20 -0
- package/dist/slices/video/ambient-bed-schema.js +15 -0
- package/dist/slices/video/ambient-bed.js +95 -0
- package/dist/slices/video/ambient-mix.js +72 -0
- package/dist/slices/video/audio-inputs.js +2 -2
- package/dist/slices/video/cards.js +5 -2
- package/dist/slices/video/edit-list.js +23 -2
- package/dist/slices/video/edit-settings.js +13 -3
- package/dist/slices/video/ffmpeg.js +63 -9
- package/dist/slices/video/figure-card.js +492 -0
- package/dist/slices/video/figure-spans.js +51 -0
- package/dist/slices/video/plan.js +125 -13
- package/dist/slices/video/run.js +14 -12
- package/dist/slices/video/slideshow.js +39 -4
- package/dist/slices/voices/attribution.js +69 -0
- package/dist/slices/voices/audio-files.js +87 -0
- package/dist/slices/voices/audition.js +25 -0
- package/dist/slices/voices/cast.js +74 -0
- package/dist/slices/voices/grouping.js +59 -0
- package/dist/slices/voices/join.js +35 -0
- package/dist/slices/voices/languages.js +25 -0
- package/dist/slices/voices/model.js +218 -0
- package/dist/slices/voices/palette.js +26 -0
- package/dist/slices/voices/panel.js +91 -0
- package/dist/slices/voices/portraits.js +55 -0
- package/dist/slices/voices/script.js +136 -0
- package/dist/slices/voices/timing.js +58 -0
- package/dist/slices/youtube/answer.js +1 -1
- package/dist/slices/youtube/chapters.js +126 -0
- package/dist/slices/youtube/edits-repo.js +84 -0
- package/dist/slices/youtube/edits.js +89 -0
- package/dist/slices/youtube/placeholders.js +98 -0
- package/dist/slices/youtube/transcript.js +11 -4
- 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/updater/service.js +66 -21
- package/dist/web/assets/index-DBLSfqA-.css +1 -0
- package/dist/web/assets/index-DFdIhmm0.js +307 -0
- package/dist/web/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
- package/dist/web/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
- package/dist/web/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
- package/dist/web/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
- package/dist/web/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- package/dist/web/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- package/dist/web/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
- package/dist/web/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
- package/dist/web/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
- package/dist/web/assets/{pdf-BLF2i8c2.js → pdf-B9OY1ioX.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +5 -5
- package/dist/edge/docker-launch.js +0 -81
- package/dist/edge/docker-projects/activation.js +0 -35
- package/dist/edge/docker-projects/claims.js +0 -85
- package/dist/edge/docker-projects/committed.js +0 -40
- package/dist/edge/docker-projects/engine.js +0 -461
- package/dist/edge/docker-projects/install.js +0 -254
- package/dist/edge/docker-projects/prune.js +0 -66
- package/dist/edge/docker-projects/recover.js +0 -100
- package/dist/edge/docker-projects/state.js +0 -225
- package/dist/web/assets/index-CktpxlJd.js +0 -171
- package/dist/web/assets/index-DB-vOnGU.css +0 -1
- package/scripts/docker-run.sh +0 -3
- /package/dist/edge/{docker-projects → docker-install}/tree.js +0 -0
|
@@ -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)
|
|
@@ -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)
|