@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,216 @@
|
|
|
1
|
+
# Play Overview
|
|
2
|
+
|
|
3
|
+
Play is the screen where you set up a new video and start it. You pick a template (or none), type what the video is about, check the setup rows, and press the Play key. You get a project that writes the article, records the narration, draws the images and renders the video, plus any extra outputs you switched on.
|
|
4
|
+
|
|
5
|
+
**Where to find it:** **New video** in the sidebar, **New video** on Home or Projects, `Ctrl+K` → **New video**, or press `C` anywhere. The page header reads **What's the video about?**
|
|
6
|
+
|
|
7
|
+
## How Play is laid out
|
|
8
|
+
|
|
9
|
+
Play is one path from topic to queue:
|
|
10
|
+
|
|
11
|
+
1. **Template** and the topic fields at the top.
|
|
12
|
+
2. **More videos from the same setup**: extra topics that run with the same settings.
|
|
13
|
+
3. **The setup rows**: one line each for Title and keywords, Article, Narration, Images, Video and style, Outputs, Reviews and Channel. Each line says what the run will do. **Change** opens the row's editor under it, and **Done** folds it again.
|
|
14
|
+
4. **The right rail**: the style preview, the number of videos, the estimated cost, the Play key, and the buttons **Refresh review**, **Review the whole setup** and **Save as template**.
|
|
15
|
+
|
|
16
|
+
Nothing starts until you press the Play key. Every change is saved to the current draft as you make it.
|
|
17
|
+
|
|
18
|
+
## Start a video
|
|
19
|
+
|
|
20
|
+
1. Open Play.
|
|
21
|
+
2. Optional: pick a **Template**. Picking one opens a fresh draft made from it, and the topic you already typed comes along.
|
|
22
|
+
3. Type the **Title**, or the topic if the title is a pattern (see below).
|
|
23
|
+
4. Look over the setup rows. A row that needs something shows **Needs setup** and says what is missing. Press **Change** to fix it.
|
|
24
|
+
5. Check the estimate in the right rail.
|
|
25
|
+
6. Press **Start run** (or **Queue N videos** if you added more topics).
|
|
26
|
+
|
|
27
|
+
Slopify opens the new project page as soon as the run is created. When the Play key cannot start, the reason is written right under it, with **Go to the field** beside it to jump to the field that needs fixing.
|
|
28
|
+
|
|
29
|
+
## Template
|
|
30
|
+
|
|
31
|
+
| Option | What it does | Default |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| **Template** | Starts this video from a saved setup: prompts, voice, images, style, outputs and reviews. Picking one opens a fresh draft made from it and carries the topic you typed. | **No template**, the default setup |
|
|
34
|
+
|
|
35
|
+
Under the picker you see the template's channel and version. If the template was deleted since you picked it, the picker says **Template no longer saved**. With no templates yet, it says to set up a video and press **Save as template**. See [Templates](Templates) for managing them.
|
|
36
|
+
|
|
37
|
+
## Title, title pattern and topic
|
|
38
|
+
|
|
39
|
+
The **Title** is the video's name, shown on the project and in Projects. Up to 200 characters.
|
|
40
|
+
|
|
41
|
+
Write a keyword in double braces and the title becomes a pattern. For example, `History: {{Topic}}`:
|
|
42
|
+
|
|
43
|
+
- The top of Play then asks for **Topic** instead of the whole title, and shows the title it makes underneath (**Title: History: The Lost City**).
|
|
44
|
+
- The pattern itself moves to **Title and keywords → Title pattern**, where you can change it.
|
|
45
|
+
- Each keyword the title names is a topic you type once per video. Templates save it empty.
|
|
46
|
+
- A topic value is up to 200 characters, on a single line.
|
|
47
|
+
|
|
48
|
+
A title without braces is typed as is.
|
|
49
|
+
|
|
50
|
+
### Already made on this channel
|
|
51
|
+
|
|
52
|
+
As you type, a quiet line under the topic fields says when the picked channel already has a video on it, using the same near-duplicate rule as [schedules](Schedules#how-generation-works):
|
|
53
|
+
|
|
54
|
+
- `This channel already has a video on this: "<title>" (in Projects). Start anyway if you want another take.`
|
|
55
|
+
- `This channel already uploaded "<title>" (Channel → Existing videos). Start anyway if you want another take.`
|
|
56
|
+
|
|
57
|
+
It never stops you; it is there so you don't make the same video twice by accident.
|
|
58
|
+
|
|
59
|
+
## Keywords
|
|
60
|
+
|
|
61
|
+
A keyword is a value that a picked prompt or the title asks for with `{{name}}`. You type it once, and it fills every place that names it. The line under each keyword lists where it is used.
|
|
62
|
+
|
|
63
|
+
Keywords live in the **Title and keywords** row. Topic keywords (the ones the title names) are typed at the top of Play instead. If there are none, the row says: "No keywords. A prompt or the title that names {{a keyword}} adds one here."
|
|
64
|
+
|
|
65
|
+
| Option | What it does | Limit |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| **Keyword** | Fills every `{{name}}` in the title and the picked prompts. A keyword the title does not name is saved with a template. | 200 characters, single line |
|
|
68
|
+
|
|
69
|
+
## More videos from the same setup
|
|
70
|
+
|
|
71
|
+
**Add topic** queues another video with everything else the same. Only its title and keywords differ.
|
|
72
|
+
|
|
73
|
+
1. Press **Add topic** under the topic fields.
|
|
74
|
+
2. Type the new topic (or the new title, if the title has no keywords) and press **Add**. Add as many as you like, then press **Done** or `Esc`.
|
|
75
|
+
3. Each extra video shows as a chip. Its name is a button with a pencil (**Change the keywords of …**): press it to open a side panel where you can change that video's **Title** and keywords. Everything else comes from the setup of the first video.
|
|
76
|
+
4. Press the **x** on a chip to remove that video.
|
|
77
|
+
|
|
78
|
+
One Start queues at most 50 videos: this setup and 49 more. The Play key reads **Queue N videos**, and the videos run one at a time, in order.
|
|
79
|
+
|
|
80
|
+
### The video queue
|
|
81
|
+
|
|
82
|
+
Videos started together wait in the queue, shown on the Calendar under **Batch queue** (see [Calendar](Calendar#the-batch-queue)) and behind the **Queue · N** button in a project page's right rail. Projects has a **Queued** filter for them. Pausing a project holds the queue. When one fails or is cancelled, the next one starts.
|
|
83
|
+
|
|
84
|
+
## Drafts
|
|
85
|
+
|
|
86
|
+
Play saves every change to the current draft on its own. The status beside **Drafts** in the page header says **Unsaved**, **Saving…**, **Saved**, **Couldn't save** or **Changed elsewhere**.
|
|
87
|
+
|
|
88
|
+
- **Drafts** lists your saved setups with their last edit time. Press anywhere on a draft's row to open it, or **Discard** to delete it (it asks you to confirm, and this cannot be undone).
|
|
89
|
+
- **New draft** starts an empty draft and keeps the current one in the list.
|
|
90
|
+
- If saving fails, press **Retry**.
|
|
91
|
+
- A draft the app cannot read is marked "Unsupported or corrupt draft". Try opening it to recover it, or discard it.
|
|
92
|
+
|
|
93
|
+
### When a draft was changed elsewhere
|
|
94
|
+
|
|
95
|
+
If you have the same draft open in another tab or window and it was saved there, the status says **Changed elsewhere** and offers two buttons:
|
|
96
|
+
|
|
97
|
+
| Button | What it does |
|
|
98
|
+
| --- | --- |
|
|
99
|
+
| **Reload saved draft** | Shows the version saved elsewhere and drops your unsaved change. |
|
|
100
|
+
| **Save as a new draft** | Keeps your version as a separate draft and leaves the other one alone. |
|
|
101
|
+
|
|
102
|
+
## The setup rows at a glance
|
|
103
|
+
|
|
104
|
+
| Row | What it holds | Details |
|
|
105
|
+
| --- | --- | --- |
|
|
106
|
+
| **Title and keywords** | The title pattern and every keyword value | This page |
|
|
107
|
+
| **Article** | Article source, article prompt, text generation (LLM, model, thinking), research | [Play Title and Article](Play-Title-and-Article) |
|
|
108
|
+
| **Narration** | Narration source, TTS, model, voice, speakers, Audio Advanced (chunking, intro, outro, preparation, glossary, aliases, tables and figures) | [Play Narration](Play-Narration) |
|
|
109
|
+
| **Images** | Images source, provider, model, effort, image prompts, establishing image, more images for long videos | [Play Images](Play-Images) |
|
|
110
|
+
| **Video and style** | Video source, seconds per image, zoom, motion, cuts, the Look, ambient sound, pauses and volume, silence, frame format, captions, preview text | [Play Video and Style](Play-Video-and-Style) |
|
|
111
|
+
| **Outputs** | Thumbnail, YouTube description, Shorts, tables and figures on screen, PDF document | [Play Outputs](Play-Outputs) |
|
|
112
|
+
| **Reviews** | Review checkpoints and automatic reviews (opens the side panel) | [Reviews and Checkpoints](Reviews-and-Checkpoints) |
|
|
113
|
+
| **Channel** | Channel, brand kit, language | This page, [Channels](Channels), [Other Languages](Other-Languages) |
|
|
114
|
+
|
|
115
|
+
When you open a draft, rows that need attention start open. The others stay folded until you press **Change**.
|
|
116
|
+
|
|
117
|
+
## Channel row
|
|
118
|
+
|
|
119
|
+
| Option | What it does | Default |
|
|
120
|
+
| --- | --- | --- |
|
|
121
|
+
| **Channel** | The channel this video belongs to. Its brand kit fills what this setup leaves at its default, and its cast of characters goes with the images. The list shows how many are in each channel's cast. | The template's channel, or the default channel |
|
|
122
|
+
| **Use the channel's brand kit** | Fills what this setup leaves at its default from the channel: the caption font, intro, outro, document theme and ambient sound. What you set on Play wins. Off takes none of it; the cast and language still apply. | On |
|
|
123
|
+
| **Language** | The language the article, narration, YouTube description and shorts titles are written in. Blank uses the channel's language. | Channel's language |
|
|
124
|
+
|
|
125
|
+
The row has an **Edit** link to the channel's page. For the language, voices and caption timing in other languages, see [Other Languages](Other-Languages). For the cast, see [Cast Library](Cast-Library).
|
|
126
|
+
|
|
127
|
+
## The right rail
|
|
128
|
+
|
|
129
|
+
### Style preview
|
|
130
|
+
|
|
131
|
+
When the video is generated from images, the rail shows **Style preview**: six seconds of the bundled sample project, its real narration over three of its pictures, rendered by the real renderer with your captions, Look and motion, and the captions timed to the narration. See [Play Video and Style](Play-Video-and-Style#style-preview).
|
|
132
|
+
|
|
133
|
+
### Estimated cost
|
|
134
|
+
|
|
135
|
+
What the providers are likely to charge for this run, in US dollars, from their published prices. Actual usage can differ, and the estimate does not cap spending.
|
|
136
|
+
|
|
137
|
+
- The total shows as **Estimated total** (a low to high range when it can vary). If some prices are unknown, it shows **Known subtotal** and says how many stage charges have unavailable pricing.
|
|
138
|
+
- **Cost by stage** folds out the price of each stage, what each assumes, and the date the price catalogue was checked. With several videos, the rows show combined costs.
|
|
139
|
+
- Steps run through a command-line tool you are signed in to (such as Claude Code or Codex) show **$0 on your plan**, with the approximate API price beside them for comparison.
|
|
140
|
+
|
|
141
|
+
The estimate refreshes on its own a moment after you stop typing. Press **Refresh review** to check the setup and recalculate now, for example after changing a prompt in the Library.
|
|
142
|
+
|
|
143
|
+
See [Costs and Run Cost](Costs-and-Run-Cost) for how prices are worked out.
|
|
144
|
+
|
|
145
|
+
### Expected article words per video
|
|
146
|
+
|
|
147
|
+
How long you expect each generated article to be. It drives the cost estimate and how many images **More images for long videos** adds. Once the article is written, its real length is used. About 150 words is one minute of narration.
|
|
148
|
+
|
|
149
|
+
| Option | Default | Range |
|
|
150
|
+
| --- | --- | --- |
|
|
151
|
+
| **Expected article words per video** | 1500 | 1 to 100,000 |
|
|
152
|
+
|
|
153
|
+
### The Play key
|
|
154
|
+
|
|
155
|
+
| Label | When |
|
|
156
|
+
| --- | --- |
|
|
157
|
+
| **Start run** | One video |
|
|
158
|
+
| **Queue N videos** | You added more topics |
|
|
159
|
+
| **Starting…** | The start is being sent |
|
|
160
|
+
| **Check Start result** | Slopify didn't confirm the last start. Press it to find out before starting again. |
|
|
161
|
+
|
|
162
|
+
The line under the key says why it can't start yet (a missing field, an upload still running, the estimate still being checked), or "Nothing starts until you press it."
|
|
163
|
+
|
|
164
|
+
### Review the whole setup
|
|
165
|
+
|
|
166
|
+
Opens the **Review** side panel: every setting of the run in words, any setup errors (press one to jump to it), the review checkpoints, the automatic reviews, and **Read the resolved prompt**, which shows each prompt exactly as it will be sent, with keywords filled in. `Ctrl+Enter` anywhere on Play opens the same panel. See [Reviews and Checkpoints](Reviews-and-Checkpoints).
|
|
167
|
+
|
|
168
|
+
## Save as template
|
|
169
|
+
|
|
170
|
+
**Save as template** in the right rail keeps this setup's prompts, voice, images, style, outputs and reviews so you can start the next video from it.
|
|
171
|
+
|
|
172
|
+
1. Press **Save as template**.
|
|
173
|
+
2. Type a **Template name** (up to 120 characters). This is the name the template is listed under on Play and Templates.
|
|
174
|
+
3. Read the list of what is left out, then press **Save template**.
|
|
175
|
+
|
|
176
|
+
What a template keeps and leaves out:
|
|
177
|
+
|
|
178
|
+
- Keywords the title names (like `{{Topic}}`) are saved empty. The dialog names each one, and the value you typed for this video.
|
|
179
|
+
- Other keywords (a word count, a style) keep their values. If the title names no keywords, the dialog says every keyword keeps its value.
|
|
180
|
+
- The other videos you queued with **Add topic** are not saved.
|
|
181
|
+
- The template belongs to the draft's channel.
|
|
182
|
+
|
|
183
|
+
You can also save a template from Templates → **Save a setup**, which picks a saved Play draft (**Saved Play draft**), a **Template name** of up to 120 characters and a **Channel**. The same keyword rule applies there, and queued extra videos and uploaded fonts are left out. See [Templates](Templates).
|
|
184
|
+
|
|
185
|
+
## Command palette
|
|
186
|
+
|
|
187
|
+
Every Play action is in the command palette (`Ctrl+K`):
|
|
188
|
+
|
|
189
|
+
| Command | What it does |
|
|
190
|
+
| --- | --- |
|
|
191
|
+
| **Start run** / **Queue N videos** | Starts, or jumps to what holds it back |
|
|
192
|
+
| **Add a topic for another video** | Opens the Add topic field |
|
|
193
|
+
| **Save as template** | Opens the Save as template dialog |
|
|
194
|
+
| **Review the whole setup** (`Ctrl+Enter`) | Opens the Review panel |
|
|
195
|
+
| **Pick a template** | Focuses the Template picker |
|
|
196
|
+
| **Change title and keywords**, **Change article**, and one per row | Opens that row and scrolls to it |
|
|
197
|
+
|
|
198
|
+
## Tips
|
|
199
|
+
|
|
200
|
+
- A long video on the same topic as a finished short is one press away: **Make the full video on this topic** on the short's project page opens Play set up for it. See [Your First Short](Your-First-Short#make-the-full-video-next).
|
|
201
|
+
- Start with a template and only change the rows you need. The row summaries tell you what each one will do without opening it.
|
|
202
|
+
- Use a title pattern and **Add topic** to queue a series in one go.
|
|
203
|
+
- If a template refers to a prompt you have since deleted, the Article or Images row shows **Needs setup**. Pick another prompt.
|
|
204
|
+
|
|
205
|
+
## Related pages
|
|
206
|
+
|
|
207
|
+
- [Your First Short](Your-First-Short)
|
|
208
|
+
- [Play Title and Article](Play-Title-and-Article)
|
|
209
|
+
- [Play Narration](Play-Narration)
|
|
210
|
+
- [Play Images](Play-Images)
|
|
211
|
+
- [Play Video and Style](Play-Video-and-Style)
|
|
212
|
+
- [Play Outputs](Play-Outputs)
|
|
213
|
+
- [Reviews and Checkpoints](Reviews-and-Checkpoints)
|
|
214
|
+
- [Templates](Templates)
|
|
215
|
+
- [Costs and Run Cost](Costs-and-Run-Cost)
|
|
216
|
+
- [Keyboard Shortcuts and Command Palette](Keyboard-Shortcuts-and-Command-Palette)
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Play Title and Article
|
|
2
|
+
|
|
3
|
+
The article is the script of your video: the narration reads it, the captions show it, the chapters come from its headings and the PDF lays it out. On Play you either have a text model write it from a prompt, or paste your own. This page covers the **Title and keywords** row, the **Article** row (article source, prompt, text generation and research) and the intro and outro that wrap the article.
|
|
4
|
+
|
|
5
|
+
**Where to find it:** Play → **Title and keywords** row and **Article** row → **Change**. The intro and outro are under Play → **Narration** → **Change** → **Audio Advanced**.
|
|
6
|
+
|
|
7
|
+
## Title and keywords
|
|
8
|
+
|
|
9
|
+
The title and the topic are typed at the top of Play. The **Title and keywords** row holds the rest:
|
|
10
|
+
|
|
11
|
+
| Field | What it does | Limit |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| **Title pattern** | Shown when the title names a keyword in double braces, like `History: {{Topic}}`. Change the pattern here; the topic values stay at the top of Play. | 200 characters |
|
|
14
|
+
| Each keyword | A value a picked prompt or the title asks for with `{{name}}`. Typed once, it fills every place that names it; the line under it lists where. | 200 characters, one line |
|
|
15
|
+
|
|
16
|
+
The row's summary says how many keywords the setup has. Keywords come from the title and from every prompt you pick (article prompt, image prompts, thumbnail prompt and so on), so the list grows as you pick prompts. Every keyword must be filled before the run can start ("Fill in this field.").
|
|
17
|
+
|
|
18
|
+
For title patterns, topics and queuing more videos, see [Play Overview](Play-Overview#title-title-pattern-and-topic).
|
|
19
|
+
|
|
20
|
+
## Choose where the article comes from
|
|
21
|
+
|
|
22
|
+
The Article row starts with a **Source** switch:
|
|
23
|
+
|
|
24
|
+
| Source | What happens | Cost |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| **Generate** (default) | The text model writes the article from the article prompt, in one call. | One text-model call |
|
|
27
|
+
| **Provide** | Slopify narrates the text you paste, word for word. No text model writes one. | No text-model cost for the article |
|
|
28
|
+
|
|
29
|
+
The article is what the narration reads and what the PDF lays out.
|
|
30
|
+
|
|
31
|
+
### Generate an article from a prompt
|
|
32
|
+
|
|
33
|
+
1. Open the **Article** row and leave **Source** on **Generate**.
|
|
34
|
+
2. Pick an **Article prompt**. These are the article prompts saved in the Library, with their keywords filled in.
|
|
35
|
+
3. Optional: press **View prompt** to read the prompt's text.
|
|
36
|
+
4. Fill in any keywords the prompt asks for in the **Title and keywords** row.
|
|
37
|
+
5. Pick the text model under **Text generation** (below).
|
|
38
|
+
|
|
39
|
+
If you have no article prompts yet, the row says "No article prompts saved. Create a prompt to begin." Press **Create prompt** to open a new article prompt in the Library. Your draft is saved first. See [Prompts](Prompts).
|
|
40
|
+
|
|
41
|
+
When the narration uses several speakers with **Write a script**, the field becomes **Script prompt**: a Script prompt asks for speaker turns instead of a plain article. See [Multiple Voices](Multiple-Voices).
|
|
42
|
+
|
|
43
|
+
### Paste your own article
|
|
44
|
+
|
|
45
|
+
1. Open the **Article** row and set **Source** to **Provide**.
|
|
46
|
+
2. Paste the text into **Article text**.
|
|
47
|
+
3. Check the count under it (words and characters). About 150 words is one minute of narration.
|
|
48
|
+
|
|
49
|
+
Include everything that should be read, headings too. Headings become chapters. Research is turned off when the article is provided: the row says "Research is Off because the article is provided."
|
|
50
|
+
|
|
51
|
+
## Text generation
|
|
52
|
+
|
|
53
|
+
One text model writes everything this run needs in words: the article, the research, the thumbnail's image prompt, intro and outro entries set to LLM, Narration Preparation, table and figure descriptions, the YouTube description and picking shorts. Each is a separate call, counted in usage.
|
|
54
|
+
|
|
55
|
+
The **Text generation** section appears under the Article row whenever the run needs a text model. **Settings** beside it opens Settings, where you set the default for new drafts.
|
|
56
|
+
|
|
57
|
+
| Option | What it does | Default |
|
|
58
|
+
| --- | --- | --- |
|
|
59
|
+
| **LLM** | Who runs the text model: a command-line tool you are signed in to, such as Claude Code or Codex, or a keyed service such as OpenRouter, billed per token. A greyed provider says why it cannot be used; fix it under Settings. | Your Settings default |
|
|
60
|
+
| **Text model** | The model the provider runs for every text step. Bigger models write better and cost more per token. | Your Settings default |
|
|
61
|
+
| **Thinking** | How long the model reasons before it answers, for models that offer it. Higher levels can write more carefully but take longer and use more tokens. | **Model default** |
|
|
62
|
+
|
|
63
|
+
Notes on the pickers:
|
|
64
|
+
|
|
65
|
+
- Changing **LLM** clears the model, so pick a model again.
|
|
66
|
+
- The refresh button beside **Text model** asks the provider for its current list.
|
|
67
|
+
- **Custom ID** lets you type a model the list does not show. **Use list** goes back to the list.
|
|
68
|
+
- **Thinking** only appears when the model offers levels. It lists **Model default** and the levels the model supports, from **Off**, **Low**, **Medium**, **High**, **Xhigh**, **Max** and **Ultra**.
|
|
69
|
+
|
|
70
|
+
If no text model is picked but the run needs one, the row shows "Choose a text (LLM) provider and model." See [Providers and Keys](Providers-and-Keys), [AI CLIs](AI-CLIs) and [Models](Models).
|
|
71
|
+
|
|
72
|
+
## Research
|
|
73
|
+
|
|
74
|
+
Research gives the text model notes to write from, beyond what it already knows. It has its own **Source** switch under the Article row:
|
|
75
|
+
|
|
76
|
+
| Source | What happens | Cost |
|
|
77
|
+
| --- | --- | --- |
|
|
78
|
+
| **Off** (default) | The article is written from the prompt alone. | Nothing extra |
|
|
79
|
+
| **Generate** | The text model plans chapters, researches each one on the web and combines the notes before the article is written. The row reads "Runs through the LLM, one agent per chapter". | One call to plan, one per chapter, one to combine |
|
|
80
|
+
| **Provide** | Uses notes you paste in **Research notes**. Nothing is looked up. | Nothing extra |
|
|
81
|
+
|
|
82
|
+
### Research on the web
|
|
83
|
+
|
|
84
|
+
1. Set the Research **Source** to **Generate**.
|
|
85
|
+
2. Make sure the text model can search the web. A model that cannot fails the Research stage straight away, rather than falling back to what it already knows.
|
|
86
|
+
3. Start the run. You can watch the notes being written on the project page's live view.
|
|
87
|
+
|
|
88
|
+
### Give your own research notes
|
|
89
|
+
|
|
90
|
+
1. Set the Research **Source** to **Provide**.
|
|
91
|
+
2. Paste facts, sources and quotes the article should draw on into **Research notes**.
|
|
92
|
+
|
|
93
|
+
The notes are given to the text model with the article prompt, in place of web research.
|
|
94
|
+
|
|
95
|
+
## Expected article words
|
|
96
|
+
|
|
97
|
+
**Expected article words per video** sits in the right rail under the estimate. It tells Slopify how long you expect each generated article to be, which drives the cost estimate and how many images **More images for long videos** adds. Once the article is written, its real length is used. Default 1500, range 1 to 100,000. Set it to roughly what your article prompt asks for.
|
|
98
|
+
|
|
99
|
+
## Intro and outro
|
|
100
|
+
|
|
101
|
+
An intro is read before the article and an outro after it. Both are Library entries, picked in the Narration row under **Audio Advanced**.
|
|
102
|
+
|
|
103
|
+
| Option | What it does | Default |
|
|
104
|
+
| --- | --- | --- |
|
|
105
|
+
| **Intro** | A Library entry read before the article. A text entry is read as written; an LLM entry is written by the text model for each video, one extra call. | Off |
|
|
106
|
+
| **Outro** | A Library entry read after the article, such as a sign-off. Text or LLM, as above. | Off |
|
|
107
|
+
|
|
108
|
+
1. Open the **Narration** row and press **Change**.
|
|
109
|
+
2. Open **Audio Advanced**.
|
|
110
|
+
3. Pick an **Intro** and an **Outro**, or leave them **Off**.
|
|
111
|
+
4. Optional: set **Silence between segments** in the **Video and style** row to change the quiet between the intro, the article and the outro (Settings has the default, 3 seconds).
|
|
112
|
+
|
|
113
|
+
The channel's brand kit can fill the intro and outro when you leave them at their default. With several speakers, the main **Voice** in the Narration row reads the intro and outro. Uploaded narration (**Provide**) must already include any intro and outro. Write entries in the Library; see [Intros and Outros](Intros-and-Outros).
|
|
114
|
+
|
|
115
|
+
## What the row summary says
|
|
116
|
+
|
|
117
|
+
Folded, the Article row shows the prompt, the provider and model, and the research source, for example `History article · Claude Code · sonnet · research off`, or **Your article** when you pasted one. A row that is missing something shows **Needs setup** and the reason, such as "Pick an article prompt." or "Paste the article."
|
|
118
|
+
|
|
119
|
+
## Tips
|
|
120
|
+
|
|
121
|
+
- Ask for a Pronunciation Glossary at the end of your article prompt if the topic has unusual names. See [Play Narration](Play-Narration#pronunciation-glossary).
|
|
122
|
+
- Use **Review the whole setup** → **Read the resolved prompt** to see the article prompt exactly as it will be sent, keywords filled in.
|
|
123
|
+
- A Review prompt can check the article after it is written. See [Reviews and Checkpoints](Reviews-and-Checkpoints).
|
|
124
|
+
- To change the article after the run, edit it on the project page. See [Editing a Project](Editing-a-Project).
|
|
125
|
+
|
|
126
|
+
## Related pages
|
|
127
|
+
|
|
128
|
+
- [Play Overview](Play-Overview)
|
|
129
|
+
- [Prompts](Prompts)
|
|
130
|
+
- [Intros and Outros](Intros-and-Outros)
|
|
131
|
+
- [Models](Models)
|
|
132
|
+
- [Providers and Keys](Providers-and-Keys)
|
|
133
|
+
- [AI CLIs](AI-CLIs)
|
|
134
|
+
- [Multiple Voices](Multiple-Voices)
|
|
135
|
+
- [Other Languages](Other-Languages)
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Play Video and Style
|
|
2
|
+
|
|
3
|
+
The **Video and style** row decides how your images become a video: how long each stays on screen, how they move and cut, the Look over the picture, an optional ambient sound bed, the frame shape and the captions. The video is rendered on this computer, so none of this costs provider money except **Animate images**. A six-second style preview in the right rail shows and plays your choices as you make them.
|
|
4
|
+
|
|
5
|
+
**Where to find it:** Play → **Video and style** row → **Change**. After the run, the same controls are in the project's **Edit project**; see [Video Editing](Video-Editing).
|
|
6
|
+
|
|
7
|
+
## Choose whether to render a video
|
|
8
|
+
|
|
9
|
+
The row starts with a **Source** switch:
|
|
10
|
+
|
|
11
|
+
| Source | What happens | Cost |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| **Generate** (default) | Renders the slideshow video on this computer from the images and narration. | No provider money, only time |
|
|
14
|
+
| **Off** | No video. Each finished stage is left to download on its own. With narration on, you get a combined WAV of the narration with its segment gaps instead. | None |
|
|
15
|
+
|
|
16
|
+
**Generate** needs images, so the video is Off while Images is Off. The line beside the switch says what you will get:
|
|
17
|
+
|
|
18
|
+
| Line | When |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| "Images and narration · 3 s segment gaps" | Video on, narration on (the gap is your silence between segments) |
|
|
21
|
+
| "Silent video · each image shown once" | Video on, narration Off |
|
|
22
|
+
| "Combined WAV export with narration and segment gaps" | Video Off, narration on |
|
|
23
|
+
| "Download each enabled stage separately" | Video Off, narration Off |
|
|
24
|
+
|
|
25
|
+
## Timing and motion
|
|
26
|
+
|
|
27
|
+
| Option | What it does | Default / range |
|
|
28
|
+
| --- | --- | --- |
|
|
29
|
+
| **Seconds per image** | How long each image stays on screen. When cuts follow the narration, it is the target and a cut waits for a sentence end. When images run out they start again. | 15; 1 to 600 |
|
|
30
|
+
| **Zoom (%)** | How far each image zooms in or out over its time on screen. 0 keeps images still. | 22.5; 0 to 50 |
|
|
31
|
+
| **Motion** | How each image moves: **Zoom in and out**, **Pan across**, **Mix of both** (by turns) or **Still**. A mix keeps a long video watchable. | Zoom in and out |
|
|
32
|
+
| **Cuts** | **Every N seconds** holds each image for Seconds per image. **Follow the narration** cuts in the pause after a sentence, as close to that length as the sentences allow (never under 40% of it), and starts a new image at every chapter. | Follow the narration for new projects |
|
|
33
|
+
| **Silence at start and end (seconds)** | Quiet time before the narration starts and after it ends. Shown while there is narration. | 2; 0 to 30 |
|
|
34
|
+
| **Silence between segments (seconds)** | Quiet between the intro and the narration, and between the narration and the outro. Only matters with an intro or outro. Empty uses the Settings gap. | Settings value (3 unless changed); 0 to 30 |
|
|
35
|
+
|
|
36
|
+
**Follow the narration** needs word timing, so it works in English and the languages that have it. For a language without word timing, **Cuts** is locked to **Every N seconds** and a note under it says why. See [Other Languages](Other-Languages).
|
|
37
|
+
|
|
38
|
+
Turning on **More images for long videos** in the Images row switches **Motion** from Zoom to **Mix of both**. See [Play Images](Play-Images#more-images-for-long-videos).
|
|
39
|
+
|
|
40
|
+
## The Look
|
|
41
|
+
|
|
42
|
+
**Look** is a disclosure under the timing controls. Closed, its line lists what is on, or "Plain cuts, no effects". Everything in it is applied while the video renders.
|
|
43
|
+
|
|
44
|
+
| Option | What it does | Default / range |
|
|
45
|
+
| --- | --- | --- |
|
|
46
|
+
| **Transition** | How one image hands over to the next: **Cut**, **Crossfade**, **Fade through black**, **Slide** or **Wipe**. The change is centred on the cut and takes the length you pick, so the video stays exactly as long as its narration. | Cut; length 0.6 s (0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.5 or 2 s) |
|
|
47
|
+
| **Colour grade** | A colour treatment over the whole video: **Warm fantasy**, **Cold**, **Desaturated** or **Sepia**. Only render time. | None |
|
|
48
|
+
| **Vignette** | Darkens the corners to draw the eye to the middle: **Subtle** or **Strong**. | Off |
|
|
49
|
+
| **Film grain** | Moving film grain over the whole picture for an older, filmic feel: **Subtle** or **Strong**. | Off |
|
|
50
|
+
| **Atmosphere** | An overlay Slopify draws itself: rising **Embers**, drifting **Dust**, or low **Fog** along the bottom of the frame. No footage is downloaded and no API is called. | None |
|
|
51
|
+
| **Chapter cards** | Shows each chapter's title in the middle of the picture for 2.5 seconds as the chapter starts, in the caption font. Chapters come from the YouTube description when that step runs, otherwise from the article's headings. Needs narration. | Off |
|
|
52
|
+
| **Animate images** | Turns some images into 5-second moving clips with an image-to-video model on your image provider (fal.ai or Replicate). **Chapter openers** animates the first image of each chapter (needs narration); **Every Nth image** animates every 2nd to 10th. Pick the image-to-video model in the third box. Each clip is one paid call, shown in the estimate. An image that cannot be animated stays still. | Off |
|
|
53
|
+
|
|
54
|
+
### Animate some images
|
|
55
|
+
|
|
56
|
+
1. Make sure the Images row uses fal.ai or Replicate. Other providers have no image-to-video models, and the Look says so.
|
|
57
|
+
2. Open **Look** and set **Animate images** to **Chapter openers** or **Every Nth image**.
|
|
58
|
+
3. For **Every Nth image**, pick how often (every 2 to every 10).
|
|
59
|
+
4. Pick the model in the model box ("Choose a model"). The run cannot start until one is picked.
|
|
60
|
+
5. Check the added cost in the estimate.
|
|
61
|
+
|
|
62
|
+
## Ambient sound
|
|
63
|
+
|
|
64
|
+
An optional bed of rain, a fireplace, wind or your own audio file, played quietly under the whole narration of the long video. It dips while the narrator speaks, including under the intro and outro. It is shown while both the video and the narration are on.
|
|
65
|
+
|
|
66
|
+
| Option | What it does | Default / range |
|
|
67
|
+
| --- | --- | --- |
|
|
68
|
+
| **Ambient sound** | **The channel's (brand kit)** uses whatever the channel's kit says, which may be nothing. **None** plays no bed, whatever the channel has. **Rain**, **Fireplace** and **Wind** are made on this computer, so nothing is downloaded and the same settings always sound the same. **My own file** uploads an audio file, looped if shorter than the video. | The channel's (brand kit) |
|
|
69
|
+
| **Level (dB)** | How loud the bed plays under the voice, from −40 (barely there) to −6 (close to the voice). Whole numbers only. | −18 |
|
|
70
|
+
| **Fade in (seconds)** | How long the bed takes to rise from silence at the start. | 3; 0 to 30 in steps of 0.5 |
|
|
71
|
+
| **Tail after the narration (seconds)** | How long the bed keeps playing, fading out, after the narration ends. It plays over the silence already at the end; a tail longer than **Silence at start and end** makes the video that much longer. | 6; 0 to 30 in steps of 0.5 |
|
|
72
|
+
|
|
73
|
+
Only the long video gets the bed: shorts keep their own background music, and the audio-only WAV stays the narration alone. It costs no API calls. A template with **My own file** cannot run on a schedule, because the file has to be attached again on Play; pick a built-in bed for scheduled runs. A channel's brand kit can only hold the three built-in beds.
|
|
74
|
+
|
|
75
|
+
## Pauses and Level the volume
|
|
76
|
+
|
|
77
|
+
Below the ambient sound are **Pause between sentences**, **Pause between paragraphs** and **Level the volume** with its **Video volume** and **Audio files volume**. They shape the narration, so they are described on [Play Narration](Play-Narration#pauses-between-sentences-and-paragraphs).
|
|
78
|
+
|
|
79
|
+
## Frame format
|
|
80
|
+
|
|
81
|
+
| Option | What it does | Default |
|
|
82
|
+
| --- | --- | --- |
|
|
83
|
+
| **Frame format** | **16:9** is a landscape video for YouTube and screens. **9:16** is a portrait video for phones. Images are drawn in this shape and captions are placed for it. | 16:9 |
|
|
84
|
+
|
|
85
|
+
## Captions
|
|
86
|
+
|
|
87
|
+
Captions are timed from your narration on this computer, with no paid API. The first use downloads a speech model of about 95 MB. They need narration: with narration Off, the section says "Turn Audio on to add subtitles."
|
|
88
|
+
|
|
89
|
+
| Option | What it does | Default / range |
|
|
90
|
+
| --- | --- | --- |
|
|
91
|
+
| **Subtitles** | **Off** makes none. **Subtitle files (.srt + .vtt)** gives you files to upload beside the video. **Burn into video + files** draws the captions into the picture and also makes the files; it needs the video on. | Off |
|
|
92
|
+
| **Subtitle font** | The typeface of burned-in captions and chapter cards. Pick **Default font · bundled** or a font you uploaded. | Default font |
|
|
93
|
+
| **Upload font (.ttf or .otf)** | Adds your own font, right here in the caption font picker (there is no separate font screen in Settings). Uploaded fonts stay available to every project and to a channel's brand kit. | |
|
|
94
|
+
| **Subtitle font size** | How big burned-in captions are. Larger is easier to read on phones but covers more of the picture. Type it or use the slider. | 48; 16 to 120, whole numbers |
|
|
95
|
+
| **Subtitle position** | Where burned-in captions sit: **Top**, **Upper-middle**, **Center**, **Lower-middle** or **Bottom**. Move them up when the pictures have important detail near the bottom. | Bottom |
|
|
96
|
+
|
|
97
|
+
Font, size and position apply to burned-in captions only. Players style `.srt` and `.vtt` files themselves. The channel's brand kit can fill the caption font when you leave it at the default.
|
|
98
|
+
|
|
99
|
+
### Burn captions into the video
|
|
100
|
+
|
|
101
|
+
1. Make sure the Narration row is not Off and the video Source is **Generate**.
|
|
102
|
+
2. Set **Subtitles** to **Burn into video + files**.
|
|
103
|
+
3. Pick a **Subtitle font**, or press **Upload font (.ttf or .otf)** and pick a file. Wait for "Uploading font…" to finish; the run cannot start during the upload.
|
|
104
|
+
4. Set **Subtitle font size** and **Subtitle position**.
|
|
105
|
+
5. Watch the style preview in the right rail.
|
|
106
|
+
|
|
107
|
+
If a saved font is missing (for example after a reinstall), the picker says "Saved font is unavailable. Choose another font or upload it again."
|
|
108
|
+
|
|
109
|
+
After the run, you can fix a misheard word or nudge a caption's timing on the project page. See [Video Editing](Video-Editing).
|
|
110
|
+
|
|
111
|
+
## Style preview
|
|
112
|
+
|
|
113
|
+
The **Style preview** at the top of the right rail ("6 seconds of the sample, rendered with your settings") is rendered on this computer by the real video renderer, with your captions, Look and motion. It plays six seconds of the bundled sample project's real narration over three of its pictures, two seconds each, so a transition and a chapter card both show, and the captions are timed to the narration's words, as in a real video. It plays in Slopify's own player, with sound.
|
|
114
|
+
|
|
115
|
+
The pictures are the sample's (landscape or portrait, following **Frame format**), unless there is something closer to your video: your uploaded establishing image, or else a picture of the cast member the title names (or the first cast member with a picture). The line under it names the caption settings, and "Drawn on …" when it uses one of your pictures. It renders again by itself a moment after you change a setting, costs no API calls, and **Render again** forces a fresh one.
|
|
116
|
+
|
|
117
|
+
It shows while the video is generated from images. If the caption settings are invalid, it says "Fix the caption settings to render the preview."
|
|
118
|
+
|
|
119
|
+
| Option | What it does | Default |
|
|
120
|
+
| --- | --- | --- |
|
|
121
|
+
| **Preview text** | The words the preview's captions show, in your caption font, size and position. Left at the sample sentence (or empty), the captions are the sample narration's own words; any other text is spread over the stretches where the narration speaks. It is only for the preview and never reaches the video; real captions come from your narration. | "Every story begins with a word." |
|
|
122
|
+
|
|
123
|
+
The same preview is in Edit project while its **Subtitles** section is open. Shorts have their own [Shorts preview](Shorts#shorts-preview).
|
|
124
|
+
|
|
125
|
+
## What the row summary says
|
|
126
|
+
|
|
127
|
+
Folded, the row reads like `16:9 · follow the narration · Warm fantasy · captions Default font 48 bottom`: the frame, the cuts, the Look, and the caption font, size and position, or "no video" and "no captions".
|
|
128
|
+
|
|
129
|
+
## Tips
|
|
130
|
+
|
|
131
|
+
- Keep **Seconds per image** near the length of a few sentences (10 to 20 s) when cuts follow the narration.
|
|
132
|
+
- Try one Look setting at a time and watch the preview; they stack.
|
|
133
|
+
- Everything except **Animate images** only costs render time, so you can change the Look later in Edit project without paying a provider again.
|
|
134
|
+
|
|
135
|
+
## Related pages
|
|
136
|
+
|
|
137
|
+
- [Play Overview](Play-Overview)
|
|
138
|
+
- [Play Images](Play-Images)
|
|
139
|
+
- [Play Narration](Play-Narration)
|
|
140
|
+
- [Video Editing](Video-Editing)
|
|
141
|
+
- [Channels](Channels)
|
|
142
|
+
- [Other Languages](Other-Languages)
|
|
143
|
+
- [Schedules](Schedules)
|