@gentbajko/slopify 3.25.9 → 4.0.0
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/dist/adapters/account-limits.js +30 -0
- package/dist/adapters/alignment/cache.js +3 -5
- package/dist/adapters/alignment/ctc.js +1 -2
- package/dist/adapters/alignment/lock.js +4 -3
- package/dist/adapters/alignment/multilingual.js +0 -3
- package/dist/adapters/alignment/prefetch.js +2 -1
- package/dist/adapters/alignment/worker.js +2 -1
- package/dist/adapters/explain.js +0 -3
- package/dist/adapters/ffmpeg.js +19 -1
- package/dist/adapters/host-cli/index.js +19 -3
- package/dist/adapters/http-failure.js +53 -0
- package/dist/adapters/image/codex.js +36 -4
- package/dist/adapters/image/fal.js +17 -50
- package/dist/adapters/image/google.js +31 -55
- package/dist/adapters/image/openai.js +20 -47
- package/dist/adapters/image/reference.js +36 -0
- package/dist/adapters/image/replicate.js +18 -47
- package/dist/adapters/interest/search-interest.js +113 -0
- package/dist/adapters/key-probes.js +53 -2
- package/dist/adapters/llm/antigravity.js +4 -0
- package/dist/adapters/llm/assistant-cli.js +388 -0
- package/dist/adapters/llm/child-session.js +83 -0
- package/dist/adapters/llm/claude-code-models.js +51 -98
- package/dist/adapters/llm/claude-code.js +13 -2
- package/dist/adapters/llm/codex-limits.js +27 -68
- package/dist/adapters/llm/codex-server-models.js +61 -109
- package/dist/adapters/llm/codex.js +12 -1
- package/dist/adapters/llm/openrouter.js +10 -47
- package/dist/adapters/llm/run-cli.js +6 -22
- package/dist/adapters/llm/sse-lines.js +5 -1
- package/dist/adapters/model-access.js +37 -0
- package/dist/adapters/tts/cartesia.js +15 -46
- package/dist/adapters/tts/elevenlabs.js +20 -52
- package/dist/adapters/tts/gemini.js +19 -40
- package/dist/adapters/tts/inworld-async.js +4 -1
- package/dist/adapters/tts/inworld.js +3 -0
- package/dist/adapters/tts/openai.js +20 -50
- package/dist/assets/models-lifecycle.yaml +6 -0
- package/dist/assistant-wiring.js +60 -0
- package/dist/autopilot-timers.js +59 -0
- package/dist/catalog/lifecycle.js +52 -0
- package/dist/catalog/propose.js +204 -0
- package/dist/catalog/registry.js +3 -1
- package/dist/catalog/schema.js +2 -0
- package/dist/catalog/store.js +39 -0
- package/dist/edge/autostart/native.js +3 -5
- package/dist/edge/autostart/prompt.js +2 -1
- package/dist/edge/autostart/service.js +3 -4
- package/dist/edge/cli-args.js +3 -4
- package/dist/edge/cli.js +2 -1
- package/dist/edge/docker-install/apply.js +11 -11
- package/dist/edge/docker-install/run.js +2 -1
- package/dist/edge/docker-install/state.js +4 -3
- package/dist/edge/docker-install/tree.js +2 -4
- package/dist/edge/docker-install/volume.js +3 -2
- package/dist/edge/docker.js +5 -4
- package/dist/edge/events/hub.js +5 -5
- package/dist/edge/http/actions.js +4 -25
- package/dist/edge/http/actor.js +5 -3
- package/dist/edge/http/app.js +85 -10
- package/dist/edge/http/assistant.js +127 -0
- package/dist/edge/http/audio-preview.js +4 -11
- package/dist/edge/http/auditions.js +1 -1
- package/dist/edge/http/autostart.js +5 -5
- package/dist/edge/http/backups.js +1 -3
- package/dist/edge/http/channel-memory.js +7 -20
- package/dist/edge/http/channels.js +13 -26
- package/dist/edge/http/checkpoints.js +33 -17
- package/dist/edge/http/design-templates.js +167 -0
- package/dist/edge/http/designs.js +178 -0
- package/dist/edge/http/diagnostics.js +5 -1
- package/dist/edge/http/document-themes.js +2 -11
- package/dist/edge/http/draft-files.js +1 -3
- package/dist/edge/http/draft-problem.js +4 -9
- package/dist/edge/http/drafts.js +3 -3
- package/dist/edge/http/entries.js +6 -9
- package/dist/edge/http/extension-auth.js +27 -0
- package/dist/edge/http/external-reviews.js +12 -11
- package/dist/edge/http/files.js +5 -11
- package/dist/edge/http/folder-location.js +1 -4
- package/dist/edge/http/fonts.js +0 -7
- package/dist/edge/http/home.js +38 -13
- package/dist/edge/http/host-cli.js +18 -8
- package/dist/edge/http/ids.js +8 -0
- package/dist/edge/http/keywords.js +35 -0
- package/dist/edge/http/model-checks.js +132 -0
- package/dist/edge/http/narration-peaks.js +5 -13
- package/dist/edge/http/onboarding.js +1 -14
- package/dist/edge/http/open-folder.js +5 -10
- package/dist/edge/http/outputs.js +4 -12
- package/dist/edge/http/patch-notes.js +4 -10
- package/dist/edge/http/planning.js +2 -6
- package/dist/edge/http/problem.js +2 -4
- package/dist/edge/http/project-create.js +1 -0
- package/dist/edge/http/project-templates.js +29 -17
- package/dist/edge/http/projects.js +2 -12
- package/dist/edge/http/prompts.js +7 -14
- package/dist/edge/http/pronunciations.js +1 -2
- package/dist/edge/http/providers.js +39 -24
- package/dist/edge/http/refusal.js +29 -0
- package/dist/edge/http/remote-access.js +40 -0
- package/dist/edge/http/remote-guard.js +71 -0
- package/dist/edge/http/request-guard.js +91 -0
- package/dist/edge/http/reviews.js +11 -24
- package/dist/edge/http/revision-files.js +5 -10
- package/dist/edge/http/revisions.js +10 -15
- package/dist/edge/http/run-cost.js +1 -2
- package/dist/edge/http/same-page.js +80 -0
- package/dist/edge/http/schedules.js +59 -32
- package/dist/edge/http/settings.js +22 -13
- package/dist/edge/http/social.js +282 -0
- package/dist/edge/http/staging.js +2 -4
- package/dist/edge/http/storage-files.js +5 -7
- package/dist/edge/http/storage.js +23 -23
- package/dist/edge/http/studio.js +23 -50
- package/dist/edge/http/style-preview.js +1 -4
- package/dist/edge/http/subtitles.js +3 -17
- package/dist/edge/http/template-studio.js +433 -0
- package/dist/edge/http/trash.js +10 -11
- package/dist/edge/http/tutorial.js +1 -2
- package/dist/edge/http/tutorials.js +5 -11
- package/dist/edge/http/update.js +7 -13
- package/dist/edge/http/waveform.js +3 -6
- package/dist/edge/http/youtube-edits.js +2 -3
- package/dist/edge/mcp/assistant.js +279 -0
- package/dist/edge/mcp/attribution.js +8 -2
- package/dist/edge/mcp/call-route.js +11 -2
- package/dist/edge/mcp/excluded-routes.js +25 -0
- package/dist/edge/mcp/http.js +11 -2
- package/dist/edge/mcp/instructions.js +5 -3
- package/dist/edge/mcp/library-tools.js +1 -0
- package/dist/edge/mcp/route-tool.js +35 -15
- package/dist/edge/mcp/server.js +13 -8
- package/dist/edge/mcp/tools-channels.js +2 -0
- package/dist/edge/mcp/tools-designs.js +165 -0
- package/dist/edge/mcp/tools-library.js +14 -2
- package/dist/edge/mcp/tools-planning.js +23 -4
- package/dist/edge/mcp/tools-projects.js +28 -1
- package/dist/edge/mcp/tools-runs.js +14 -1
- package/dist/edge/mcp/tools-schedules.js +28 -4
- package/dist/edge/mcp/tools-setup.js +61 -3
- package/dist/edge/mcp/tools-social.js +46 -0
- package/dist/edge/mcp/tools-storage.js +8 -0
- package/dist/edge/mcp/tools-template-studio.js +166 -0
- package/dist/edge/mcp/tools.js +6 -0
- package/dist/edge/remote-access/cli.js +71 -0
- package/dist/edge/remote-access/model.js +32 -0
- package/dist/edge/remote-access/rules.js +207 -0
- package/dist/edge/remote-access/service.js +203 -0
- package/dist/edge/remote-access/store.js +44 -0
- package/dist/edge/remote-access/views.js +43 -0
- package/dist/extension/slopify-studio-chrome.zip +0 -0
- package/dist/extension/slopify-studio-firefox.zip +0 -0
- package/dist/host-cli/install.js +2 -2
- package/dist/host-cli/open-folder.js +2 -2
- package/dist/host-cli/paths.js +2 -4
- package/dist/host-cli/server.js +4 -4
- package/dist/host-cli/service.js +3 -3
- package/dist/host-cli/status.js +7 -7
- package/dist/kernel/db/migrations/0063-model-checks.sql +20 -0
- package/dist/kernel/db/migrations/0064-template-studio.sql +46 -0
- package/dist/kernel/db/migrations/0065-promise-and-assistant-reviews.sql +58 -0
- package/dist/kernel/db/migrations/0066-assistant.sql +44 -0
- package/dist/kernel/db/migrations/0067-autopilot.sql +6 -0
- package/dist/kernel/db/migrations/0068-topic-scores.sql +17 -0
- package/dist/kernel/db/migrations/0070-designs.sql +53 -0
- package/dist/kernel/db/migrations/0071-design-usage.sql +33 -0
- package/dist/kernel/db/migrations/0072-design-templates.sql +33 -0
- package/dist/kernel/db/migrations/0073-schedule-design-kind.sql +5 -0
- package/dist/kernel/db/migrations/0074-template-bakeoffs.sql +44 -0
- package/dist/kernel/db/migrations/0075-social-posts.sql +25 -0
- package/dist/kernel/db/migrations/0076-channel-social.sql +5 -0
- package/dist/kernel/db/migrations/0077-post-prompts.sql +17 -0
- package/dist/kernel/db/tx.js +2 -4
- package/dist/kernel/errors.js +27 -1
- package/dist/kernel/json-answer.js +15 -0
- package/dist/kernel/lock.js +4 -9
- package/dist/kernel/paths.js +8 -0
- package/dist/kernel/ports/assistant-cli.js +4 -0
- package/dist/kernel/ports/host-cli.js +3 -0
- package/dist/kernel/ports/interest.js +4 -0
- package/dist/kernel/ports/languages.js +0 -3
- package/dist/kernel/ports/model.js +2 -0
- package/dist/kernel/runner/attempt.js +3 -1
- package/dist/kernel/runner/audition.js +3 -1
- package/dist/kernel/runner/checkpoint-authority.js +2 -1
- package/dist/kernel/runner/index.js +8 -10
- package/dist/kernel/runner/model-access.js +40 -0
- package/dist/kernel/runner/model-check.js +153 -0
- package/dist/kernel/runner/providers.js +15 -10
- package/dist/kernel/runner/standalone.js +9 -5
- package/dist/main.js +334 -19
- package/dist/model-checks.js +166 -0
- package/dist/patch-notes/4.0.0.md +51 -0
- package/dist/patch-notes/index.json +6 -0
- package/dist/slices/admission/heads.js +2 -1
- package/dist/slices/admission/repo.js +2 -1
- package/dist/slices/admission/rules.js +43 -8
- package/dist/slices/admission/schema.js +8 -0
- package/dist/slices/admission/stage-writes.js +0 -3
- package/dist/slices/admission/start.js +48 -31
- package/dist/slices/admission/substitute.js +7 -4
- package/dist/slices/agents/attention-posts.js +31 -0
- package/dist/slices/agents/attention-templates.js +33 -0
- package/dist/slices/agents/attention.js +10 -1
- package/dist/slices/agents/connection.js +2 -6
- package/dist/slices/agents/model.js +6 -3
- package/dist/slices/agents/repo.js +15 -7
- package/dist/slices/article/continuation.js +0 -63
- package/dist/slices/article/plain.js +3 -2
- package/dist/slices/article/segments.js +2 -62
- package/dist/slices/assistant/access.js +1 -0
- package/dist/slices/assistant/asks.js +80 -0
- package/dist/slices/assistant/cost.js +54 -0
- package/dist/slices/assistant/gate.js +222 -0
- package/dist/slices/assistant/model.js +79 -0
- package/dist/slices/assistant/names.js +23 -0
- package/dist/slices/assistant/prompt.js +74 -0
- package/dist/slices/assistant/repo.js +74 -0
- package/dist/slices/assistant/tokens.js +18 -0
- package/dist/slices/assistant/turn.js +342 -0
- package/dist/slices/autopilot/buffer.js +76 -0
- package/dist/slices/autopilot/model.js +14 -0
- package/dist/slices/autopilot/notify.js +27 -0
- package/dist/slices/autopilot/repo.js +34 -0
- package/dist/slices/autopilot/signals.js +194 -0
- package/dist/slices/autopilot/warnings.js +85 -0
- package/dist/slices/autopilot/weekly.js +100 -0
- package/dist/slices/backups/files.js +2 -6
- package/dist/slices/backups/repo.js +3 -15
- package/dist/slices/backups/service.js +4 -3
- package/dist/slices/channels/cast-images.js +2 -1
- package/dist/slices/channels/model.js +0 -1
- package/dist/slices/channels/rebrand.js +0 -3
- package/dist/slices/channels/repo.js +4 -0
- package/dist/slices/channels/schema.js +6 -0
- package/dist/slices/channels/service.js +10 -0
- package/dist/slices/channels/videos.js +2 -14
- package/dist/slices/checkpoints/index.js +0 -1
- package/dist/slices/control/providers.js +0 -26
- package/dist/slices/designs/artwork.js +66 -0
- package/dist/slices/designs/budget.js +23 -0
- package/dist/slices/designs/calls.js +124 -0
- package/dist/slices/designs/check-context.js +38 -0
- package/dist/slices/designs/check-text.js +43 -0
- package/dist/slices/designs/fields.js +88 -0
- package/dist/slices/designs/frames.js +34 -0
- package/dist/slices/designs/gate.js +128 -0
- package/dist/slices/designs/layout.js +293 -0
- package/dist/slices/designs/model.js +35 -0
- package/dist/slices/designs/pdf-job.js +23 -0
- package/dist/slices/designs/pdf-pages.js +30 -0
- package/dist/slices/designs/pdf-runner.js +68 -0
- package/dist/slices/designs/pdf-worker.js +24 -0
- package/dist/slices/designs/picture-size.js +79 -0
- package/dist/slices/designs/pictures.js +55 -0
- package/dist/slices/designs/quote.js +24 -0
- package/dist/slices/designs/render-args.js +36 -0
- package/dist/slices/designs/render-input.js +59 -0
- package/dist/slices/designs/render.js +215 -0
- package/dist/slices/designs/repo.js +101 -0
- package/dist/slices/designs/requests.js +80 -0
- package/dist/slices/designs/runner.js +239 -0
- package/dist/slices/designs/sample-repo.js +91 -0
- package/dist/slices/designs/sample.js +222 -0
- package/dist/slices/designs/schema.js +87 -0
- package/dist/slices/designs/sections.js +44 -0
- package/dist/slices/designs/service.js +233 -0
- package/dist/slices/designs/steps-repo.js +102 -0
- package/dist/slices/designs/studio-kind.js +39 -0
- package/dist/slices/designs/template-checks.js +44 -0
- package/dist/slices/designs/template-make.js +118 -0
- package/dist/slices/designs/templates.js +218 -0
- package/dist/slices/document/fonts.js +2 -1
- package/dist/slices/episodes/summarize.js +5 -1
- package/dist/slices/estimate/index.js +45 -7
- package/dist/slices/fonts/catalog.js +3 -2
- package/dist/slices/fonts/discovery.js +3 -2
- package/dist/slices/fonts/files.js +2 -6
- package/dist/slices/fonts/index.js +0 -1
- package/dist/slices/fonts/sfnt.js +45 -10
- package/dist/slices/images/appearance.js +6 -15
- package/dist/slices/images/scenes.js +100 -27
- package/dist/slices/keywords/digest.js +84 -0
- package/dist/slices/keywords/facts.js +92 -0
- package/dist/slices/keywords/fill.js +80 -0
- package/dist/slices/keywords/model.js +75 -0
- package/dist/slices/keywords/rules.js +187 -0
- package/dist/slices/keywords/schema.js +28 -0
- package/dist/slices/keywords/specs.js +260 -0
- package/dist/slices/keywords/values.js +74 -0
- package/dist/slices/library/lint.js +29 -12
- package/dist/slices/library/model.js +2 -0
- package/dist/slices/library/photorealistic.js +4 -12
- package/dist/slices/library/rename.js +9 -7
- package/dist/slices/library/save.js +14 -10
- package/dist/slices/library/slots.js +37 -11
- package/dist/slices/library/transfer.js +2 -1
- package/dist/slices/library/used-by.js +25 -10
- package/dist/slices/loudness/loudnorm.js +51 -11
- package/dist/slices/model-checks/cost.js +61 -0
- package/dist/slices/model-checks/listing.js +124 -0
- package/dist/slices/model-checks/model.js +20 -0
- package/dist/slices/model-checks/record.js +32 -0
- package/dist/slices/model-checks/repo.js +120 -0
- package/dist/slices/model-checks/rules.js +112 -0
- package/dist/slices/model-checks/run.js +143 -0
- package/dist/slices/model-checks/service.js +198 -0
- package/dist/slices/model-upkeep/switch.js +70 -25
- package/dist/slices/model-upkeep/usage.js +26 -11
- package/dist/slices/narration/breaths.js +2 -1
- package/dist/slices/narration/clean-pieces.js +2 -1
- package/dist/slices/narration/concat.js +2 -1
- package/dist/slices/narration/peaks.js +3 -4
- package/dist/slices/narration/pronunciation-chunks.js +4 -3
- package/dist/slices/narration/pronunciation.js +3 -2
- package/dist/slices/narration/steering.js +4 -3
- package/dist/slices/notifications/notifier.js +4 -3
- package/dist/slices/notifications/rules.js +5 -2
- package/dist/slices/notifications/settings.js +4 -12
- package/dist/slices/notifications/subject.js +2 -1
- package/dist/slices/onboarding/copy.js +2 -1
- package/dist/slices/onboarding/first-run.js +3 -2
- package/dist/slices/onboarding/full-video.js +3 -2
- package/dist/slices/onboarding/install.js +4 -3
- package/dist/slices/onboarding/model.js +0 -16
- package/dist/slices/onboarding/packs.js +22 -22
- package/dist/slices/onboarding/quick-short.js +2 -1
- package/dist/slices/onboarding/sample.js +0 -1
- package/dist/slices/onboarding/state.js +2 -11
- package/dist/slices/onboarding/template.js +2 -1
- package/dist/slices/patch-notes/library.js +3 -2
- package/dist/slices/play-drafts/convert.js +4 -0
- package/dist/slices/play-drafts/review-inputs.js +8 -2
- package/dist/slices/play-drafts/review.js +5 -4
- package/dist/slices/play-drafts/schema.js +4 -0
- package/dist/slices/project-templates/from-project.js +9 -2
- package/dist/slices/project-templates/repo.js +6 -1
- package/dist/slices/project-templates/setup.js +8 -0
- package/dist/slices/project-templates/stand-ins.js +22 -0
- package/dist/slices/rebuild/activity.js +2 -0
- package/dist/slices/rebuild/admission-repo.js +3 -2
- package/dist/slices/rebuild/narration-history.js +4 -5
- package/dist/slices/rebuild/narration-retry.js +2 -1
- package/dist/slices/rebuild/preview-details.js +27 -9
- package/dist/slices/rebuild/preview-plan.js +3 -8
- package/dist/slices/rebuild/recipe-build.js +8 -3
- package/dist/slices/rebuild/recipe-describe.js +3 -3
- package/dist/slices/rebuild/recipe-digest.js +58 -0
- package/dist/slices/rebuild/recipe-input-schema.js +10 -0
- package/dist/slices/rebuild/recipe-keywords.js +71 -0
- package/dist/slices/rebuild/recipe-legacy.js +5 -1
- package/dist/slices/rebuild/recipe-model.js +4 -0
- package/dist/slices/rebuild/recipe-narration-text.js +2 -1
- package/dist/slices/rebuild/recipe-preparation.js +3 -3
- package/dist/slices/rebuild/recipe-reference.js +8 -4
- package/dist/slices/rebuild/recipe-reviews.js +27 -7
- package/dist/slices/rebuild/recipe-save.js +6 -3
- package/dist/slices/rebuild/recipe-scenes.js +40 -11
- package/dist/slices/rebuild/recipe-shorts.js +8 -8
- package/dist/slices/rebuild/recipe-social.js +46 -0
- package/dist/slices/rebuild/recipe-text.js +64 -20
- package/dist/slices/rebuild/recipe-validation.js +98 -28
- package/dist/slices/rebuild/recipe-visual.js +55 -16
- package/dist/slices/rebuild/recipe-work.js +15 -3
- package/dist/slices/rebuild/recipe-youtube.js +4 -3
- package/dist/slices/rebuild/recovery-selection.js +3 -1
- package/dist/slices/rebuild/recovery.js +3 -2
- package/dist/slices/rebuild/repo.js +4 -3
- package/dist/slices/rebuild/review-promise.js +25 -0
- package/dist/slices/rebuild/review-redo.js +2 -1
- package/dist/slices/rebuild/runtime-admission.js +4 -3
- package/dist/slices/rebuild/runtime-agent-review.js +11 -5
- package/dist/slices/rebuild/runtime-animate.js +9 -8
- package/dist/slices/rebuild/runtime-article.js +3 -2
- package/dist/slices/rebuild/runtime-checkpoints.js +5 -4
- package/dist/slices/rebuild/runtime-document.js +8 -11
- package/dist/slices/rebuild/runtime-export-bed.js +6 -11
- package/dist/slices/rebuild/runtime-export-edit.js +6 -15
- package/dist/slices/rebuild/runtime-export-inputs.js +7 -7
- package/dist/slices/rebuild/runtime-export-short.js +8 -4
- package/dist/slices/rebuild/runtime-export.js +34 -12
- package/dist/slices/rebuild/runtime-figure-card.js +2 -1
- package/dist/slices/rebuild/runtime-image.js +4 -9
- package/dist/slices/rebuild/runtime-instructions.js +2 -0
- package/dist/slices/rebuild/runtime-keywords.js +59 -0
- package/dist/slices/rebuild/runtime-lines.js +2 -11
- package/dist/slices/rebuild/runtime-local.js +14 -20
- package/dist/slices/rebuild/runtime-narration-publication.js +2 -5
- package/dist/slices/rebuild/runtime-narration-reuse.js +9 -13
- package/dist/slices/rebuild/runtime-narration-text.js +10 -15
- package/dist/slices/rebuild/runtime-pictures.js +2 -4
- package/dist/slices/rebuild/runtime-piece-label.js +10 -6
- package/dist/slices/rebuild/runtime-plan.js +31 -5
- package/dist/slices/rebuild/runtime-provider.js +60 -19
- package/dist/slices/rebuild/runtime-publication.js +10 -9
- package/dist/slices/rebuild/runtime-review.js +33 -28
- package/dist/slices/rebuild/runtime-run.js +4 -1
- package/dist/slices/rebuild/runtime-shorts.js +25 -45
- package/dist/slices/rebuild/runtime-store.js +3 -8
- package/dist/slices/rebuild/runtime-subtitles.js +16 -14
- package/dist/slices/rebuild/runtime-voices.js +8 -15
- package/dist/slices/rebuild/runtime-youtube.js +11 -29
- package/dist/slices/rebuild/transition-repo.js +6 -5
- package/dist/slices/rebuild/work-records.js +6 -0
- package/dist/slices/reruns/cascade.js +1 -2
- package/dist/slices/reruns/index.js +6 -9
- package/dist/slices/reviews/external-model.js +3 -0
- package/dist/slices/reviews/external-repo.js +2 -1
- package/dist/slices/reviews/external-rows.js +2 -3
- package/dist/slices/reviews/model.js +26 -8
- package/dist/slices/reviews/repo.js +2 -1
- package/dist/slices/reviews/rules.js +1 -0
- package/dist/slices/reviews/view.js +5 -2
- package/dist/slices/revisions/downloads.js +4 -5
- package/dist/slices/revisions/mutation-assets.js +7 -4
- package/dist/slices/revisions/mutation-cues.js +2 -5
- package/dist/slices/revisions/mutations.js +0 -1
- package/dist/slices/revisions/repo.js +3 -1
- package/dist/slices/revisions/schema.js +1 -0
- package/dist/slices/revisions/view.js +20 -0
- package/dist/slices/run-cost/limits.js +5 -2
- package/dist/slices/run-cost/meter.js +12 -5
- package/dist/slices/run-cost/panel.js +8 -74
- package/dist/slices/run-cost/plan-readings.js +127 -0
- package/dist/slices/run-cost/plan-use.js +169 -0
- package/dist/slices/run-cost/pricing.js +3 -3
- package/dist/slices/run-cost/week.js +32 -4
- package/dist/slices/schedules/agenda.js +11 -2
- package/dist/slices/schedules/by-date.js +42 -0
- package/dist/slices/schedules/calendar.js +5 -0
- package/dist/slices/schedules/design-agenda.js +36 -0
- package/dist/slices/schedules/design-check.js +41 -0
- package/dist/slices/schedules/design-run.js +126 -0
- package/dist/slices/schedules/next-run.js +62 -0
- package/dist/slices/schedules/prepare.js +18 -2
- package/dist/slices/schedules/repo.js +24 -16
- package/dist/slices/schedules/rescore.js +35 -0
- package/dist/slices/schedules/scheduler.js +13 -3
- package/dist/slices/schedules/schema.js +54 -3
- package/dist/slices/schedules/score.js +107 -0
- package/dist/slices/schedules/service.js +57 -24
- package/dist/slices/schedules/topic-list.js +15 -0
- package/dist/slices/schedules/topic-scores.js +104 -0
- package/dist/slices/schedules/topics.js +48 -36
- package/dist/slices/settings/cli-paths.js +4 -6
- package/dist/slices/settings/first-run.js +2 -11
- package/dist/slices/settings/model-reach.js +3 -17
- package/dist/slices/settings/model.js +10 -0
- package/dist/slices/settings/playback.js +33 -22
- package/dist/slices/settings/probe-read.js +16 -0
- package/dist/slices/settings/repo.js +33 -0
- package/dist/slices/settings/tutorial.js +2 -2
- package/dist/slices/settings/voices.js +4 -12
- package/dist/slices/shorts/pick.js +2 -15
- package/dist/slices/shorts/prompts.js +2 -13
- package/dist/slices/shorts/render.js +3 -0
- package/dist/slices/social/channel.js +44 -0
- package/dist/slices/social/defaults.js +17 -0
- package/dist/slices/social/due.js +36 -0
- package/dist/slices/social/extension.js +18 -0
- package/dist/slices/social/fit.js +115 -0
- package/dist/slices/social/limits.js +186 -0
- package/dist/slices/social/links.js +21 -0
- package/dist/slices/social/media.js +131 -0
- package/dist/slices/social/model.js +75 -0
- package/dist/slices/social/notice.js +19 -0
- package/dist/slices/social/pack.js +176 -0
- package/dist/slices/social/post-prompt.js +55 -0
- package/dist/slices/social/queue.js +31 -0
- package/dist/slices/social/repo.js +133 -0
- package/dist/slices/social/reshape.js +97 -0
- package/dist/slices/social/rules.js +5 -0
- package/dist/slices/social/schema.js +70 -0
- package/dist/slices/social/serve.js +51 -0
- package/dist/slices/social/service.js +128 -0
- package/dist/slices/social/settings.js +21 -0
- package/dist/slices/social/sources.js +114 -0
- package/dist/slices/social/state.js +110 -0
- package/dist/slices/social/text.js +149 -0
- package/dist/slices/storage/arrange.js +3 -1
- package/dist/slices/storage/assets.js +8 -10
- package/dist/slices/storage/backup-designs.js +74 -0
- package/dist/slices/storage/backup-export.js +8 -3
- package/dist/slices/storage/backup-format.js +10 -0
- package/dist/slices/storage/backup-import.js +20 -2
- package/dist/slices/storage/delete-project.js +6 -5
- package/dist/slices/storage/files-location.js +6 -8
- package/dist/slices/storage/layout.js +13 -2
- package/dist/slices/storage/model.js +3 -0
- package/dist/slices/storage/portable.js +16 -11
- package/dist/slices/storage/schema.js +2 -0
- package/dist/slices/storage/staging-refs.js +2 -1
- package/dist/slices/storage/staging.js +6 -9
- package/dist/slices/storage/trim.js +10 -3
- package/dist/slices/studio/calendar.js +4 -1
- package/dist/slices/studio/pick.js +2 -11
- package/dist/slices/studio/plan.js +6 -15
- package/dist/slices/studio/queue.js +3 -14
- package/dist/slices/studio/releases.js +26 -0
- package/dist/slices/studio/settings.js +14 -51
- package/dist/slices/studio/videos.js +12 -0
- package/dist/slices/style-preview/render.js +34 -13
- package/dist/slices/style-preview/schema.js +13 -0
- package/dist/slices/style-preview/service.js +2 -1
- package/dist/slices/style-preview/settings.js +33 -5
- package/dist/slices/telemetry/collector-client.js +2 -4
- package/dist/slices/telemetry/flush.js +2 -4
- package/dist/slices/telemetry/model.js +0 -7
- package/dist/slices/telemetry/record.js +10 -3
- package/dist/slices/template-studio/anatomy-view.js +118 -0
- package/dist/slices/template-studio/anatomy.js +73 -0
- package/dist/slices/template-studio/bakeoff-make.js +225 -0
- package/dist/slices/template-studio/bakeoff-repo.js +83 -0
- package/dist/slices/template-studio/bakeoff.js +333 -0
- package/dist/slices/template-studio/budget.js +103 -0
- package/dist/slices/template-studio/checks.js +273 -0
- package/dist/slices/template-studio/document-sample.js +56 -0
- package/dist/slices/template-studio/edit.js +15 -0
- package/dist/slices/template-studio/for-all.js +161 -0
- package/dist/slices/template-studio/free-video.js +31 -0
- package/dist/slices/template-studio/free.js +176 -0
- package/dist/slices/template-studio/gate.js +40 -0
- package/dist/slices/template-studio/hidden.js +20 -0
- package/dist/slices/template-studio/jobs.js +79 -0
- package/dist/slices/template-studio/loudness.js +111 -0
- package/dist/slices/template-studio/make.js +40 -0
- package/dist/slices/template-studio/model.js +54 -0
- package/dist/slices/template-studio/pack-import.js +253 -0
- package/dist/slices/template-studio/pack-samples.js +60 -0
- package/dist/slices/template-studio/pack.js +205 -0
- package/dist/slices/template-studio/paid-view.js +66 -0
- package/dist/slices/template-studio/paid.js +348 -0
- package/dist/slices/template-studio/quote.js +148 -0
- package/dist/slices/template-studio/ready.js +104 -0
- package/dist/slices/template-studio/repo.js +134 -0
- package/dist/slices/template-studio/reviews-path.js +58 -0
- package/dist/slices/template-studio/runner.js +84 -0
- package/dist/slices/template-studio/save.js +236 -0
- package/dist/slices/template-studio/say-it-as.js +248 -0
- package/dist/slices/template-studio/schedule-gate.js +34 -0
- package/dist/slices/template-studio/schedule-price.js +30 -0
- package/dist/slices/template-studio/schedule-sample.js +87 -0
- package/dist/slices/template-studio/schema.js +218 -0
- package/dist/slices/template-studio/scope.js +124 -0
- package/dist/slices/template-studio/sections.js +176 -0
- package/dist/slices/template-studio/service.js +173 -0
- package/dist/slices/template-studio/status.js +174 -0
- package/dist/slices/template-studio/topic.js +223 -0
- package/dist/slices/trash/designs.js +76 -0
- package/dist/slices/trash/model.js +13 -4
- package/dist/slices/trash/service.js +52 -2
- package/dist/slices/tutorials/library.js +3 -2
- package/dist/slices/video/ass-text.js +17 -0
- package/dist/slices/video/audio-export.js +2 -64
- package/dist/slices/video/encoding.js +160 -0
- package/dist/slices/video/ffmpeg.js +23 -21
- package/dist/slices/video/figure-card.js +1 -15
- package/dist/slices/video/slideshow.js +43 -18
- package/dist/slices/voices/palette.js +0 -3
- package/dist/slices/youtube/answer.js +2 -15
- package/dist/slices/youtube/edits-repo.js +2 -11
- package/dist/tutorials/Agents-MCP.md +2 -1
- package/dist/tutorials/Assistant.md +42 -0
- package/dist/tutorials/Channels.md +2 -0
- package/dist/tutorials/Home-and-Projects.md +19 -0
- package/dist/tutorials/Install.md +1 -0
- package/dist/tutorials/Keywords-Slopify-Fills.md +87 -0
- package/dist/tutorials/Models.md +33 -1
- package/dist/tutorials/Notifications.md +6 -0
- package/dist/tutorials/Play-Images.md +4 -0
- package/dist/tutorials/Posting-to-Social-Sites.md +121 -0
- package/dist/tutorials/Prompts.md +10 -6
- package/dist/tutorials/Remote-Access.md +63 -0
- package/dist/tutorials/Reviews-and-Checkpoints.md +13 -2
- package/dist/tutorials/Schedules.md +21 -1
- package/dist/tutorials/Settings-Reference.md +50 -8
- package/dist/tutorials/Template-Studio.md +125 -0
- package/dist/tutorials/Templates.md +3 -0
- package/dist/tutorials/_Sidebar.md +5 -0
- package/dist/updater/work-in-progress.js +42 -12
- package/dist/web/assets/index-CkAI_2E7.css +1 -0
- package/dist/web/assets/index-DcD0cdfo.js +334 -0
- package/dist/web/assets/{pdf-T7MCwjIv.js → pdf-TODRwF31.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +5 -1
- package/dist/slices/article/provided-entries.js +0 -66
- package/dist/slices/article/run.js +0 -145
- package/dist/slices/images/run.js +0 -234
- package/dist/slices/narration/legacy-plan.js +0 -58
- package/dist/slices/narration/run.js +0 -270
- package/dist/slices/rebuild/runtime-actions.js +0 -90
- package/dist/slices/research/run.js +0 -224
- package/dist/slices/subtitles/prepare.js +0 -194
- package/dist/slices/subtitles/transcript.js +0 -34
- package/dist/slices/thumbnail/run.js +0 -219
- package/dist/slices/video/audio-inputs.js +0 -33
- package/dist/slices/video/reuse-audio.js +0 -62
- package/dist/slices/video/run.js +0 -78
- package/dist/slices/video/write-export.js +0 -158
- package/dist/slices/video/write-subtitles.js +0 -59
- package/dist/web/assets/index-BadsoORk.css +0 -1
- package/dist/web/assets/index-D8LqNsCl.js +0 -326
|
@@ -10,12 +10,13 @@ Every section of Settings, what each control does and its default. Sections with
|
|
|
10
10
|
|---|---|---|---|
|
|
11
11
|
| Connections | [Providers](#providers) | API keys, command-line tools, the system voice, health check | [Providers-and-Keys](Providers-and-Keys), [AI-CLIs](AI-CLIs) |
|
|
12
12
|
| Connections | [Voices](#voices) | Voice IDs for narration | [Providers-and-Keys](Providers-and-Keys#add-a-voice) |
|
|
13
|
-
| Connections | [Models](#models) | Model catalogue, retired models | [Models](Models) |
|
|
13
|
+
| Connections | [Models](#models) | Model catalogue, retired models, models that work for you | [Models](Models) |
|
|
14
14
|
| Connections | [Agents (MCP)](#agents-mcp) | The MCP address and setup lines for Claude Code and Codex, the last connection, what agents did | [Agents-MCP](Agents-MCP) |
|
|
15
|
-
| Production defaults | [Production defaults](#production-defaults) | Silence gap, volume levelling for new runs | This page |
|
|
15
|
+
| Production defaults | [Production defaults](#production-defaults) | Silence gap, volume levelling for new runs, the caption timing model, how this computer renders | This page |
|
|
16
|
+
| Production defaults | [Template studio](#template-studio) | The most a template's samples, and a designed piece template's, may spend in a day, and whether they may use CLI plans | This page |
|
|
16
17
|
| Notifications | [Notifications](#notifications) | Browser and phone notifications | [Notifications](Notifications) |
|
|
17
18
|
| Publishing | [Channel links](#channel-links) | A pointer to each channel's own links | [Channels](Channels#channel-links) |
|
|
18
|
-
| Publishing | [YouTube Studio](#youtube-studio) | Playlists per channel, the Studio extension's download and pairing | [Studio-Extension](Studio-Extension) |
|
|
19
|
+
| Publishing | [YouTube Studio and posting](#youtube-studio-and-posting) | Playlists per channel, the Studio extension's download and pairing | [Studio-Extension](Studio-Extension), [Posting-to-Social-Sites](Posting-to-Social-Sites) |
|
|
19
20
|
| Backup & storage | [Backup & storage](#backup--storage) | Your files folder, daily backups, export and import, disk space, samples | [Where-Your-Files-Live](Where-Your-Files-Live), [Backups](Backups) |
|
|
20
21
|
| Backup & storage | [Trash](#trash) | Deleted items, kept 30 days | [Trash](Trash) |
|
|
21
22
|
| General | [General](#general) | Light or dark, and starting Slopify when you log in | [Start-at-Login](Start-at-Login) |
|
|
@@ -51,6 +52,18 @@ You can also press `Ctrl+K` and run **Download diagnostics** from anywhere in Se
|
|
|
51
52
|
|
|
52
53
|
In Docker, this section only shows whether Docker starts at login ("Starts with Docker: yes / no / unknown"), when the installer checked, and where to change that. With Docker Desktop it names Docker Desktop's own setting: Docker Desktop → Settings → General → **Start Docker Desktop when you sign in to your computer**. Slopify starts whenever Docker does and never changes Docker's own settings. See [Start-at-Login](Start-at-Login).
|
|
53
54
|
|
|
55
|
+
### Remote access
|
|
56
|
+
|
|
57
|
+
"Open Slopify on your phone or laptop through Tailscale, only inside your tailnet." It is the second tab of **General**.
|
|
58
|
+
|
|
59
|
+
| Control | What it does | Default |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| **Open on my other devices (Tailscale)** | Has the Tailscale already on this computer serve Slopify's page at `https://<computer>.<tailnet>.ts.net`, reachable only from devices signed in to your tailnet. Shows the address with **Copy address** and a QR code. Uses Tailscale Serve, never Funnel. Turning it off removes only the serve setting Slopify added. | Off |
|
|
62
|
+
| **Use port 8443** | Shown when another Tailscale serve setting already uses HTTPS port 443: gives Slopify its own address on another port and leaves yours alone. | - |
|
|
63
|
+
| **Check again** | Asks Tailscale again after you fixed what the notice says. | - |
|
|
64
|
+
|
|
65
|
+
See [Remote-Access](Remote-Access).
|
|
66
|
+
|
|
54
67
|
## Providers
|
|
55
68
|
|
|
56
69
|
"Keys stay on this machine and go only to their provider. Readiness is checked again before each run."
|
|
@@ -97,6 +110,9 @@ See [Providers-and-Keys](Providers-and-Keys#add-a-voice).
|
|
|
97
110
|
| **Catalogue file**, **Verified**, **Last checked** | Where the file is, when its prices were verified, and what the last check changed. |
|
|
98
111
|
| **Switch to <model>** | Replaces one retired model choice with the suggestion shown. |
|
|
99
112
|
| **Switch all** | Replaces every retired choice that has a suggestion. |
|
|
113
|
+
| **Check models** (per provider) | Sends each of that provider's models one tiny request to learn whether it works for your key or CLI. When that costs money the price is shown first and nothing is sent until you confirm. See [Models](Models#models-that-work-for-you). |
|
|
114
|
+
| **Automatic checks** | **Free and near-free checks only** (default): free and sub-cent checks run by themselves when a key or CLI is added and weekly. **Off**: only when you choose Check models. See [Models](Models#automatic-checks). |
|
|
115
|
+
| **New for you**, **Dismiss** | Models that started working for you since the first check; Dismiss clears one, **Dismiss all** every one. |
|
|
100
116
|
|
|
101
117
|
Templates and schedules that pick a retired model are also flagged on their own rows, with the same **Switch to <model>**. See [Models](Models).
|
|
102
118
|
|
|
@@ -116,7 +132,7 @@ There is nothing to turn on: the address works whenever Slopify runs. See [Agent
|
|
|
116
132
|
|
|
117
133
|
## Production defaults
|
|
118
134
|
|
|
119
|
-
"How new runs pace the narration and level the volume,
|
|
135
|
+
"How new runs pace the narration and level the volume, which model times English captions, and how this computer renders."
|
|
120
136
|
|
|
121
137
|
### Silence between segments
|
|
122
138
|
|
|
@@ -144,6 +160,32 @@ The volume fields show only while the switch is on. A project keeps what it star
|
|
|
144
160
|
|
|
145
161
|
The chosen model downloads once, the first time captions are timed (or when Slopify starts, unless `SLOPIFY_NO_MODEL_PREFETCH` is set), and is kept in `<data folder>/models/english-subtitles/`. A model already downloaded stays there when you switch, so switching back costs nothing. Smallest can mishear a line and stop a run with "Subtitles stopped matching the audio" where the narration is fine. Changing the model never marks finished subtitles outdated, and a timing that is already running finishes with the model it started with; the next one uses the new choice. It is a setting of this computer, not of a project. Other languages use their own model and are not affected. Changes save as you make them.
|
|
146
162
|
|
|
163
|
+
### Rendering
|
|
164
|
+
|
|
165
|
+
How this computer encodes videos and shorts. Like the subtitle timing model, these belong to the computer, not a project: no project copies them, and changing them never marks anything outdated, because they change how a video is made, not what it is. A render reads them once as it starts; one already running finishes as it began. Changes save as you make them.
|
|
166
|
+
|
|
167
|
+
| Control | What it does | Default / range |
|
|
168
|
+
|---|---|---|
|
|
169
|
+
| **Video encoder** | What turns the frames into the finished file. **Processor (x264)** is the one every computer has. **NVIDIA graphics card (NVENC)** encodes on the card at its highest-quality settings (preset p7, tune hq, constant quality) and leaves the processor for the rest of the render. It is listed only when Slopify finds an ffmpeg with NVENC (its own, else the `ffmpeg` on your `PATH` or `/usr/bin/ffmpeg`) that passes a tiny test encode; otherwise the line under it says "No NVIDIA encoder found on this computer." | Processor (x264) |
|
|
170
|
+
| **Clip encoding** | How hard the processor works on each image's clip before the captions are burned in over them. **Thorough** is x264's medium preset; **Fast** is its veryfast preset at the same quality setting (CRF 16). Only the clips under burned-in captions change; the burned-in encode that makes the finished picture is the same. Has no effect with the NVIDIA encoder. | Thorough |
|
|
171
|
+
| **Render priority** | **Background (your other programs come first)** runs every ffmpeg of a video, short or audio export, its volume mastering included, below normal priority, and that of the style preview, Template Studio's free samples, designs and posts' pictures too (nice 10 on Linux and macOS, below-normal on Windows): your browser, games and other programs take the processor first and the render gets what is left. **Normal** competes with them as an equal. The finished video is the same either way. | Background |
|
|
172
|
+
|
|
173
|
+
What they cost and give, measured on two minutes of a real project with captions burned in (32-core processor, RTX 5080): **Fast** halved the clips' processor time and cut the whole render's by 30% (10 to 17% less waiting), for a slightly softer picture (0.9 VMAF less) at the same file size. **NVIDIA** cut the render's processor time by 80% and its waiting by a quarter (the zoom and pan on each image still runs on the processor), at about the same file size, but with a visibly softer picture than x264 (about 2.5 VMAF less): pick it when keeping the computer free matters more than the last bit of sharpness. **Background** makes no difference to the file at all.
|
|
174
|
+
|
|
175
|
+
If the NVIDIA encoder is chosen but stops working (a driver update, the card busy elsewhere), the render is made on the processor instead, never failed, and the video's section on the project page says: "This video was encoded on the processor because the NVIDIA graphics card encoder didn't work (…). Check the NVIDIA driver, or choose Processor (x264) in Settings → Production defaults → Video encoder." Slopify checks for the card once per start; restart Slopify after installing a driver or an ffmpeg with NVENC.
|
|
176
|
+
|
|
177
|
+
Agents read and change these with `get_settings` and `update_settings`, and check the card with `get_video_encoders`.
|
|
178
|
+
|
|
179
|
+
### Template studio
|
|
180
|
+
|
|
181
|
+
| Control | What it does | Default / range |
|
|
182
|
+
|---|---|---|
|
|
183
|
+
| **Daily sample budget** | The most a template's samples, **Compare models** and **Make samples for all** may spend in one day, in US dollars, counted from midnight on this computer. At $0.00 no sample spends money. Below it: what the samples spent today and what is left. Type an amount and choose **Save**. | $2.00, $0 to $1,000 |
|
|
184
|
+
| **Designed pieces: daily sample budget** | The most the samples of designed-piece templates (Library → Designs) may spend in one day, in US dollars, counted from midnight on this computer. It is separate from the budget above. Below it: what those samples spent today and what is left. Type an amount and choose **Save designed pieces' budget**. | $1.00, $0 to $1,000 |
|
|
185
|
+
| **Samples may use my CLI plans** | Whether those samples, designed pieces' included, may run steps on your Claude Code or Codex plan. Plan usage has no dollar price, so the budgets can't limit it: off, a sample with such a step waits; on, it runs on your plan whatever the budget. | Off |
|
|
186
|
+
|
|
187
|
+
A sample that would go over the budget is not made: the template's studio shows it **Waiting** with "this sample costs about $0.40 and $0.10 of today's $2.00 sample budget is left", and **Make sample** makes it once there is room again. A sample with a step on a CLI plan waits the same way while **Samples may use my CLI plans** is off. A designed piece template's sample over its own budget waits in the template's editor the same way, and **Make sample** makes it anyway. Only samples count; your projects and designed pieces never do.
|
|
188
|
+
|
|
147
189
|
## Notifications
|
|
148
190
|
|
|
149
191
|
"When a run finishes, fails, or waits for you."
|
|
@@ -162,9 +204,9 @@ Messages hold the project title and what happened, never your keys. See [Notific
|
|
|
162
204
|
|
|
163
205
|
Each channel now keeps its own links, on its **Brand** tab under **Channel links**. This section only says so, with **Open the default channel's links**. Links saved here in an earlier version still fill the default channel's descriptions until you save its Brand tab. See [Channels](Channels#channel-links) and [YouTube-Description](YouTube-Description).
|
|
164
206
|
|
|
165
|
-
## YouTube Studio
|
|
207
|
+
## YouTube Studio and posting
|
|
166
208
|
|
|
167
|
-
"The
|
|
209
|
+
"The playlist upload packs name, and the Studio extension's pairing for YouTube Studio and other sites."
|
|
168
210
|
|
|
169
211
|
| Control | What it does | Default / limit |
|
|
170
212
|
|---|---|---|
|
|
@@ -172,9 +214,9 @@ Each channel now keeps its own links, on its **Brand** tab under **Channel links
|
|
|
172
214
|
| **Playlists** | The YouTube playlists upload packs offer, each typed exactly as it is called in Studio. Pick **Every channel (default)** or one channel first: the default list is used by every channel without its own. **Add playlist** adds a row; **On by default** puts every project into it; **Remove** drops it; **Save playlists** stores the list. A project's **Prepare upload** changes which ones it goes into. | None; up to 20, each up to 150 characters |
|
|
173
215
|
| **Extension pairing token** | A secret the Slopify Studio extension needs before it may read your upload packs. **Copy** it into the extension's options and press Pair there. | |
|
|
174
216
|
| **New pairing token** | Makes a fresh token, unpairs the extension until you paste the new one, and clears the uploads waiting for Studio. | |
|
|
175
|
-
| **Install the Studio extension** | **Chrome, Edge, Brave** or **Firefox**, then **Download for Chrome** or **Download for Firefox**, with the three install steps. | |
|
|
217
|
+
| **Install the Studio extension** | **Chrome, Edge, Brave** or **Firefox**, then **Download for Chrome** or **Download for Firefox**, with the three install steps, and a line on allowing posting: to fill posts on X, LinkedIn, Instagram, TikTok, Reddit or Bluesky, press **Allow posting on** each site in the extension's options. | |
|
|
176
218
|
|
|
177
|
-
See [Studio-Extension](Studio-Extension)
|
|
219
|
+
See [Studio-Extension](Studio-Extension), [Publishing-to-YouTube](Publishing-to-YouTube) and [Posting-to-Social-Sites](Posting-to-Social-Sites).
|
|
178
220
|
|
|
179
221
|
## Backup & storage
|
|
180
222
|
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Template studio
|
|
2
|
+
|
|
3
|
+
The template studio is where a template is set up once, section by section, with a live sample beside every setting, then marked ready for its schedules. Each change you save is made again on a short hidden sample, so you see and hear what the next video will be like before a schedule spends anything on it.
|
|
4
|
+
|
|
5
|
+
**Where to find it:** **Library → Templates**, then **Open studio** on a template's row. Saving a setup as a template from Play or a project opens its studio too.
|
|
6
|
+
|
|
7
|
+
## The sections
|
|
8
|
+
|
|
9
|
+
The rail on the left lists the template's sections in the order a run makes them:
|
|
10
|
+
|
|
11
|
+
| Section | What it sets |
|
|
12
|
+
|---|---|
|
|
13
|
+
| **Subject & research** | The title pattern (`History: {{Topic}}`), keyword values, research on or off |
|
|
14
|
+
| **Script** | Written by AI or pasted, the text model, the article prompt, the expected length |
|
|
15
|
+
| **Voice** | The voice, the narration model, loudness, breaths and S sounds, pronunciations |
|
|
16
|
+
| **Pictures** | Made by AI, added by you or off; the picture model, image prompts, scenes |
|
|
17
|
+
| **Video & captions** | Format, captions, motion, seconds per picture, the Look |
|
|
18
|
+
| **Thumbnail & title** | How the thumbnail is made, one or three of them |
|
|
19
|
+
| **Shorts** | Shorts from the video, how many |
|
|
20
|
+
| **Document (PDF)** | A PDF made from the script, and its theme |
|
|
21
|
+
| **Reviews & checkpoints** | Automatic reviews and where a run waits for you |
|
|
22
|
+
| **Upload pack** | The YouTube description, chapters and tags, and the other sites the projects post to (**Post to**), each with its text and main media; hashtags, the thumbnail and the YouTube link are under Fine-tune. The sample shows each site's post as the site shows it. See [Posting to social sites](Posting-to-Social-Sites). |
|
|
23
|
+
| **Schedule** | The next five runs of each schedule that uses the template, and what they cost a month |
|
|
24
|
+
|
|
25
|
+
Each section shows two to four settings. Everything else is under **Fine-tune**, which holds Play's own editor for that section, so no setting is lost. **Made with OpenRouter · model · Change** says which provider makes the section; **Change** opens Fine-tune.
|
|
26
|
+
|
|
27
|
+
Each section's lamp says where its sample is: **Current** (made for this version), **Making**, **Waiting** (queued, or held with the reason), **Needs a fix** (the failed step's own sentence and the button that fixes it), **No current sample** (made for an older version, or none yet), **Off**, or **Provided** (you add the file in Play for each video, so there is no sample to make).
|
|
28
|
+
|
|
29
|
+
On a narrow window the studio shows **Sections · Settings · Sample** tabs instead of three columns.
|
|
30
|
+
|
|
31
|
+
## Samples
|
|
32
|
+
|
|
33
|
+
Two kinds of sample are made for each version.
|
|
34
|
+
|
|
35
|
+
**Free samples** are made on this computer and cost nothing: a 30-second clip in the template's frame, captions, Look and picture timing on Slopify's sample pictures; the loudness before and after; the PDF in the template's theme; and each schedule's cost a month. They are made by themselves when a version is opened.
|
|
36
|
+
|
|
37
|
+
**The paid sample** is a short taste of one video about the sample topic, made with your keys on a hidden project that never appears in Projects, Home, the calendar, usage or anywhere else:
|
|
38
|
+
|
|
39
|
+
- the outline and chapter 1 of the script (or the full script, see below),
|
|
40
|
+
- about 30 seconds of narration,
|
|
41
|
+
- up to 4 pictures, 1 thumbnail and 1 short,
|
|
42
|
+
- no checkpoints; an agent's reviews are not asked.
|
|
43
|
+
|
|
44
|
+
After the first one, a Save makes again only what the change outdates. Work already going is never stopped: a newer Save waits for it.
|
|
45
|
+
|
|
46
|
+
### Sample topic
|
|
47
|
+
|
|
48
|
+
The chip in the header, **Sample topic: The history of the lighthouse**, is what every sample is about. Press it to type another, take the next topic a schedule has queued, or go back to the fixed one. A new topic makes every sample again and is priced on **Use topic**; going back to the fixed one is free.
|
|
49
|
+
|
|
50
|
+
### Write the full script in the sample
|
|
51
|
+
|
|
52
|
+
Under **Script**, **Write the full script in the sample** has the sample write the whole script instead of the outline and chapter 1, priced on the switch. Only the script and what is made from it are made again. Your videos always get the full script.
|
|
53
|
+
|
|
54
|
+
### Say it as
|
|
55
|
+
|
|
56
|
+
Under **Voice**, **Say it as** lists the names the sample's script says that a voice may get wrong, each with the line it is in. **Play** one to hear it, type how it should be said and press **Save**: that writes a Library → Narration aliases row (used by every project started after it) and voices again only the sample's lines that say it, priced on the button. **Another word to check** adds a name of your own.
|
|
57
|
+
|
|
58
|
+
### Prompt anatomy
|
|
59
|
+
|
|
60
|
+
**Prompt anatomy** under a section's settings cuts the prompt the sample sent into who wrote each part: your own words, your keywords' values, what Slopify filled in (such as the sample's "outline and chapter 1 only" instruction) and what settings added.
|
|
61
|
+
|
|
62
|
+
## Budget and prices
|
|
63
|
+
|
|
64
|
+
Every paid sample is priced before anything is spent:
|
|
65
|
+
|
|
66
|
+
- **Save** says what it costs, for example **Save · about $0.12**, or **Save · plan usage** when only a CLI plan is used. **Save without a sample** saves and makes only the free samples.
|
|
67
|
+
- A sample that costs more than a quarter more (plus five cents) than the price you saw, or has a step with no known price you didn't accept, waits instead of starting, with the new price on **Make sample**.
|
|
68
|
+
- **Settings → Template studio → Daily sample budget** is the most the studio may spend in one day ($2.00 by default). A sample past it waits until the next day or a higher budget. What a removed sample or a discarded comparison was charged today still counts. See [Settings-Reference](Settings-Reference#template-studio).
|
|
69
|
+
|
|
70
|
+
**Make samples for all** in Settings → Template studio prices the samples of every template that needs one, together, and queues the ones that fit today's budget.
|
|
71
|
+
|
|
72
|
+
## Mark ready
|
|
73
|
+
|
|
74
|
+
Until you mark a version of a template ready for the first time, its schedules run its newest version, checked or not, as they always did, and the header says **Not checked in the studio: schedules run the newest version**. Pressing **Mark ready** once turns the check on for that template: from then on a schedule runs only a version marked ready (or one saved before the studio existed, or one Slopify carried over), and every version you save later waits for **Mark ready**.
|
|
75
|
+
|
|
76
|
+
**Mark ready** in the header is greyed, with the reason, until:
|
|
77
|
+
|
|
78
|
+
- every free check passes: keywords are filled, the providers are set up, the narration's voice is one of yours (Settings → Voices), each run has release times, the monthly cost is known, and someone answers each checkpoint (a notification address, or an agent seen in the last week),
|
|
79
|
+
- and every section's sample is current, off or provided.
|
|
80
|
+
|
|
81
|
+
Each failing check names what is wrong with a button to the place it is fixed. Once marked, schedules run that version from their next run. Saving again makes a new version that waits to be marked ready; until then the schedules keep running the one marked ready, and the header says **Not checked in the studio · schedules run version 6**.
|
|
82
|
+
|
|
83
|
+
When Slopify changes a template itself (a retired model switched in Settings → Models, a restore from the trash under a new name), the new version keeps the ready mark of the one it came from, and its changed sections say who made the change. A retired model is switched in the version your schedules run too, even while a newer version waits to be marked ready.
|
|
84
|
+
|
|
85
|
+
## Compare models
|
|
86
|
+
|
|
87
|
+
**Compare models**, beside the model of **Script**, **Voice** or **Pictures**, makes that section's sample again with one or two other models, each on a hidden copy of the sample, so you can compare what each one makes, what it was charged and how long it took, beside the model the template uses now.
|
|
88
|
+
|
|
89
|
+
1. Save first: models are compared on the saved version's sample, so it must be current.
|
|
90
|
+
2. Press **Compare models** and pick one or two models. The list shows the models that work for your key or CLI first. Voice models are compared within the template's voice provider, because a voice is chosen per provider.
|
|
91
|
+
3. The drawer prices it, for example **Compare · about $0.04**, and shows what is left of today's budget. Press it to start.
|
|
92
|
+
4. **Compared models** lists each model with **Made · $0.008 charged · 12 s** and what it made (the script's opening, the narration, the pictures).
|
|
93
|
+
5. **Use this model** switches the section to that model and discards the copies; press **Save** to make the template's own sample with it, at the price on the button. **Discard** removes the copies without changing anything.
|
|
94
|
+
|
|
95
|
+
Only the section's own work runs on each copy. A comparison is held, spending nothing, on the same rules as a sample (a higher price, an unknown price you didn't accept, past today's budget), and a Save made before it starts takes its place. Work already going is never stopped, so **Discard** waits until it finishes.
|
|
96
|
+
|
|
97
|
+
**Settings → Models → New for you** has **Compare on a sample** on each new model: pick a template and its studio opens with Compare models ready for that model.
|
|
98
|
+
|
|
99
|
+
## Template packs
|
|
100
|
+
|
|
101
|
+
A template pack is a template as one .zip file, to share with someone else or move to another computer.
|
|
102
|
+
|
|
103
|
+
**Export pack** in the studio's header saves the version marked ready (the button says which when a newer one waits): its prompts' and intros' text as your Library has them now, the voice it picks, the Look, the PDF theme, and its sample's thumbnail, up to four pictures and its narration. No key, login or other file of yours goes in; a template whose text looks like a key is refused, with where to remove it. A template with no version marked ready (and none saved before the studio) can't be exported yet.
|
|
104
|
+
|
|
105
|
+
**Import template pack** on Library → Templates makes a new template from a pack:
|
|
106
|
+
|
|
107
|
+
- Its prompts and intros join your Library. One whose name your Library already uses for other text comes in as "name (2)", and the template uses that one.
|
|
108
|
+
- Its voice is used as it is. When Settings → Voices has no voice with that ID, the studio's Voice check says so: add the voice there under that ID, or choose one of yours.
|
|
109
|
+
- It opens in its studio with **Samples from the pack**, what the person who exported it got, until your own samples are made.
|
|
110
|
+
- It is not checked in the studio yet: look it over and press **Mark ready**.
|
|
111
|
+
|
|
112
|
+
A file larger than 30 MB, one that isn't a pack, one made by a newer Slopify, or one holding anything that looks like a key is refused, and nothing is imported.
|
|
113
|
+
|
|
114
|
+
## Design templates
|
|
115
|
+
|
|
116
|
+
Design templates (posters, flyers and other designed pieces) are listed on Library → Templates below the project templates, each with **Open studio**. Their studio has four sections, **Picture**, **Text layout**, **Formats** and **Schedule**, with the same rail of lamps, a live sample and Mark ready. See [Templates](Templates).
|
|
117
|
+
|
|
118
|
+
## Related pages
|
|
119
|
+
|
|
120
|
+
- [Templates](Templates)
|
|
121
|
+
- [Schedules](Schedules)
|
|
122
|
+
- [Models](Models)
|
|
123
|
+
- [Costs and run cost](Costs-and-Run-Cost)
|
|
124
|
+
- [Narration aliases and glossary](Narration-Aliases-and-Glossary)
|
|
125
|
+
- [Settings reference](Settings-Reference#template-studio)
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
A template is a saved Play setup: prompts, voice, images, style, outputs, reviews and checkpoints, under a name. Pick it on Play, type a topic, and the video is set up the way you like it. Schedules run templates too, so a template is also the recipe every scheduled video follows.
|
|
4
4
|
|
|
5
|
+
Set a template up section by section, with a live sample beside every setting, in its [Template studio](Template-Studio): **Open studio** on its row.
|
|
6
|
+
|
|
5
7
|
**Where to find it:** **Library → Templates**. You also pick templates at the top of **Play**, save them from Play's right rail or a project's **More** menu, and move them between channels on a channel's **Templates** tab.
|
|
6
8
|
|
|
7
9
|
## What a template keeps
|
|
@@ -139,6 +141,7 @@ Adding a pack twice changes nothing, and a pack never replaces a prompt or templ
|
|
|
139
141
|
|
|
140
142
|
## Related pages
|
|
141
143
|
|
|
144
|
+
- [Template studio](Template-Studio)
|
|
142
145
|
- [Play overview](Play-Overview)
|
|
143
146
|
- [Schedules](Schedules)
|
|
144
147
|
- [Channels](Channels)
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
- [Home and Projects](Home-and-Projects)
|
|
9
9
|
- [Where your files live](Where-Your-Files-Live)
|
|
10
10
|
- [Start at login](Start-at-Login)
|
|
11
|
+
- [Remote access](Remote-Access)
|
|
11
12
|
- [Updating and patch notes](Updating-and-Patch-Notes)
|
|
12
13
|
- [Uninstalling and moving](Uninstalling-and-Moving)
|
|
13
14
|
|
|
@@ -43,12 +44,15 @@
|
|
|
43
44
|
**Publishing**
|
|
44
45
|
- [Publishing to YouTube](Publishing-to-YouTube)
|
|
45
46
|
- [Studio extension](Studio-Extension)
|
|
47
|
+
- [Posting to social sites](Posting-to-Social-Sites)
|
|
46
48
|
|
|
47
49
|
**Automation**
|
|
48
50
|
- [Templates](Templates)
|
|
51
|
+
- [Template studio](Template-Studio)
|
|
49
52
|
- [Schedules](Schedules)
|
|
50
53
|
- [Calendar](Calendar)
|
|
51
54
|
- [Notifications](Notifications)
|
|
55
|
+
- [Assistant](Assistant)
|
|
52
56
|
- [Agents (MCP)](Agents-MCP)
|
|
53
57
|
- [Backups](Backups)
|
|
54
58
|
|
|
@@ -59,6 +63,7 @@
|
|
|
59
63
|
**Library**
|
|
60
64
|
- [Library overview](Library-Overview)
|
|
61
65
|
- [Prompts](Prompts)
|
|
66
|
+
- [Keywords Slopify fills](Keywords-Slopify-Fills)
|
|
62
67
|
- [Intros and outros](Intros-and-Outros)
|
|
63
68
|
- [Aliases and glossary](Narration-Aliases-and-Glossary)
|
|
64
69
|
- [Document themes](Document-Themes)
|
|
@@ -1,50 +1,57 @@
|
|
|
1
1
|
import { derive } from "../kernel/runner/graph.js";
|
|
2
2
|
import { projectPaused, stagesOf } from "../slices/admission/repo.js";
|
|
3
|
+
import { sampleOwner } from "../slices/template-studio/repo.js";
|
|
3
4
|
// A scheduled run this close is treated as running: a restart then could land on its time,
|
|
4
5
|
// and a schedule that skips missed runs would skip it.
|
|
5
6
|
export const scheduledSoonMs = 10 * 60_000;
|
|
6
7
|
// What an update must wait for, named for "installs when … finishes"; undefined when nothing
|
|
7
8
|
// is. An update never installs while a job is going: a step running or about to run, a step
|
|
8
9
|
// waiting to try again, a batch with videos still to make, a narration chunk about to be
|
|
9
|
-
// recorded again, a schedule writing topics or due to start a run
|
|
10
|
-
|
|
10
|
+
// recorded again, a schedule writing topics or due to start a run, a picture being made, and
|
|
11
|
+
// what `live` names (model checks, an assistant answer). A template studio's hidden sample is
|
|
12
|
+
// named as the studio's, never by its own title.
|
|
13
|
+
export function workInProgress(db, inflight, now, live) {
|
|
11
14
|
const projects = db
|
|
12
15
|
.prepare("SELECT id, title FROM projects WHERE id NOT IN (SELECT project_id FROM project_trash)")
|
|
13
16
|
.all()
|
|
14
17
|
.flatMap((row) => typeof row.id === "string" && typeof row.title === "string"
|
|
15
18
|
? [{ id: row.id, title: row.title }]
|
|
16
19
|
: []);
|
|
20
|
+
const nameOf = (project) => {
|
|
21
|
+
const owner = sampleOwner(db, project.id);
|
|
22
|
+
return owner === undefined ? project.title : `the studio sample of ${owner.name}`;
|
|
23
|
+
};
|
|
17
24
|
for (const project of projects) {
|
|
18
25
|
if (inflight(project.id))
|
|
19
|
-
return project
|
|
26
|
+
return nameOf(project);
|
|
20
27
|
if (projectPaused(db, project.id))
|
|
21
28
|
continue;
|
|
22
29
|
// Running, or waiting to try a step again (`derive`); or between two steps, with work
|
|
23
30
|
// admitted and free to start. Work held for a person (a review checkpoint) doesn't count.
|
|
24
31
|
const state = derive(stagesOf(db, project.id));
|
|
25
32
|
if (state === "running")
|
|
26
|
-
return project
|
|
33
|
+
return nameOf(project);
|
|
27
34
|
if (state === "pending" &&
|
|
28
35
|
db
|
|
29
36
|
.prepare("SELECT 1 FROM revision_work WHERE project_id=? AND state IN ('pending','running') AND dispatch_state='allowed' LIMIT 1")
|
|
30
37
|
.get(project.id) !== undefined)
|
|
31
|
-
return project
|
|
38
|
+
return nameOf(project);
|
|
32
39
|
}
|
|
33
40
|
const queued = db
|
|
34
|
-
.prepare(`SELECT p.title FROM project_queue q JOIN projects p ON p.id=q.project_id
|
|
41
|
+
.prepare(`SELECT p.id, p.title FROM project_queue q JOIN projects p ON p.id=q.project_id
|
|
35
42
|
WHERE q.state IN ('queued','active')
|
|
36
43
|
AND q.project_id NOT IN (SELECT project_id FROM project_trash)
|
|
37
44
|
AND q.project_id NOT IN (SELECT project_id FROM project_controls WHERE paused=1)
|
|
38
45
|
LIMIT 1`)
|
|
39
46
|
.get();
|
|
40
|
-
if (typeof queued?.title === "string")
|
|
41
|
-
return queued.title;
|
|
47
|
+
if (typeof queued?.id === "string" && typeof queued.title === "string")
|
|
48
|
+
return nameOf({ id: queued.id, title: queued.title });
|
|
42
49
|
const retry = db
|
|
43
|
-
.prepare(`SELECT p.title FROM narration_retries r JOIN projects p ON p.id=r.project_id
|
|
50
|
+
.prepare(`SELECT p.id, p.title FROM narration_retries r JOIN projects p ON p.id=r.project_id
|
|
44
51
|
WHERE r.state='pending' LIMIT 1`)
|
|
45
52
|
.get();
|
|
46
|
-
if (typeof retry?.title === "string")
|
|
47
|
-
return retry.title;
|
|
53
|
+
if (typeof retry?.id === "string" && typeof retry.title === "string")
|
|
54
|
+
return nameOf({ id: retry.id, title: retry.title });
|
|
48
55
|
const schedule = db
|
|
49
56
|
.prepare(`SELECT name FROM schedules WHERE deleted_at IS NULL AND (
|
|
50
57
|
(status='active' AND next_run_at IS NOT NULL AND next_run_at <= ?)
|
|
@@ -55,5 +62,28 @@ export function workInProgress(db, inflight, now) {
|
|
|
55
62
|
.get(new Date(now + scheduledSoonMs).toISOString());
|
|
56
63
|
if (typeof schedule?.name === "string")
|
|
57
64
|
return schedule.name;
|
|
58
|
-
|
|
65
|
+
// A paid picture call, or a design template's sample, still being made.
|
|
66
|
+
const picture = db
|
|
67
|
+
.prepare(`SELECT d.name AS name, r.name AS template FROM designs d
|
|
68
|
+
LEFT JOIN design_templates t ON t.id=d.sample_of
|
|
69
|
+
LEFT JOIN design_template_revisions r ON r.template_id=t.id AND r.version=t.head_version
|
|
70
|
+
WHERE d.id IN (SELECT design_id FROM design_steps WHERE state='making')
|
|
71
|
+
OR d.id IN (SELECT design_id FROM design_template_samples WHERE state='making')
|
|
72
|
+
LIMIT 1`)
|
|
73
|
+
.get();
|
|
74
|
+
if (picture !== undefined) {
|
|
75
|
+
if (typeof picture.template === "string")
|
|
76
|
+
return `the studio sample of ${picture.template}`;
|
|
77
|
+
if (typeof picture.name === "string")
|
|
78
|
+
return picture.name;
|
|
79
|
+
}
|
|
80
|
+
const sample = db
|
|
81
|
+
.prepare(`SELECT r.name AS name FROM design_template_samples s
|
|
82
|
+
JOIN design_templates t ON t.id=s.template_id
|
|
83
|
+
JOIN design_template_revisions r ON r.template_id=t.id AND r.version=t.head_version
|
|
84
|
+
WHERE s.state='making' LIMIT 1`)
|
|
85
|
+
.get();
|
|
86
|
+
if (typeof sample?.name === "string")
|
|
87
|
+
return `the studio sample of ${sample.name}`;
|
|
88
|
+
return live?.();
|
|
59
89
|
}
|