@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
|
@@ -79,6 +79,25 @@ Time left comes from the step's own pace once it has counted something, otherwis
|
|
|
79
79
|
|
|
80
80
|
The schedule runs due in the next 7 days, with the template and topic each will use, up to 6. Paused schedules show too. **Calendar** opens the calendar to plan or move runs. With none it says **No scheduled runs this week. Plan some on the calendar.** See [Calendar](Calendar).
|
|
81
81
|
|
|
82
|
+
### Autopilot
|
|
83
|
+
|
|
84
|
+
At the top of **Coming up**, one line says how far ahead you are: "9 days of content ready · the queue runs dry on Oct 30". Each run a schedule will make in the next 60 days is a slot; a run made ahead (Prepare) fills its own slot, and each finished video not uploaded yet fills the next empty one. The days count to the first slot nothing fills ("60+" when all of them are filled). **Runs dry** is the first run that will have no topic: the run after a queue's last topic when the schedule doesn't find its own, the first run past the approved topics when new ones wait for approval, and never for a schedule that finds topics by itself unless finding them fails. Paused schedules count for neither, and neither do runs a schedule skips because its template has no version marked ready.
|
|
85
|
+
|
|
86
|
+
Below it, warnings name what may stop the schedules before it does, each with the button that opens the fix and **Hide** (hidden for 7 days, or until it changes):
|
|
87
|
+
|
|
88
|
+
| Warning | Fix |
|
|
89
|
+
| --- | --- |
|
|
90
|
+
| A CLI a scheduled template uses is signed out | Settings → Providers |
|
|
91
|
+
| A CLI plan is at 80% of its weekly or 5-hour limit | Settings → Usage |
|
|
92
|
+
| The OpenRouter key has less than 20% of its spending limit left | Settings → Providers |
|
|
93
|
+
| Less than 5 GB, or less than 10%, of the disk is free | Settings → Backup & storage |
|
|
94
|
+
| A schedule that doesn't find topics has 1 or 2 left | The schedule |
|
|
95
|
+
| A schedule's topic generation keeps failing | The schedule |
|
|
96
|
+
| A scheduled template or schedule uses a model that is retiring or gone | Templates, or the schedule |
|
|
97
|
+
| A schedule skips its runs because its template has no version marked ready | Templates (Open studio, then Mark ready) |
|
|
98
|
+
|
|
99
|
+
Sign-ins, the OpenRouter key and the disk are checked hourly, the first time 30 seconds after Slopify starts; Home shows the last check and never waits for one. Only the CLIs a scheduled template uses are asked, and asking never starts a run. **Last 7 days**, folded, lists what was made, each failed step with a link to its project, and what it cost. Settings → Notifications → **Weekly report** sends the same to your phone each Monday (see [Notifications](Notifications#weekly-report)).
|
|
100
|
+
|
|
82
101
|
### This week
|
|
83
102
|
|
|
84
103
|
Since Monday, for the picked channel:
|
|
@@ -72,6 +72,7 @@ A flag beats the environment variable, and the variable beats the default.
|
|
|
72
72
|
| `--autostart` / `--no-autostart` | | asks once | Turns [Start at Login](Start-at-Login) on or off without asking. Useful in scripts. |
|
|
73
73
|
| | `SLOPIFY_FFMPEG` | the bundled ffmpeg | The full path of another ffmpeg to use. |
|
|
74
74
|
| | `SLOPIFY_NO_MODEL_PREFETCH` | downloads at start | Set to `1` to skip fetching the caption model (the one chosen in Settings → Production defaults, 378 MB by default) when Slopify starts. It is then fetched the first time a video needs captions. |
|
|
75
|
+
| | `SLOPIFY_ALLOWED_HOSTS` | loopback, IP addresses, this computer's name | Slopify answers only requests addressed to `localhost`, an IP address, the address it listens on, this computer's own name or a Tailscale address, so a web page can't reach it through your browser by pointing its own name at your computer. If you open Slopify by another name on purpose, list it here, comma-separated (for example `slopify.lan`); behind a reverse proxy on this computer that is the name in the browser's address bar, which the proxy passes on as `X-Forwarded-Host`. |
|
|
75
76
|
|
|
76
77
|
Options that only work with `--docker`: `--projects-dir <folder>`, `--host-cli=off` and `--accept-host-cli`. See [Docker](Docker). With `--docker`, `--host` and `--data-dir` are refused, because the Docker version always listens on localhost and keeps its data in a Docker volume.
|
|
77
78
|
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Keywords Slopify fills
|
|
2
|
+
|
|
3
|
+
Most `{{keywords}}` in a prompt are yours: each becomes a field on Play that you fill in once per video. The keywords on this page are different. Slopify fills them itself, so they never become fields, and each one is written with the `Slopify_` prefix, like `{{Slopify_Title}}` or `{{Slopify_Thumbnail_Text}}`.
|
|
4
|
+
|
|
5
|
+
The whole `Slopify_` prefix is Slopify's. `{{Title}}`, `{{Channel}}` and `{{Date}}` stay ordinary keywords of your own, so no prompt you already have changes meaning.
|
|
6
|
+
|
|
7
|
+
In the prompt editor, the **Insert** bar above the text lists the keywords the prompt's kind can use; click one to put it where the cursor is. Hover a keyword in the bar or in the text to see what it fills in, an example, when it exists, which prompts can use it and what it costs.
|
|
8
|
+
|
|
9
|
+
## How they work
|
|
10
|
+
|
|
11
|
+
- **Using a keyword turns on what fills it.** There is no switch to find: `{{Slopify_Summary}}` in a prompt adds the keyword digest to the run, `{{Slopify_Setting}}` adds the scenes call.
|
|
12
|
+
- **A line with nothing to fill is left out.** A `Series: {{Slopify_Series}}` line disappears when the channel has no series brief, and so does a `Next: {{Slopify_Next_Video}}` line when nothing is planned after this video.
|
|
13
|
+
- **Your own value wins.** A prompt saved before the prefix was reserved may already have a field named, say, `{{Slopify_Title}}`. When the project has a value for it, that value is used.
|
|
14
|
+
- **Each keyword works only where it can be filled.** `{{Slopify_Chapters}}` and `{{Slopify_Summary}}` can't be used in the Article prompt: the article isn't written yet when that prompt runs. The editor marks a misuse in place and Play refuses the run, naming the prompt and where the keyword works.
|
|
15
|
+
- **No keyword goes in the project title.** Slopify fills several of them from the title.
|
|
16
|
+
- **An unknown `Slopify_` name is refused when you save a prompt.** Rename it, for example `{{Slopify_Wish}}` to `{{Wish}}`. A prompt that already had such a name saves as it was and keeps asking for its value.
|
|
17
|
+
|
|
18
|
+
## Facts Slopify already has
|
|
19
|
+
|
|
20
|
+
Free: no AI call. Copied when the run starts, so later changes to the channel or its other videos never change a project already made. In **Edit project → Prompts**, **Refresh keyword facts** copies them again.
|
|
21
|
+
|
|
22
|
+
| Keyword | Fills in | Example | Works in |
|
|
23
|
+
| --- | --- | --- | --- |
|
|
24
|
+
| `{{Slopify_Title}}` | The video's title, with its keywords filled in | How Lighthouses Were Built on Bare Rock | Every prompt and entry |
|
|
25
|
+
| `{{Slopify_Channel}}` | The project's channel name | Quiet Histories | Every prompt and entry |
|
|
26
|
+
| `{{Slopify_Series}}` | The channel's series brief (Channels → Edit) | Calm histories of how things were made | Every prompt and entry |
|
|
27
|
+
| `{{Slopify_Links}}` | The channel's links, one per line | Website: https://example.com | Every prompt and entry |
|
|
28
|
+
| `{{Slopify_Previous_Video}}` | Title and link of the channel's previous video in the same series | The Canal Age – https://youtu.be/abc123 | Every prompt and entry |
|
|
29
|
+
| `{{Slopify_Next_Video}}` | Title of the next planned video in the same series and posting plan line | Tea Clippers and the Race Home | Every prompt and entry |
|
|
30
|
+
| `{{Slopify_Episode}}` | This video's number in its series on the channel | 7 | Every prompt and entry |
|
|
31
|
+
| `{{Slopify_Cast}}` | The channel's cast members with their descriptions | Mira: a keeper's daughter who kept the logbook | Every prompt and entry |
|
|
32
|
+
| `{{Slopify_Covered_Before}}` | The titles the channel already made, so the article avoids repeating them | The Canal Age | Every prompt and entry |
|
|
33
|
+
| `{{Slopify_Brand}}` | The brand kit's caption and title colours and font names | Colours: #F5C542. Fonts: Barlow. | Image and Thumbnail prompts |
|
|
34
|
+
| `{{Slopify_Release_Date}}` | The release date from the posting plan, read when the step runs | Thursday 22 October 2026 | Every prompt and entry |
|
|
35
|
+
| `{{Slopify_Chapters}}` | The article's chapter titles, one per line | The first lamps | Every prompt except Article and Script |
|
|
36
|
+
| `{{Slopify_Duration}}` | The finished video's length | 42 min 10 s | Description, Shorts, Review and Post prompts |
|
|
37
|
+
|
|
38
|
+
- In a **Description** prompt, `{{Slopify_Links}}`, `{{Slopify_Previous_Video}}` and `{{Slopify_Next_Video}}` stay links the description fills when it is shown or copied (`{{Previous video}}`, `{{Next video}}`, `{{Patreon}}`…), so changing a link changes every description at once. See [YouTube description](YouTube-Description).
|
|
39
|
+
- Moving the release date later never remakes anything, and neither does a new length.
|
|
40
|
+
- A brand-kit font installed on the computer (not uploaded to Slopify) is left out of `{{Slopify_Brand}}`.
|
|
41
|
+
- A **Text** intro or outro is narrated as written, so it can't say `{{Slopify_Release_Date}}`: set its Mode to **LLM**, which writes it as a request to the AI model.
|
|
42
|
+
|
|
43
|
+
## Written from the article
|
|
44
|
+
|
|
45
|
+
One shared AI call per run, the **keyword digest**, writes every one of these the run uses, once the article exists. It uses the project's text model and shows in the cost estimate as **Keyword digest**.
|
|
46
|
+
|
|
47
|
+
| Keyword | Fills in | Example | Works in |
|
|
48
|
+
| --- | --- | --- | --- |
|
|
49
|
+
| `{{Slopify_Summary}}` | Two or three sentences on what the video covers | How engineers raised towers on rocks the sea covered twice a day | Image, Thumbnail, Description, Shorts, Review and Post prompts |
|
|
50
|
+
| `{{Slopify_Hook}}` | The video's most click-worthy idea | The rock was under water half of every day. They built on it anyway. | The same |
|
|
51
|
+
| `{{Slopify_Thumbnail_Text}}` | Two to four words to put on the thumbnail | BUILT UNDER WATER | The same |
|
|
52
|
+
| `{{Slopify_Key_Facts}}` | Three to five striking facts, one per line | The tower stands 35 metres high. | The same |
|
|
53
|
+
| `{{Slopify_Quote}}` | One quotable line | A light is only as good as the person who keeps it. | The same |
|
|
54
|
+
| `{{Slopify_Tags}}` | Search terms, separated by commas | lighthouses, engineering history, maritime history | The same |
|
|
55
|
+
|
|
56
|
+
With **Article** set to Off these can't be used: there is no article to write them from.
|
|
57
|
+
|
|
58
|
+
## Per picture
|
|
59
|
+
|
|
60
|
+
Written for each picture by one AI call that reads the article, like the scenes of [Scenes from the article](Play-Images#scenes-from-the-article).
|
|
61
|
+
|
|
62
|
+
| Keyword | Fills in | Example | Works in |
|
|
63
|
+
| --- | --- | --- | --- |
|
|
64
|
+
| `{{Slopify_Scene}}` | What this picture shows: a moment of the article | A keeper climbs the spiral stair at dusk | Image and Thumbnail prompts |
|
|
65
|
+
| `{{Slopify_Setting}}` | The era and place of that moment, so the picture stays period-correct | A rocky Scottish coast, early 19th century | Image and Thumbnail prompts |
|
|
66
|
+
| `{{Slopify_Mood}}` | The feeling of that moment, for light and colour | tense | Image and Thumbnail prompts |
|
|
67
|
+
| `{{Slopify_Appearance}}` | How the video's subject and the characters in the picture look, looked up on the web | Mira: a wool coat and oilskin hat, a brass lamp | Image and Thumbnail prompts |
|
|
68
|
+
|
|
69
|
+
- `{{Slopify_Scene}}`, `{{Slopify_Setting}}` and `{{Slopify_Mood}}` turn scenes on for the picture whose prompt uses them, even with Images → **Scenes from the article** off. That costs one AI call per run, shared by every picture.
|
|
70
|
+
- `{{Slopify_Appearance}}` costs one AI call per run with web search, shared by every picture.
|
|
71
|
+
- In the shorts' image prompt, a line with a scene, setting or mood keyword is left out: each short's images already show what is said at that moment.
|
|
72
|
+
|
|
73
|
+
## Old names
|
|
74
|
+
|
|
75
|
+
`{{Scene}}` and `{{Appearance}}` are the old names of `{{Slopify_Scene}}` and `{{Slopify_Appearance}}`, and they keep working:
|
|
76
|
+
|
|
77
|
+
- `{{Appearance}}` means exactly the same as `{{Slopify_Appearance}}`.
|
|
78
|
+
- `{{Scene}}` still follows the Images switch: with **Scenes from the article** off, its line is left out. `{{Slopify_Scene}}` turns scenes on by itself.
|
|
79
|
+
|
|
80
|
+
The editor offers **Update to new names** on a prompt that still uses them. Renaming `{{Appearance}}` changes nothing else. Renaming `{{Scene}}` is its own button, because the picture then gets its scene even with the switch off, which adds one AI call per run.
|
|
81
|
+
|
|
82
|
+
## Related pages
|
|
83
|
+
|
|
84
|
+
- [Prompts](Prompts)
|
|
85
|
+
- [Images](Play-Images)
|
|
86
|
+
- [YouTube description](YouTube-Description)
|
|
87
|
+
- [Editing a project](Editing-a-Project)
|
package/dist/tutorials/Models.md
CHANGED
|
@@ -91,7 +91,7 @@ To switch:
|
|
|
91
91
|
|
|
92
92
|
What a switch does:
|
|
93
93
|
|
|
94
|
-
- A template gets a new saved version, and the schedules that ran its latest version move along with it.
|
|
94
|
+
- A template gets a new saved version, and the schedules that ran its latest version move along with it. When its newest version waits to be marked ready in the [Template studio](Template-Studio#mark-ready) and the schedules run an older one, that older version is switched too (as a new version that keeps its ready mark), so no schedule keeps running the retired model; your newer version stays the newest, switched as well.
|
|
95
95
|
- A project gets a new saved version, as **Edit project** would make.
|
|
96
96
|
- A draft is updated in place.
|
|
97
97
|
|
|
@@ -113,10 +113,42 @@ You don't have to come here to see it: a template or schedule that picks a retir
|
|
|
113
113
|
|
|
114
114
|
If a run starts a step whose model is no longer in the list, it stops with a message such as "The chosen … model is no longer in Slopify's model list." Open the project, choose **Edit project**, change the model under Providers, then use **Continue the run**. See [Recovery-and-Retries](Recovery-and-Retries).
|
|
115
115
|
|
|
116
|
+
## Models that work for you
|
|
117
|
+
|
|
118
|
+
The catalogue says which models exist. **Settings → Models → Models that work for you** says which ones your own keys and CLIs can use. Each model has one of these standings, shown as a badge in every model picker:
|
|
119
|
+
|
|
120
|
+
| Badge | Meaning |
|
|
121
|
+
|---|---|
|
|
122
|
+
| **✓ works · checked 2 h ago** | A check call succeeded (**used** instead of **checked** when it was a real run). |
|
|
123
|
+
| **? listed for you · not checked** | Your key's or CLI's own model list names it; nothing has tried it yet. |
|
|
124
|
+
| **? not checked** | Only Slopify's model list names it. |
|
|
125
|
+
| **✕ not on your plan** | The provider refused it for your account. The line under the picker quotes the provider's words. |
|
|
126
|
+
| **⚠ retiring 30 Nov → replacement** | The model is due to retire; switch before that day. |
|
|
127
|
+
|
|
128
|
+
Where they come from:
|
|
129
|
+
|
|
130
|
+
- **Listed for you** comes from free reads: OpenAI, Google, ElevenLabs and OpenRouter list their models for your key, Replicate and fal.ai answer for each model's own page, and each CLI lists its own. Cartesia and Inworld have no such list, so their models stay **not checked** until a check.
|
|
131
|
+
- **Check models** (one button per provider) sends each model the smallest request: a one-word reply at the lowest thinking setting, a voice saying "Hi", one small square image. When that costs money it first shows the price at list rates, such as "about $0.04", and nothing is sent until you confirm. A CLI's checks use its plan's allowance instead. Image-to-video models are listed, never checked.
|
|
132
|
+
- **Real runs** teach it too: a model a run used is marked as working, and one the provider refuses as not on your plan or not found is marked at once, with the provider's sentence.
|
|
133
|
+
|
|
134
|
+
Each row shows when that provider was last checked and what its checks have cost so far. A check that works is counted at what it used; one that fails after the provider took the request (it timed out, the connection dropped, the content was refused or the answer was unusable) is counted at its estimate, since the provider may have billed it. One the provider turned down up front (a rejected key, a rate limit, a model not on your plan) costs nothing. A new key starts every row over.
|
|
135
|
+
|
|
136
|
+
The standings only sort and filter the pickers. A run never asks for them: a model marked **not on your plan** still runs exactly as before if it is chosen.
|
|
137
|
+
|
|
138
|
+
## Automatic checks
|
|
139
|
+
|
|
140
|
+
With **Automatic checks** on **Free and near-free checks only** (the default), Slopify reads the key's model list and checks models by itself when you save a key, when a CLI becomes usable, and once a week. It checks only the models you use, ones that already worked and newly listed ones, at most 25 per provider, and only when a check is free, uses a CLI plan, or costs well under a tenth of a cent. Image checks never run by themselves. **Off** leaves checks to **Check models**; the free model-list reads still run when a picker opens.
|
|
141
|
+
|
|
142
|
+
## New for you
|
|
143
|
+
|
|
144
|
+
Models that start working for you after the first check appear under **New for you**, newest first, and Home shows a line such as "2 new models work for you" that opens this page. **Compare on a sample** asks which template to try it on and opens that template's studio with [Compare models](Template-Studio#compare-models) ready for it; nothing is spent until you press Compare there. Choose one in a picker to use it, or **Dismiss** it.
|
|
145
|
+
|
|
116
146
|
## Pick models on Play
|
|
117
147
|
|
|
118
148
|
On Play, each provider row has a model picker fed by the catalogue (or by the CLI for command-line tools):
|
|
119
149
|
|
|
150
|
+
- By default it shows the models that work for you, plus the one already chosen, whatever its standing. Until something works for you it shows the listed models, then every known one, so the list is never empty. **Show all** brings back the rest.
|
|
151
|
+
- The line under the picker says what is known about the chosen model, with **Check** (or **Check models** before anything was checked), which shows the price first when there is one.
|
|
120
152
|
- The refresh button (**Refresh models**) asks the provider for its current list.
|
|
121
153
|
- **Custom ID** lets you type a model ID the list does not show; **Use list** goes back.
|
|
122
154
|
- **Thinking** (text) or **Effort** (images) appears only when the model offers levels. **Model default** leaves it to the provider.
|
|
@@ -99,6 +99,12 @@ To turn it off, clear the field and press **Save**.
|
|
|
99
99
|
- [Agents](Agents-MCP) never see the address, only whether one is configured. They may set a new one.
|
|
100
100
|
- In [Docker](Docker) the request goes out from the container, so the address must be reachable from there. `localhost` means the container itself.
|
|
101
101
|
|
|
102
|
+
## Weekly report
|
|
103
|
+
|
|
104
|
+
Settings → Notifications → **Weekly report** sends last week in one message to the Notification URL: how many videos were made, each failed step with its project and reason (the first ten, then a count), what it cost, and how much of each CLI plan's week is used. It goes out once a week, on Monday from 09:00 in this computer's time zone; if Slopify was off on Monday, it goes out the next time it runs that week. It needs a Notification URL. A send that fails is tried again 15 minutes later. Default: off.
|
|
105
|
+
|
|
106
|
+
Home shows the same last 7 days under **Coming up** (see [Home and Projects](Home-and-Projects#autopilot)).
|
|
107
|
+
|
|
102
108
|
## Tips
|
|
103
109
|
|
|
104
110
|
- Turn on both: browser notifications while you are at the computer, ntfy for when you walk away.
|
|
@@ -120,6 +120,8 @@ Where the scene goes:
|
|
|
120
120
|
- With the switch off, a line holding `{{Scene}}` is left out and the prompt is drawn as it always was.
|
|
121
121
|
- A **thumbnail** prompt with `{{Scene}}` gets a scene from a call of its own (one more AI call, in the Thumbnail stage, so changing the thumbnail never remakes the images): the article's most striking moment, the one that would make someone click, taken from anywhere in the article. With **Thumbnails** set to 3, each thumbnail gets a different moment, so the A/B test compares ideas as well as compositions. A thumbnail prompt without `{{Scene}}` is drawn as it always was.
|
|
122
122
|
|
|
123
|
+
A prompt using `{{Slopify_Scene}}`, `{{Slopify_Setting}}` or `{{Slopify_Mood}}` gets its scene even with the switch off, and the switch shows it as **On for** that prompt. `{{Slopify_Setting}}` adds the era and place of each moment, so the picture stays period-correct, and `{{Slopify_Mood}}` its feeling, for light and colour; both are written by the same call. See [Keywords Slopify fills](Keywords-Slopify-Fills#per-picture).
|
|
124
|
+
|
|
123
125
|
The style, composition and everything else in the prompt stay as written; only the scene changes from image to image. The scenes are written once the article exists, and each image waits for them. Switching it on or off in **Edit project** remakes the images.
|
|
124
126
|
|
|
125
127
|
## Looks looked up: {{Appearance}}
|
|
@@ -130,6 +132,7 @@ An image model draws a named figure from whatever it half remembers, so the same
|
|
|
130
132
|
- With **Scenes from the article** on, each picture gets the looks of the figures its scene names (up to three besides the subject), so a scene of a place or of someone else isn't redrawn with the subject in it; a scene that names no one leaves the looks line out. A thumbnail always gets the subject's look. Without scenes, every picture gets the subject's look.
|
|
131
133
|
- There is no switch: a prompt with `{{Appearance}}` turns it on, and prompts without it are drawn as they always were. `{{Appearance}}` is never a field to fill in.
|
|
132
134
|
- It costs one more AI call per run, with web search. The pictures that use it wait for it.
|
|
135
|
+
- `{{Slopify_Appearance}}` is the new name of `{{Appearance}}` and means exactly the same.
|
|
133
136
|
|
|
134
137
|
## How long each image stays on screen
|
|
135
138
|
|
|
@@ -153,6 +156,7 @@ Folded, the Images row lists each ticked prompt with its Number, the provider an
|
|
|
153
156
|
|
|
154
157
|
- [Play Overview](Play-Overview)
|
|
155
158
|
- [Prompts](Prompts)
|
|
159
|
+
- [Keywords Slopify fills](Keywords-Slopify-Fills)
|
|
156
160
|
- [Cast Library](Cast-Library)
|
|
157
161
|
- [Channels](Channels)
|
|
158
162
|
- [Models](Models)
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Posting to Social Sites
|
|
2
|
+
|
|
3
|
+
Slopify can get a project's post ready for **X, LinkedIn, Instagram, TikTok, Reddit and Bluesky**, beside its YouTube upload. Slopify prepares each site's post (its words, hashtags, link, pictures or video in the site's shape, and when it goes out). It never posts for you: there is no sign-in and no site API. The optional [Studio extension](Studio-Extension) fills each site's own post form in your browser, sets the site's scheduler where it has one, and turns the site's AI label on. You check the post and press **Post** yourself.
|
|
4
|
+
|
|
5
|
+
**Where to find it:** a finished project → **Prepare upload** → **Where** (shown once the project posts to at least one site). A template's sites are set in **Library → Templates → Open studio → Upload pack**, or on Play under **Outputs**. Each channel's **Brand** tab holds its account names and X subscription.
|
|
6
|
+
|
|
7
|
+
## Turn posting on
|
|
8
|
+
|
|
9
|
+
1. Open the template in **Template Studio** and go to **Upload pack**.
|
|
10
|
+
2. Under **Post to**, turn on each site. Each one starts with the defaults below.
|
|
11
|
+
3. Change the **text** and the **video** or **pictures** of each site there; hashtags, the thumbnail and the YouTube link are under **Fine-tune**.
|
|
12
|
+
4. Press **Save**. A site whose words come from a post prompt is a paid step, so Save shows its price like any other (the **Posts** line).
|
|
13
|
+
|
|
14
|
+
A project or template with no site turned on works exactly as before: Prepare upload shows YouTube alone.
|
|
15
|
+
|
|
16
|
+
### What each site gets by default
|
|
17
|
+
|
|
18
|
+
| Site | Words | Media |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| X | The summary, two hashtags | The video |
|
|
21
|
+
| LinkedIn | The summary, three hashtags | The video |
|
|
22
|
+
| Instagram | The summary as the caption, five hashtags | Up to 10 pictures as a carousel, cut to 4:5 |
|
|
23
|
+
| TikTok | The summary, five hashtags | Short 1 |
|
|
24
|
+
| Bluesky | The summary, two hashtags | Up to 4 pictures |
|
|
25
|
+
| Reddit | A link post with the project's title | The YouTube link |
|
|
26
|
+
|
|
27
|
+
## The post in Prepare upload
|
|
28
|
+
|
|
29
|
+
Choose a site under **Where**. Its panel shows, top to bottom:
|
|
30
|
+
|
|
31
|
+
- **Where it stands**: not filled yet, waiting for the extension, filled (press Post on the site), scheduled, posted, or why the fill stopped.
|
|
32
|
+
- **Things to check**: what doesn't fit the site, each with its fix (text too long, too many pictures, a video too long for X Free, no subreddit, a release time the site can't schedule). A warning never stops you from filling the post.
|
|
33
|
+
- **The post** as the site will show it: its words in an editable box, counted live the way the site counts them, and its media in the shape it is sent in. Your changes save when you leave the box and stay this project's own; **Reset to the written text** drops them.
|
|
34
|
+
- **When it goes out** (see below).
|
|
35
|
+
- **Settings**: the text source, video, pictures, designs, hashtags, thumbnail and YouTube link for this project. A change here is this project's own; **Use the template's settings** goes back.
|
|
36
|
+
|
|
37
|
+
## Where the words come from
|
|
38
|
+
|
|
39
|
+
| Text | What it posts | Cost |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| Summary | The keyword digest's summary when the run wrote one, otherwise the YouTube description's first paragraph (the default) | Free |
|
|
42
|
+
| YouTube description | The description without its chapters and hashtags | Free |
|
|
43
|
+
| Title | The video's title | Free |
|
|
44
|
+
| Written by a post prompt | A post written from the article by a Library prompt of kind Post (or the built-in one) | One text-model call per site; it shows in the estimate as **Posts** |
|
|
45
|
+
| My own text | Your text, with `{{Slopify_Title}}`, `{{Slopify_Summary}}` and the other [keywords Slopify fills](Keywords-Slopify-Fills) | Free |
|
|
46
|
+
| No text | Nothing | Free |
|
|
47
|
+
|
|
48
|
+
A post prompt is a paid step, so it is picked in the template's Upload pack (or Play), where Save shows its cost. Prepare upload can switch a site between the free sources.
|
|
49
|
+
|
|
50
|
+
Hashtags come from the video's YouTube tags, then the shorts' hashtags, up to each site's most. The YouTube link is added, when asked, once the video is on YouTube. Text longer than the site takes is cut at the last whole sentence that fits, and the post says so.
|
|
51
|
+
|
|
52
|
+
## Pictures and video
|
|
53
|
+
|
|
54
|
+
A post can carry the long video, one of the shorts, the thumbnail, any number of the project's pictures, and designs from **Library → Designs** kept in the project (its **Keep in project**), in any mix. Instagram's pictures are cut to 4:5 the first time they are needed; a design goes in its own format closest to the site's shape (portrait on Instagram, a story on TikTok, square elsewhere), drawn when the post needs it; shorts are already vertical; the long video is never re-encoded. Sites that don't mix a video with pictures (LinkedIn, TikTok, Reddit, Bluesky) get a warning rather than a refusal.
|
|
55
|
+
|
|
56
|
+
## Each site's limits
|
|
57
|
+
|
|
58
|
+
Slopify counts the way each site does: X counts a link as 23 characters and CJK characters and emoji twice, Bluesky counts characters as you see them, the others count plainly.
|
|
59
|
+
|
|
60
|
+
| Site | Text | Pictures | Video | Video and pictures together | Seen on the site |
|
|
61
|
+
|---|---|---|---|---|---|
|
|
62
|
+
| X Free | 280 | 4 | 2 min 20 s | Yes | Not yet |
|
|
63
|
+
| X Premium, Premium+ | 25,000 | 4 | 3 h | Yes | Not yet |
|
|
64
|
+
| LinkedIn | 3,000 | 20 | 15 min | No | Not yet |
|
|
65
|
+
| Instagram | 2,200 | 20 | 15 min | Yes | 2026-10-18 |
|
|
66
|
+
| TikTok | 4,000 | 35 | 60 min | No | 2026-10-18 |
|
|
67
|
+
| Bluesky | 300 | 4 | 3 min | No | 2026-10-18 |
|
|
68
|
+
| Reddit | 40,000 (title 300) | 20 | 15 min | No | Not yet |
|
|
69
|
+
|
|
70
|
+
## When it goes out
|
|
71
|
+
|
|
72
|
+
The post follows the YouTube item it carries: a short's own release time when it carries a short, else the long video's.
|
|
73
|
+
|
|
74
|
+
- **X, LinkedIn and TikTok** have their own scheduler. The extension sets it to the release time; you press **Schedule**. Outside the site's window (TikTok takes about 15 minutes to 10 days ahead, LinkedIn about 3 months), or after the release time, it leaves the post to go out now, and the post says why.
|
|
75
|
+
- **Instagram, Bluesky and Reddit** have none. Pressing **Fill** before the release time makes the post wait: about 2 minutes before the release time, the extension opens the site in a background tab, fills the post and shows a notification (and calls your [Notification URL](Notifications), when one is set); you press **Post**. If the browser was closed, it fills when it opens again, up to 12 hours late.
|
|
76
|
+
- With no release time, or one already past, the post goes out when you press **Post**.
|
|
77
|
+
|
|
78
|
+
## Fill in a site
|
|
79
|
+
|
|
80
|
+
**Fill in X** (and each other site) is the drawer's main button while that site is chosen. It opens the site's post form and hands the post to the extension. It stays disabled, with the reason beside it, until:
|
|
81
|
+
|
|
82
|
+
- the Slopify Studio extension is installed and paired (**Settings → YouTube Studio and posting**);
|
|
83
|
+
- the extension is new enough to post; and
|
|
84
|
+
- the site is allowed in the extension's options (**Allow posting on X**, and so on).
|
|
85
|
+
|
|
86
|
+
The extension only fills a tab that Slopify opened: the one **Fill in X** opens, or the background tab it opens at release time. A site's page you open yourself is never filled or touched. The extension never presses Post, Share, Publish or the final Schedule.
|
|
87
|
+
|
|
88
|
+
## AI labels
|
|
89
|
+
|
|
90
|
+
Instagram's **Add AI label**, TikTok's **AI-generated content** and X's content disclosure are always turned on for a post that carries Slopify's pictures or video. LinkedIn, Bluesky and Reddit have none.
|
|
91
|
+
|
|
92
|
+
## After it is posted
|
|
93
|
+
|
|
94
|
+
When the site shows the published post, the extension reads its link and the panel shows **Posted** with **Open the post**. When it can't, it looks the post up on your profile (the account names below). When you posted it yourself, or the link was missed, paste it under **Posted it yourself? Paste its link**; only the site's own post links are taken. **Remove link** lets the post be filled again.
|
|
95
|
+
|
|
96
|
+
## Reddit
|
|
97
|
+
|
|
98
|
+
A Reddit post has its own **Subreddit** (without `r/`), **Title**, **Flair** and **Post type** (Link, Text or Media). Reddit refuses a post without a subreddit, so the post warns until one is set. Reddit's post form hasn't been checked in a real browser yet (**Needs a live check**): the title, subreddit and text go in through Reddit's own submit address, but check the media and flair before you press Post.
|
|
99
|
+
|
|
100
|
+
## Your accounts and X subscription
|
|
101
|
+
|
|
102
|
+
In **Channels** → your channel → **Brand** → **Posting**:
|
|
103
|
+
|
|
104
|
+
- **X subscription** (Free, Premium or Premium+) only changes which warnings a post gets, such as the 280-character and 2 min 20 s limits of X Free.
|
|
105
|
+
- **Account names** let the extension find a published post's link on your profile page. They are never used to sign in.
|
|
106
|
+
|
|
107
|
+
## Post prompts
|
|
108
|
+
|
|
109
|
+
Write your own in **Library → Prompts**, kind **Post** (**Use Built-in Starter** fills in Slopify's own wording). Slopify gives it the site's length limit and asks again when the answer is over it, then adds the hashtags and link itself. Pick it for a site in Template Studio's Upload pack by choosing **Written by a post prompt** as its text.
|
|
110
|
+
|
|
111
|
+
## Agents
|
|
112
|
+
|
|
113
|
+
Agents read and prepare posts (`get_post_packs`, `set_post_choice`, `edit_post_text`, `reset_post_text`, `set_reddit_post`, `set_post_link`) and report a post waiting for your Post. They can't press Fill and can't post. See [Agents (MCP)](Agents-MCP).
|
|
114
|
+
|
|
115
|
+
## Related pages
|
|
116
|
+
|
|
117
|
+
- [Publishing to YouTube](Publishing-to-YouTube)
|
|
118
|
+
- [Studio extension](Studio-Extension)
|
|
119
|
+
- [Template studio](Template-Studio)
|
|
120
|
+
- [Channels](Channels)
|
|
121
|
+
- [Prompts](Prompts)
|
|
@@ -18,8 +18,9 @@ The kind decides where Play offers the prompt.
|
|
|
18
18
|
| **Shorts** | Tells the text model which moments to cut into vertical shorts (3 of 60 to 120 s by default). A project that picks none uses the built-in wording. | One call to pick them, one per short for its picture prompts, one image call per picture |
|
|
19
19
|
| **Review** | Tells the reviewer what to check in a finished article, set of images, narration, thumbnail or shorts, and when to flag or redo it. Pictures can only be judged by the Claude Code and Codex reviewers. A stage with none picked uses its own built-in wording. | One reviewer call per item checked |
|
|
20
20
|
| **Script (speakers)** | Used instead of an Article prompt when a run has several voices. The text model answers with `#` section headings and `Name: words` turns, one speaker per paragraph. Text in `[square brackets]` is not spoken. | One call on the project's LLM |
|
|
21
|
+
| **Post** | Writes a project's post for X, LinkedIn, Instagram, TikTok, Reddit or Bluesky from the article. Slopify gives it the site's length limit and asks again when the answer is over it, then adds the hashtags and the link itself. Picked per site in a template's Upload pack (text **Written by a post prompt**); a site set to a post prompt with none picked uses the built-in wording. See [Posting to social sites](Posting-to-Social-Sites#post-prompts). | One call per site that uses it, on the project's LLM |
|
|
21
22
|
|
|
22
|
-
See [Title and article](Play-Title-and-Article), [Images](Play-Images), [Narration](Play-Narration), [YouTube description](YouTube-Description), [Shorts](Shorts), [Reviews and checkpoints](Reviews-and-Checkpoints)
|
|
23
|
+
See [Title and article](Play-Title-and-Article), [Images](Play-Images), [Narration](Play-Narration), [YouTube description](YouTube-Description), [Shorts](Shorts), [Reviews and checkpoints](Reviews-and-Checkpoints), [Multiple voices](Multiple-Voices) and [Posting to social sites](Posting-to-Social-Sites) for how each is used.
|
|
23
24
|
|
|
24
25
|
## Write a new prompt
|
|
25
26
|
|
|
@@ -44,7 +45,7 @@ If **Save** won't go, the sentence beside it names the first problem, such as "E
|
|
|
44
45
|
Some kinds have a starter button above the body:
|
|
45
46
|
|
|
46
47
|
- **Narration Preparation:** **Use Documentary Starter** fills in documentary delivery cues.
|
|
47
|
-
- **YouTube Description** and **
|
|
48
|
+
- **YouTube Description**, **Shorts** and **Post:** **Use Built-in Starter** fills in the wording Slopify uses when no prompt is picked.
|
|
48
49
|
|
|
49
50
|
When the body already has text, Slopify asks "Replace this prompt body?" first. Nothing is saved until you press **Save**.
|
|
50
51
|
|
|
@@ -63,9 +64,11 @@ Mistakes the editor refuses, with the line and column:
|
|
|
63
64
|
- a keyword with no name,
|
|
64
65
|
- a keyword placed inside another keyword.
|
|
65
66
|
|
|
66
|
-
### Keywords Slopify fills
|
|
67
|
+
### Keywords Slopify fills
|
|
67
68
|
|
|
68
|
-
|
|
69
|
+
Keywords written with the `Slopify_` prefix, like `{{Slopify_Title}}`, `{{Slopify_Summary}}` or `{{Slopify_Setting}}`, never become fields either: Slopify fills them itself, and the editor's **Insert** bar lists the ones each kind of prompt can use. See [Keywords Slopify fills](Keywords-Slopify-Fills) for every one, where it works and what it costs. Any other name starting with `Slopify_` is refused when you save.
|
|
70
|
+
|
|
71
|
+
`{{Scene}}` and `{{Appearance}}` are the old names of `{{Slopify_Scene}}` and `{{Slopify_Appearance}}`. They never become fields. The project's AI model writes them during the run, once the article exists, and the picture waits for them:
|
|
69
72
|
|
|
70
73
|
| Keyword | Filled with | Works in | Needs |
|
|
71
74
|
| --- | --- | --- | --- |
|
|
@@ -104,7 +107,7 @@ Each prompt's row has, in order:
|
|
|
104
107
|
|---|---|
|
|
105
108
|
| **Edit** | Opens the editor. Change the text and press **Save**. |
|
|
106
109
|
| **Duplicate** | Opens the editor with a copy. Give it a new name and save. |
|
|
107
|
-
| **Use in Play** | Picks the prompt in your open Play draft and opens Play on its field. An article prompt switches the article to Generate, an image prompt is ticked with one image, a thumbnail prompt switches the thumbnail to From prompt,
|
|
110
|
+
| **Use in Play** | Picks the prompt in your open Play draft and opens Play on its field. An article prompt switches the article to Generate, an image prompt is ticked with one image, a thumbnail prompt switches the thumbnail to From prompt, a Description or Shorts prompt turns that step on, and a Post prompt writes every site's post that is on (X's, when none is). |
|
|
108
111
|
| **History** | Opens the prompt's history (below). |
|
|
109
112
|
| **Delete** | Asks first, then moves the prompt to **Settings → Backup & storage → Trash** for 30 days, where **Restore** brings it back. |
|
|
110
113
|
|
|
@@ -116,7 +119,7 @@ Press the pencil (**Rename <name>**) beside the name, type the new name and pres
|
|
|
116
119
|
|
|
117
120
|
## What happens when you edit a prompt
|
|
118
121
|
|
|
119
|
-
Projects keep their own copy of every prompt they used. Editing a prompt here changes only runs started later. Templates
|
|
122
|
+
Projects keep their own copy of every prompt they used. Editing a prompt here changes only runs started later. Templates remember a prompt by name and use its current text. Renaming a prompt renames it in every version of every template, so a template, and a schedule running an older version marked ready, keeps using it. A template uses the copy saved with it only once the prompt is deleted.
|
|
120
123
|
|
|
121
124
|
To bring a new prompt version into an existing project, open the project's **Edit project**, and on the prompt press **Use the Library version** (or pick it again). What was made from the old wording turns outdated, and nothing is remade until you choose. See [Editing a project](Editing-a-Project).
|
|
122
125
|
|
|
@@ -155,6 +158,7 @@ Prompts saved before history existed start with their current text as version 1.
|
|
|
155
158
|
- [Library overview](Library-Overview)
|
|
156
159
|
- [Title and article](Play-Title-and-Article)
|
|
157
160
|
- [Images](Play-Images)
|
|
161
|
+
- [Keywords Slopify fills](Keywords-Slopify-Fills)
|
|
158
162
|
- [Templates](Templates)
|
|
159
163
|
- [Editing a project](Editing-a-Project)
|
|
160
164
|
- [Trash](Trash)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Remote Access
|
|
2
|
+
|
|
3
|
+
Open Slopify on your phone, tablet or laptop while it runs on your computer. Slopify uses the [Tailscale](https://tailscale.com) already installed on that computer: one switch, and Tailscale serves Slopify's page at an `https://` address that only devices signed in to your tailnet can open.
|
|
4
|
+
|
|
5
|
+
**Where to find it:** Settings → **General** → **Remote access** → **Open on my other devices (Tailscale)**.
|
|
6
|
+
|
|
7
|
+
Default: off.
|
|
8
|
+
|
|
9
|
+
## Before you start
|
|
10
|
+
|
|
11
|
+
- Tailscale is installed and signed in on the computer Slopify runs on, and on the device you want to use.
|
|
12
|
+
- Your tailnet has **MagicDNS** and **HTTPS Certificates** turned on: in the Tailscale admin console open **DNS** (login.tailscale.com/admin/dns), turn on MagicDNS if it is off, then under **HTTPS Certificates** press **Enable HTTPS**. Slopify tells you when this is missing.
|
|
13
|
+
- On Linux, Tailscale lets only root or its *operator* change serve settings. Allow your user once with `sudo tailscale set --operator=$USER`.
|
|
14
|
+
|
|
15
|
+
## Turn it on
|
|
16
|
+
|
|
17
|
+
1. Open Settings → **General** → **Remote access**.
|
|
18
|
+
2. Turn on **Open on my other devices (Tailscale)**.
|
|
19
|
+
3. The address appears, for example `https://mypc.tail1234.ts.net`, with **Copy address** and a QR code.
|
|
20
|
+
4. On your phone, scan the QR code with the camera (or open the address in its browser). The phone must be signed in to the same tailnet.
|
|
21
|
+
|
|
22
|
+
Slopify itself keeps listening only on this computer (`http://127.0.0.1:6969`). Tailscale receives the https request on your tailnet address and passes it to that local address.
|
|
23
|
+
|
|
24
|
+
## Turn it off
|
|
25
|
+
|
|
26
|
+
Turn off **Open on my other devices (Tailscale)** on the computer Slopify runs on. Slopify removes the serve setting it added, and nothing else.
|
|
27
|
+
|
|
28
|
+
A page opened through the remote address shows the switch but can't change it: remote access is turned on or off only on the computer itself.
|
|
29
|
+
|
|
30
|
+
## What stays private
|
|
31
|
+
|
|
32
|
+
- **Tailnet only, never the public internet.** Slopify uses Tailscale *Serve*, never *Funnel*. Slopify has no login and holds your provider keys, so a public address is never an option: Slopify never runs `tailscale funnel`, and it refuses every request that Tailscale marks as coming through Funnel, even if someone turns Funnel on by hand.
|
|
33
|
+
- **Agents stay on this computer.** `/mcp` (agents) and `/mcp/assistant` (the in-app assistant) answer only requests made on the computer Slopify runs on. Remote access is for the Slopify page alone. Agents can read the setting (`get_remote_access`) but can't turn it on or off, and neither can the assistant.
|
|
34
|
+
- **The page does almost everything it does at home.** A device on your tailnet is you, so the remote page can do what the page on the computer does, paid work included: starting runs, Template studio samples, Compare models and Make samples for all spend from the same daily studio budget and plans as at home. What sets up the computer itself stays there: saving or removing provider keys, a CLI's path, importing a backup, installing updates, Start with this computer, moving the Files or backup folder, clean-ups that delete files and the assistant's **Allow**. Each is refused over the tailnet with where to do it instead.
|
|
35
|
+
- **Only your account.** While remote access is on, a request through Tailscale from any account other than the one that turned it on is refused.
|
|
36
|
+
- **Only the page at the address you opened.** A change is accepted only from the Slopify page at the very address the browser opened for that request, so a web page at any other address can't make one through your browser. **Open folder** on a remote device opens the folder on the computer Slopify runs on.
|
|
37
|
+
|
|
38
|
+
## When Slopify stops and starts
|
|
39
|
+
|
|
40
|
+
The address works while Slopify runs. When Slopify stops, it removes its serve setting, so the address never points at a port that another program could take while Slopify is stopped; opening it then shows Tailscale's own error. When Slopify starts with the switch on, it adds the address back by itself. If Slopify was stopped without warning (a crash, a power cut), the next start replaces what was left.
|
|
41
|
+
|
|
42
|
+
## Your own serve settings
|
|
43
|
+
|
|
44
|
+
Slopify changes only the one serve setting it added, and only while it is still exactly what Slopify set. If you already serve something on HTTPS port 443 (even Slopify itself, set up by hand), Slopify leaves it alone and offers **Use port 8443**, which gives Slopify its own address such as `https://mypc.tail1234.ts.net:8443`. Or remove yours with `tailscale serve --https=443 off` and press **Check again**.
|
|
45
|
+
|
|
46
|
+
Slopify served by your own `tailscale serve`, or behind a reverse proxy such as Caddy or nginx, keeps working without the switch: the page saves settings and starts work as it does through Slopify's own address. The same things stay on the computer itself (keys, updates and the rest above), agents still connect only at `http://127.0.0.1:<port>/mcp`, and a proxy on a name other than a `ts.net` address needs that name in `SLOPIFY_ALLOWED_HOSTS` (see [Install](Install)).
|
|
47
|
+
|
|
48
|
+
## What the notices mean
|
|
49
|
+
|
|
50
|
+
| Notice | What to do |
|
|
51
|
+
| --- | --- |
|
|
52
|
+
| Tailscale isn't installed on this computer | Install it from [tailscale.com/download](https://tailscale.com/download), sign in, then press **Check again**. |
|
|
53
|
+
| Tailscale is installed but not running | Open the Tailscale app and connect, or run `tailscale up`, then **Check again**. |
|
|
54
|
+
| Tailscale is signed out | Open the Tailscale app and sign in, or run `tailscale up`. |
|
|
55
|
+
| Your tailnet has no HTTPS certificates | Admin console → **DNS**: turn on MagicDNS, then **Enable HTTPS** under HTTPS Certificates. |
|
|
56
|
+
| Tailscale won't let your user change its serve settings | Linux: `sudo tailscale set --operator=$USER` once, then **Check again**. |
|
|
57
|
+
| HTTPS port 443 is already used by another serve setting | **Use port 8443**, or remove the other setting with `tailscale serve --https=443 off`. |
|
|
58
|
+
| Tailscale Funnel was on for Slopify's address | Slopify removed its address. Turn Funnel off with `tailscale funnel --https=<port> off`, then **Check again**. |
|
|
59
|
+
| The switch is on, but Slopify's address isn't in Tailscale right now | Someone removed it outside Slopify: press **Check again** to add it back. |
|
|
60
|
+
|
|
61
|
+
## Docker
|
|
62
|
+
|
|
63
|
+
From inside a container Slopify can't set up Tailscale on the computer itself, so the switch is unavailable there. Start Slopify with `npx @gentbajko/slopify` to use it, or set Tailscale up yourself on the host: `tailscale serve --bg --https=443 http://127.0.0.1:6969` (use Slopify's published port). Set up that way, the address isn't one Slopify made, so updating Slopify, opening folders and the YouTube Studio settings work only on the computer itself.
|
|
@@ -81,7 +81,7 @@ A reviewer checks each finished item and saves its verdict and reasons on the pr
|
|
|
81
81
|
| **Reviewer model** | The model that judges each item. A stronger model catches more but costs more per review. It can differ from the model that wrote the text. | None |
|
|
82
82
|
| **Redos per item** | How many times **Flag and redo** makes a failed item again before it keeps the last one and flags it. Each redo costs the item again plus one more review. | 2; 0 to 5 |
|
|
83
83
|
|
|
84
|
-
Then, for each stage (**Article**, **Images**, **Narration**, **Thumbnail**, **Shorts**), pick a mode and a prompt:
|
|
84
|
+
Then, for each stage (**Article**, **Promise check (before narration)**, **Images**, **Narration**, **Thumbnail**, **Shorts**), pick a mode and a prompt:
|
|
85
85
|
|
|
86
86
|
| Mode | What happens to a failed item |
|
|
87
87
|
| --- | --- |
|
|
@@ -96,11 +96,22 @@ The prompt next to each mode is **Built-in** or a **Review** prompt from the Lib
|
|
|
96
96
|
| Stage | The built-in reviewer checks |
|
|
97
97
|
| --- | --- |
|
|
98
98
|
| **Article** | The article prompt's rules (length, structure, tone), no invented lore, no repeated sections. The research notes are included. |
|
|
99
|
+
| **Promise check (before narration)** | That the opening keeps what the title and thumbnail promise. See [The promise check](#the-promise-check). |
|
|
99
100
|
| **Images** | Malformed hands or bodies, stray text or letters, that it matches its brief, and that it matches the establishing image when one is on. |
|
|
100
101
|
| **Narration** | Nothing missing or garbled compared with the text: the reviewer reads what the word timing heard and the stretches it could not hear. |
|
|
101
102
|
| **Thumbnail** | Readable at phone size, clear subject. |
|
|
102
103
|
| **Shorts** | The short's images at phone size: clear subject, no stray text, fits the title. |
|
|
103
104
|
|
|
105
|
+
### The promise check
|
|
106
|
+
|
|
107
|
+
One cheap text call before the paid narration. The reviewer reads the video's title, the thumbnail brief (when the thumbnail is drawn from a prompt), the opening as the voice will say it (about the first 30 seconds: 75 words at 150 words a minute) and the whole article.
|
|
108
|
+
|
|
109
|
+
- **Passes** when the opening starts delivering what the title and thumbnail promise and gives a reason to keep watching.
|
|
110
|
+
- **Fails** on a slow preamble, a greeting or channel housekeeping (subscribe, welcome back) before the subject, an opening about something else, or a promise the article never keeps. The reasons name the sentence that should come first.
|
|
111
|
+
- **Flag and redo** writes the article again and checks the new one. The narration, the pictures and everything else that reads the article wait for the answer, so nothing paid is made from an opening that failed.
|
|
112
|
+
- It needs an article written by a model: with **Article** set to Provide the row is greyed and says why.
|
|
113
|
+
- It uses the reviewer model above and adds one text-model call to the estimate. Default: Off.
|
|
114
|
+
|
|
104
115
|
### Set up automatic reviews
|
|
105
116
|
|
|
106
117
|
1. Open the **Reviews** row.
|
|
@@ -121,7 +132,7 @@ With **Who reviews** set to **External agent (MCP)**, no model is called: each r
|
|
|
121
132
|
|
|
122
133
|
### Reviews on the project page
|
|
123
134
|
|
|
124
|
-
Beside the article, the narration, the thumbnail and each short, and on each image tile, the verdict shows as **Review passed**, **Flagged by review**, **Waiting to be made again**, **Being made again**, **Redone after review** or **Accepted by you**, with the reasons. With the External agent reviewer, or when an agent acted on it, it reads **Passed by agent**, **Flagged by agent**, **Redone after agent review**, **Accepted by agent**, **Made again by agent**, or **Passed without review** when no agent answered in time. For a failed item nobody has acted on:
|
|
135
|
+
Beside the article (with the promise check's verdict under the article review's), the narration, the thumbnail and each short, and on each image tile, the verdict shows as **Review passed**, **Flagged by review**, **Waiting to be made again**, **Being made again**, **Redone after review** or **Accepted by you**, with the reasons. With the External agent reviewer, or when an agent acted on it, it reads **Passed by agent**, **Flagged by agent**, **Redone after agent review**, **Accepted by agent**, **Made again by agent**, or **Passed without review** when no agent answered in time. For a failed item nobody has acted on:
|
|
125
136
|
|
|
126
137
|
- **Overrule** accepts it as it is.
|
|
127
138
|
- **Redo** makes it again (a new version of the project, then the item and what depends on it are rebuilt), and it is reviewed again.
|
|
@@ -125,6 +125,24 @@ Only one generation per schedule runs at a time. A failed try shows its reason o
|
|
|
125
125
|
|
|
126
126
|
Press **Generate topics now** to ask for new topics at once: at least 5, even when the queue is full and even during the 5-minute wait after a failed try. It is one LLM call. Saving the schedule also clears the wait.
|
|
127
127
|
|
|
128
|
+
### Rank topics
|
|
129
|
+
|
|
130
|
+
Under Edit → Topic generation, **Rank topics** orders the topics Slopify generates, best first, and shows a **Score** (0 to 100) on each queued and held topic, with why it scored so behind the ⓘ beside it:
|
|
131
|
+
|
|
132
|
+
| Choice | What it reads | What leaves this computer |
|
|
133
|
+
| --- | --- | --- |
|
|
134
|
+
| **Off** (default) | Nothing: no scores, and topics join in the order they arrive, as before | Nothing |
|
|
135
|
+
| **By what the library already covers** | How far the topic is from everything made, queued, held or turned down in this channel ("Library: new; nearest “…” (40% overlap)") | Nothing |
|
|
136
|
+
| **Also by public search interest** | The library, plus how many of Google's search suggestions name the topic (DuckDuckGo's when Google doesn't answer) and its Wikipedia article's views last month | Each new topic's title, sent to Google, DuckDuckGo and Wikipedia |
|
|
137
|
+
|
|
138
|
+
- When a generation finds more topics than it needs, the best-scored are kept. They join after the topics you added or moved, in score order; held topics are listed by score.
|
|
139
|
+
- A topic you move keeps its place from then on.
|
|
140
|
+
- With no connection, topics are still added, ranked by the library alone, and their reasons say "Search interest unknown: no connection".
|
|
141
|
+
- **Rescore**, beside Queued topics, scores every queued and held topic again now and puts them in order; a topic you added gets a score but stays where it is.
|
|
142
|
+
- It works with **New topics** Off too: Rescore then scores the topics you added, which keep the places you gave them.
|
|
143
|
+
- With Rank topics Off, no scores show.
|
|
144
|
+
- It never uses your channel's analytics.
|
|
145
|
+
|
|
128
146
|
### Approve held topics
|
|
129
147
|
|
|
130
148
|
When **New topics** is **Generate and hold for approval**, suggestions wait under **Topics waiting** on the schedule (and under **Suggested topics** on the [Calendar](Calendar)):
|
|
@@ -153,7 +171,9 @@ Pick a schedule in the list to see its detail: **When**, **Timezone**, **Next ru
|
|
|
153
171
|
|
|
154
172
|
## When you edit the template
|
|
155
173
|
|
|
156
|
-
A schedule
|
|
174
|
+
A schedule runs the newest version of its template, so a change you save applies from the next run, as before. The schedule's **Template** line says **Runs the newest version · Not checked in the studio**.
|
|
175
|
+
|
|
176
|
+
That changes once you press **Mark ready** on a version in the template's [Template studio](Template-Studio#mark-ready) for the first time. From then on the schedule runs the newest version marked ready (or one Slopify carried over from it), and a version you save later waits until you look it over and press **Mark ready**. The line then says, for example, **Runs version 6 · version 7 not ready yet**. The schedule is never stopped or switched to an unchecked version by itself. If the change adds a keyword the schedule has no value for, fill it in under the schedule's topics or every-run values.
|
|
157
177
|
|
|
158
178
|
## Tips
|
|
159
179
|
|