@osmo.inc/cli 0.1.15 → 0.1.16

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/DEPLOY.md CHANGED
@@ -1,64 +1,39 @@
1
- # Share videos and deploy Studio projects
1
+ # Share videos for review
2
2
 
3
3
  [Back to the CLI overview](README.md)
4
4
 
5
- ## Choose a sharing workflow
6
-
7
- The public release exposes video sharing. The entire `osmo studio` namespace
8
- is disabled and hidden from help by default. The Studio workflow below is for
9
- internal testing with `OSMO_STUDIO_ENABLED=1`; it will launch later.
10
-
11
- - `osmo share --video FILE.mp4`: upload a rendered video made in **any tool**, including drafts and work in progress, for
12
- comments and review version history. No editable source is uploaded. Works from
13
- any folder, without `osmo studio init`, Git, or an Osmo project. Requires `osmo login`
14
- and ffprobe (included with FFmpeg).
15
- - `osmo studio deploy [scene.tsx]`: deploy a **full-featured editable Osmo project**,
16
- including source files, assets, and tracked Git history, plus a rendered review
17
- video and layer outline. Requires an initialized and published Osmo project
18
- (`osmo studio init`, `osmo login`, `osmo studio publish`). Edit with local Studio or code;
19
- shared cloud reviews are read-only. When Studio is enabled, AI agents should choose this command when
20
- sharing an Osmo Studio project, to preserve editable source and project history.
5
+ Share a rendered video from any tool, including drafts and work in progress. Requires an Osmo login and ffprobe, with no project setup or Git repository.
21
6
 
22
7
  ```sh
23
8
  osmo login
24
9
  osmo share --video ./film.mp4 --name "Launch film"
25
- # Use the project ID printed above to add a version to the same review:
26
10
  osmo share --video ./film-v2.mp4 --project PROJECT_ID
11
+ ```
12
+
13
+ Without `--project`, each upload creates a new review. With `--project`, the upload adds a version to that review. The command does not initialize or write anything in the working folder.
14
+
15
+ Add `--json` for machine-readable output containing `project`, `render`, `link`, and `versionLink`. A failed upload reports the project ID for retrying; only completed uploads appear in review history.
16
+
17
+ ## Supported videos
18
+
19
+ Upload MP4 with H.264 8-bit 4:2:0 video and optional AAC audio, up to 2 GiB. Files are uploaded as supplied; export a compatible MP4 from your video tool before sharing. Uploads stream from disk without buffering the full file.
20
+
21
+ Fractional frame rates are preserved. Variable-frame-rate videos retain playback duration and seconds-based comments; timeline frame positions use the average frame rate.
22
+
23
+ ## Review links and comments
24
+
25
+ `link` is the stable review URL. Refresh it after a successful upload to see the newest completed version. An already open review stays on its version while you comment. Failed uploads leave the previous video available.
26
+
27
+ `versionLink` points to one specific video version. Comments stay attached to that version, and existing version links continue to work while sharing is enabled. Anyone with a review link can access the review.
28
+
29
+ ```sh
27
30
  osmo comments list --project PROJECT_ID --open --json
28
31
  osmo comments reply COMMENT_ID "Updated in the latest version." --project PROJECT_ID
29
32
  osmo comments resolve COMMENT_ID --project PROJECT_ID
33
+ osmo comments reopen COMMENT_ID --project PROJECT_ID
30
34
  ```
31
35
 
32
- Without `--project`, each video share creates a new cloud review project. The
33
- command does not initialize or write anything in the working folder. `--json`
34
- returns `project`, `render`, `link`, and `versionLink`. A failed upload prints the
35
- project ID for retrying; only completed uploads appear in review history.
36
-
37
- Video import accepts MP4 with H.264 8-bit 4:2:0 video and optional AAC audio, up to
38
- 2 GB. Unsupported codecs are rejected before creating a cloud project; export a
39
- compatible MP4 from your video tool first. Fractional frame rates are preserved;
40
- variable-rate videos retain exact playback duration and seconds-based comments
41
- (the timeline's frame positions use the average frame rate). Imported videos
42
- support time ranges, canvas annotations, replies, and resolution, without an
43
- editable layer outline. Uploads stream from disk without buffering the full file.
44
-
45
- ## Cloud review links
46
-
47
- Both workflows upload a version and print one stable project
48
- review URL (`/share/project/<project-id>`). Reopen or refresh it after a successful
49
- deployment to see the newest completed version; failed uploads leave the previous
50
- video available. An already open review stays on its version while you comment.
51
-
52
- With `--json`, `link` is the stable project URL and `versionLink` is the permanent
53
- URL for that particular render. Comments stay attached to their render. Existing
54
- version links continue to work while sharing is enabled. The stable route requires the matching web/backend
55
- update; source and revision access still require login, while review links retain
56
- the existing anyone-with-the-link access.
57
-
58
- Studio deployments include a public layer outline (names, hierarchy and timing),
59
- without source properties or asset URLs. Cloud comments preserve the local
60
- comment shape, including time ranges, canvas/element targets and replies. Older
61
- deployments remain viewable without the layer outline.
36
+ Reviews support time ranges, canvas annotations, replies, and resolving comments.
62
37
 
63
38
  ## Disable review links
64
39
 
@@ -66,22 +41,10 @@ deployments remain viewable without the layer outline.
66
41
  osmo unshare --project PROJECT_ID
67
42
  ```
68
43
 
69
- Requires login and owner or editor access to the project. Works from any folder,
70
- without a local project, Git, FFmpeg, or Studio enabled. Add `--json` for
71
- `{ "status": "undeployed", "project": "PROJECT_ID" }`. Repeating it is safe.
72
-
73
- This is soft revocation: the project, videos, comments, and source history stay
74
- stored. The main review link, all version links, public comment reads/writes, and
75
- new public download links stop working. Authenticated project access is retained.
76
- Previously obtained direct media URLs and downloaded copies are not revoked;
77
- media currently uses public object storage, and already issued signed downloads
78
- can remain valid until expiry.
79
-
80
- A successful new `osmo share --video FILE.mp4 --project PROJECT_ID` restores
81
- sharing for the project and all its existing versions. Studio projects can also
82
- be shared again with a new `osmo studio deploy`. Uploads begun before revocation,
83
- failed uploads, and retries of old completion requests do not restore sharing.
84
- The backend update and its `0065_review_link_revocation` and
85
- `0066_review_upload_generation` migrations must be deployed before using this
86
- command. Existing uploads without a captured sharing generation may finish, but
87
- cannot restore disabled links; start a new deployment to restore sharing.
44
+ Requires login and owner or editor access to the project. Works from any folder without local project files, Git, or FFmpeg. Add `--json` for `{ "status": "undeployed", "project": "PROJECT_ID" }`. Repeating the command is safe.
45
+
46
+ Videos, comments, and history remain stored. The main review link, all version links, public comment reads/writes, and new public download links stop working. Authenticated project access is retained.
47
+
48
+ Previously obtained direct media URLs and downloaded copies are not revoked; already issued signed downloads can remain valid until expiry.
49
+
50
+ A successful new `osmo share --video FILE.mp4 --project PROJECT_ID` restores the review links for the project and its existing versions. Uploads begun before links were disabled, failed uploads, and retries of old completion requests do not restore them. Start a new upload to restore sharing.
package/README.md CHANGED
@@ -1,243 +1,23 @@
1
- # Osmo CLI / Studio — public release
1
+ # Osmo CLI
2
2
 
3
- Video sharing and review with timeline comments. Studio authoring and rendering
4
- are unreleased and disabled by default.
5
- This release targets **macOS on Apple Silicon with arm64 Node 22**. Cloud commands
6
- use **https://studio.osmo.inc** by default.
7
- For preview testing, explicitly set `OSMO_BASE_URL=https://preview.osmo.inc`.
8
- Credentials are stored separately for each origin; changing the default does not
9
- move preview credentials or repoint existing published projects.
3
+ Share videos. Collect feedback.
10
4
 
11
- ## Installation
5
+ Upload a video from any tool and get a review link with timestamped comments and version history.
12
6
 
13
7
  ```sh
14
8
  npm install -g @osmo.inc/cli
15
- osmo login --json
9
+ osmo login
10
+ osmo share --video ./video.mp4
16
11
  ```
17
12
 
18
- No npm account is needed to install the public package. Building this repository
19
- does not publish to npm.
20
-
21
- **Prerequisites:** Node 22 and npm; FFmpeg with the `libx264` encoder and ffprobe
22
- on PATH for rendering/video workflows. Project authoring also requires Git with
23
- SHA-256 repository support (Git 2.29+). Rust, Cargo and this checkout are not
24
- needed on end-user machines. FFmpeg is not bundled.
25
-
26
- Share a rendered video from any tool, including drafts and work in progress, from any directory:
27
-
28
- ```sh
29
- osmo share --video ./animation.mp4
30
- ```
31
-
32
- This needs login and ffprobe, with no project, Git or `init`.
33
-
34
- Disable a project's public review links with `osmo unshare --project PROJECT_ID`.
35
- Videos, comments, and history are retained. A successful new deployment to the
36
- same project restores sharing. See the [revocation details](DEPLOY.md#disable-review-links).
37
-
38
- ## Internal Studio preview
39
-
40
- All `osmo studio …` commands are hidden from help and disabled by default,
41
- including Studio comments. For internal testing, explicitly enable them in the
42
- shell with `export OSMO_STUDIO_ENABLED=1`. Any other value leaves them disabled.
43
- This is a local release switch, not an authorization or security boundary.
44
- Project initialization is `osmo studio init`; the former top-level `osmo init`
45
- is removed. Project publishing, push, pull, sync, clone, and history also live
46
- under `osmo studio`; their former top-level commands are removed. Authentication,
47
- resources, video sharing, and video comments remain at the top level.
48
-
49
- With Studio enabled, the editable source, assets and Git history workflow is:
50
-
51
- ```sh
52
- osmo studio init my-animation
53
- cd my-animation
54
- osmo studio check scene.tsx
55
- osmo studio render scene.tsx --out exports/animation.mp4
56
- osmo studio publish --name "My animation"
57
- osmo studio deploy scene.tsx
58
- ```
59
-
60
- See the [sharing and deployment guide](DEPLOY.md) and [setup prompt](SETUP.md).
61
- Local authoring and rendering work without an Osmo account.
62
-
63
- ## Build and verify an archive
64
-
65
- From this checkout on an Apple Silicon Mac (Rust, wasm-pack, the wasm32 target,
66
- Node 22.18+, FFmpeg and Xcode command-line tools required):
13
+ Add a version, read feedback, or disable the link:
67
14
 
68
15
  ```sh
69
- npm ci
70
- npm -w @osmo/cli run package:internal
71
- node packages/cli/tools/smoke-package.mjs ./dist/osmo-cli-0.1.15-darwin-arm64.tgz
72
- npm install -g ./dist/osmo-cli-0.1.15-darwin-arm64.tgz
16
+ osmo share --video ./video-v2.mp4 --project PROJECT_ID
17
+ osmo comments list --project PROJECT_ID --open --json
18
+ osmo unshare --project PROJECT_ID
73
19
  ```
74
20
 
75
- The CLI source is strict TypeScript. The archive runs the compiled `dist/osmo.js`
76
- bundle, including the editor; raw CLI TypeScript is not shipped. A checkout
77
- requires Node 22.18+ for source tests; the installed CLI supports any Node 22.
78
- The CLI renderer excludes the standalone desktop UI. Resources are fetched when
79
- requested; the starter uses only text and built-in primitives. See the
80
- [package size audit](RELEASE.md#package-size-audit) for included runtime files.
81
-
82
- The internal archive is private and ad-hoc signed, for validation only. The build
83
- rebuilds native and WASM renderers, clears Studio output, gathers dependency and
84
- font notices, embeds Mediabunny's matching MPL source, and records artifact hashes
85
- in `release.json`. The archive test installs outside this checkout and exercises
86
- both deploy workflows against a local server. Nothing is published or uploaded
87
- to Osmo cloud by these commands.
88
-
89
- Public packaging needs no Apple credentials or new first-party license approval.
90
- It preserves existing license metadata and uses ad-hoc signing by default;
91
- certificate signing and notarization are optional. See [release instructions](RELEASE.md).
92
- The source workspace remains `private: true`; only the complete `--npm` package
93
- can be published as `@osmo.inc/cli` with public access and the `latest` tag.
94
-
95
- `osmo studio init` installs the matching `@osmo/scene` archive from `.osmo/vendor`, without an
96
- Osmo registry lookup. Keep that archive with the project. Existing scene/config
97
- files and user instructions outside the managed AGENTS.md section are preserved.
98
- Existing projects with scene API version 0.1.0 remain compatible. No scene API
99
- changes are introduced by this packaging work.
100
-
101
- ## Copy-paste agent prompt
102
-
103
- > Initialize an Osmo project in this folder with `osmo studio init`. Read `AGENTS.md`, create an animation using the supported primitives and Strict API, validate it with `osmo studio check scene.tsx`, and open it with `osmo studio open scene.tsx`. When I ask you to address feedback, read open Studio comments through the CLI. Validate completed fixes, reply only “Done.” and resolve them. Keep a comment open only for ambiguity, an incomplete fix, or a specific uncertainty needing my verification; leave one short sentence explaining what needs checking. Here is what I want to animate: …
104
-
105
- ## Account login
106
-
107
- ```sh
108
- npx @osmo.inc/cli login --json
109
- # Open the returned URL, confirm the code, then poll using its sessionId:
110
- npx @osmo.inc/cli login status SESSION_ID --json
111
- npx @osmo.inc/cli whoami --json
112
- npx @osmo.inc/cli logout --json
113
- ```
114
-
115
- `login` returns immediately so an agent can share the approval link. `login status`
116
- returns pending/connected/denied/expired; respect `retryAfter` before polling again.
117
- An unexpired attempt is reused. `--name "My laptop"` labels the connection.
118
- `whoami` calls the backend and refreshes expired tokens automatically. `logout`
119
- revokes that computer's connection; it preserves credentials when the server is
120
- unreachable so revocation can be retried. Cancelling an unapproved pending login
121
- removes it locally; its browser code expires on the server after ten minutes.
122
-
123
- Preview is the default. Set `OSMO_BASE_URL=https://studio.osmo.inc` to explicitly
124
- use production when its backend supports these commands; each origin has separate credentials.
125
- Projects already connected to a cloud origin retain that origin. Account commands work outside a
126
- Studio project. Secrets stay in `~/.osmo/auth` (directory 0700, files 0600), with
127
- atomic writes and a cross-process lock for polling/refresh. They never appear in
128
- CLI output. `OSMO_CONFIG_DIR` overrides the config root for isolated testing.
129
- After a killed auth process, an `auth_busy` error names the lock directory to
130
- remove once no auth command is running.
131
-
132
- Account login also authorizes resource-package downloads. Generative tool execution is not
133
- implemented. Studio's local preview and rendering still need no Osmo login.
134
-
135
- ## Resources
136
-
137
- In editing mode, Studio shows project resources in the inspector when nothing is
138
- selected. Drag a tile onto the timeline or canvas; compatible layer drops apply a
139
- shader effect or a Group background. Drops use existing scene syntax and undo/redo.
140
-
141
- ```sh
142
- osmo resources examples
143
- osmo resources import ./image.png
144
- osmo resources import ./video.mp4
145
- osmo resources import ./shader.wgsl
146
- osmo resources import ./model.glb
147
- osmo resources local --json
148
- ```
149
-
150
- These local commands require an initialized project, with no login. Files live
151
- under `resources/<id>/` and appear automatically in the panel. Images, videos,
152
- shaders, and GLB models are supported. Imported shaders are clip-only unless their
153
- descriptor supplies an effect entry; the bundled tint example includes both.
154
-
155
- ```sh
156
- osmo resources list --json
157
- osmo resources list --category shader --json
158
- osmo resources show silk --preset petrol --json
159
- osmo resources add silk --preset petrol --json
160
- osmo resources add liquid-glass --version 1.0.0 --preset frosted --json
161
- ```
162
-
163
- List/show work without login or a project. They include public previews and links;
164
- show reports compatibility with the running CLI. Add requires an initialized project
165
- and Osmo login. It installs authenticated, checksum-verified files into
166
- `resources/<id>/`: `shader.wgsl`, `shader.d.ts`, and `resource.json`. No lockfile or
167
- scene edits. An identical installed package is a no-op; different, incomplete or
168
- symlinked destinations are preserved and reported as conflicts. Presets share code;
169
- `--preset` selects the uniforms/usage returned to the agent, not different files.
170
-
171
- Use `Shader` with a relative `.wgsl` src and explicit uniforms. Uniform numbers and
172
- vectors support motion/knob bindings; shader source stays static. Read the installed
173
- types and the add command's usage instead of recreating a resource. CLI compatibility
174
- is authoritative for this version; early manifests may still say Strict is unsupported.
175
- The generated AGENTS.md requires resource discovery at the start of each animation
176
- task. Re-run `osmo studio init` to update that managed section in an existing project.
177
-
178
- `--json` errors include a stable error code; `login_required` includes the next login
179
- command. Approve login in the browser, poll the returned session, and retry add.
180
- The same OSMO_BASE_URL selects both the catalog and its separate credential store.
181
-
182
- ## Commands
183
-
184
- ```sh
185
- osmo studio init [folder]
186
- osmo studio open [scene.tsx] [--port NUMBER] [--no-open]
187
- osmo studio check [scene.tsx] [--json]
188
- osmo studio render [scene.tsx] --out animation.mp4 [--supersample 1|2]
189
- osmo studio render [scene.tsx] --frame 90 --out frame.png [--supersample 1|2]
190
- osmo studio comments list --open --json
191
- osmo studio comments list --scene scene.tsx
192
- osmo studio comments start COMMENT_ID [EMOJI]
193
- osmo studio comments stop COMMENT_ID
194
- osmo studio comments react COMMENT_ID [EMOJI|none]
195
- osmo studio comments reply COMMENT_ID "Done."
196
- osmo studio comments resolve COMMENT_ID
197
- osmo studio comments reopen COMMENT_ID
198
- ```
199
-
200
- A render holds every frame in memory and stops when the compiled scene passes
201
- 1 GB. For a long or dense scene, raise the limit in megabytes:
202
- `OSMO_SNAPSHOT_LIMIT_MB=4096 osmo studio render scene.tsx --out film.mp4`.
203
-
204
- Run project commands from the initialized folder (or a child folder). `open` prints a stable project URL such as `http://127.0.0.1:4310/my-animation-k7m2` and opens the browser. The first launch picks an available port starting at 4310 and saves it with a folder-derived ID and random access token in gitignored `.osmo/studio.json`. Later launches reuse them, including after a folder rename. `--port NUMBER` saves a different port (`--port 0` chooses an available one). A saved port occupied by another app produces an error; Studio never silently moves it. Reopening a running project reuses its server and switches to the requested scene. The clean page URL establishes an HttpOnly, SameSite cookie; authenticated API calls also require a custom header. The server binds only to 127.0.0.1 and rejects foreign Host/Origin headers. Existing tabs reconnect automatically after a restart. Ctrl+C stops its HTTP server, renderer and child processes. `render` defaults to 2× supersampling and preserves existing files. No login or backend is required.
205
-
206
- The browser provides play/pause, frame steps, scrubbing, looped playback, audio mute, timestamp/range comments, replies, filters, resolution, and MP4 export/download. Canvas hover previews a selection while paused. Click selects the outer group, double-click enters it, and Cmd/Ctrl-click selects the deepest element. Escape selects the parent or clears selection; empty canvas clears it. Clicking during playback pauses on the displayed frame. Canvas selections reveal their timeline rows. Hit testing uses native projected bounds, not per-pixel alpha or exact clipping. The centred switch changes between Comment mode (a compact time scale, seek bar and comments sidebar) and Interactive mode (properties/keyframes and read-only inspector). The seek bar expands smoothly to reveal layers in Interactive mode. Selection, playhead and layer expansion persist between modes. Its read-only timeline shows collapsible scene nesting, active durations, animation intervals, motion/effect/knob counts and expandable keyframes. Click a row for source locations, properties and a canvas outline; click a key to seek. Selection follows native layout bounds on the displayed frame, including nested groups and camera projection. The outline is a browser overlay and never appears in exports. Audio/Camera and Model Surface content have no standalone canvas outline; Models use their placement box. Effects can paint outside layout bounds. Drag the divider to resize the timeline. Inspection follows the successful preview revision and never edits source. Saving source/assets reloads the native scene. Compilation/render errors retain the last good preview and outline. Browser export uses the frozen preview snapshot; edits during export do not affect that export. CLI render compiles the source on disk.
207
-
208
- Single-frame PNG exports use zero-based frame numbers: `--frame 90` is 3 seconds at 30 fps. The frame must exist in the scene. PNGs preserve transparency and scene dimensions; supersampling improves edges without enlarging the output. Both render modes validate Strict syntax/types and refuse to overwrite existing files.
209
-
210
- ## Comments
211
-
212
- Press **C** for Comment mode or **E** for Interactive mode. Mode changes take 180ms; hold Shift while clicking a mode or using its shortcut to inspect the 1.8-second transition.
213
-
214
- In Comment mode, click the canvas for a point or drag a dashed rectangle around an area. Click the time scale for a timestamp or drag for a period. Open **Layers** to comment on a particular scene element without leaving Comment mode. Avatar pins on the canvas and time scale open the thread; hovering shows a preview. Clicking away discards empty drafts. With unsent text, the first outside click or Escape shakes the composer and keeps it open; repeating the same action discards it. Editing or clicking back inside resets that confirmation. Drafts do not survive a page reload. Drag a selected comment’s timeline handles to adjust its range, including after posting; an end handle can extend a point comment into a range. Click a sidebar comment card to seek to and highlight its timestamp or range. Saved threads support replies and resolution.
215
-
216
- Use the avatar button in the comments sidebar to set your local name and photo. The comment cursor uses your photo when available, otherwise the default comment icon. Profile settings live in `.osmo/comment-profile.json`; new comments include a snapshot of their author's profile. Area coordinates are relative to the preview dimensions, and element targets reference the preview's outline IDs. Canvas annotations appear at their timestamp or throughout their selected period; earlier-revision comments stay available on the timeline without projecting old bounds onto the new preview.
217
-
218
- `.osmo/comments.json` is persistent, versioned project data. UI and CLI share cross-process locking and atomic writes. Every comment contains a scene-relative filename, seconds (and optional endTime), an ID, preview content revision, status, text, replies and timestamps. Earlier revisions are flagged in the UI; timestamps are not automatically remapped after retiming. The agent never needs a running viewer to read/reply/resolve. An idle agent is not automatically notified: ask it to apply your comments through the CLI. Reopen is available to undo a resolution.
219
-
220
- ## Boundaries
221
-
222
- - Strict checks run before preview and export; this remains an authoring contract, not a sandbox. Only open trusted local source/assets.
223
- - v1 streams PNG frames on demand from one persistent native renderer, with a bounded 32 MB server frame cache. Preview drops frames to keep wall-clock timing under load; export renders every frame. Large scenes may not sustain their authored FPS. Incremental TSX compilation, adaptive preview resolution and video compression are future work.
224
- - Preview currently renders at 1×; export defaults to 2×. Audio uses the native frozen mix. No hosted sharing, multiplayer identities, spatial annotations, editable knob inspector, MCP server, or automatic agent wake-up yet.
225
- - The old desktop viewer remains available. The Studio worker is an additional native entry point.
226
-
227
- ## Development
228
-
229
- ```sh
230
- cargo build --locked --manifest-path apps/native/Cargo.toml
231
- node packages/cli/bin/osmo.mjs studio init /tmp/my-osmo-project
232
- cd /tmp/my-osmo-project
233
- node /path/to/ai-motion-designer-web/packages/cli/bin/osmo.mjs studio open scene.tsx --no-open
234
- ```
235
-
236
- Storage tests: `npm -w @osmo/cli test`. Native integration tests:
237
- `npm -w @osmo/cli run test:integration`. Integration tests start the real native renderer on loopback and use temporary projects. Build the native executable first. Browser UI components and adapted visual tokens live in `packages/studio`.
238
-
239
- ## Deployment and review
21
+ Requires **Apple Silicon macOS, Node 22, and ffprobe**. Accepts H.264 MP4 with optional AAC audio, up to 2 GiB. No project setup or Git required.
240
22
 
241
- See the [sharing and deployment guide](DEPLOY.md) for choosing between video-only sharing with
242
- `osmo share --video` and full editable projects with `osmo studio deploy`,
243
- including version updates, comments, and review links.
23
+ [Sharing guide](DEPLOY.md) · [AI agent setup](SETUP.md)
package/SETUP.md CHANGED
@@ -1,60 +1,30 @@
1
- # Osmo public setup
1
+ # Osmo CLI setup
2
2
 
3
- The release is for macOS on Apple Silicon with arm64 Node 22. It uses
4
- **https://studio.osmo.inc**, including login, uploads, and resource downloads.
5
- Existing project cloud pointers are preserved. Credentials are isolated by origin.
6
- The install command uses the default `latest` release.
3
+ Requires an Apple Silicon Mac, arm64 Node 22, and ffprobe (included with FFmpeg). The default service is **https://studio.osmo.inc**.
7
4
 
8
- ## Share an existing video
5
+ ## Install
6
+
7
+ ```sh
8
+ npm install -g @osmo.inc/cli
9
+ osmo login
10
+ osmo share --video ./video.mp4
11
+ ```
12
+
13
+ ## Setup prompt for an AI agent
9
14
 
10
15
  ```text
11
16
  Install @osmo.inc/cli from npm. Check for arm64 Node 22 and ffprobe.
12
17
  Run osmo login --json and show me the approval link and code. After I approve,
13
18
  poll login status with the returned sessionId, respecting retryAfter.
14
- Run osmo whoami --json, then osmo share --video /path/to/video.mp4.
15
- No Osmo project, Git repository or init is needed. Return the share link.
19
+ Run osmo whoami --json, then osmo share --video /path/to/video.mp4 --json.
20
+ No project setup or Git repository is needed. Return the review link and project ID.
16
21
  Never read or print stored credentials.
17
22
  ```
18
23
 
19
- Use H.264 MP4, 8-bit yuv420p, optionally with AAC audio, up to 2 GB.
20
- For later versions use `osmo share --video FILE.mp4 --project PROJECT_ID`.
21
- Disable review links with `osmo unshare --project PROJECT_ID`, preserving the data.
22
- Use `osmo comments list --project PROJECT_ID --open --json` to read feedback.
23
-
24
- ## Internal Studio preview (not part of the public launch)
24
+ Use H.264 MP4, 8-bit 4:2:0 video, optionally with AAC audio, up to 2 GiB. Files are uploaded as supplied.
25
25
 
26
- Studio commands are hidden and disabled by default. Public video sharing and
27
- comments do not require enabling Studio.
28
-
29
- ```text
30
- For internal testing only, set OSMO_STUDIO_ENABLED=1 in the command environment.
31
- Set up Osmo Studio with the internal CLI archive.
32
- Check for an Apple Silicon Mac, arm64 Node 22, npm, Git 2.29+ with SHA-256
33
- support, FFmpeg with libx264, and ffprobe. Report missing prerequisites.
34
- Run osmo studio init my-animation in a new folder, preserving files.
35
- Read the generated AGENTS.md and the @osmo/scene declarations.
36
- Run studio check scene.tsx, then studio render scene.tsx --out exports/check.mp4.
37
- Use another output filename if that file already exists.
38
- Open studio open scene.tsx and share the local preview URL.
39
- Use the osmo prefix for all commands and preserve the Studio flag in their environment.
40
- Wait for my animation brief after verifying setup.
41
- When I ask to share the project, use osmo login, osmo studio publish, and osmo studio deploy.
42
- That workflow includes editable source, assets and tracked Git history.
43
- ```
44
-
45
- Local rendering needs no account. Cloud sharing requires `osmo login`.
46
- The cloud review page is read-only; editing happens locally in Studio or code.
47
- See [DEPLOY.md](DEPLOY.md) for video sharing and Studio project deployment.
48
-
49
- ## Test an unpublished archive
50
-
51
- ```sh
52
- npm install -g /path/to/osmo-cli-0.1.15-darwin-arm64.tgz
53
- osmo --version
54
- export OSMO_STUDIO_ENABLED=1
55
- osmo studio init my-animation
56
- ```
26
+ For later versions, use `osmo share --video FILE.mp4 --project PROJECT_ID`.
27
+ Read feedback with `osmo comments list --project PROJECT_ID --open --json`.
28
+ Disable review links with `osmo unshare --project PROJECT_ID`, preserving the data.
57
29
 
58
- The internal archive is ad-hoc signed and intended for local validation. It is
59
- marked private to prevent accidental npm publication. It includes the renderer, Studio,
60
- scene library and compiler; Rust and this repository are not needed to use it.
30
+ See the [sharing guide](DEPLOY.md) for version history, comments, and link access.
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@osmo.inc/cli",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public",
7
7
  "tag": "latest",
8
8
  "registry": "https://registry.npmjs.org/"
9
9
  },
10
- "description": "Local Osmo Studio: native rendering, browser preview, and timeline feedback",
10
+ "description": "Share videos. Collect feedback.",
11
11
  "type": "module",
12
12
  "bin": {
13
13
  "osmo": "bin/osmo.mjs"
@@ -26,8 +26,7 @@
26
26
  "LICENSE",
27
27
  "THIRD_PARTY_NOTICES.md",
28
28
  "third-party",
29
- "release.json",
30
- "RELEASE.md"
29
+ "release.json"
31
30
  ],
32
31
  "engines": {
33
32
  "node": ">=22 <23"
package/release.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
- "version": "0.1.15",
2
+ "version": "0.1.16",
3
3
  "platform": "darwin-arm64",
4
4
  "channel": "latest",
5
5
  "defaultCloudOrigin": "https://studio.osmo.inc",
6
- "sourceCommit": "0bb14b4541e8e9955714ce24cdbac68869935b02",
6
+ "sourceCommit": "2a7c1a5e37e17f0508f123b86af67e584d5fd0a6",
7
7
  "sourceDirty": false,
8
8
  "signing": "ad-hoc",
9
9
  "licenseFileIncluded": false,
@@ -16,8 +16,8 @@
16
16
  }
17
17
  },
18
18
  "contents": {
19
- "totalBytes": 59066771,
20
- "fileCount": 948,
19
+ "totalBytes": 59037117,
20
+ "fileCount": 947,
21
21
  "groups": {
22
22
  "vendor": 16948891,
23
23
  "studio": 15935597,
@@ -29,12 +29,11 @@
29
29
  "node_modules/esbuild": 143795,
30
30
  "runtime": 137478,
31
31
  "node_modules/fflate": 96377,
32
- "README.md": 17083,
33
- "RELEASE.md": 9545,
34
- "DEPLOY.md": 4829,
35
- "SETUP.md": 2811,
32
+ "DEPLOY.md": 2902,
33
+ "SETUP.md": 1138,
36
34
  "THIRD_PARTY_NOTICES.md": 1088,
37
- "package.json": 951,
35
+ "package.json": 889,
36
+ "README.md": 636,
38
37
  "bin": 544
39
38
  },
40
39
  "largestFiles": [
@@ -129,7 +128,7 @@
129
128
  "third-party/inventory.json": "6ff4e90c6583a67ca8bfe95b3f4399cfcdc080d39585dce1314a8dd91ee6fecb"
130
129
  },
131
130
  "lockfiles": {
132
- "package-lock.json": "86a27a636faac94ee6a7d93fbfddd5b6f9fff296738eb9f702095e5a73b70f07",
131
+ "package-lock.json": "d355ffdb350a8fa57d7f4b06f28ef986ec0bd1ddc082094a4367f370ed3893d4",
133
132
  "apps/native/Cargo.lock": "cf31d67cf167c5f32438abfeb42159eb50da61d36e4e482bae50ed3d71241373",
134
133
  "packages/render-engine/Cargo.lock": "a1a68051e1eea30ef0fa46bf17cd0685bb2c6a327defed0405e0d63dd61017a7"
135
134
  }
@@ -1 +1 @@
1
- {"os":"darwin","arch":"arm64","version":"0.1.15"}
1
+ {"os":"darwin","arch":"arm64","version":"0.1.16"}
package/RELEASE.md DELETED
@@ -1,164 +0,0 @@
1
- # Public release
2
-
3
- Release branch: `feat/cli-public-beta-typescript`, based on preview after TypeScript migration
4
- PR #1045. The previous implementation remains on `feat/cli-public-beta`. End-user cloud default:
5
- `https://studio.osmo.inc`. Preview testing requires an explicit
6
- `OSMO_BASE_URL=https://preview.osmo.inc` override. Existing project origins and
7
- per-origin credentials are preserved; preview logins are not reused for production.
8
- Initial supported distribution: macOS Apple Silicon, arm64 Node 22. Other
9
- platforms must have their own build and clean-machine validation before support
10
- is declared. The current host's native deployment target is recorded by the
11
- binary; older macOS versions have not been certified by this change.
12
-
13
- ## Studio release switch
14
-
15
- `OSMO_STUDIO_ENABLED=1` enables the unreleased `osmo studio` namespace for internal
16
- testing, including `osmo studio init [folder]`. Initialization and its generated
17
- AGENTS.md guide belong to Studio; the former top-level `osmo init` is removed.
18
- Studio defaults off in both checkout and installed builds, independently of the
19
- cloud origin. Other values do not enable it. Disabled commands return
20
- `feature_disabled` with `--json` before project lookup, rendering, or cloud writes;
21
- help and video-share usage omit Studio commands. This local switch does not
22
- provide account-based access control.
23
-
24
- Project commands (`publish`, `push`, `pull`, `sync`, `clone`, and `history`) also
25
- live under `osmo studio` and require the same opt-in; their top-level forms are
26
- removed. Top-level authentication, resources, video sharing, and video comments
27
- are unchanged. The archive still contains
28
- the full runtime for internal opt-in; this flag alone does not shrink the payload.
29
- The release manifest records the default and environment variable. Installed
30
- smoke tests cover the disabled public surface and explicitly opt in for Studio
31
- rendering/deploy tests. Video deployment tests run with Studio disabled.
32
-
33
- ## Build and package
34
-
35
- 1. Use a clean checkout, `npm ci`, arm64 Node 22.18+, Rust/Cargo, wasm-pack,
36
- the wasm32-unknown-unknown Rust target, Xcode command-line tools, Git, and FFmpeg.
37
- The package builds both renderer targets from source, then bundles Studio.
38
- It also rebuilds the TypeScript CLI into `dist/osmo.js`; only that bundle and
39
- its starter/resource templates are shipped, not raw CLI or editor source.
40
- Compilation defaults to two Cargo jobs to limit memory usage.
41
- 2. Run unit tests, build the package and validate the installed archive:
42
-
43
- ```sh
44
- npm -w @osmo/cli test
45
- npm -w @osmo/studio test
46
- npm -w @osmo/cli run test:package
47
- npm -w @osmo/cli run package:npm
48
- node packages/cli/tools/smoke-package.mjs dist/osmo.inc-cli-0.1.15-darwin-arm64.tgz
49
- ```
50
-
51
- `package:npm` builds a publishable archive without requiring a first-party
52
- LICENSE file or Apple credentials. Existing first-party license metadata and an
53
- optional LICENSE file are preserved; the build does not choose new license terms.
54
- `package:internal` performs the same builds and checks but sets `private: true`
55
- for a local test archive. Neither command publishes to npm.
56
-
57
- ### Optional Apple signing
58
-
59
- Both archive types use an ad-hoc signature by default, which needs no Apple
60
- account or certificate. Set `OSMO_SIGNING_IDENTITY` to opt into certificate
61
- signing. Also set `OSMO_NOTARY_PROFILE` to opt into notarization using a configured
62
- `notarytool` keychain profile; that option requires a Developer ID Application
63
- identity. If explicitly requested signing/notarization fails, packaging fails
64
- instead of silently downgrading. `release.json.signing` records `ad-hoc`,
65
- `signed`, or `developer-id-notarized`. Standalone Mach-O binaries cannot have
66
- notarization tickets stapled. Do not commit credentials.
67
-
68
- ## Notices
69
-
70
- `third-party/inventory.json` enumerates the actual Studio bundle inputs, installed
71
- CLI dependencies and target-specific Cargo dependency graphs. Full upstream
72
- notices, Inter OFL, and matching Mediabunny MPL source are included. The CLI
73
- renderer excludes desktop UI dependencies and their unused fonts. Cargo entries conservatively include build-time dependencies.
74
- Missing third-party license text fails packaging. For crates omitting notices from their
75
- published archive, `licenses/rust-sources.json` pins upstream notice files by
76
- version, source commit and SHA-256. Dependency updates require reviewing these
77
- records. The upstream declaration and standard MIT text are retained for crates
78
- that declare MIT but omit its full text; see `licenses/README.md`.
79
-
80
- `release.json` records the source commit, dirty-tree state, lockfile hashes,
81
- platform, cloud default, signing state, renderer/Studio hashes, and payload sizes
82
- by directory with the largest files. These are
83
- local build records, not npm or SLSA provenance attestations. Review the archive
84
- contents before publishing. No Passenger fonts should be present.
85
-
86
- ## Before opening access
87
-
88
- - Validate the archive on a second Apple Silicon Mac, including launch behavior,
89
- install, login to studio.osmo.inc, font rendering, MP4 export and both deploy workflows.
90
- - Confirm the intended production account access policy, storage limits, upload rate
91
- limits and operational budget. Those backend policies are not added by this
92
- packaging change. Existing per-file limits are not per-account quotas.
93
- - Use your company npm publishing credentials for `@osmo.inc/cli`. Publish stable versions under npm's
94
- `latest` tag.
95
- - Publish separately when ready:
96
-
97
- ```sh
98
- npm publish ./dist/osmo.inc-cli-0.1.15-darwin-arm64.tgz --access public --tag latest
99
- ```
100
-
101
- The private GitHub repository is not made public by this workflow. No automated
102
- public publishing workflow is enabled here. Project initialization now uses `osmo studio init`; the scene API is unchanged.
103
-
104
- ## Local validation of 0.1.15-beta.1
105
-
106
- Validated on macOS 27.0 / Apple Silicon, Node 22.23.1. The native binary declares
107
- macOS 11.0 as its deployment target; this does not certify older macOS versions.
108
- All scene, editor, Studio and CLI typechecks passed after the TypeScript port.
109
- Scene tests: 233 passed; editor: 129; Studio: 68; CLI: 76, with the native deploy
110
- case run separately. Packaging regressions: 3 passed, including stale-font
111
- removal, missing/tampered notice rejection, and execution of the trimmed compiler
112
- and ZIP dependency. The actual 19.5 MiB archive installed
113
- offline outside the checkout, rejected unavailable Git without creating a partial
114
- project, initialized and typechecked the starter, and rendered visible Inter text
115
- to MP4. The archive contains `dist/osmo.js`, not raw CLI TypeScript, and its
116
- bundled auth flow independently verifies the studio.osmo.inc default. All 5 deploy tests passed against local cloud fixtures using the installed
117
- CLI and native release binary, including both deploy modes and comments. Two
118
- additional installed-package tests passed: generated SVG/WGSL/GLB fixtures and
119
- audible AAC export, plus Studio static assets and a native worker frame. The
120
- normal desktop build still passes Cargo check with its default features.
121
- The public npm archive also builds without a first-party LICENSE file or Apple
122
- credentials and passes all nine installed-package checks. A separate standalone
123
- video deployment to preview succeeded with Studio disabled. No npm publication,
124
- Developer ID signing, or notarization was performed.
125
-
126
- ## Package size audit
127
-
128
- Measured from the macOS arm64 internal npm tarball, with MiB = 1,048,576 bytes:
129
-
130
- | Payload | Before | After |
131
- | --- | ---: | ---: |
132
- | Compressed download | 24.89 MiB | 19.48 MiB |
133
- | Unpacked files | 77.52 MiB | 56.32 MiB |
134
- | Native renderer | 22.25 MiB | 16.13 MiB |
135
- | TypeScript dependency | 22.53 MiB | 9.45 MiB |
136
-
137
- The archive excludes the standalone desktop window, file picker, playback audio
138
- output library and desktop UI fonts. Audio mixing/export and Studio preview remain
139
- supported. Checkout desktop builds retain their default features.
140
-
141
- The staged compiler retains the compiler API and standard library declarations;
142
- CLI executables, language server, translated diagnostics and development files are
143
- excluded. Its JavaScript receives whitespace-only minification, with notices and
144
- a modification notice retained. Unused fflate builds, duplicate raw Studio fonts,
145
- vendor documentation, sample scripts and install metadata are also excluded.
146
- `init` now creates a small text animation with no external assets or shaders.
147
-
148
- Built-in WGSL implements rendering and effects; it stays embedded in the native
149
- and WASM renderers. Project media, resource catalog downloads, repository examples,
150
- shader demos and test fixtures are not bundled, except the existing 0.36 MiB
151
- `resources examples` templates. Removing that public command requires separate
152
- API approval. Resource listing/download/import continues to fetch content on demand.
153
-
154
- The remaining major components are native rendering (16.13 MiB), browser WASM
155
- (10.43 MiB), esbuild (9.90 MiB), the Node compiler and its standard libraries
156
- (9.45 MiB), and Studio JavaScript (4.46 MiB). Studio includes its own browser
157
- compiler for local source editing. Required notices and matching MPL source are
158
- retained. A much smaller base install would require optional/on-demand Studio and
159
- renderer downloads; that architectural change is not part of this cleanup.
160
-
161
- Package verification rejects desktop dependencies, redundant assets and removed
162
- compiler tools, and limits the macOS arm64 unpacked payload to 60 MiB. Review
163
- size changes deliberately before raising that budget. `release.json.contents`
164
- measures staged payload files before adding the release manifest itself.