@shotstack/cli 0.7.1 → 0.8.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/README.md +25 -0
- package/dist/shotstack.js +54 -53
- package/package.json +1 -1
- package/skills/shotstack/SKILL.md +4 -1
- package/skills/shotstack/references/onboarding.md +71 -0
package/package.json
CHANGED
|
@@ -13,7 +13,9 @@ license: Apache-2.0
|
|
|
13
13
|
|
|
14
14
|
This skill loads in **terminal-based AI agents** (Claude Code, Cursor, Codex CLI, Gemini CLI, etc.). All operations here are shell commands. There is no embedded UI, no iframe, no inline canvas, no MCP tool surface — only `shotstack` invocations from a terminal. To hand off to a human, run `shotstack studio <file>`; this opens the user's default browser to a `shotstack.studio` URL. Tell the user to click Render *in the browser tab*, not in any UI inside the terminal.
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
**Open-ended first render? Ask before composing.** If the ask doesn't state what the video is (subject, format or destination) — e.g. "render my first video", "make me a video", "set up Shotstack" — read [`references/onboarding.md`](references/onboarding.md) and ask its discovery questions, then WAIT for answers. Do not write an Edit first. An open-ended ask is not a specification, and a stray JSON file in the project doesn't make the user experienced. Compose without asking only when the user has stated what the video is, or explicitly says to just show anything.
|
|
17
|
+
|
|
18
|
+
Commands for the Shotstack video rendering API. `render` submits an Edit JSON and returns a render ID; `status` polls a render until done. `ingest` uploads your own local files (or fetches remote URLs) and hosts them so they can be referenced from an Edit. `validate` lints an Edit — run it before every render. `studio` opens an edit in the browser editor for a human to preview, tweak, and render. `template list|get|create|update|delete` reads and writes templates saved to the account: `list` shows saved templates (id + name); `get <id>` fetches a saved template's Edit JSON (e.g. one the user designed in Studio) so you can render or remix it; `create <file> --name <name>` saves an edit as a new template; `update <id> <file>` overwrites one; `delete <id>` removes one.
|
|
17
19
|
|
|
18
20
|
**Default loop — no API key required:** compose → `validate` (offline lint) → `studio` (browser preview). Only the API-backed commands (`render`, `status`, `ingest`) need a key. Reach for `render` when you specifically need a final MP4 exported in the cloud; reach for `studio` for everything else — it is the cheapest way to see an edit and the right default for any creative a human will review.
|
|
19
21
|
|
|
@@ -151,6 +153,7 @@ Authoritative sources, in order of preference:
|
|
|
151
153
|
|
|
152
154
|
This skill ships sub-references for the gnarly bits:
|
|
153
155
|
|
|
156
|
+
- [`references/onboarding.md`](references/onboarding.md) — first-render discovery interview for new users: what to ask, and how answers map to a first Edit
|
|
154
157
|
- [`references/ingest.md`](references/ingest.md) — uploading local files (and fetching URLs) so they can be used in an Edit: the upload→render workflow, `--watch`, status values, supported types
|
|
155
158
|
- [`references/timeline.md`](references/timeline.md) — track layering, transitions, background music via audio assets
|
|
156
159
|
- [`references/positioning.md`](references/positioning.md) — coordinate model, `position`/`offset` (fraction of frame, +y up), clip bounding box & `fit`, text sizing, transform order
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# First render: discovery interview
|
|
2
|
+
|
|
3
|
+
**The gate: do not compose an Edit until the user has answered the questions
|
|
4
|
+
below (or explicitly said "just show me anything").** Setting up the CLI and
|
|
5
|
+
key can proceed; writing the video cannot.
|
|
6
|
+
|
|
7
|
+
"Render my first video" is not a specification. It says nothing about the
|
|
8
|
+
subject, the content, the format or where the video will go. Neither does
|
|
9
|
+
"set up Shotstack". If any of those are unstated, ask. A first video is only
|
|
10
|
+
useful when it matches what the user is actually trying to make, and a short
|
|
11
|
+
interview gets there faster than guessing.
|
|
12
|
+
|
|
13
|
+
Skip the interview only when the user has stated what the video is (e.g.
|
|
14
|
+
"make a 9:16 promo from the images in ./assets with the tagline X"), or has
|
|
15
|
+
declined to answer.
|
|
16
|
+
|
|
17
|
+
## The interview
|
|
18
|
+
|
|
19
|
+
Ask conversationally, batched into one or two messages, and wait for the
|
|
20
|
+
reply. Skip any question the project already answers (e.g. a Next.js
|
|
21
|
+
e-commerce app full of product images answers question 2).
|
|
22
|
+
|
|
23
|
+
1. **What should the video do?** Social clips, product or listing videos,
|
|
24
|
+
personalised outreach, in-app content, something else? Listen for the job,
|
|
25
|
+
not the feature.
|
|
26
|
+
2. **What content or data exists?** Images, footage, audio or brand assets in
|
|
27
|
+
the project or at URLs; structured data (CSV, JSON, database, CMS) that
|
|
28
|
+
could drive repeated or personalised videos.
|
|
29
|
+
3. **Where will the videos go?** Destination decides format: 9:16 for
|
|
30
|
+
TikTok/Reels/Shorts, 1:1 or 4:5 for feeds, 16:9 for YouTube/web. When in
|
|
31
|
+
doubt for social, default to 1080x1920 (9:16).
|
|
32
|
+
4. **One video or many?** Both make fine first renders, but the composition
|
|
33
|
+
differs: pipelines should use merge fields from the start.
|
|
34
|
+
|
|
35
|
+
## From answers to a first render
|
|
36
|
+
|
|
37
|
+
- Compose ONE Edit JSON that answers the four questions. Make it something
|
|
38
|
+
worth keeping, not a minimal demo.
|
|
39
|
+
- Use the user's real assets when they exist (host local files first:
|
|
40
|
+
`shotstack ingest upload <file> --watch`, then reference the returned URL).
|
|
41
|
+
If nothing is to hand, build from the Shotstack asset library
|
|
42
|
+
(`references/asset-library.md`) and motion-graphic snippets
|
|
43
|
+
(`references/html5-snippets.md`), matched to their stated use case.
|
|
44
|
+
- Use their brand where it exists: colours, fonts and logos from the project
|
|
45
|
+
or their site rather than an invented look. Follow the house motion
|
|
46
|
+
language (`references/motion.md`).
|
|
47
|
+
- If they chose "many": add merge fields (`{{ placeholder }}`) for the parts
|
|
48
|
+
that vary per video, and show one render with sample values.
|
|
49
|
+
- Loop: compose, then `shotstack validate`, then `shotstack render edit.json
|
|
50
|
+
--env stage --watch`.
|
|
51
|
+
|
|
52
|
+
## Wrapping up
|
|
53
|
+
|
|
54
|
+
- Give two links, always: the rendered MP4 and a Studio link (`shotstack
|
|
55
|
+
studio <file> --no-open`, include the printed shotstack.studio URL). The
|
|
56
|
+
Studio link lets the user tweak the design in the browser without touching
|
|
57
|
+
JSON; say so.
|
|
58
|
+
- Describe what they have in plain terms: a reusable template, free stage
|
|
59
|
+
renders, the same JSON in production via `--env v1`, merge fields for the
|
|
60
|
+
parts that vary. Don't surface validator warnings or internal caveats
|
|
61
|
+
unless something is actually broken.
|
|
62
|
+
- End by offering to take the next step towards what they said in the
|
|
63
|
+
interview, concretely, not a generic list. They wanted a data-driven
|
|
64
|
+
pipeline: offer to wire the template to their data source and render a
|
|
65
|
+
batch now. They mentioned their own footage: offer to upload it and swap it
|
|
66
|
+
in. One sharp offer beats five open-ended suggestions.
|
|
67
|
+
|
|
68
|
+
## Tone
|
|
69
|
+
|
|
70
|
+
Brisk, concrete and curious about the user's project. Batch questions, don't
|
|
71
|
+
drip-feed. One good clarifying question beats three generic ones.
|