@gentbajko/slopify 3.23.0 → 3.25.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/adapter-registry.js +5 -4
- package/dist/adapters/explain.js +2 -1
- package/dist/adapters/host-cli/index.js +1 -1
- package/dist/adapters/host-cli/transport.js +1 -1
- package/dist/adapters/llm/antigravity-models.js +37 -0
- package/dist/adapters/llm/antigravity.js +247 -0
- package/dist/adapters/llm/cli-login-error.js +1 -1
- package/dist/edge/docker-install/run.js +1 -1
- package/dist/edge/docker.js +2 -2
- package/dist/edge/http/studio.js +8 -6
- package/dist/extension/slopify-studio-chrome.zip +0 -0
- package/dist/extension/slopify-studio-firefox.zip +0 -0
- package/dist/host-cli/runtime.js +4 -4
- package/dist/host-cli/status.js +23 -9
- package/dist/patch-notes/3.24.0.md +12 -0
- package/dist/patch-notes/3.25.0.md +11 -0
- package/dist/patch-notes/index.json +12 -0
- package/dist/slices/fixes/rules.js +2 -2
- package/dist/slices/onboarding/quick-short.js +1 -1
- package/dist/slices/rebuild/recipe-build.js +2 -1
- package/dist/slices/rebuild/recipe-exports.js +29 -18
- package/dist/slices/rebuild/recipe-softening.js +37 -0
- package/dist/slices/reviews/model.js +1 -1
- package/dist/slices/run-cost/pricing.js +2 -1
- package/dist/slices/settings/first-run.js +1 -1
- package/dist/slices/settings/health.js +3 -7
- package/dist/slices/settings/model.js +2 -2
- package/dist/slices/settings/models.js +1 -1
- package/dist/tutorials/AI-CLIs.md +21 -8
- package/dist/tutorials/Docker.md +2 -2
- package/dist/tutorials/FAQ.md +2 -2
- package/dist/tutorials/First-Launch-and-Welcome.md +1 -1
- package/dist/tutorials/Home-and-Projects.md +1 -1
- package/dist/tutorials/Home.md +2 -2
- package/dist/tutorials/Install.md +1 -1
- package/dist/tutorials/Providers-and-Keys.md +3 -3
- package/dist/tutorials/Recovery-and-Retries.md +3 -3
- package/dist/tutorials/Troubleshooting.md +8 -4
- package/dist/tutorials/Your-First-Short.md +3 -3
- package/dist/web/assets/{index-D4ikiEys.js → index-D8LqNsCl.js} +6 -6
- package/dist/web/assets/{pdf-DSYcdduN.js → pdf-T7MCwjIv.js} +1 -1
- package/dist/web/index.html +1 -1
- package/package.json +1 -2
- package/dist/adapters/llm/gemini-models.js +0 -127
- package/dist/adapters/llm/gemini-workspace.js +0 -135
- package/dist/adapters/llm/gemini.js +0 -168
- package/dist/host-cli/gemini-login.js +0 -83
|
@@ -11,7 +11,10 @@ import { portraitValues } from "../voices/portraits.js";
|
|
|
11
11
|
import { linePlan, linesLevelled } from "./recipe-lines.js";
|
|
12
12
|
import { masterPlan } from "./recipe-loudness.js";
|
|
13
13
|
import { recipe, resourceIdentity, } from "./recipe-model.js";
|
|
14
|
-
export function exportRecipes(context, audio
|
|
14
|
+
export function exportRecipes(context, audio,
|
|
15
|
+
// The timelines a finished timing may have been made from before Soften breaths or Soften S
|
|
16
|
+
// sounds were turned on (`recipe-softening.ts`).
|
|
17
|
+
unsoftened = () => []) {
|
|
15
18
|
const { config, content } = context;
|
|
16
19
|
if (audio.mediaFingerprint === null)
|
|
17
20
|
return [];
|
|
@@ -33,23 +36,31 @@ export function exportRecipes(context, audio) {
|
|
|
33
36
|
reviewsNarration(config) ||
|
|
34
37
|
voices?.audioFiles === true ||
|
|
35
38
|
lined;
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
39
|
+
const timingOf = (timeline) => recipe(context, "subtitles:timing", "video", {
|
|
40
|
+
kind: "local",
|
|
41
|
+
version: 1,
|
|
42
|
+
operation: timingOperation(projectLanguage(config)),
|
|
43
|
+
// The lead-in moves every word, so the edge silence is part of the timing.
|
|
44
|
+
values: [
|
|
45
|
+
timeline,
|
|
46
|
+
config.silenceGapSeconds,
|
|
47
|
+
// The project language; an English project reads "en" here as it always did.
|
|
48
|
+
config.language ?? config.subtitles?.language ?? "en",
|
|
49
|
+
config.edgeSilenceSeconds,
|
|
50
|
+
// Each word learns its speaker and turn on a multi-voice run.
|
|
51
|
+
...(voices === undefined ? [] : ["voice-words-v1"]),
|
|
52
|
+
],
|
|
53
|
+
}, audio.keys);
|
|
54
|
+
const timedNow = timed ? timingOf(audio.timeline) : undefined;
|
|
55
|
+
// A finished timing made before the narration was softened is kept: softening moves no word.
|
|
56
|
+
const doneTiming = (fingerprint) => (context.history ?? context.manifest).pieces.some((row) => row.key === "subtitles:timing" &&
|
|
57
|
+
row.piece.state === "done" &&
|
|
58
|
+
row.fingerprint === fingerprint);
|
|
59
|
+
const timing = timedNow === undefined || doneTiming(timedNow.fingerprint)
|
|
60
|
+
? timedNow
|
|
61
|
+
: (unsoftened()
|
|
62
|
+
.map(timingOf)
|
|
63
|
+
.find((one) => doneTiming(one.fingerprint)) ?? timedNow);
|
|
53
64
|
const lines = linePlan(context, timing);
|
|
54
65
|
// The timing goes ahead of what waits for it; any other run keeps its old order.
|
|
55
66
|
if (lined && timing !== undefined)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { audioRecipes } from "./recipe-audio.js";
|
|
2
|
+
// Soften breaths and Soften S sounds change how the narration sounds and never move a word: the
|
|
3
|
+
// pauses are planned from the pieces as spoken, and a softened breath keeps its length. The word
|
|
4
|
+
// timing reads the joined narration, so turning them on would time every word again and write
|
|
5
|
+
// again what is written from the timing (the description and the shorts' pick, which are text
|
|
6
|
+
// calls), to the same result. This finds the timelines the project's finished timing may have
|
|
7
|
+
// been made from: the same narration with fewer of the two softenings on, each join as it was
|
|
8
|
+
// made then (its file and length, from the version's history). The word timing keeps a
|
|
9
|
+
// finished timing made from one of them (`recipe-exports.ts`).
|
|
10
|
+
export function unsoftenedTimelines(context, text) {
|
|
11
|
+
const { config } = context;
|
|
12
|
+
const on = ["removeBreaths", "deEss"].filter((key) => config[key] === true);
|
|
13
|
+
if (on.length === 0)
|
|
14
|
+
return [];
|
|
15
|
+
const past = context.history ?? context.manifest;
|
|
16
|
+
// Each way of having fewer of them on: both off first, then one at a time.
|
|
17
|
+
const variants = on.length === 2 ? [on, ["removeBreaths"], ["deEss"]] : [on];
|
|
18
|
+
return variants.flatMap((off) => {
|
|
19
|
+
const softer = { ...config };
|
|
20
|
+
for (const key of off)
|
|
21
|
+
delete softer[key];
|
|
22
|
+
const plain = audioRecipes({ ...context, config: softer }, text);
|
|
23
|
+
const entries = plain.timeline;
|
|
24
|
+
const timeline = entries.map((entry, at) => {
|
|
25
|
+
const key = plain.keys[at];
|
|
26
|
+
const made = past.outputs.find((row) => row.workKey === key && row.fingerprint === entry.audio[0] && row.state === "ready");
|
|
27
|
+
return made === undefined
|
|
28
|
+
? undefined
|
|
29
|
+
: {
|
|
30
|
+
audio: [entry.audio[0], made.assetId],
|
|
31
|
+
transcript: entry.transcript,
|
|
32
|
+
durationMs: made.output.durationMs ?? null,
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
return timeline.every((entry) => entry !== undefined) && timeline.length > 0 ? [timeline] : [];
|
|
36
|
+
});
|
|
37
|
+
}
|
|
@@ -36,7 +36,7 @@ export const reviewModeLabels = {
|
|
|
36
36
|
export const visionStages = ["images", "thumbnail", "shorts"];
|
|
37
37
|
// The text providers whose adapter hands the model image files (`capabilities.images` in
|
|
38
38
|
// `adapters/llm`): Claude Code reads them with its Read tool in a private folder, Codex
|
|
39
|
-
// attaches them with `--image`. The
|
|
39
|
+
// attaches them with `--image`. The Antigravity CLI and OpenRouter adapters send text only.
|
|
40
40
|
export const imageReviewers = ["claude-code", "codex"];
|
|
41
41
|
export function reviewModeOf(settings, stage) {
|
|
42
42
|
return settings?.stages[stage]?.mode ?? "off";
|
|
@@ -35,8 +35,9 @@ export function apiEquivalentOf(provider, model, catalogue) {
|
|
|
35
35
|
return undefined;
|
|
36
36
|
if (provider === "codex" || provider === "codex-image")
|
|
37
37
|
return listed(`openai/${bare}`);
|
|
38
|
+
// Antigravity slugs carry the effort ("gemini-3.8-flash-high"); the API prices the model.
|
|
38
39
|
if (provider === "gemini")
|
|
39
|
-
return listed(`google/${bare}`);
|
|
40
|
+
return listed(`google/${bare.replace(/-(?:low|medium|high)$/, "")}`);
|
|
40
41
|
return undefined;
|
|
41
42
|
}
|
|
42
43
|
export function priceCall(call, catalogue) {
|
|
@@ -87,7 +87,7 @@ export async function firstRunStatus(deps, statuses) {
|
|
|
87
87
|
? null
|
|
88
88
|
: names.length > 0
|
|
89
89
|
? `Slopify found ${list(names)} and picked ${names.length === 1 ? "it" : "them"} on Play. ${narration} Keys are optional extras in Settings → Providers.`
|
|
90
|
-
: "Install Claude Code, Codex or
|
|
90
|
+
: "Install Claude Code, Codex or Antigravity CLI and sign in once in a terminal, then reload this page. Or paste an API key in Settings → Providers.",
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
93
|
async function firstModel(deps, provider, family) {
|
|
@@ -8,7 +8,7 @@ import { providerStatuses } from "./readiness.js";
|
|
|
8
8
|
const signInCommand = {
|
|
9
9
|
"claude-code": "claude auth login",
|
|
10
10
|
codex: "codex login",
|
|
11
|
-
gemini: "
|
|
11
|
+
gemini: "agy",
|
|
12
12
|
};
|
|
13
13
|
function loginSource(id) {
|
|
14
14
|
return id === "codex-image" ? "codex" : id;
|
|
@@ -115,16 +115,12 @@ async function cliHealth(deps, status, used) {
|
|
|
115
115
|
? {
|
|
116
116
|
label: "Signed in",
|
|
117
117
|
state: "problem",
|
|
118
|
-
detail:
|
|
119
|
-
? `Gemini CLI is not signed in: ~/.gemini has no Google sign-in and no GEMINI_API_KEY is set. Open a terminal on the computer running it, run "gemini" and choose Login with Google (or set GEMINI_API_KEY), then choose Check all again.`
|
|
120
|
-
: `${name} is not signed in. Open a terminal on the computer running it, run "${signInCommand[source]}" and sign in, then choose Check all again.`,
|
|
118
|
+
detail: `${name} is not signed in. Open a terminal on the computer running it, run "${signInCommand[source]}" and sign in, then choose Check all again.`,
|
|
121
119
|
}
|
|
122
120
|
: {
|
|
123
121
|
label: "Signed in",
|
|
124
122
|
state: "skipped",
|
|
125
|
-
detail:
|
|
126
|
-
? `Slopify could not tell from the Gemini CLI's files (~/.gemini/settings.json) whether it is signed in. Run "gemini" in a terminal once to confirm it is signed in.`
|
|
127
|
-
: `Slopify could not tell whether ${name} is signed in. Run "${signInCommand[source]}" in a terminal if runs fail with a sign-in error.`,
|
|
123
|
+
detail: `Slopify could not tell whether ${name} is signed in. Run "${signInCommand[source]}" in a terminal if runs fail with a sign-in error.`,
|
|
128
124
|
});
|
|
129
125
|
if (used.length > 0)
|
|
130
126
|
checks.push(await cliModels(deps, status, used));
|
|
@@ -58,9 +58,9 @@ export const providers = [
|
|
|
58
58
|
{
|
|
59
59
|
id: "gemini",
|
|
60
60
|
family: "llm",
|
|
61
|
-
displayName: "
|
|
61
|
+
displayName: "Antigravity CLI",
|
|
62
62
|
auth: "cli",
|
|
63
|
-
binary: "
|
|
63
|
+
binary: "agy",
|
|
64
64
|
versionArgs: ["--version"],
|
|
65
65
|
},
|
|
66
66
|
{ id: "elevenlabs", family: "tts", displayName: "ElevenLabs", auth: "key" },
|
|
@@ -86,7 +86,7 @@ function uniqueModels(models) {
|
|
|
86
86
|
function catalogNotice(provider) {
|
|
87
87
|
const notices = {
|
|
88
88
|
codex: "Models come from your Codex installation. Refresh to check again.",
|
|
89
|
-
gemini:
|
|
89
|
+
gemini: 'Models come from "agy models" in your installed Antigravity CLI. Missing a new model? Run "agy update", rerun the Docker launcher if applicable, then refresh this list.',
|
|
90
90
|
"claude-code": "Models come from Claude Code. Missing a new model? Update Claude Code, rerun the Docker launcher if applicable, then refresh this list. You can also enter an exact model ID.",
|
|
91
91
|
inworld: "These are Inworld’s documented TTS models. You can also enter a compatible model ID.",
|
|
92
92
|
"system-voice": "These are the speech programs found on this computer, best first. Install another (for example espeak-ng) and refresh to see it.",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# AI CLIs
|
|
2
2
|
|
|
3
|
-
Slopify can write the text with the Claude Code, Codex or
|
|
3
|
+
Slopify can write the text with the Claude Code, Codex or Antigravity command-line tools, and draw the images with Codex, using the sign-in you already have. You need no API key for those steps, and their calls count toward your plan's limits instead of costing per call.
|
|
4
4
|
|
|
5
|
-
**Where to find it:** Settings → Providers → the **Text** list (Claude Code CLI, Codex CLI,
|
|
5
|
+
**Where to find it:** Settings → Providers → the **Text** list (Claude Code CLI, Codex CLI, Antigravity CLI) and the **Images** list (Codex CLI).
|
|
6
6
|
|
|
7
7
|
## What each tool does
|
|
8
8
|
|
|
@@ -10,7 +10,7 @@ Slopify can write the text with the Claude Code, Codex or Gemini command-line to
|
|
|
10
10
|
|---|---|---|---|---|
|
|
11
11
|
| **Claude Code CLI** | `claude` | Text: research, script, article, titles, descriptions, reviews | Your Claude account | 3 |
|
|
12
12
|
| **Codex CLI** | `codex` | Text | Your ChatGPT account | 3 |
|
|
13
|
-
| **
|
|
13
|
+
| **Antigravity CLI** | `agy` | Text (research from search results; no page reading or commands) | Your Google account | 3 |
|
|
14
14
|
| **Codex CLI** (Images) | `codex` | Images and thumbnails | Your ChatGPT account (the same sign-in and path as Codex text) | 4 |
|
|
15
15
|
|
|
16
16
|
Codex text and Codex images share one sign-in, one executable path and one plan allowance.
|
|
@@ -23,12 +23,25 @@ Codex CLI must be version 0.149.1 or newer. An older Codex shows **Needs attenti
|
|
|
23
23
|
2. Sign in once in a terminal:
|
|
24
24
|
- Claude Code: `claude auth login`
|
|
25
25
|
- Codex: `codex login`
|
|
26
|
-
-
|
|
26
|
+
- Antigravity: run `agy` and sign in with your Google account (a browser opens; over SSH it shows a URL and a code).
|
|
27
27
|
3. Open **Settings → Providers** (reload the page if it was already open).
|
|
28
28
|
4. Pick the tool in the **Text** or **Images** list. Its row should say **Ready**, and its setup shows **Installed, version …** and the **Command** Slopify runs.
|
|
29
29
|
5. Choose **Check all** to confirm it is signed in.
|
|
30
30
|
|
|
31
|
-
On the very first launch, before any key is saved, Slopify looks for all three tools. If it finds any, it says so and picks one for text on new Play drafts, preferring Claude Code, then Codex, then
|
|
31
|
+
On the very first launch, before any key is saved, Slopify looks for all three tools. If it finds any, it says so and picks one for text on new Play drafts, preferring Claude Code, then Codex, then Antigravity, and Codex for images when found. The CLIs can't speak, but the narration needs no key either: without a voice key, the [System voice](Providers-and-Keys#the-system-voice) reads it with your computer's own speech. See [First-Launch-and-Welcome](First-Launch-and-Welcome).
|
|
32
|
+
|
|
33
|
+
## Antigravity CLI: what is different
|
|
34
|
+
|
|
35
|
+
Antigravity CLI (`agy`) replaced the Gemini CLI, which Google retired for personal accounts on 18 June 2026. Install it with `curl -fsSL https://antigravity.google/cli/install.sh | bash` (it lands in `~/.local/bin` and adds that folder to your `PATH` in your shell's startup files, so open a new terminal afterwards). Update it with `agy update`. The first `agy` run signs you in through the browser, or with a URL and code over SSH. The Antigravity desktop app is a different program and does not provide `agy`, but `agy` reuses its Google sign-in.
|
|
36
|
+
|
|
37
|
+
It works differently from the Gemini CLI in a few ways:
|
|
38
|
+
|
|
39
|
+
- **Research uses search results only.** Web search works: the model runs Google searches and cites the same kind of Google redirect links the Gemini CLI returned. Opening web pages, the browser and shell commands are switched off in headless mode, so Slopify tells the model to use only its search tool. A long high-effort research step can take several minutes (one test run made 14 searches).
|
|
40
|
+
- **Pictures work on this computer.** For reviews that need to look at pictures, Slopify copies them into the run's private folder and the model opens each one. An answer that skipped a picture is refused with "The reviewer answered without opening every picture…". Over the Docker host bridge no CLI is given pictures, so there Antigravity sees text only.
|
|
41
|
+
- **No timeout of its own.** `agy` waits as long as the model needs; Slopify's own stall checks end a run that stops making progress.
|
|
42
|
+
- **Busy messages are retried.** When several calls run at once, Google can answer that its capacity for the model is used for the moment. A reset of 5 minutes or less is retried by itself within seconds; a longer reset is handled as a plan limit and the run waits for it.
|
|
43
|
+
- **Its sign-in is checked with `agy models`.** Slopify runs the command: if it lists models, the CLI is **Signed in**; if it says "Please sign in", the CLI is signed out and the check gives the command to run (`agy`); anything else shows as unknown. `GEMINI_API_KEY` is not read.
|
|
44
|
+
- **Old model ids are gone.** Models come from `agy models`. A project that still names a Gemini CLI model such as `gemini-2.5-pro` stops with "The chosen model is not available…" until you pick a new one in **Edit project → Providers**. A saved path to a program still called `gemini` is refused: clear it or set the Antigravity CLI path in Settings → Providers.
|
|
32
45
|
|
|
33
46
|
## Row states
|
|
34
47
|
|
|
@@ -57,7 +70,7 @@ Slopify finds each tool on PATH, the list of folders your terminal searches. Set
|
|
|
57
70
|
**Check all** (Settings → Providers) asks each tool:
|
|
58
71
|
|
|
59
72
|
- **Installed**: found, with its version.
|
|
60
|
-
- **Signed in**: Slopify asks
|
|
73
|
+
- **Signed in**: Slopify asks each CLI directly. If one is signed out, the line tells you the command to run (`claude auth login`, `codex login` or `agy`). For Antigravity CLI it runs `agy models`: a model list means signed in, "Please sign in" means signed out (run `agy`), and anything else is shown as unknown.
|
|
61
74
|
- **Chosen models**: every model your templates, schedules, drafts and unfinished projects pick is still offered by the tool.
|
|
62
75
|
|
|
63
76
|
Each tool's row has **Check again**, to check that tool alone after you fix something.
|
|
@@ -91,7 +104,7 @@ The CLIs bill your subscription, which gives a share of a 5-hour and a weekly al
|
|
|
91
104
|
|
|
92
105
|
- **Claude Code** reports its 5-hour and 7-day windows during each call.
|
|
93
106
|
- **Codex** is asked before and after each call. It reports whole percents, so a short run can show "under 1%".
|
|
94
|
-
- **
|
|
107
|
+
- **Antigravity** reports none.
|
|
95
108
|
|
|
96
109
|
You see these on a project's **Run cost** tab, in the run's **Cost so far** panel, and on Home under **This week**. See [Costs-and-Run-Cost](Costs-and-Run-Cost).
|
|
97
110
|
|
|
@@ -104,7 +117,7 @@ When a tool says its allowance is used up, the run does not fail:
|
|
|
104
117
|
|
|
105
118
|
Other providers are not held up: a project whose narration uses a key carries on while its Codex images wait. The wait survives a restart; a project that was waiting when Slopify stopped resumes on the next start and waits again. A project you paused or canceled meanwhile is left alone.
|
|
106
119
|
|
|
107
|
-
|
|
120
|
+
Antigravity's quota is handled the same way ("Slopify waits and tries again later by itself").
|
|
108
121
|
|
|
109
122
|
## In Docker: the host helper
|
|
110
123
|
|
package/dist/tutorials/Docker.md
CHANGED
|
@@ -18,7 +18,7 @@ On Windows, macOS or anything else, run Slopify without Docker ([Install](Instal
|
|
|
18
18
|
|
|
19
19
|
1. Open a terminal as your normal user.
|
|
20
20
|
2. Run `npx @gentbajko/slopify@latest --docker`.
|
|
21
|
-
3. If Claude Code, Codex or
|
|
21
|
+
3. If Claude Code, Codex or Antigravity CLI is installed on this computer, the installer asks once whether Slopify may use them (see [The host CLI bridge](#the-host-cli-bridge)). Answer `y` to allow it, or anything else to stop without changing anything. To use API keys only, run the command with `--host-cli=off` instead.
|
|
22
22
|
4. It asks `Start Slopify when you log in? (Y/n)` once. See [Start at Login](Start-at-Login#docker).
|
|
23
23
|
5. When it finishes it prints:
|
|
24
24
|
- `Slopify 3.0.0 is running at http://127.0.0.1:6969`
|
|
@@ -99,7 +99,7 @@ The recovery volume covers the database and settings, not your Projects folder.
|
|
|
99
99
|
|
|
100
100
|
## The host CLI bridge
|
|
101
101
|
|
|
102
|
-
If Claude Code, Codex or
|
|
102
|
+
If Claude Code, Codex or Antigravity CLI is installed on the host, Slopify in Docker can use them with the logins you already have. Nothing about your logins is copied into Docker.
|
|
103
103
|
|
|
104
104
|
- With your OK, the installer sets up a small helper, at the same version as the image, and keeps it in step on every install and update.
|
|
105
105
|
- The helper runs as the systemd user service `slopify-cli-bridge.service`, as you. User lingering is turned on so it runs at boot and after you log out.
|
package/dist/tutorials/FAQ.md
CHANGED
|
@@ -16,11 +16,11 @@ It depends on the providers, models, length and number of images. Play shows an
|
|
|
16
16
|
|
|
17
17
|
### Can I use my Claude, ChatGPT (Codex) or Gemini subscription instead of API keys?
|
|
18
18
|
|
|
19
|
-
Yes, through the command-line tools you are already signed in to: Claude Code, Codex or
|
|
19
|
+
Yes, through the command-line tools you are already signed in to: Claude Code, Codex or Antigravity CLI. Calls through them cost $0 on your plan; Slopify shows what the same work would cost through the API, for comparison only. When a plan's limit is used up, the run waits for the reset and carries on by itself. See [AI CLIs](AI-CLIs).
|
|
20
20
|
|
|
21
21
|
### Can I make a video without any API key?
|
|
22
22
|
|
|
23
|
-
Yes. Sign in to Claude Code, Codex or
|
|
23
|
+
Yes. Sign in to Claude Code, Codex or Antigravity CLI for the text (Codex also draws the images), and the narration can use your computer's own voice, the **System voice**, for free. That is what the first 60-second short uses when no voice key is saved. It sounds robotic, so add a voice key when you want a better one. See [Your First Short](Your-First-Short) and [Providers and Keys](Providers-and-Keys#the-system-voice).
|
|
24
24
|
|
|
25
25
|
### How do I know a key works before I save it?
|
|
26
26
|
|
|
@@ -16,7 +16,7 @@ The first-run screen stops appearing for good when you press **Skip** (it reads
|
|
|
16
16
|
|
|
17
17
|
### Found on this computer
|
|
18
18
|
|
|
19
|
-
Slopify looks for Claude Code, Codex and
|
|
19
|
+
Slopify looks for Claude Code, Codex and Antigravity CLI and shows one row for each:
|
|
20
20
|
|
|
21
21
|
| Row says | Meaning |
|
|
22
22
|
| --- | --- |
|
|
@@ -59,7 +59,7 @@ One work list: the things that don't move on until you act, then the finished vi
|
|
|
59
59
|
| A run you (or an agent) paused | **Paused** | **Open to continue** |
|
|
60
60
|
| Topics a schedule suggested | **N new topics** | **Review topics**, on the calendar: queue the ones you want and reject the rest. |
|
|
61
61
|
| A failed run | **Failed · <step>**, with a short reason | The fix to try: a button to Settings → Providers or Backup & storage when that is the fix, otherwise **Open to retry**. |
|
|
62
|
-
| A run that failed because a CLI is signed out | **Failed · <step>** | **Copy sign-in command** copies the command (`claude auth login`, `codex login` or `
|
|
62
|
+
| A run that failed because a CLI is signed out | **Failed · <step>** | **Copy sign-in command** copies the command (`claude auth login`, `codex login` or `agy`). Run it in a terminal on the computer running Slopify, then **Open to retry** and press **Check again** on the project. |
|
|
63
63
|
| A finished video you have not marked uploaded | **Ready to upload** | **Prepare upload** lists everything YouTube Studio asks for, with Copy buttons (Slopify never uploads for you; see [Publishing to YouTube](Publishing-to-YouTube)). **Mark uploaded** takes it off the list, with **Undo** in the notice; Projects still has it. |
|
|
64
64
|
|
|
65
65
|
A held run also offers **Keep as is**, which takes it off Needs you and leaves the rest unmade (with **Undo**); editing the project brings it back. A run waiting for an [agent's review](Agents-MCP#the-external-agent-reviewer) is not here: it goes on by itself, so it shows under Running now. A step that failed while the run waits on something else shows here as a failed item.
|
package/dist/tutorials/Home.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Slopify Wiki
|
|
2
2
|
|
|
3
|
-
Slopify turns a prompt and a few keywords into a narrated, captioned video. It writes the article, narrates it, makes the images and cuts the video, and can also give you shorts, a PDF of the article and a ready-to-paste YouTube description. It runs as a local web app on your own machine, with your own provider keys or the Claude Code, Codex or
|
|
3
|
+
Slopify turns a prompt and a few keywords into a narrated, captioned video. It writes the article, narrates it, makes the images and cuts the video, and can also give you shorts, a PDF of the article and a ready-to-paste YouTube description. It runs as a local web app on your own machine, with your own provider keys or the Claude Code, Codex or Antigravity CLI you already use. It is free.
|
|
4
4
|
|
|
5
5
|
These pages cover Slopify 3.0: every screen, every setting and every workflow, step by step.
|
|
6
6
|
|
|
@@ -41,7 +41,7 @@ These pages cover Slopify 3.0: every screen, every setting and every workflow, s
|
|
|
41
41
|
| Page | What it covers |
|
|
42
42
|
|---|---|
|
|
43
43
|
| [Providers and keys](Providers-and-Keys) | Every API provider, testing and saving keys, the system voice, Settings → Voices |
|
|
44
|
-
| [AI CLIs](AI-CLIs) | Claude Code, Codex and
|
|
44
|
+
| [AI CLIs](AI-CLIs) | Claude Code, Codex and Antigravity CLI: sign-in, use and plan limits |
|
|
45
45
|
| [Models](Models) | The model catalogue, retired models and switching |
|
|
46
46
|
| [Costs and run cost](Costs-and-Run-Cost) | Cost estimates, the run cost line, the Run cost tab and usage |
|
|
47
47
|
|
|
@@ -12,7 +12,7 @@ Slopify is a local web app you start from a terminal. It runs on your own comput
|
|
|
12
12
|
| Operating system | Windows, macOS or Linux for the normal install. The managed Docker install is Linux only (see [Docker](Docker)). |
|
|
13
13
|
| ffmpeg | Nothing to install: Slopify brings its own copy. See [ffmpeg](#ffmpeg) below. |
|
|
14
14
|
| Disk space | Enough for your videos. Every project keeps its video, images, narration and working files. The caption model is a 378 MB download (95 MB if you pick Smallest in Settings → Production defaults). |
|
|
15
|
-
| Keys or CLIs | Text and images can come from Claude Code, Codex or
|
|
15
|
+
| Keys or CLIs | Text and images can come from Claude Code, Codex or Antigravity CLI, or from API keys. Narration can use a voice provider key, or your computer's own speech for free (the System voice; on Linux, install `espeak-ng`). See [Providers and Keys](Providers-and-Keys) and [AI CLIs](AI-CLIs). |
|
|
16
16
|
|
|
17
17
|
## Choose how to run it
|
|
18
18
|
|
|
@@ -10,7 +10,7 @@ Settings → Providers shows three lists, one per kind of work. Each row says wh
|
|
|
10
10
|
|
|
11
11
|
| List | What it makes | Providers |
|
|
12
12
|
|---|---|---|
|
|
13
|
-
| **Text** | Research, script, article, titles, descriptions, reviews | OpenRouter (API key), Claude Code CLI, Codex CLI,
|
|
13
|
+
| **Text** | Research, script, article, titles, descriptions, reviews | OpenRouter (API key), Claude Code CLI, Codex CLI, Antigravity CLI (command line) |
|
|
14
14
|
| **Speech** | Narration | ElevenLabs, OpenAI, Cartesia, Inworld, Google Gemini (API key), System voice (built in, no key) |
|
|
15
15
|
| **Images** | Images, thumbnails, animated clips | fal.ai, Replicate, OpenAI, Google (API key), Codex CLI (command line) |
|
|
16
16
|
|
|
@@ -84,7 +84,7 @@ Writes the text with hundreds of models from many companies through one key. Cha
|
|
|
84
84
|
|
|
85
85
|
Keys have no scopes. If you set a credit limit on the key, keep it above what a run costs. OpenRouter is the only provider whose Test also shows missing credit.
|
|
86
86
|
|
|
87
|
-
### Claude Code CLI, Codex CLI,
|
|
87
|
+
### Claude Code CLI, Codex CLI, Antigravity CLI
|
|
88
88
|
|
|
89
89
|
No key. See [AI CLIs](AI-CLIs).
|
|
90
90
|
|
|
@@ -230,7 +230,7 @@ The keyed providers' numbers come from the model catalogue.
|
|
|
230
230
|
|
|
231
231
|
For each provider it checks:
|
|
232
232
|
|
|
233
|
-
- **Installed** and **Signed in** for a command-line tool.
|
|
233
|
+
- **Installed** and **Signed in** for a command-line tool. For Antigravity CLI, Slopify runs `agy models`: a model list means signed in, "Please sign in" means signed out (run `agy` in a terminal), and anything else shows as unknown.
|
|
234
234
|
- **Speech program found** for the System voice, with the program it speaks with.
|
|
235
235
|
- **Key saved** and **Key valid** for a keyed provider, using the same call as **Test**. Nothing is generated or billed.
|
|
236
236
|
- **Model reachable** for a keyed provider: Slopify asks the provider, with the saved key, about each model you chose (its model page, or the model list for OpenRouter and ElevenLabs), without generating anything. It reads, for example, "OpenRouter answered for … with this key." A provider with no such check says so.
|
|
@@ -47,7 +47,7 @@ The wait is saved in the database, so quitting or restarting Slopify keeps it: t
|
|
|
47
47
|
|
|
48
48
|
## Waiting for CLI plan limits
|
|
49
49
|
|
|
50
|
-
When Claude Code, Codex or
|
|
50
|
+
When Claude Code, Codex or Antigravity says your plan allowance is used up, the call does not fail: it waits. Slopify stores the reset time for that CLI, and every call to it, from any project, waits until two minutes after the reset. Without a stated reset time it checks again every 30 minutes.
|
|
51
51
|
|
|
52
52
|
The next action panel shows **Waiting for limits**, for example "Waiting for Codex limits (resets at 14:00)." with "Nothing to do: the run carries on by itself when they reset, and work that does not need Codex keeps going." There is nothing to press. A reset on another day shows the weekday (`Tue 14:00`); with no reset time, it says "(checking again at 14:30)"; with two plans, "Waiting for Codex and Claude limits".
|
|
53
53
|
|
|
@@ -79,12 +79,12 @@ The same fix-it buttons appear elsewhere too: Home's **Needs you** offers **Copy
|
|
|
79
79
|
|
|
80
80
|
### Sign a CLI in again
|
|
81
81
|
|
|
82
|
-
1. Press **Copy sign-in command**. It copies `claude auth login` (Claude Code), `codex login` (Codex) or `
|
|
82
|
+
1. Press **Copy sign-in command**. It copies `claude auth login` (Claude Code), `codex login` (Codex) or `agy` (Antigravity), and says so.
|
|
83
83
|
2. Paste it in a terminal on the computer running Slopify and sign in.
|
|
84
84
|
3. Press **Check again**. Slopify asks that CLI alone whether it is signed in now.
|
|
85
85
|
- Signed in: "Codex is signed in. Trying again." and the failed step runs again by itself.
|
|
86
86
|
- Still signed out: it says so and repeats the command; sign in, then press **Check again** once more.
|
|
87
|
-
- Can't tell (
|
|
87
|
+
- Can't tell (Antigravity sometimes can't say): try the step again with **Try … again**.
|
|
88
88
|
|
|
89
89
|
If the browser blocks the clipboard, type the command yourself; the notice names it.
|
|
90
90
|
|
|
@@ -28,18 +28,22 @@ Most problems in Slopify show up as a failed step on the project page with a mes
|
|
|
28
28
|
|
|
29
29
|
Keys and how to get them: [Providers and Keys](Providers-and-Keys).
|
|
30
30
|
|
|
31
|
-
## AI CLIs (Claude Code, Codex,
|
|
31
|
+
## AI CLIs (Claude Code, Codex, Antigravity)
|
|
32
32
|
|
|
33
33
|
| Message (or part of it) | Fix |
|
|
34
34
|
| --- | --- |
|
|
35
|
-
| "The *CLI* is not signed in, or its sign-in has expired." | Press **Copy sign-in command** on the project (or on Home's Needs you), run it in a terminal on the computer running Slopify (`claude auth login`, `codex login`, or `
|
|
36
|
-
| "Your Codex plan's usage limit is used up ... Slopify waits for it to reset and then carries on by itself." (also Claude and
|
|
35
|
+
| "The *CLI* is not signed in, or its sign-in has expired." | Press **Copy sign-in command** on the project (or on Home's Needs you), run it in a terminal on the computer running Slopify (`claude auth login`, `codex login`, or `agy`), sign in, then press **Check again**: once the CLI answers that it is signed in, the step runs again by itself. See [Recovery and Retries](Recovery-and-Retries#sign-a-cli-in-again). |
|
|
36
|
+
| "Your Codex plan's usage limit is used up ... Slopify waits for it to reset and then carries on by itself." (also Claude and Antigravity) | Nothing to do: the run waits instead of failing. The project, Home, Projects and the Calendar say "Waiting for Codex limits (resets at 14:00)". See [Recovery and Retries](Recovery-and-Retries#waiting-for-cli-plan-limits). |
|
|
37
37
|
| "The *CLI* stopped without answering" | Run the CLI in a terminal to check it works and is signed in, then try again. |
|
|
38
38
|
| "Slopify could not hand the whole prompt to the CLI, so it cannot tell what the CLI worked on (it may already have used your quota)." | Use **Try again**. This is not retried automatically, so you choose whether to spend the quota again. |
|
|
39
39
|
| "No Codex model is chosen for images." | Choose a model (or Codex default) for images in **Edit project → Providers**, then try again. |
|
|
40
40
|
| "Slopify could not get the model list from the *CLI* CLI." | Check the CLI is installed and signed in (Settings → Providers), refresh the list, or type an exact model ID. |
|
|
41
41
|
| A CLI shows as not installed in Settings | Install the CLI so it is on your `PATH`, or, in Docker, rerun the Docker install after installing or moving a CLI so the host helper finds it. Then press **Check again** on its row under **Health check**. |
|
|
42
|
-
|
|
|
42
|
+
| "The Antigravity CLI tried to use a tool Slopify does not allow (it said: …), so it gave no answer." | Headless `agy` refuses page reading, the browser and commands, and then ends its turn with no text. Press **Try again**. If it keeps happening, choose another model or text provider in the **Providers** section of **Edit project**. |
|
|
43
|
+
| "The Antigravity CLI answered with no text." | Press **Try again**. If it keeps happening, run `agy` in a terminal to check it works, or choose another model in the **Providers** section of **Edit project**. |
|
|
44
|
+
| "The Antigravity CLI is busy: Google's capacity for this model is used for the moment…" | Nothing to do: Slopify tries again by itself shortly. If it keeps happening, run fewer projects at once or choose another model in the **Providers** section of **Edit project**. |
|
|
45
|
+
| "The Antigravity CLI is not signed in…" | Run `agy` in a terminal, sign in with your Google account, then press **Try again**. |
|
|
46
|
+
| A run stops with "The chosen model is not available…" after the move from Gemini CLI | The old Gemini CLI model ids (for example `gemini-2.5-pro`) are not in the Antigravity CLI list. Run `agy models` and pick a model in **Edit project → Providers**. |
|
|
43
47
|
|
|
44
48
|
See [AI CLIs](AI-CLIs).
|
|
45
49
|
|
|
@@ -22,7 +22,7 @@ You need three things. Slopify checks them when you press the button and tells y
|
|
|
22
22
|
|
|
23
23
|
| Need | What Slopify uses, in this order |
|
|
24
24
|
| --- | --- |
|
|
25
|
-
| Text | Claude Code CLI (a Sonnet model when it has one), Codex CLI,
|
|
25
|
+
| Text | Claude Code CLI (a Sonnet model when it has one), Codex CLI, Antigravity CLI, then an OpenRouter key. |
|
|
26
26
|
| Images | Codex CLI, then an OpenAI, Google, fal.ai or Replicate key. |
|
|
27
27
|
| Voice | Your first saved voice whose provider has a key. If none, the style's suggested OpenAI voice when an OpenAI key is saved. If there is no voice key at all, your computer's own voice (the **System voice**): macOS or Windows speech, or Piper, SVOX Pico, eSpeak NG or eSpeak on Linux. |
|
|
28
28
|
|
|
@@ -30,7 +30,7 @@ Command-line tools can't speak, but you don't need a voice key to start: with no
|
|
|
30
30
|
|
|
31
31
|
To set these up:
|
|
32
32
|
|
|
33
|
-
1. Install and sign in to Claude Code, Codex or
|
|
33
|
+
1. Install and sign in to Claude Code, Codex or Antigravity CLI (see [AI CLIs](AI-CLIs)), or add keys in Settings → **Providers** (see [Providers and Keys](Providers-and-Keys)).
|
|
34
34
|
2. Optional: add a voice key in Settings → **Providers**. An OpenAI key is the simplest: the suggested voice works with it right away.
|
|
35
35
|
3. Back on the first-run screen, step **1 · What you have** shows which tools are ready and who will narrate.
|
|
36
36
|
|
|
@@ -88,7 +88,7 @@ The message names what is missing and where to fix it:
|
|
|
88
88
|
|
|
89
89
|
| Message starts with | Fix |
|
|
90
90
|
| --- | --- |
|
|
91
|
-
| No text model is ready. | Install Claude Code, Codex or
|
|
91
|
+
| No text model is ready. | Install Claude Code, Codex or Antigravity CLI and sign in, or add an OpenRouter key in Settings → Providers. |
|
|
92
92
|
| No image model is ready. | Install Codex CLI and sign in, or add an OpenAI, Google, fal.ai or Replicate key in Settings → Providers. |
|
|
93
93
|
| No voice is ready to narrate the short | Install `espeak-ng` (Linux) so the computer's voice can narrate, or add an OpenAI, ElevenLabs, Cartesia or Inworld key in Settings → Providers. |
|
|
94
94
|
| Your voice provider has no saved voice yet. | Add a voice in Settings → Voices, then try again. |
|