@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,290 @@
|
|
|
1
|
+
# Providers and Keys
|
|
2
|
+
|
|
3
|
+
Slopify does no AI work itself: it calls providers you set up, on your own accounts. This page lists every provider, where to get each key, how to save and test it, how **Check all** checks everything at once, and how to add voices in **Settings → Voices**.
|
|
4
|
+
|
|
5
|
+
**Where to find it:** Settings → Providers (keys, command-line tools and the system voice), Settings → Voices (voice IDs).
|
|
6
|
+
|
|
7
|
+
## How providers are organised
|
|
8
|
+
|
|
9
|
+
Settings → Providers shows three lists, one per kind of work. Each row says whether the provider is ready. Pick a row to open its setup beside the list: the steps, the key field or the command, and the actions.
|
|
10
|
+
|
|
11
|
+
| List | What it makes | Providers |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| **Text** | Research, script, article, titles, descriptions, reviews | OpenRouter (API key), Claude Code CLI, Codex CLI, Gemini CLI (command line) |
|
|
14
|
+
| **Speech** | Narration | ElevenLabs, OpenAI, Cartesia, Inworld, Google Gemini (API key), System voice (built in, no key) |
|
|
15
|
+
| **Images** | Images, thumbnails, animated clips | fal.ai, Replicate, OpenAI, Google (API key), Codex CLI (command line) |
|
|
16
|
+
|
|
17
|
+
Row states:
|
|
18
|
+
|
|
19
|
+
| State | Meaning |
|
|
20
|
+
|---|---|
|
|
21
|
+
| **Key saved** | A key is stored for this provider. |
|
|
22
|
+
| **No key** | No key yet; the provider is not selectable on Play. |
|
|
23
|
+
| **Ready** | A command-line tool was found and is usable. |
|
|
24
|
+
| **Needs attention** | The tool was found but something is wrong, for example Codex CLI is older than 0.149.1. |
|
|
25
|
+
| **Not found** | The tool is not on this computer (or not at the saved path). For the System voice: no speech program was found. |
|
|
26
|
+
|
|
27
|
+
Each row also says what kind it is: **Command line**, **Built in, no key** or **API key**.
|
|
28
|
+
|
|
29
|
+
The command-line tools (Claude Code, Codex, Gemini) need no key: they use the sign-in you already have. They are covered on [AI CLIs](AI-CLIs).
|
|
30
|
+
|
|
31
|
+
On a fresh install with no key saved, the page says **Paste a key to make its provider selectable on Play.** On the first launch Slopify also looks for the command-line tools. If it finds one it says so, names what it found and picks it on Play; choose **Got it** to hide that message. Narration needs no key either: without a voice key, the [System voice](#the-system-voice) reads it with your computer's own speech.
|
|
32
|
+
|
|
33
|
+
## Where your keys are kept
|
|
34
|
+
|
|
35
|
+
- A key is stored on this computer only and sent only to its own provider.
|
|
36
|
+
- It is never put in a backup or an export. After you import a backup on another computer, enter your keys again.
|
|
37
|
+
- A saved key is shown as a fixed row of dots, never any part of it.
|
|
38
|
+
- Slopify reads the key when each call starts, so a key you change mid-run is used from the next call.
|
|
39
|
+
- Readiness is checked again before each run.
|
|
40
|
+
|
|
41
|
+
## Add a key
|
|
42
|
+
|
|
43
|
+
1. Open **Settings → Providers**.
|
|
44
|
+
2. Pick the provider in its list (for example **ElevenLabs** under **Speech**).
|
|
45
|
+
3. Follow the numbered steps shown beside it. They link to the provider's sign-up page, the page that makes the key and, where there is one, its billing page. Once a key is saved, the steps fold under **Where to get a key**.
|
|
46
|
+
4. Paste the key in **<Provider> API key**.
|
|
47
|
+
5. Optional: choose **Test** to check the pasted key before you keep it. See [Test a key](#test-a-key).
|
|
48
|
+
6. Choose **Save**. A tick shows beside Save for a moment.
|
|
49
|
+
|
|
50
|
+
To replace a key, paste the new one and choose **Save**. To remove it, choose **Remove**, then **Remove key**. Projects that used that provider cannot retry until a key is saved again.
|
|
51
|
+
|
|
52
|
+
The info button beside each provider's name says what it does and how it bills.
|
|
53
|
+
|
|
54
|
+
## Test a key
|
|
55
|
+
|
|
56
|
+
**Test** asks the provider whether a key works, with the cheapest harmless call it allows (such as listing its models). Nothing is generated or billed. The answer waits up to 15 seconds.
|
|
57
|
+
|
|
58
|
+
- **Before saving:** with a key pasted in the field, Test checks that pasted key. It is sent only to its own provider, never stored and never logged. When it passes, the answer adds "It is not saved yet: choose Save to keep it."
|
|
59
|
+
- **After saving:** with the field empty, Test checks the saved key.
|
|
60
|
+
|
|
61
|
+
With neither, Test is greyed out: "Paste a key first."
|
|
62
|
+
|
|
63
|
+
| Answer | What it means | What to do |
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| Accepted | The key works. Except for OpenRouter, credit is only checked when Slopify first generates with it. | Nothing. |
|
|
66
|
+
| Did not accept (HTTP 401) | Mistyped, revoked or for another account. | Make a new key, Save, Test. |
|
|
67
|
+
| No credit (HTTP 402) | Key accepted, but the account has no credit or payment method. | Add credit on the provider's billing page. |
|
|
68
|
+
| Refused (HTTP 403) | The key is restricted, or the account needs verifying or billing set up. | Check the permissions listed for that provider below. |
|
|
69
|
+
| Too many requests (HTTP 429) | The key is usually valid. | Wait a minute and Test again. |
|
|
70
|
+
| Problem on its side (HTTP 5xx) | The provider is having trouble. | Wait a few minutes and Test again. |
|
|
71
|
+
| Did not answer / could not reach | No answer within 15 seconds, or no connection. | Check your internet, firewall or proxy. |
|
|
72
|
+
| Unexpected answer | Anything else. | Check the key; if it keeps happening, use **Download diagnostics** in Settings and report it. |
|
|
73
|
+
|
|
74
|
+
## Text providers
|
|
75
|
+
|
|
76
|
+
### OpenRouter
|
|
77
|
+
|
|
78
|
+
Writes the text with hundreds of models from many companies through one key. Charged per token from credit you buy on OpenRouter; prices follow the model catalogue (see [Models](Models)).
|
|
79
|
+
|
|
80
|
+
1. Sign up at openrouter.ai/sign-up.
|
|
81
|
+
2. Open **Credits** (openrouter.ai/settings/credits) and buy credit. Paid models are charged from it; a negative balance stops even free models.
|
|
82
|
+
3. Open **Keys** (openrouter.ai/settings/keys), choose **Create API key**, and copy it.
|
|
83
|
+
4. Paste it in Slopify, **Save**, then **Test**.
|
|
84
|
+
|
|
85
|
+
Keys have no scopes. If you set a credit limit on the key, keep it above what a run costs. OpenRouter is the only provider whose Test also shows missing credit.
|
|
86
|
+
|
|
87
|
+
### Claude Code CLI, Codex CLI, Gemini CLI
|
|
88
|
+
|
|
89
|
+
No key. See [AI CLIs](AI-CLIs).
|
|
90
|
+
|
|
91
|
+
## Speech providers
|
|
92
|
+
|
|
93
|
+
### ElevenLabs
|
|
94
|
+
|
|
95
|
+
Narrates with ElevenLabs voices, including voices you added to your ElevenLabs account. Billed in characters of narration from your ElevenLabs plan.
|
|
96
|
+
|
|
97
|
+
1. Sign up at elevenlabs.io/app/sign-up.
|
|
98
|
+
2. Open **Developers → API keys** (elevenlabs.io/app/developers/api-keys), choose **Create key**, and copy it.
|
|
99
|
+
3. Paste it in Slopify, **Save**, then **Test**.
|
|
100
|
+
|
|
101
|
+
A restricted key needs **Text to Speech** access and **Models** read access (models_read) for Test; Voices read helps when picking voices. Remove any credit quota or IP allowlist that would block this computer.
|
|
102
|
+
|
|
103
|
+
### OpenAI (speech)
|
|
104
|
+
|
|
105
|
+
Narrates with OpenAI's text-to-speech voices. Billed per character or per audio minute, depending on the model, from prepaid credit on your OpenAI platform account.
|
|
106
|
+
|
|
107
|
+
1. Sign up or sign in at platform.openai.com/signup.
|
|
108
|
+
2. Open **Billing** and buy prepaid credit. New accounts need at least $5 before any call works.
|
|
109
|
+
3. Open **API keys** (platform.openai.com/api-keys), choose **Create new secret key**, and copy it. It is shown once.
|
|
110
|
+
4. Paste it in Slopify, **Save**, then **Test**.
|
|
111
|
+
|
|
112
|
+
A key with All permissions works. A restricted key needs **Models: Read** (for Test) and **Model capabilities: Request** (for speech and images).
|
|
113
|
+
|
|
114
|
+
OpenAI appears twice in Settings, once under **Speech** and once under **Images**. Each has its own key field, so you can key one without the other. You can paste the same OpenAI key into both.
|
|
115
|
+
|
|
116
|
+
### Cartesia
|
|
117
|
+
|
|
118
|
+
Narrates with Cartesia voices, billed in characters from your Cartesia plan. The free plan needs no card, so it is an easy way to try narration.
|
|
119
|
+
|
|
120
|
+
1. Sign up at play.cartesia.ai/sign-up.
|
|
121
|
+
2. Open **API Keys** (play.cartesia.ai/keys), create a key, and copy it. It starts with `sk_car_`.
|
|
122
|
+
3. Paste it in Slopify, **Save**, then **Test**.
|
|
123
|
+
|
|
124
|
+
Keys have no scopes.
|
|
125
|
+
|
|
126
|
+
### Inworld
|
|
127
|
+
|
|
128
|
+
Narrates with Inworld voices, billed per character from your Inworld account.
|
|
129
|
+
|
|
130
|
+
1. Sign up at platform.inworld.ai/signup.
|
|
131
|
+
2. Open **API Keys** (platform.inworld.ai/api-keys) and choose **Generate new key**. It must be a Standard key; Realtime-only keys do not work.
|
|
132
|
+
3. Copy the **Base64 credentials** value exactly as shown, without encoding it again.
|
|
133
|
+
4. Paste it in Slopify, **Save**, then **Test**.
|
|
134
|
+
|
|
135
|
+
On Play, choose the TTS-2 or TTS-2 Flash model and an Inworld voice (for example `Dennis`, or a voice from your workspace).
|
|
136
|
+
|
|
137
|
+
How long text is handled:
|
|
138
|
+
|
|
139
|
+
- Short text streams straight away.
|
|
140
|
+
- With TTS-2, text over 4,000 characters goes as one async job of up to 100,000 characters. Inworld caps On-Demand accounts at 10,000. The audio is ready once the job finishes.
|
|
141
|
+
- TTS-2 Flash sends parts of at most 4,000 characters. For long articles, pick paragraph chunking.
|
|
142
|
+
- Pausing stops Slopify's own requests, but Inworld may still finish and bill a job it already accepted. Resuming starts a new request for any unfinished narration.
|
|
143
|
+
|
|
144
|
+
Some features need Inworld: Narration Preparation and pronunciations need an Inworld TTS-2 model. See [Play-Narration](Play-Narration) and [Narration-Aliases-and-Glossary](Narration-Aliases-and-Glossary).
|
|
145
|
+
|
|
146
|
+
### Google Gemini (speech)
|
|
147
|
+
|
|
148
|
+
Narrates with Gemini's 30 prebuilt voices, billed per text and audio token on your Gemini API key. It uses the key saved for [Google images](#google): with one saved there, nothing is needed here. You can also save a key of its own under **Google Gemini** in the **Speech** list.
|
|
149
|
+
|
|
150
|
+
Pick a Gemini voice in Settings → **Voices** (see [Add a voice](#add-a-voice)). With two speakers on Gemini voices (a podcast or interview, see [Multiple Voices](Multiple-Voices)), their consecutive turns go in one two-speaker request; a third voice starts a new request.
|
|
151
|
+
|
|
152
|
+
### The system voice
|
|
153
|
+
|
|
154
|
+
The **System voice** narrates with your computer's own speech program: free, no key, and no account. It sounds robotic, so it is best for trying Slopify out; add a keyed voice when you want a better one. A first 60-second short uses it when no voice key is saved (see [Your First Short](Your-First-Short)).
|
|
155
|
+
|
|
156
|
+
Slopify looks for a speech program each time and uses the best one it finds:
|
|
157
|
+
|
|
158
|
+
| System | Speech program |
|
|
159
|
+
|---|---|
|
|
160
|
+
| macOS | macOS voices (the built-in `say`) |
|
|
161
|
+
| Windows | Windows voices (System.Speech, through PowerShell). Add voices in Windows Settings → Time & language → Speech. |
|
|
162
|
+
| Linux | Piper, SVOX Pico, eSpeak NG or eSpeak, best first. Install one, for example `sudo apt install espeak-ng`, `sudo pacman -S espeak-ng` or `sudo dnf install espeak-ng`. Piper needs its voice models listed in `SLOPIFY_PIPER_VOICES`, and counts only when `piper --help` shows Piper's own options (the mouse settings app also called piper is left out). |
|
|
163
|
+
| Docker | The image includes eSpeak NG. If it is missing, update the image. |
|
|
164
|
+
|
|
165
|
+
Pick **System voice** in the **Speech** list to see what was found: "Found *engine*. Narration with it is free; a keyed voice (ElevenLabs, OpenAI) sounds better.", each program with its number of voices, and **Add a system voice**, which opens Settings → **Voices**. When nothing is found, it says what to install on your system. On Play it is offered as a TTS provider like the others, greyed out as **Speech Program Missing** when nothing is found.
|
|
166
|
+
|
|
167
|
+
## Image providers
|
|
168
|
+
|
|
169
|
+
### fal.ai
|
|
170
|
+
|
|
171
|
+
Draws images and thumbnails with the models fal.ai hosts, charged per image from prepaid credit. fal.ai locks the account when the balance runs out, so a run stops at the images step until you add credit.
|
|
172
|
+
|
|
173
|
+
1. Sign up at fal.ai/login.
|
|
174
|
+
2. Open **Billing** (fal.ai/dashboard/billing) and buy credit.
|
|
175
|
+
3. Open **Keys** (fal.ai/dashboard/keys), choose **Add key** with the **API** scope, and copy it.
|
|
176
|
+
4. Paste it in Slopify, **Save**, then **Test**.
|
|
177
|
+
|
|
178
|
+
The API scope is enough; Slopify does not need an ADMIN key.
|
|
179
|
+
|
|
180
|
+
### Replicate
|
|
181
|
+
|
|
182
|
+
Draws images and thumbnails with the models Replicate hosts, charged per image or per second of compute from credit bought up front.
|
|
183
|
+
|
|
184
|
+
1. Sign in at replicate.com/signin.
|
|
185
|
+
2. Open **Billing** (replicate.com/account/billing) and buy credit. Replicate needs credit before it runs paid models.
|
|
186
|
+
3. Open **API tokens** (replicate.com/account/api-tokens), create a token, and copy it. It starts with `r8_`.
|
|
187
|
+
4. Paste it in Slopify, **Save**, then **Test**.
|
|
188
|
+
|
|
189
|
+
Tokens have no scopes.
|
|
190
|
+
|
|
191
|
+
### OpenAI (images)
|
|
192
|
+
|
|
193
|
+
Draws images and thumbnails with OpenAI's GPT Image models, charged per image from prepaid credit on your OpenAI platform account. Get the key as for [OpenAI speech](#openai-speech). GPT Image may also need **Verify Organization** under Settings → Organization → General on the OpenAI platform before it works.
|
|
194
|
+
|
|
195
|
+
### Google
|
|
196
|
+
|
|
197
|
+
Draws images and thumbnails with Google's Gemini image models, charged per image.
|
|
198
|
+
|
|
199
|
+
1. Sign in to Google AI Studio (aistudio.google.com) with your Google account.
|
|
200
|
+
2. Open **Projects** and choose **Set up billing** next to your project. Gemini image models are not on the free tier.
|
|
201
|
+
3. Open **API keys** (aistudio.google.com/apikey), choose **Create API key**, and copy it.
|
|
202
|
+
4. Paste it in Slopify, **Save**, then **Test**.
|
|
203
|
+
|
|
204
|
+
Use a key made in AI Studio. An older Google Cloud key must be set to **Restrict to Gemini API only**, or Google rejects it.
|
|
205
|
+
|
|
206
|
+
Google Gemini voices use this same key (see [Google Gemini (speech)](#google-gemini-speech)).
|
|
207
|
+
|
|
208
|
+
### Codex CLI (images)
|
|
209
|
+
|
|
210
|
+
Draws images with your ChatGPT sign-in instead of a key. See [AI CLIs](AI-CLIs#codex-images).
|
|
211
|
+
|
|
212
|
+
## How many calls run at once
|
|
213
|
+
|
|
214
|
+
| Provider | Calls at once |
|
|
215
|
+
|---|---|
|
|
216
|
+
| OpenRouter, ElevenLabs, OpenAI (speech and images), Cartesia, fal.ai, Replicate, Google | 3 |
|
|
217
|
+
| Inworld | 5 |
|
|
218
|
+
| Claude Code, Codex, Gemini (text) | 3 |
|
|
219
|
+
| Codex CLI (images) | 4 |
|
|
220
|
+
|
|
221
|
+
The keyed providers' numbers come from the model catalogue.
|
|
222
|
+
|
|
223
|
+
## Check all providers
|
|
224
|
+
|
|
225
|
+
**Check all** runs every check at once. Run it after changing a key, or when a run stops at a provider.
|
|
226
|
+
|
|
227
|
+
1. Open **Settings → Providers**.
|
|
228
|
+
2. Choose **Check all** at the top of the page (or press `Ctrl+K` and run **Check all providers**).
|
|
229
|
+
3. Read the **Health check** section under the lists.
|
|
230
|
+
|
|
231
|
+
For each provider it checks:
|
|
232
|
+
|
|
233
|
+
- **Installed** and **Signed in** for a command-line tool. Gemini CLI's sign-in is read from its own files in `~/.gemini` (the sign-in method in `settings.json`, the Google sign-in in `oauth_creds.json`, or `GEMINI_API_KEY`), without starting it. When the files don't say, it tells you to run `gemini` once to confirm.
|
|
234
|
+
- **Speech program found** for the System voice, with the program it speaks with.
|
|
235
|
+
- **Key saved** and **Key valid** for a keyed provider, using the same call as **Test**. Nothing is generated or billed.
|
|
236
|
+
- **Model reachable** for a keyed provider: Slopify asks the provider, with the saved key, about each model you chose (its model page, or the model list for OpenRouter and ElevenLabs), without generating anything. It reads, for example, "OpenRouter answered for … with this key." A provider with no such check says so.
|
|
237
|
+
- **Chosen models**: that the models your templates, schedules, drafts and unfinished projects use are still offered. A retired one points you to **Switch** in Settings → Models (see [Models](Models#switch-away-from-a-retired-model)).
|
|
238
|
+
|
|
239
|
+
Each provider's row has **Check again**, which checks that provider alone; its result replaces the row until the next **Check all**. It is the quick way to confirm a fix, such as signing a CLI in again.
|
|
240
|
+
|
|
241
|
+
| Result | Meaning |
|
|
242
|
+
|---|---|
|
|
243
|
+
| **Ready** | Every check passed. |
|
|
244
|
+
| **Check** | Something might stop a run, such as a rate limit or the provider being down during the check. |
|
|
245
|
+
| **Needs fixing** | Something will stop a run. The line says how to fix it. |
|
|
246
|
+
| **Not set up** | Neither set up nor used anywhere. These are listed together on one line. |
|
|
247
|
+
|
|
248
|
+
The report stays while you move between Settings sections.
|
|
249
|
+
|
|
250
|
+
## Add a voice
|
|
251
|
+
|
|
252
|
+
Narration needs a voice ID from your speech provider. Slopify does not check the ID when you add it; a wrong ID fails when a run's narration uses it.
|
|
253
|
+
|
|
254
|
+
1. Save a key for the speech provider in **Settings → Providers** (the Provider list only shows speech providers).
|
|
255
|
+
2. Find the voice ID in the provider's voice library and copy it.
|
|
256
|
+
3. Open **Settings → Voices**.
|
|
257
|
+
4. Under **Add a voice**, fill in the fields and choose **Add voice**.
|
|
258
|
+
|
|
259
|
+
| Field | What it does | Rules |
|
|
260
|
+
|---|---|---|
|
|
261
|
+
| **Voice name** | The name you pick the voice by on Play and in Edit project. Only you see it. | Required, up to 200 characters. Names can repeat. |
|
|
262
|
+
| **Provider** | The text-to-speech service the ID belongs to. | Speech providers only. |
|
|
263
|
+
| **Voice ID** | The provider's own ID for the voice. For Inworld, use an ID such as `Dennis`, or one from your workspace. For **System voice** it is a list of the voices found on this computer, grouped by speech program (**Pick a voice**); for **Google Gemini**, a list of Gemini's voices (**Pick a Gemini voice**). Picking one fills in the name too. | Required, up to 200 characters, unique per provider. |
|
|
264
|
+
| **Languages** | The languages the voice speaks, as codes such as `es, de`. Play lists the voice only for projects in these languages. | 2 or 3 letter codes. Blank asks the provider when it can say; a voice with unknown languages shows as **Any (not known)** and is offered for every language. |
|
|
265
|
+
|
|
266
|
+
## Manage your voices
|
|
267
|
+
|
|
268
|
+
The **Voices** table lists **Name**, **Provider**, **Voice ID**, **Languages** and **Real person** for each voice.
|
|
269
|
+
|
|
270
|
+
- **Edit** in the Languages cell changes the codes; choose **Save** or **Cancel**.
|
|
271
|
+
- **Real person**: turn it on for a voice cloned from, or made to sound like, a real person. Prepare upload then answers Yes to YouTube's AI use question for videos it narrates. An AI voice that imitates no one stays off. Default: off. See [Publishing-to-YouTube](Publishing-to-YouTube).
|
|
272
|
+
- **Remove**, then **Remove voice**, deletes it from the list. Projects that used the voice keep the audio they made with it.
|
|
273
|
+
|
|
274
|
+
For projects with more than one narrator, see [Multiple-Voices](Multiple-Voices). For voices in other languages, see [Other-Languages](Other-Languages).
|
|
275
|
+
|
|
276
|
+
## Tips
|
|
277
|
+
|
|
278
|
+
- The cheapest way to start: sign in to a command-line tool for text and images, and use the System voice (free) or Cartesia's free plan for narration.
|
|
279
|
+
- A Test that passes does not prove the account has credit (except on OpenRouter). The first real generation does.
|
|
280
|
+
- If you share a machine, keep Slopify bound to `127.0.0.1`: anyone who reaches its port can use your keys.
|
|
281
|
+
|
|
282
|
+
## Related pages
|
|
283
|
+
|
|
284
|
+
- [AI CLIs](AI-CLIs)
|
|
285
|
+
- [Models](Models)
|
|
286
|
+
- [Costs and Run Cost](Costs-and-Run-Cost)
|
|
287
|
+
- [Settings Reference](Settings-Reference)
|
|
288
|
+
- [Play Narration](Play-Narration)
|
|
289
|
+
- [Multiple Voices](Multiple-Voices)
|
|
290
|
+
- [Troubleshooting](Troubleshooting)
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Publishing to YouTube
|
|
2
|
+
|
|
3
|
+
Slopify never uploads or publishes for you: there is no YouTube sign-in and no upload API. Instead, **Prepare upload** lists everything YouTube Studio asks for, in the order it asks, with a Copy button for each value, for the long video and for every short. You upload in Studio in your own browser and press Publish yourself. The optional [Studio-Extension](Studio-Extension) can fill Studio's upload dialog from the same list.
|
|
4
|
+
|
|
5
|
+
**Where to find it:** a finished project → **Prepare upload** (the next action, and in the **YouTube** section), Home → **Ready to upload** → **Prepare upload**, or the Calendar's **Needs you** → **Prepare upload**. Settings → **YouTube Studio** holds the playlist, and each channel's **Brand** tab holds the links it uses.
|
|
6
|
+
|
|
7
|
+
## Before your first upload
|
|
8
|
+
|
|
9
|
+
1. Open **Settings → YouTube Studio** and type your **Playlist** name exactly as it is called in Studio (up to 150 characters), then press **Save**. It is the default for every channel; pick a channel in the list above the field to give that channel its own playlist. Leave it empty for no playlist.
|
|
10
|
+
2. Open **Channels** → your channel → **Brand** and, under **Channel links**, add any links your descriptions use, such as `Patreon` or `Discord`. See [Channels](Channels#channel-links).
|
|
11
|
+
3. In **Settings → Voices**, turn on **Real person** for any voice cloned from, or made to sound like, a real person.
|
|
12
|
+
4. In **Library → Prompts**, turn on **Draws photorealistic pictures** for any Image prompt whose style looks like real photos or film.
|
|
13
|
+
5. Turn on **YouTube description** on Play (Outputs row) for new videos, so they come with a description, chapters and tags.
|
|
14
|
+
|
|
15
|
+
Steps 3 and 4 decide the AI use answer; see [AI use disclosure](#ai-use-disclosure).
|
|
16
|
+
|
|
17
|
+
## Upload a video
|
|
18
|
+
|
|
19
|
+
1. Open the finished project and press **Prepare upload**. The button is available once the video has been made.
|
|
20
|
+
2. If the project has shorts, pick what to upload under **What to upload**: **Video**, **Short 1**, **Short 2** and so on. Each is uploaded to YouTube on its own, with its own title, description and tags.
|
|
21
|
+
3. Open YouTube Studio in your browser and start an upload.
|
|
22
|
+
4. Work down the list **In the order Studio asks**, using **Copy**, **Download** or **Open folder** on each row:
|
|
23
|
+
|
|
24
|
+
| Step | What Prepare upload gives you |
|
|
25
|
+
|---|---|
|
|
26
|
+
| **Video file** | The file name, with **Download** and **Open folder** as small buttons. |
|
|
27
|
+
| **Title** | The project's title (up to 100 characters), or the short's title. **Copy**. |
|
|
28
|
+
| **Description** | The description with chapters and hashtags, links filled in. For a short: its description, the "Watch the full video:" line and its hashtags. **Copy**. |
|
|
29
|
+
| **Thumbnail** | The thumbnail file, with **Open folder**. With three thumbnails: "The first under Thumbnail; all 3 in A/B Testing (beside the title)." Shorts have no thumbnail step, since Studio shows a frame of a short. |
|
|
30
|
+
| **Playlist** | The project's channel's playlist from Settings → YouTube Studio (or the default one), or "None set". **Copy**. |
|
|
31
|
+
| **Audience** | "No, it's not made for kids". |
|
|
32
|
+
| **AI use (under Show more)** | **Yes** or **No**, with the reason. |
|
|
33
|
+
| **Tags (under Show more)** | The tags, comma-separated. For a short, its hashtags without the `#`. **Copy**. |
|
|
34
|
+
|
|
35
|
+
5. Tick the box beside each step as you go if you like. The ticks are only a note to yourself, remembered in this browser; they change nothing in the project.
|
|
36
|
+
6. Check everything in Studio and publish there.
|
|
37
|
+
7. Back in Slopify, press **Mark uploaded** (see [Mark a video uploaded](#mark-a-video-uploaded)).
|
|
38
|
+
|
|
39
|
+
Below the list, the thumbnails are shown side by side as **A**, **B** and **C**, each with **Download**.
|
|
40
|
+
|
|
41
|
+
With the extension installed and paired, press **Fill in YouTube Studio** instead of copying by hand. Each press queues the item under **Waiting for Studio**, so you can queue the video and its shorts and upload them one after another. While no extension is paired, Prepare upload shows how to install and pair it, with **Open YouTube Studio**. See [Studio-Extension](Studio-Extension). Prepare upload ends with "Slopify never publishes."
|
|
42
|
+
|
|
43
|
+
## When something isn't ready
|
|
44
|
+
|
|
45
|
+
If a part isn't made yet, Prepare upload says so at the top under "Some of it isn't made yet." and tells you what to do, for example:
|
|
46
|
+
|
|
47
|
+
- The video isn't made yet: let the Video stage finish (or use Continue the run), then open Prepare upload again.
|
|
48
|
+
- No YouTube description is written: turn on **YouTube description** in Edit project → **Prompts** to have one written with chapters and tags.
|
|
49
|
+
- The thumbnail isn't made yet, or only 1 of 3 thumbnails is made: regenerate the missing ones in the project's Images section.
|
|
50
|
+
- This project makes no thumbnail, so YouTube will pick a frame.
|
|
51
|
+
- No playlist is set: set one in Settings → YouTube Studio.
|
|
52
|
+
- A short isn't rendered yet.
|
|
53
|
+
|
|
54
|
+
## AI use disclosure
|
|
55
|
+
|
|
56
|
+
Studio asks every upload one question, behind **Show more**: whether AI was used in one of three ways. In YouTube's words:
|
|
57
|
+
|
|
58
|
+
1. Makes a real person appear to say or do something they didn't say or do.
|
|
59
|
+
2. Alters footage of a real event or place.
|
|
60
|
+
3. Generates a realistic-looking scene that didn't actually occur.
|
|
61
|
+
|
|
62
|
+
Selecting Yes adds YouTube's AI label to your video. YouTube does not ask for the label for clearly unrealistic content, minor edits such as colour or filters, or AI used for the script, title, thumbnail or captions.
|
|
63
|
+
|
|
64
|
+
Slopify answers **Yes only when one of those three cases applies**, and **No** otherwise. An AI narrator and stylised AI pictures on their own are none of the three. Each case is something you mark, and every mark is off until you set it:
|
|
65
|
+
|
|
66
|
+
| Case | What you mark | Where |
|
|
67
|
+
|---|---|---|
|
|
68
|
+
| 1. A voice that imitates a real person | **Real person** on a voice cloned from, or made to sound like, a real person. A video or short narrated by that voice (the narration voice or any speaker) gets Yes. | Settings → **Voices**, the Real person column |
|
|
69
|
+
| 2. Real footage that is altered | In Prepare upload's AI use step, the switch **The uploaded clip is real footage (filmed, not made by AI)** (or "The N uploaded clips are…"). It appears when the project's images include uploaded video clips. With it on, the video gets Yes when the Look's **Atmosphere** overlay (embers, dust or fog) is laid over them. A colour grade, vignette or grain alone counts as a minor edit and stays No. | Prepare upload, per project |
|
|
70
|
+
| 3. Photorealistic AI pictures | **Draws photorealistic pictures** on an Image prompt whose style looks like real photos or film. A video whose images are drawn from such a prompt, or a short whose **Image style** is one, gets Yes. The Built-in shorts style is not photorealistic. | Library → **Prompts**, in the Image prompt's editor (save the prompt first) |
|
|
71
|
+
|
|
72
|
+
The AI use step shows the answer and why, naming the case in YouTube's words, for example that the narration uses a named voice marked in Settings → Voices as imitating a real person. When none applies, it says No and lists what was checked.
|
|
73
|
+
|
|
74
|
+
Shorts are judged on their own: they show new pictures, never your uploaded clips, so case 2 never applies to a short.
|
|
75
|
+
|
|
76
|
+
### Override per channel
|
|
77
|
+
|
|
78
|
+
1. Open **Channels**, pick the channel and open its **Brand** tab.
|
|
79
|
+
2. At the top, set **YouTube AI disclosure**:
|
|
80
|
+
|
|
81
|
+
| Setting | Answer |
|
|
82
|
+
|---|---|
|
|
83
|
+
| **Automatic** (default) | The rule above. |
|
|
84
|
+
| **Always Yes** | Yes for every video and short of this channel. |
|
|
85
|
+
| **Always No** | No for every video and short of this channel. |
|
|
86
|
+
|
|
87
|
+
It saves as you pick. A channel's Always Yes or Always No wins over every mark. The marks and the channel setting travel with a backup.
|
|
88
|
+
|
|
89
|
+
## Chapters and the description
|
|
90
|
+
|
|
91
|
+
The description in Prepare upload is the same one the project page shows: your edits kept, `{{Name}}` links filled in from the project's channel's links (its **Brand** tab) and the project's own **Previous video**. The **YouTube description (.txt)** and **YouTube tags (.txt)** downloads on the project page are this same text.
|
|
92
|
+
|
|
93
|
+
Its chapters are fitted to YouTube's rules first (the first at 0:00, at least three, each at least 10 seconds). When anything was changed, the Description step says what, in a line starting "Chapters adjusted for YouTube:". To change the text itself, edit it on the project page; see [YouTube-Description](YouTube-Description).
|
|
94
|
+
|
|
95
|
+
## Edit the description and tags before uploading
|
|
96
|
+
|
|
97
|
+
Prepare upload shows what the project has; it has no editor of its own.
|
|
98
|
+
|
|
99
|
+
1. Close Prepare upload.
|
|
100
|
+
2. In the project's **YouTube** section, press **Edit** beside Summary, Chapters, Hashtags or Tags, change it and save.
|
|
101
|
+
3. For a link, paste it under **Previous video for this project** and press **Save links**, or add it under **Channel links** on the channel's Brand tab.
|
|
102
|
+
4. Open Prepare upload again; it shows your edits.
|
|
103
|
+
|
|
104
|
+
A short's title, description and hashtags come from the shorts pick; to change which moments are used, see [Shorts](Shorts). Its full video line comes from **Full video link** in Edit project → **Shorts**.
|
|
105
|
+
|
|
106
|
+
## Three thumbnails
|
|
107
|
+
|
|
108
|
+
With **Thumbnails** set to 3 on Play or in Edit project → Images, Slopify draws the thumbnail prompt twice more with a different composition each time, for YouTube's A/B Testing (it replaced Test & compare). Prepare upload lists all three. In Studio, set the first under **Thumbnail**, then add all three with the **A/B Testing** button beside the title. Each extra thumbnail costs one image. See [Play-Outputs](Play-Outputs).
|
|
109
|
+
|
|
110
|
+
## Mark a video uploaded
|
|
111
|
+
|
|
112
|
+
Slopify does not check YouTube, so it can't know when you've published. After you upload:
|
|
113
|
+
|
|
114
|
+
1. Press **Mark uploaded** on Home under **Ready to upload**, or in the Projects list.
|
|
115
|
+
2. The video leaves the ready-to-upload lists and shows an **Uploaded** badge in Projects.
|
|
116
|
+
3. Press **Undo** beside the badge to take the mark off.
|
|
117
|
+
|
|
118
|
+
**Mark uploaded** is also a command in the command palette (`Ctrl+K`). Projects has a **Ready to upload** filter for finished videos you haven't marked yet.
|
|
119
|
+
|
|
120
|
+
## Tips
|
|
121
|
+
|
|
122
|
+
- Set the playlist once in Settings (per channel if your channels upload to different playlists); every upload pack names it.
|
|
123
|
+
- Upload the long video first, then paste its link as the shorts' **Full video link** so each short's description points to it.
|
|
124
|
+
- If the AI use answer surprises you, read its reason: it names the voice, footage or prompt that made it Yes.
|
|
125
|
+
|
|
126
|
+
## Related pages
|
|
127
|
+
|
|
128
|
+
- [Studio-Extension](Studio-Extension)
|
|
129
|
+
- [YouTube-Description](YouTube-Description)
|
|
130
|
+
- [Shorts](Shorts)
|
|
131
|
+
- [Channels](Channels)
|
|
132
|
+
- [Prompts](Prompts)
|
|
133
|
+
- [Home-and-Projects](Home-and-Projects)
|
|
134
|
+
- [Settings-Reference](Settings-Reference)
|
|
135
|
+
- [Video-Editing](Video-Editing)
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Recovery and Retries
|
|
2
|
+
|
|
3
|
+
Provider calls fail now and then: a rate limit, a timeout, a dropped connection, a refused prompt. Slopify retries what time can fix by itself, waits for used-up CLI plans instead of failing, and for everything else puts one button on the project page that fixes the cause or walks you through it. Work already made is never thrown away.
|
|
4
|
+
|
|
5
|
+
**Where to find it:** a project → the next action panel in the right rail, and the failed step's own section.
|
|
6
|
+
|
|
7
|
+
## What happens when a call fails
|
|
8
|
+
|
|
9
|
+
Slopify handles a failed provider call in three tiers:
|
|
10
|
+
|
|
11
|
+
| Tier | What happens | You see |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| 1. Quick retries | The call is tried up to four times in about 40 seconds: the first try plus retries after 2, 8 and 30 seconds. A provider's own Retry-After (up to a minute) replaces the fixed wait. | Nothing; the step keeps running. |
|
|
14
|
+
| 2. Waiting it out | If the quick retries run out on a failure time can fix, the step is not failed. It waits and runs again by itself, up to four more times, after about 2, 4, 8 and 16 minutes (about half an hour in all). Each wait is spread by a quarter either way, and is never shorter than the provider's Retry-After. | **Waiting to try again**: "Images will try again by itself at 14:05." No button; the run carries on when it does. |
|
|
15
|
+
| 3. Failed | When the waits are used up, or the failure is one time cannot fix, the step fails and says why. | **Failed**, the error, and a fix-it or **Try ... again** button. |
|
|
16
|
+
|
|
17
|
+
### What is waited out
|
|
18
|
+
|
|
19
|
+
- Rate limits (HTTP 429 and each provider's own rate-limit errors).
|
|
20
|
+
- Timeouts.
|
|
21
|
+
- Dropped calls: a connection that never reached the provider or broke mid-answer, a provider server error (5xx), or a CLI the system killed mid-run.
|
|
22
|
+
|
|
23
|
+
### What is never retried
|
|
24
|
+
|
|
25
|
+
- A refusal by a content filter.
|
|
26
|
+
- A key the provider rejected, or no key saved.
|
|
27
|
+
- A request the provider does not support.
|
|
28
|
+
- A lost CLI submission (Slopify cannot tell whether the CLI already did the work).
|
|
29
|
+
|
|
30
|
+
These are the provider's final answer, and retrying would only spend your money again.
|
|
31
|
+
|
|
32
|
+
A provider asking for a wait longer than an hour (a daily quota) is reported as a failure rather than waited out.
|
|
33
|
+
|
|
34
|
+
### Time limits per call
|
|
35
|
+
|
|
36
|
+
| Kind of call | Time limit per attempt |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| Text and narration | 120 seconds |
|
|
39
|
+
| Image | 300 seconds |
|
|
40
|
+
| Image animated into a clip | 900 seconds |
|
|
41
|
+
|
|
42
|
+
A call that passes its limit is stopped (a streamed call when it sends nothing for that long), and the message says so, for example "The AI model did not answer within 120 seconds. It may be overloaded: wait a few minutes, then use Try again, or choose another model in the Providers section of Edit project."
|
|
43
|
+
|
|
44
|
+
### Waits survive a restart
|
|
45
|
+
|
|
46
|
+
The wait is saved in the database, so quitting or restarting Slopify keeps it: the step runs again when its time comes. While it waits the project reads as running. **Pause** holds it.
|
|
47
|
+
|
|
48
|
+
## Waiting for CLI plan limits
|
|
49
|
+
|
|
50
|
+
When Claude Code, Codex or Gemini says your plan allowance is used up, the call does not fail: it waits. Slopify stores the reset time for that CLI, and every call to it, from any project, waits until two minutes after the reset. Without a stated reset time it checks again every 30 minutes.
|
|
51
|
+
|
|
52
|
+
The next action panel shows **Waiting for limits**, for example "Waiting for Codex limits (resets at 14:00)." with "Nothing to do: the run carries on by itself when they reset, and work that does not need Codex keeps going." There is nothing to press. A reset on another day shows the weekday (`Tue 14:00`); with no reset time, it says "(checking again at 14:30)"; with two plans, "Waiting for Codex and Claude limits".
|
|
53
|
+
|
|
54
|
+
The same words appear everywhere the project shows up: on Home under Running now, on its row in Projects and on the Calendar, so you can tell a waiting run from a stuck one without opening it.
|
|
55
|
+
|
|
56
|
+
- Other providers are not held up, and a waiting call holds no place in the provider queue.
|
|
57
|
+
- The wait survives a restart: a stage that was waiting when Slopify stopped waits on the stored reset again at the next start.
|
|
58
|
+
- A project paused or cancelled meanwhile is left alone.
|
|
59
|
+
|
|
60
|
+
See [AI CLIs](AI-CLIs) and [Costs and Run Cost](Costs-and-Run-Cost) for the plan-limit share each run uses.
|
|
61
|
+
|
|
62
|
+
## Fix-it buttons
|
|
63
|
+
|
|
64
|
+
A failed step's fix becomes the project's next action, shown in the right rail and beside the step in its section. The mapping lives in one place in the code, so the page always offers the same fix for the same failure.
|
|
65
|
+
|
|
66
|
+
| Failure | What the panel says | Button | What to do |
|
|
67
|
+
| --- | --- | --- | --- |
|
|
68
|
+
| A CLI is signed out or its sign-in expired | "Codex is signed out, so images stopped." | **Copy sign-in command**, then **Check again** | See [Sign a CLI in again](#sign-a-cli-in-again) below. |
|
|
69
|
+
| A content filter refused an image or thumbnail prompt | "A content filter refused a prompt, so images stopped." | **Soften and retry** | See below. |
|
|
70
|
+
| A content filter refused any other prompt | "A content filter refused a prompt, so the article stopped." | **Edit the prompt** | Opens Edit project so you can reword it, then try again. |
|
|
71
|
+
| The model was retired | "The model for images is no longer offered." | **Switch model** | Opens Edit project; pick another model in **Providers**, save, and try again. |
|
|
72
|
+
| A key was rejected, or none is saved | "The provider did not accept its key, so narration stopped." | **Open Settings → Providers → *provider*** | Paste a current key, save, then come back and try again. |
|
|
73
|
+
| The disk is full | "The disk is full, so the video stopped." | **Free space** | Opens Settings → Backup & storage, which shows what uses the space and offers **Keep outputs only** per finished project. Then try again. |
|
|
74
|
+
| Anything else | "Images stopped with an error." | **Try images again** | Trying again keeps everything already made. |
|
|
75
|
+
|
|
76
|
+
**Error details** under the message shows the step's own words, for example which key or which model.
|
|
77
|
+
|
|
78
|
+
The same fix-it buttons appear elsewhere too: Home's **Needs you** offers **Copy sign-in command** for a run stopped by a signed-out CLI, and a schedule whose topic generation failed, or a cast picture that failed, gets the same sign-in fix.
|
|
79
|
+
|
|
80
|
+
### Sign a CLI in again
|
|
81
|
+
|
|
82
|
+
1. Press **Copy sign-in command**. It copies `claude auth login` (Claude Code), `codex login` (Codex) or `gemini` (Gemini), and says so.
|
|
83
|
+
2. Paste it in a terminal on the computer running Slopify and sign in.
|
|
84
|
+
3. Press **Check again**. Slopify asks that CLI alone whether it is signed in now.
|
|
85
|
+
- Signed in: "Codex is signed in. Trying again." and the failed step runs again by itself.
|
|
86
|
+
- Still signed out: it says so and repeats the command; sign in, then press **Check again** once more.
|
|
87
|
+
- Can't tell (Gemini sometimes can't say): try the step again with **Try … again**.
|
|
88
|
+
|
|
89
|
+
If the browser blocks the clipboard, type the command yourself; the notice names it.
|
|
90
|
+
|
|
91
|
+
### Soften and retry
|
|
92
|
+
|
|
93
|
+
For a refused image or thumbnail prompt, **Soften and retry** asks first ("Soften the refused prompt and try again?"). When you confirm:
|
|
94
|
+
|
|
95
|
+
1. Your project's AI model rewrites each refused prompt without what a content filter could flag, keeping the scene and style.
|
|
96
|
+
2. The new wording streams onto the step as it is written.
|
|
97
|
+
3. The image is drawn from it and keeps it as its prompt.
|
|
98
|
+
|
|
99
|
+
The AI call and the new image are charged like any other. Press **Keep the prompt** to back out and edit it yourself in **Edit project → Images**.
|
|
100
|
+
|
|
101
|
+
## Try again
|
|
102
|
+
|
|
103
|
+
**Try ... again** (for example **Try the article again**, **Try images again**) runs the failed step again. It does not ask first, because it destroys nothing: the pieces and outputs already made stay where they are and are reused.
|
|
104
|
+
|
|
105
|
+
## Done with problems
|
|
106
|
+
|
|
107
|
+
A failed step stops only the steps that need its output. The video never reads the thumbnail, so a failed thumbnail leaves the video rendering. When the run's main output was made (the video; the narration when there is no video; the article when there is neither) but another step failed, the project ends **Done with problems** instead of **Failed**. Each failed step shows its error and its fix.
|
|
108
|
+
|
|
109
|
+
## After a crash or restart
|
|
110
|
+
|
|
111
|
+
- A stage that was **running** when Slopify stopped is marked failed with the reason "interrupted". Nothing re-runs by itself: press **Try ... again**. If the project was paused at the time, the stage simply goes back to waiting.
|
|
112
|
+
- A project that has unfinished work nothing will start on its own shows **Stopped** and **Continue the run**. Continuing makes only what is missing.
|
|
113
|
+
- Steps waiting to retry, or waiting for CLI limits, carry on by themselves after the restart.
|
|
114
|
+
- A queued batch project waits its turn as before.
|
|
115
|
+
|
|
116
|
+
## Checkpoints and paused runs
|
|
117
|
+
|
|
118
|
+
A checkpoint holds the run before a step so you can check what came before it. While held, the project shows **Waiting for you** and an **Approve ...** button; nothing after it runs until you approve. Checkpoints are stored with the project, so a restart does not lose them; when you save a new revision, a checkpoint whose reviewed inputs changed asks for your review again (the Checkpoints view says "Inputs changed. Review the current revision before approving."). See [Reviews and Checkpoints](Reviews-and-Checkpoints).
|
|
119
|
+
|
|
120
|
+
A paused project keeps everything. **Continue the run** picks up where it stopped. See [Project Page](Project-Page#pause-continue-and-cancel-a-run).
|
|
121
|
+
|
|
122
|
+
## Updating while work runs
|
|
123
|
+
|
|
124
|
+
Pressing **Update** while a project is being made does not interrupt it. The update waits until no step is running, then installs by itself. Pressing it again drops the wait. See [Updating and Patch Notes](Updating-and-Patch-Notes).
|
|
125
|
+
|
|
126
|
+
When an update or install cannot finish, Slopify puts the previous version back. The Docker launcher also keeps a recovery copy of your data in a Docker volume before it replaces the container, and names that volume if something goes wrong. See [Docker](Docker).
|
|
127
|
+
|
|
128
|
+
## Tips
|
|
129
|
+
|
|
130
|
+
- If a step keeps failing with the same error after **Try again**, open **Error details** and follow what it says. Most messages name the exact screen to fix it in.
|
|
131
|
+
- Rate limits usually clear by themselves; you rarely need to do anything.
|
|
132
|
+
- A kept output from an earlier revision is still in **History** if a remake goes wrong. See [Editing a Project](Editing-a-Project#history-and-saved-revisions).
|
|
133
|
+
|
|
134
|
+
## Related pages
|
|
135
|
+
|
|
136
|
+
- [Troubleshooting](Troubleshooting)
|
|
137
|
+
- [Project Page](Project-Page)
|
|
138
|
+
- [Editing a Project](Editing-a-Project)
|
|
139
|
+
- [Providers and Keys](Providers-and-Keys)
|
|
140
|
+
- [AI CLIs](AI-CLIs)
|
|
141
|
+
- [Reviews and Checkpoints](Reviews-and-Checkpoints)
|