@cloudglue/tinycloud 0.3.5 → 0.3.7
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 +14 -8
- package/package.json +2 -2
- package/skills/tinycloud/SKILL.md +34 -12
- package/skills/tinycloud/reference/envelope.md +6 -4
- package/skills/tinycloud/reference/glossary.md +25 -0
- package/skills/tinycloud/reference/pipelines.md +6 -1
- package/skills/tinycloud/reference/setup.md +11 -2
- package/skills/tinycloud/reference/verbs.md +65 -9
- package/skills/tinycloud/scripts/preflight.sh +2 -2
- package/skills/tinycloud/tinycloud-skill.json +5 -3
- package/skills/tinycloud-init/SKILL.md +2 -2
package/README.md
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# Tinycloud
|
|
2
2
|
|
|
3
|
-
Agent CLI for deep video work. Point it at videos and ask
|
|
4
|
-
dashboards, subtitles, clips, search, or repurposed content — or
|
|
5
|
-
verbs directly from your own agent. Powered by
|
|
6
|
-
|
|
3
|
+
Agent CLI for deep video and image work. Point it at videos or images and ask
|
|
4
|
+
for analysis, dashboards, subtitles, clips, search, or repurposed content — or
|
|
5
|
+
drive its verbs directly from your own agent. Powered by
|
|
6
|
+
[Cloudglue](https://cloudglue.dev). Learn more at
|
|
7
|
+
[tinycloud.sh](https://tinycloud.sh).
|
|
7
8
|
|
|
8
9
|
## Install
|
|
9
10
|
|
|
@@ -16,11 +17,11 @@ The npm package is a small launcher: on first run it downloads the matching
|
|
|
16
17
|
platform distribution from Cloudglue's CDN (cached under
|
|
17
18
|
`~/.tinycloud/versions/<version>/`), verifies its checksum, and execs the real
|
|
18
19
|
binary. The package version pins the binary version, so
|
|
19
|
-
`npx @cloudglue/tinycloud@0.3.
|
|
20
|
+
`npx @cloudglue/tinycloud@0.3.7` always runs tinycloud 0.3.7. It also adds two
|
|
20
21
|
wrapper commands:
|
|
21
22
|
|
|
22
23
|
```bash
|
|
23
|
-
tinycloud install --version 0.3.
|
|
24
|
+
tinycloud install --version 0.3.7 # pre-download a version
|
|
24
25
|
tinycloud install --latest # install latest stable and pin to it
|
|
25
26
|
tinycloud update # move to latest stable, prune old versions
|
|
26
27
|
```
|
|
@@ -116,7 +117,8 @@ go to stderr) — pass `--json`.
|
|
|
116
117
|
| Command | What it does |
|
|
117
118
|
|---|---|
|
|
118
119
|
| `watch` | Analyze a video → reusable cached context + Cloudglue-ready ref |
|
|
119
|
-
| `
|
|
120
|
+
| `see` | Analyze an image → reusable cached context + Cloudglue-ready ref (JPEG/PNG/WebP) |
|
|
121
|
+
| `extract` | Pull structured facts, entities, or moments from a video or image (free-form or JSON-schema) |
|
|
120
122
|
| `caption` | Subtitles and transcripts (SRT/VTT/ASS) |
|
|
121
123
|
| `search` | Keyword search over cached video context |
|
|
122
124
|
| `probe` | Semantic moment/video search over a Cloudglue scope |
|
|
@@ -135,15 +137,19 @@ A few common invocations:
|
|
|
135
137
|
```bash
|
|
136
138
|
# Analyze a video into reusable, cached context + a Cloudglue-ready ref
|
|
137
139
|
tinycloud watch ./demo.mp4 --json
|
|
140
|
+
# Describe an image — the file-level counterpart of watch (JPEG/PNG/WebP)
|
|
141
|
+
tinycloud see ./photo.jpg --json
|
|
138
142
|
# Pull structured findings (free-form query here; pass --schema for a fixed shape)
|
|
139
143
|
tinycloud extract "key moments with timestamps" ./demo.mp4 --json
|
|
144
|
+
# extract also works on an image source (no segment/shot flags on images)
|
|
145
|
+
tinycloud extract "on-screen text and key objects" ./photo.png --json
|
|
140
146
|
# Subtitles plus a markdown transcript
|
|
141
147
|
tinycloud caption ./demo.mp4 --format srt --transcript --json
|
|
142
148
|
# Trim a clip locally — no upload, ffmpeg-backed
|
|
143
149
|
tinycloud clip cut ./demo.mp4 --start 12 --end 28 -o clip.mp4 --json
|
|
144
150
|
# Grounded Q&A over one or more videos
|
|
145
151
|
tinycloud ask "What objections came up?" --in ./demo.mp4 --json
|
|
146
|
-
# Detect faces, or match a known face against a video (0.3.4
|
|
152
|
+
# Detect faces, or match a known face against a video (0.3.4+; query image: JPEG/PNG)
|
|
147
153
|
tinycloud face match ./person.jpg ./demo.mp4 --max-faces 10 --json
|
|
148
154
|
```
|
|
149
155
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudglue/tinycloud",
|
|
3
|
-
"version": "0.3.
|
|
4
|
-
"description": "Agent CLI for deep video work, by Cloudglue. Downloads the tinycloud binary on first run.",
|
|
3
|
+
"version": "0.3.7",
|
|
4
|
+
"description": "Agent CLI for deep video and image work, by Cloudglue. Downloads the tinycloud binary on first run.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"tinycloud": "bin/tinycloud.js"
|
|
7
7
|
},
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tinycloud
|
|
3
3
|
description: >-
|
|
4
|
-
Deep video work via the tinycloud CLI (Cloudglue). Use whenever the
|
|
5
|
-
involves understanding or manipulating video
|
|
6
|
-
or summarize a video,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
Deep video and image work via the tinycloud CLI (Cloudglue). Use whenever the
|
|
5
|
+
task involves understanding or manipulating video, audio-visual media, or
|
|
6
|
+
images: analyze or summarize a video, describe or analyze an image, extract
|
|
7
|
+
structured facts/moments/entities from a video or image, generate captions or
|
|
8
|
+
transcripts (SRT/VTT), search inside videos, answer questions about footage,
|
|
9
|
+
cut/stitch/thumbnail/transcode clips, download remote videos, browse Cloudglue
|
|
10
|
+
collections, or run packaged video workflows. Triggers on video files (.mp4,
|
|
11
|
+
.mov, .webm, ...), image files (.jpg, .png, .webp), YouTube/video URLs,
|
|
12
|
+
Cloudglue collections, or any "what's in this video / describe this image /
|
|
13
|
+
make clips / caption this" request. Every command returns a machine-readable
|
|
14
|
+
JSON envelope.
|
|
13
15
|
---
|
|
14
16
|
|
|
15
17
|
# Tinycloud: video operations for agents
|
|
@@ -61,7 +63,7 @@ Full schema and error codes: [reference/envelope.md](reference/envelope.md).
|
|
|
61
63
|
|
|
62
64
|
## 2. Core verbs (cheat sheet)
|
|
63
65
|
|
|
64
|
-
Cloud verbs (`watch extract probe ask publish face`) call the Cloudglue API
|
|
66
|
+
Cloud verbs (`watch see extract probe ask publish face`) call the Cloudglue API
|
|
65
67
|
using the configured key — usage is billed per the
|
|
66
68
|
[rate card](https://app.cloudglue.dev/home/billing/rate-card). `search clip
|
|
67
69
|
setup` are local and free; `grab jobs` are network-only.
|
|
@@ -71,9 +73,14 @@ setup` are local and free; `grab jobs` are network-only.
|
|
|
71
73
|
# Understand a video (creates reusable cached context + cloud-ready ref)
|
|
72
74
|
tinycloud watch ./demo.mp4 --json
|
|
73
75
|
|
|
76
|
+
# Understand an image — the file-level counterpart of watch (0.3.7+, JPEG/PNG/WebP)
|
|
77
|
+
tinycloud see ./photo.jpg --json
|
|
78
|
+
|
|
74
79
|
# Pipe context into structured extraction (JSONL flows between pipes)
|
|
75
80
|
tinycloud watch ./demo.mp4 --json | tinycloud extract "key moments with timestamps" --json
|
|
76
81
|
tinycloud extract --schema ./schema.json ./demo.mp4 --segment-level --json
|
|
82
|
+
# extract also takes an image source (0.3.7+) — no segment/shot flags on images
|
|
83
|
+
tinycloud extract "on-screen text and key objects" ./photo.png --json
|
|
77
84
|
|
|
78
85
|
# Captions / transcripts
|
|
79
86
|
tinycloud caption ./demo.mp4 --format srt --transcript -o ./tinycloud-output/captions/ --json
|
|
@@ -91,7 +98,7 @@ tinycloud clip burn ./demo.mp4 --subtitle-file ./captions/demo.srt -o ./out.mp4
|
|
|
91
98
|
|
|
92
99
|
# Faces on a single video (cloud, 0.3.4+) — for collection-scale face search/list, see Collections below
|
|
93
100
|
tinycloud face detect ./demo.mp4 --json # every face → normalized box + timestamp
|
|
94
|
-
tinycloud face match ./person.jpg ./demo.mp4 --max-faces 10 --json # query image, ranked 0–100 similarity
|
|
101
|
+
tinycloud face match ./person.jpg ./demo.mp4 --max-faces 10 --json # query image (JPEG/PNG), ranked 0–100 similarity
|
|
95
102
|
|
|
96
103
|
# Remote videos, async jobs
|
|
97
104
|
tinycloud grab https://youtu.be/<id> -o ./tinycloud-output/grabbed/ --json
|
|
@@ -166,8 +173,16 @@ Authoring your own recipes: [reference/workflow-authoring.md](reference/workflow
|
|
|
166
173
|
- Sources: local paths, URLs, `cloudglue://files/<id>` URIs,
|
|
167
174
|
`collection:col_…`, or a bare Cloudglue file-id UUID (normalized to
|
|
168
175
|
`cloudglue://files/<id>`; an existing local path of the same name wins).
|
|
176
|
+
- Images (0.3.7+): use `see` to describe an image and `extract` to pull
|
|
177
|
+
structured data from one — **JPEG/PNG/WebP only** (HEIC/GIF/BMP are rejected
|
|
178
|
+
with a "transcode first" hint). `watch <image>` and `caption <image>` error
|
|
179
|
+
and redirect you to `see`/`extract` (an image has no video track to analyze
|
|
180
|
+
or speech to caption); images have no segments, so drop `--segment-level`/
|
|
181
|
+
`--segmentation`/`--shot-*` on an image source. A local image uploads first; a
|
|
182
|
+
public `http(s)` image URL is analyzed in place (no upload). Images can't be
|
|
183
|
+
added to collections. Local `search` can match cached `see` results.
|
|
169
184
|
- Do not pass `--background` to `ask`; background jobs exist only for tracked
|
|
170
|
-
async ops (`watch`, `extract`).
|
|
185
|
+
async ops (`watch`, `see`, `extract`).
|
|
171
186
|
- `workflow status` / `workflow resume` are not implemented in 0.3.x; treat
|
|
172
187
|
`paused`/`partial` as terminal and surface `resume` metadata to the user.
|
|
173
188
|
- `--no-upload` / `--no-download` make commands refuse cloud upload / local
|
|
@@ -193,6 +208,13 @@ Authoring your own recipes: [reference/workflow-authoring.md](reference/workflow
|
|
|
193
208
|
(`<cg-playlist>`, `<cg-grid>`, `<cg-chapters>`) rather than hand-rolled
|
|
194
209
|
players, galleries, or segment-list JS — details in
|
|
195
210
|
[reference/verbs.md](reference/verbs.md).
|
|
211
|
+
- Live-API discovery components (0.3.6+): the same embed script also defines
|
|
212
|
+
collection-scoped, **private-site-only** elements that let viewers search/chat
|
|
213
|
+
inside a published site — `<cg-chat>`, `<cg-search>`, `<cg-deep-search>`,
|
|
214
|
+
`<cg-face-search>` (chat/search/deep-search need a media-descriptions or
|
|
215
|
+
rich-transcripts collection; face-search needs face-analysis). `publish`
|
|
216
|
+
**hard-rejects** them on a public site → publish with `--visibility private`.
|
|
217
|
+
See [reference/verbs.md](reference/verbs.md).
|
|
196
218
|
|
|
197
219
|
## 5. Reference (load on demand)
|
|
198
220
|
|
|
@@ -60,10 +60,12 @@ the exit code alone.
|
|
|
60
60
|
|
|
61
61
|
`upstream` on a piped command means the upstream envelope was not `ready` —
|
|
62
62
|
fix the upstream failure, don't retry downstream. `upstream` from a cloud
|
|
63
|
-
call itself is a Cloudglue API failure;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
call itself is a Cloudglue API failure; transient ones (request deadline,
|
|
64
|
+
408/429/5xx, idle-timeout abort) are marked `retryable`, and idempotent reads
|
|
65
|
+
are already auto-retried with backoff before surfacing — so a retryable
|
|
66
|
+
`upstream` means the server may still be processing or retries were exhausted:
|
|
67
|
+
retry later or raise the knob the message names (`TINYCLOUD_HTTP_TIMEOUT_MS` /
|
|
68
|
+
`TINYCLOUD_UPLOAD_TIMEOUT_MS`).
|
|
67
69
|
|
|
68
70
|
## JSON vs JSONL vs text
|
|
69
71
|
|
|
@@ -41,6 +41,18 @@ connector?" or an envelope field needs explaining.
|
|
|
41
41
|
`cloudglue://files/<id>` URI, connector URI, collection, or a bare file-id
|
|
42
42
|
UUID (normalized to `cloudglue://files/<id>`; an existing local path of the
|
|
43
43
|
same name wins).
|
|
44
|
+
- **Supported inputs** — local uploads (`watch`, `see`, `extract`, `face`,
|
|
45
|
+
`library collections add`) map by extension: video `.mp4 .mov .webm .mkv .m4v`,
|
|
46
|
+
audio `.mp3 .wav .m4a`, and (for `see`/`extract` only, 0.3.7+) image
|
|
47
|
+
`.jpg .jpeg .png .webp`. Other extensions upload as `application/octet-stream`
|
|
48
|
+
and may be rejected upstream — transcode to a mapped container first
|
|
49
|
+
(`clip transcode`); unsupported image types (HEIC/GIF/BMP) are rejected before
|
|
50
|
+
upload with a "transcode to JPEG, PNG, or WebP" hint. Local uploads are bounded
|
|
51
|
+
by Cloudglue at ~3 GB and 2 s–3 h (connector ingests allow more); a public
|
|
52
|
+
`http(s)` image URL is analyzed in place with no upload. `face match`/`face
|
|
53
|
+
search` query images must be **JPEG or PNG**. Images can't be added to
|
|
54
|
+
collections. Use `grab` for YouTube and `library connectors sync` for share
|
|
55
|
+
links rather than passing those URLs to upload verbs.
|
|
44
56
|
- **`ref` / `source_id` / `result_id`** — stable identifiers in every
|
|
45
57
|
envelope. `ref` is a reusable pointer to the analyzed source (including
|
|
46
58
|
`cloud_ready` and the Cloudglue file id) that pipes between verbs;
|
|
@@ -55,6 +67,11 @@ connector?" or an envelope field needs explaining.
|
|
|
55
67
|
produces (summary, segments, transcript-ish context). Cached locally and
|
|
56
68
|
mirrored in Cloudglue, so later `extract`/`ask`/`search` reuse it instead
|
|
57
69
|
of re-analyzing.
|
|
70
|
+
- **See / image describe (0.3.7+)** — the image counterpart of `watch`:
|
|
71
|
+
`tinycloud see <image>` produces file-level image context (title,
|
|
72
|
+
description, on-screen text) and a reusable `ref`, with no segmentation or
|
|
73
|
+
shots. JPEG/PNG/WebP only; `extract` accepts the same image sources for
|
|
74
|
+
structured pulls.
|
|
58
75
|
- **Segmentation** — how a video is split for analysis: `chapters`
|
|
59
76
|
(semantic), `shots` (visual cuts; bounds tunable via
|
|
60
77
|
`--shot-min-seconds`/`--shot-max-seconds`, sub-second min allowed),
|
|
@@ -100,6 +117,14 @@ connector?" or an envelope field needs explaining.
|
|
|
100
117
|
events re-dispatched on the element) for custom site HTML, and plays
|
|
101
118
|
standalone or inside the container components (`<cg-playlist>`,
|
|
102
119
|
`<cg-grid>`, `<cg-chapters>`) — see reference/verbs.md.
|
|
120
|
+
- **Discovery components (live API, 0.3.6+)** — the same embed script also
|
|
121
|
+
defines four collection-scoped, **private-site-only** elements that let a
|
|
122
|
+
viewer search or chat inside a published site and play results inline via
|
|
123
|
+
`<cg-video>`: `<cg-chat>`, `<cg-search>`, `<cg-deep-search>` (over a
|
|
124
|
+
media-descriptions / rich-transcripts collection) and `<cg-face-search>` (over
|
|
125
|
+
a face-analysis collection). They carry no share id, but `tinycloud publish`
|
|
126
|
+
rejects them on a public site — publish `--visibility private`. See
|
|
127
|
+
reference/verbs.md.
|
|
103
128
|
|
|
104
129
|
## State and isolation (0.3.3+)
|
|
105
130
|
|
|
@@ -22,6 +22,11 @@ cat sources.txt | tinycloud watch --json
|
|
|
22
22
|
|
|
23
23
|
- Piping watch envelopes into `search` / `probe` / `ask` auto-scopes them via
|
|
24
24
|
`ref.cloudglue_file_id` / collection ids.
|
|
25
|
+
- A verb invoked with an explicit source/scope never reads stdin — only the
|
|
26
|
+
pipe form above (a source-less verb after `|`), `setup --stdin`, and a bare
|
|
27
|
+
`tinycloud` prompt do. When spawning tinycloud non-interactively (a subprocess
|
|
28
|
+
or a script), close or ignore its stdin (`</dev/null`, or Node
|
|
29
|
+
`stdio: ["ignore", …]`) and wrap the call in a timeout as a backstop.
|
|
25
30
|
|
|
26
31
|
## Multi-video batching
|
|
27
32
|
|
|
@@ -36,7 +41,7 @@ tinycloud caption ./talks/*.mp4 --format srt -o ./tinycloud-output/captions/ --j
|
|
|
36
41
|
|
|
37
42
|
## Async jobs
|
|
38
43
|
|
|
39
|
-
Long cloud operations (`watch`, `extract`) support `--background`:
|
|
44
|
+
Long cloud operations (`watch`, `see`, `extract`) support `--background`:
|
|
40
45
|
|
|
41
46
|
```bash
|
|
42
47
|
tinycloud watch ./long.mp4 --background --json # → status:"pending", meta.job_id
|
|
@@ -99,11 +99,20 @@ binary reports in `--version --json`.
|
|
|
99
99
|
| `TINYCLOUD_HOME` | Isolated state home — config, sessions, cache, jobs, artifacts, skills (default `~/.tinycloud`; same as `--home`). 0.3.3+ |
|
|
100
100
|
| `TINYCLOUD_OUT` | Output base for generated files (wins over a config `outputBase`) |
|
|
101
101
|
| `TINYCLOUD_HTTP_TIMEOUT_MS` | Hard deadline per Cloudglue request (default 120s; `0` disables) |
|
|
102
|
-
| `TINYCLOUD_UPLOAD_TIMEOUT_MS` |
|
|
102
|
+
| `TINYCLOUD_UPLOAD_TIMEOUT_MS` | Total deadline for upload-shaped requests (default 60min; `0` disables) |
|
|
103
|
+
| `TINYCLOUD_UPLOAD_IDLE_TIMEOUT_MS` | Idle (no-progress) deadline for an upload — aborts a wedged transfer in ~1min instead of waiting out the total upload deadline (default 60s; `0` disables) |
|
|
104
|
+
| `TINYCLOUD_HTTP_RETRIES` | Bounded auto-retries for idempotent (GET/HEAD) Cloudglue calls on transient errors — 408/429/5xx, network blips (default 5; `0` disables) |
|
|
105
|
+
| `TINYCLOUD_JOB_WAIT_TIMEOUT_MS` | Wall-clock budget for async job waits (the `waitForReady` poll behind `watch`/`extract`/`face`) (default 10min; `0` disables) |
|
|
106
|
+
| `TINYCLOUD_MODEL_RETRIES` | Client-side retries for the interactive agent's chat-model turns on transient connection errors (default 5; `0` disables). 0.3.7+ |
|
|
103
107
|
|
|
104
108
|
Every Cloudglue request carries a hard deadline, so a stalled route can never
|
|
105
109
|
hang the CLI indefinitely; a timeout surfaces as a retryable `upstream` error
|
|
106
|
-
envelope whose message names the knob to adjust.
|
|
110
|
+
envelope whose message names the knob to adjust. Idempotent reads (GET/HEAD,
|
|
111
|
+
including the status polls behind async waits) auto-retry transient failures
|
|
112
|
+
(408/429/5xx, network blips, idle-timeout aborts) with backoff + jitter before
|
|
113
|
+
surfacing, and uploads abort early if no progress is seen within the idle
|
|
114
|
+
window. Non-idempotent mutations (upload/create/add/delete) are never
|
|
115
|
+
auto-retried — a retryable `upstream` there is yours to re-issue.
|
|
107
116
|
|
|
108
117
|
## Profiles & isolated homes (0.3.3+)
|
|
109
118
|
|
|
@@ -7,7 +7,8 @@ every verb. Regenerate doubts from it instead of trusting prose.
|
|
|
7
7
|
| Verb | Cost | Auth | Use |
|
|
8
8
|
|---|---|---|---|
|
|
9
9
|
| `watch` | cloud | yes | Analyze a video → reusable context + Cloudglue-ready ref |
|
|
10
|
-
| `
|
|
10
|
+
| `see` | cloud | yes | Analyze an image → reusable context + Cloudglue-ready ref (0.3.7+) |
|
|
11
|
+
| `extract` | cloud | yes | Pull structured facts, entities, or moments (from a video **or** image) |
|
|
11
12
|
| `caption` | varies | no | Subtitles and transcripts (SRT/VTT/ASS) |
|
|
12
13
|
| `search` | local | no | Local keyword search over cached context |
|
|
13
14
|
| `probe` | cloud | yes | Semantic moment/video search over a Cloudglue-ready scope |
|
|
@@ -60,9 +61,30 @@ Shot bounds tune `--segment shots` only: min 0.6–600 (fractional/sub-second
|
|
|
60
61
|
values catch flash frames and rapid cuts), max 1–600, min ≤ max. Out-of-range
|
|
61
62
|
or wrong-mode values fail with a validation envelope before any upload. The
|
|
62
63
|
bounds are part of the cache key, so tuned and default shot passes never
|
|
63
|
-
collide.
|
|
64
|
+
collide. `watch` is **video/audio only** — point it at an image and it errors
|
|
65
|
+
("watch analyzes video/audio; for an image use `tinycloud see`").
|
|
64
66
|
|
|
65
|
-
###
|
|
67
|
+
### see — analyze an image (cloud, 0.3.7+)
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
tinycloud see <image> [--visual-only] [--background] --json
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The image counterpart of `watch`: file-level image understanding (title +
|
|
74
|
+
description + on-screen text) that produces reusable cached context and a
|
|
75
|
+
Cloudglue-ready ref. Images are **file-level only** — there is no segmentation,
|
|
76
|
+
no shots, no speech/transcript, and no `--start`/`--end` window, so `see` carries
|
|
77
|
+
none of those flags (only `--visual-only` to skip the textual read, plus the
|
|
78
|
+
shared output/cache/upload/source-reuse flags). Accepts **JPEG, PNG, or WebP**;
|
|
79
|
+
other types (HEIC/GIF/BMP/…) are rejected before upload with
|
|
80
|
+
`Unsupported image type for see: <name>. Transcode to JPEG, PNG, or WebP first.`
|
|
81
|
+
A local image uploads first (`needs_upload` without `--no-upload`); a public
|
|
82
|
+
`http(s)` URL that points directly at a JPEG/PNG/WebP image is analyzed **in
|
|
83
|
+
place — no upload** (a URL that can't be recognized as a direct image returns
|
|
84
|
+
`needs_download` — fetch it first with `grab`). Results cache by source +
|
|
85
|
+
options, so re-runs are free.
|
|
86
|
+
|
|
87
|
+
### extract — structured facts (video or image)
|
|
66
88
|
|
|
67
89
|
```bash
|
|
68
90
|
tinycloud extract "<query>" <source> --json # free-form query
|
|
@@ -72,8 +94,13 @@ tinycloud extract --schema ./schema.json <source> # JSON-schema-shaped output
|
|
|
72
94
|
[--include-thumbnails] [--transcript-mode] [--background]
|
|
73
95
|
```
|
|
74
96
|
|
|
75
|
-
|
|
76
|
-
|
|
97
|
+
`<source>` may be a video **or an image** (0.3.7+) — same JPEG/PNG/WebP rule
|
|
98
|
+
and local-upload-vs-URL-in-place behavior as `see`. The segmentation flags
|
|
99
|
+
(`--segment-level`/`--segmentation`/`--shot-*`) apply to video only; pass any of
|
|
100
|
+
them with an image source and `extract` rejects it before upload
|
|
101
|
+
(`Images have no segments — drop --segment-level/--segmentation/--shot-* for an
|
|
102
|
+
image source.`). `--shot-min-seconds`/`--shot-max-seconds` work exactly as on
|
|
103
|
+
`watch`, against `--segmentation shots`.
|
|
77
104
|
|
|
78
105
|
### caption — subtitles and transcripts
|
|
79
106
|
|
|
@@ -82,6 +109,9 @@ tinycloud caption <source> [--format srt|vtt|ass] [--transcript]
|
|
|
82
109
|
[--diarize] [--word-level] [-o <file-or-dir>]
|
|
83
110
|
```
|
|
84
111
|
|
|
112
|
+
Video/audio only — an image source is rejected ("Images have no speech to
|
|
113
|
+
caption — use `tinycloud see` or `tinycloud extract` to read an image's text.").
|
|
114
|
+
|
|
85
115
|
### search — local keyword search (free)
|
|
86
116
|
|
|
87
117
|
```bash
|
|
@@ -89,6 +119,9 @@ tinycloud search "<keyword>" [--in <paths|source-ids|collection-ids|all>]
|
|
|
89
119
|
[--field speech|visual|text|entities] [--limit 50]
|
|
90
120
|
```
|
|
91
121
|
|
|
122
|
+
Searches cached context locally, including cached `see` image results (0.3.7+),
|
|
123
|
+
so a describe you've already run is greppable without another cloud call.
|
|
124
|
+
|
|
92
125
|
### probe — semantic search (cloud)
|
|
93
126
|
|
|
94
127
|
```bash
|
|
@@ -143,7 +176,9 @@ tinycloud face search <image> --in collection:col_… [col_…]
|
|
|
143
176
|
a normalized 0–1 bounding box (`{top,left,width,height}`) plus a timestamp.
|
|
144
177
|
`match` takes a query image — a local file (downscaled and sent inline, **never
|
|
145
178
|
uploaded**) or an http(s) URL — and returns the closest faces ranked by a 0–100
|
|
146
|
-
`similarity`.
|
|
179
|
+
`similarity`. The query image must be a **JPEG or PNG** (Cloudglue face matching
|
|
180
|
+
decodes only JPEG/PNG — webp/heic/gif/bmp are rejected at preflight; a URL must
|
|
181
|
+
likewise point at a JPEG/PNG). Both upload the *video* first like `watch`/`extract`
|
|
147
182
|
(`needs_upload` without `--no-upload`) and cache by source + options, so re-runs
|
|
148
183
|
are free. `--fps`/`--start`/`--end` tune sampling and window;
|
|
149
184
|
`--max-faces`/`--min-similarity` bound `match`, `--limit` bounds `detect`,
|
|
@@ -346,6 +381,27 @@ private share — directly or through a container — on a public site. The full
|
|
|
346
381
|
reference ships with the binary as `references/cg-video.md` inside the
|
|
347
382
|
bundled media-artifact skill (under the install's `skills/` directory).
|
|
348
383
|
|
|
384
|
+
Discovery components (live API, 0.3.6+): the same `/__cg/embed.js` script also
|
|
385
|
+
defines four **collection-scoped** components that let a viewer search or chat
|
|
386
|
+
*inside* a published site and play the referenced moment inline via `<cg-video>`
|
|
387
|
+
— `<cg-chat>` (conversational Q&A, streaming answers + inline moment citations;
|
|
388
|
+
optional `placeholder`), `<cg-search>` (keyword/transcript text search),
|
|
389
|
+
`<cg-deep-search>` (agentic semantic search), and `<cg-face-search>` (upload or
|
|
390
|
+
paste a face image → matching moments). Each takes `collection="<id>"` (plus
|
|
391
|
+
optional `accent-color` and `--cg-height` CSS sizing); the collection's `--type`
|
|
392
|
+
must match the element — `<cg-chat>`/`<cg-search>`/`<cg-deep-search>` need a
|
|
393
|
+
`media-descriptions` or `rich-transcripts` collection, `<cg-face-search>` needs a
|
|
394
|
+
`face-analysis` collection. Unlike the playback elements they carry **no share
|
|
395
|
+
id**, but their live calls are refused on a public site, so `tinycloud publish`
|
|
396
|
+
**hard-rejects** a page that embeds any of them on a public site — publish with
|
|
397
|
+
`--visibility private`. End to end: build a collection of the right type
|
|
398
|
+
(`library collections create … --type …` → `library collections add` → poll
|
|
399
|
+
`library collections show` until each file is `completed`) → author HTML with
|
|
400
|
+
the component → `tinycloud publish <html> --visibility private`. Full reference
|
|
401
|
+
plus a kitchen-sink page wiring every component (props, JS API, events) ships
|
|
402
|
+
with the binary as `references/cg-video.md` and `references/kitchen-sink.html`
|
|
403
|
+
inside the bundled media-artifact skill.
|
|
404
|
+
|
|
349
405
|
### setup — credentials
|
|
350
406
|
|
|
351
407
|
```bash
|
|
@@ -362,18 +418,18 @@ Output: `--json` (force JSONL envelopes), `--pretty` (one JSON array),
|
|
|
362
418
|
`--data raw`, `--raw-output` (raw backend payload; disables pipe protocol),
|
|
363
419
|
`--quiet`, `--verbose`.
|
|
364
420
|
|
|
365
|
-
Cache — on `watch`, `extract`, `caption`, `face`, and `workflow` only:
|
|
421
|
+
Cache — on `watch`, `see`, `extract`, `caption`, `face`, and `workflow` only:
|
|
366
422
|
`--refresh` (recompute), `--no-cache` (no persistence), `--cached` (reuse
|
|
367
423
|
exact-match history). `ask`/`probe` always call the cloud; use `search` for a
|
|
368
424
|
free cached lookup.
|
|
369
425
|
|
|
370
426
|
Upload/download refusal — on every verb that resolves a source:
|
|
371
|
-
`--no-upload` (refuse cloud upload → `needs_upload`) on `watch`/`extract`/
|
|
427
|
+
`--no-upload` (refuse cloud upload → `needs_upload`) on `watch`/`see`/`extract`/
|
|
372
428
|
`caption`/`face`/`workflow`/`publish` and `library collections add`;
|
|
373
429
|
`--no-download` (refuse local materialization → `needs_download`) on the same
|
|
374
430
|
set minus `publish`.
|
|
375
431
|
|
|
376
|
-
Source reuse (`watch`/`extract`/`caption`): `--source-id <id>`, `--result-id <id>`.
|
|
432
|
+
Source reuse (`watch`/`see`/`extract`/`caption`): `--source-id <id>`, `--result-id <id>`.
|
|
377
433
|
|
|
378
434
|
Sources: local paths, URLs, `cloudglue://files/<id>` URIs,
|
|
379
435
|
`collection:col_…`, or a bare Cloudglue file-id UUID — bare ids are
|
|
@@ -9,11 +9,11 @@ set -u
|
|
|
9
9
|
|
|
10
10
|
# Mirror tinycloud-skill.json: min_version / supported_range upper bound
|
|
11
11
|
# (CI diffs these against the manifest).
|
|
12
|
-
MIN_VERSION="0.3.
|
|
12
|
+
MIN_VERSION="0.3.7"
|
|
13
13
|
MAX_VERSION_EXCLUSIVE="0.4.0"
|
|
14
14
|
INSTALL_CMD='curl -fsSL https://app.cloudglue.dev/tinycloud.sh | bash'
|
|
15
15
|
# Kept in sync with ../tinycloud-skill.json required_features (CI diffs them).
|
|
16
|
-
REQUIRED_FEATURES="envelope.v1 watch.v1 extract.v1 caption.v1 search.v1 probe.v1 ask.v1 clip.v1 grab.v1 face.v1 jobs.v1 library.collections.v1 library.collections.create.v1 library.collections.mutate.v1 library.collections.entities.v1 library.sync.url.v1 workflow.v1 publish.v1 publish.manage.v1 publish.video.v1 setup.v1"
|
|
16
|
+
REQUIRED_FEATURES="envelope.v1 watch.v1 see.v1 extract.v1 extract.images.v1 caption.v1 search.v1 probe.v1 ask.v1 clip.v1 grab.v1 face.v1 jobs.v1 library.collections.v1 library.collections.create.v1 library.collections.mutate.v1 library.collections.entities.v1 library.sync.url.v1 workflow.v1 publish.v1 publish.manage.v1 publish.video.v1 setup.v1"
|
|
17
17
|
|
|
18
18
|
# 1) Binary present and responsive?
|
|
19
19
|
if ! command -v tinycloud >/dev/null 2>&1; then
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
|
-
"skill_version": "0.3.
|
|
2
|
+
"skill_version": "0.3.7",
|
|
3
3
|
"tinycloud": {
|
|
4
|
-
"min_version": "0.3.
|
|
5
|
-
"supported_range": ">=0.3.
|
|
4
|
+
"min_version": "0.3.7",
|
|
5
|
+
"supported_range": ">=0.3.7 <0.4.0",
|
|
6
6
|
"required_features": [
|
|
7
7
|
"envelope.v1",
|
|
8
8
|
"watch.v1",
|
|
9
|
+
"see.v1",
|
|
9
10
|
"extract.v1",
|
|
11
|
+
"extract.images.v1",
|
|
10
12
|
"caption.v1",
|
|
11
13
|
"search.v1",
|
|
12
14
|
"probe.v1",
|
|
@@ -22,8 +22,8 @@ in order, skipping any that already pass.
|
|
|
22
22
|
command -v tinycloud && tinycloud --version --json </dev/null
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
If installed and the JSON reports `"version"` ≥ 0.3.
|
|
26
|
-
skill requires), go to step 2. If missing, older than 0.3.
|
|
25
|
+
If installed and the JSON reports `"version"` ≥ 0.3.7 (the floor the tinycloud
|
|
26
|
+
skill requires), go to step 2. If missing, older than 0.3.7, or no
|
|
27
27
|
machine-readable version, install or upgrade it — ask the user which they
|
|
28
28
|
prefer:
|
|
29
29
|
|