From fc140ade3a23fcb0d1df9507d467b82897773801 Mon Sep 17 00:00:00 2001 From: KDR Date: Fri, 17 Jul 2026 15:00:27 -0700 Subject: [PATCH] Prepare for tinycloud 0.3.13: sites embed v7 playback speeds (docs/prompt parity release) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Cloudglue sites embed script is moving to v7: every gets a playback-speed menu at every player size (default rates 1 1.5 2), a space-separated `playbackrates` attribute to supply a custom list, and a `playbackRate` get/set on the JS API (safe before mount; non-positive and non-numeric values ignored). The menu ships in the Cloudglue-served embed script — no new verbs, flags, or feature ids (verbs stay 16, features stay 33), and already-published sites pick it up without republishing. - skills/tinycloud: teach the speed surface where the embed family is documented — verbs.md (new "Playback speed (sites embed v7)" paragraph + attribute/JS API lists), glossary.md video-share entry, SKILL.md quick-notes bullet. - Version parity: package.json, plugin.json, marketplace.json, tinycloud-skill.json skill_version → 0.3.13. The skill floor stays 0.3.12 (min_version/supported_range/preflight unchanged — no binary-contract change forces a raise). - CLAUDE.md: 0.3.13 release note + CDN state/example versions; README pin examples. Merge only after CDN channels.stable = 0.3.13 (live-CDN smoke legs assert the pinned tarball set). --- .claude-plugin/marketplace.json | 4 ++-- .claude-plugin/plugin.json | 2 +- CLAUDE.md | 27 +++++++++++++++++--------- README.md | 4 ++-- package.json | 2 +- skills/tinycloud/SKILL.md | 4 +++- skills/tinycloud/reference/glossary.md | 6 ++++-- skills/tinycloud/reference/verbs.md | 16 +++++++++++++-- skills/tinycloud/tinycloud-skill.json | 2 +- 9 files changed, 46 insertions(+), 21 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index f90c627..c20f4c8 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -7,14 +7,14 @@ }, "metadata": { "description": "Deep video and image work for coding agents: analyze, describe, search, caption, clip, detect faces, and publish via the tinycloud CLI.", - "version": "0.3.12" + "version": "0.3.13" }, "plugins": [ { "name": "tinycloud", "source": "./", "description": "Video and image understanding and editing via the tinycloud CLI (Cloudglue): watch/see/extract/search/ask/face over videos and images, captions, clips, collections, plus one-command workflows for sales coaching, blog posts, ad analysis, meeting breakdowns, and YouTube publishing.", - "version": "0.3.12", + "version": "0.3.13", "author": { "name": "Cloudglue" }, "homepage": "https://tinycloud.sh", "repository": "https://github.com/cloudglue/tinycloud", diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 58fa98d..47fee54 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -2,7 +2,7 @@ "name": "tinycloud", "displayName": "Tinycloud Video", "description": "Video and image understanding and editing via the tinycloud CLI (Cloudglue): watch/see/extract/search/ask/face over videos and images, captions, clips, collections, and one-command video workflows.", - "version": "0.3.12", + "version": "0.3.13", "author": { "name": "Cloudglue", "url": "https://cloudglue.dev" }, "homepage": "https://tinycloud.sh", "repository": "https://github.com/cloudglue/tinycloud", diff --git a/CLAUDE.md b/CLAUDE.md index 532ffa7..79c1497 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -28,16 +28,16 @@ node --test test/unit.test.mjs # just the unit suite TINYCLOUD_TEST_TARBALL=~/Downloads/tinycloud-darwin-arm64.tar.gz npm test # e2e against a real dist tarball # Contract smoke tests against an installed/extracted binary -TINYCLOUD_CMD=/path/to/tinycloud EXPECTED_VERSION=0.3.12 bash scripts/smoke-test.sh +TINYCLOUD_CMD=/path/to/tinycloud EXPECTED_VERSION=0.3.13 bash scripts/smoke-test.sh # Serve a tarball as a fake CDN (modes: --corrupt, --no-manifest) -node test/fixtures/make-fixture-cdn.mjs --tarball .tar.gz --version 0.3.12 --port 8787 +node test/fixtures/make-fixture-cdn.mjs --tarball .tar.gz --version 0.3.13 --port 8787 TINYCLOUD_DIST_URL=http://127.0.0.1:8787 TINYCLOUD_INSTALL_DIR=$(mktemp -d) node bin/tinycloud.js --version --json TINYCLOUD_DIST_URL=http://127.0.0.1:8787 bash install.sh --install-dir $(mktemp -d)/bin # Release manifest tooling (maintainer) -node scripts/generate-manifest.mjs --version 0.3.12 --from-cdn # build manifest + .sha256 sidecars -node scripts/generate-manifest.mjs --check --version 0.3.12 # verify live CDN matches manifest +node scripts/generate-manifest.mjs --version 0.3.13 --from-cdn # build manifest + .sha256 sidecars +node scripts/generate-manifest.mjs --check --version 0.3.13 # verify live CDN matches manifest # Plugin metadata validation claude plugin validate . @@ -103,7 +103,7 @@ stdout (logs on stderr) with `status`: → exit codes 0/0/2/3/3/0/1. `tinycloud commands --json` is the authoritative flag list — verify doc claims against it, not memory (a doc bug shipped once because `--cached` only exists on watch/see/extract/caption/face/workflow). As -of 0.3.12 there are 16 verbs: `see` +of 0.3.13 there are 16 verbs: `see` (0.3.7+) analyzes an **image** (file-level, JPEG/PNG/WebP — the image counterpart of `watch`) and `extract` also takes an image source (features `see.v1`, `extract.images.v1`); 0.3.8 adds @@ -137,7 +137,16 @@ derived per run, never persisted, excluded from the cache key) and and **removes `watch --json-index`** (breaking: now an unknown-flag error). Because the speech fix is load-bearing, the skill floor was raised to 0.3.12 (`min_version`/preflight, the 0.3.7 floor-raise pattern — the dist PR merges -only after CDN `channels.stable` = 0.3.12). The +only after CDN `channels.stable` = 0.3.12). 0.3.13 is a docs/prompt parity +release for **sites embed v7 playback speeds**: every `` gets a +playback-speed menu at every player size (default rates `1 1.5 2`), authors +override the list with the space-separated `playbackrates` attribute, and the +JS API gains a `playbackRate` get/set (settable before mount; non-positive/ +non-numeric ignored). The speed menu lives in the Cloudglue-served embed +script, not the binary — no new verbs, flags, or feature ids (verbs stay 16, +features stay 33), the skill floor stays 0.3.12, and already-published sites +pick it up without republishing; the binary's embed guidance (skill reference, +kitchen sink, system prompt, publish notes) moved from v6 to v7 wording. The host-level `profile` verb and the leading global flags `--home`/`--profile` (also `$TINYCLOUD_HOME`; 0.3.3+) relocate state and are intentionally absent from `commands --json` — like the launcher's install/update, they're CLI/host @@ -190,9 +199,9 @@ of printing JSON. Any script invoking the binary must redirect `/`), verifies its checksum, and execs the real binary. The package version pins the binary version, so -`npx @cloudglue/tinycloud@0.3.12` always runs tinycloud 0.3.12. It also adds two +`npx @cloudglue/tinycloud@0.3.13` always runs tinycloud 0.3.13. It also adds two wrapper commands: ```bash -tinycloud install --version 0.3.12 # pre-download a version +tinycloud install --version 0.3.13 # pre-download a version tinycloud install --latest # install latest stable and pin to it tinycloud update # move to latest stable, prune old versions ``` diff --git a/package.json b/package.json index cf1d5fc..51b816d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cloudglue/tinycloud", - "version": "0.3.12", + "version": "0.3.13", "description": "Agent CLI for deep video and image work, by Cloudglue. Downloads the tinycloud binary on first run.", "bin": { "tinycloud": "bin/tinycloud.js" diff --git a/skills/tinycloud/SKILL.md b/skills/tinycloud/SKILL.md index 481eb60..78d6b97 100644 --- a/skills/tinycloud/SKILL.md +++ b/skills/tinycloud/SKILL.md @@ -206,9 +206,11 @@ Authoring your own recipes: [reference/workflow-authoring.md](reference/workflow `data.embed_snippet` (``), which only plays on a private site of the same account. When writing HTML around an embed, use the component's built-ins (`autoplay`+`muted`, `loop`, `start-time`, `exclusive`, + `playbackrates` — speed-menu rates, default `1 1.5 2`, shown at every + player size; embed v7 — `clip-start`/`clip-end` to frame one "back to moment" clip — plus `clip-only`, 0.3.8+, to play nothing but that window; JS - `playSegment(start, end?)`) and the container components + `playSegment(start, end?)`, `playbackRate` get/set) and the container components (``, ``, ``) rather than hand-rolled players, galleries, or segment-list JS — details in [reference/verbs.md](reference/verbs.md). diff --git a/skills/tinycloud/reference/glossary.md b/skills/tinycloud/reference/glossary.md index c7d8e1c..5997941 100644 --- a/skills/tinycloud/reference/glossary.md +++ b/skills/tinycloud/reference/glossary.md @@ -122,9 +122,11 @@ connector?" or an envelope field needs explaining. embed via the `data.embed_snippet` `` tag, which only plays on a private published site of the same account. The embed has playback attributes (`autoplay`+`muted`, `loop`, `start-time`, `poster`, - `accent-color`, `exclusive`, and `clip-start`/`clip-end` to frame a single + `accent-color`, `exclusive`, `playbackrates` — space-separated + playback-speed-menu rates, default `1 1.5 2`, shown at every player size + (sites embed v7) — and `clip-start`/`clip-end` to frame a single "back to moment" clip — `clip-only`, 0.3.8+, plays nothing but that - window) and a JS API (`playSegment`, `seekTo`, media + window) and a JS API (`playSegment`, `seekTo`, `playbackRate` get/set, media events re-dispatched on the element) for custom site HTML, and plays standalone or inside the container components (``, ``, ``) — see reference/verbs.md. diff --git a/skills/tinycloud/reference/verbs.md b/skills/tinycloud/reference/verbs.md index 37887e8..c6d3df3 100644 --- a/skills/tinycloud/reference/verbs.md +++ b/skills/tinycloud/reference/verbs.md @@ -390,13 +390,25 @@ When generating custom site HTML around a `` embed, use the component's built-ins instead of reinventing them. It defaults to a responsive 16:9 dark placeholder (override with plain page CSS on the `cg-video` selector); mount-time attributes: `autoplay` (pair with `muted` or -browsers block it), `loop`, `start-time`, `poster`, `accent-color`, and +browsers block it), `loop`, `start-time`, `poster`, `accent-color`, +`playbackrates` (speed menu — next paragraph), and `exclusive` (put it on every player in a gallery so starting one pauses the rest). Its JS API queues until ready — `playSegment(start, end?)`, -`seekTo()`, `play()`/`pause()` — and media events are re-dispatched on the +`seekTo()`, `play()`/`pause()`, `playbackRate` (get/set) — and media events +are re-dispatched on the element (`timeupdate`, `ended`, `cg-ready`); prefer `playSegment` over hand-rolled seek logic for "click a moment to play that segment" pages. +Playback speed (sites embed v7): every `` shows a playback-speed +menu at every player size — including narrow grid cells and phones — with +default rates `1 1.5 2`. Supply your own list with the space-separated +`playbackrates` attribute (e.g. `playbackrates="0.5 1 1.5 2"`), and get/set +the speed from page code via the `playbackRate` JS property (safe to set +before mount; non-positive and non-numeric values are ignored — the viewer +can always change it from the menu). The speed menu ships in the +Cloudglue-served embed script, so it is not gated on a tinycloud version and +already-published sites pick it up without republishing. + To frame a single moment inside the full recording — a cited highlight you want to share on its own — add `clip-start`/`clip-end` (seconds) to a bare ``: the player draws a clip-length badge, a clip-region strip with a diff --git a/skills/tinycloud/tinycloud-skill.json b/skills/tinycloud/tinycloud-skill.json index b73ffb7..8d128ee 100644 --- a/skills/tinycloud/tinycloud-skill.json +++ b/skills/tinycloud/tinycloud-skill.json @@ -1,5 +1,5 @@ { - "skill_version": "0.3.12", + "skill_version": "0.3.13", "tinycloud": { "min_version": "0.3.12", "supported_range": ">=0.3.12 <0.4.0",