@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shotstack/cli",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "description": "Command-line interface for the Shotstack video rendering API.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/shotstack/shotstack-cli",
@@ -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
- 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.
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.