opencode-skills-collection 4.1.18 → 4.1.20
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/bundled-skills/.antigravity-install-manifest.json +20 -1
- package/bundled-skills/ai-headshot-studio/SKILL.md +107 -99
- package/bundled-skills/ai-image-generation-studio/SKILL.md +108 -93
- package/bundled-skills/ai-logo-maker/SKILL.md +108 -93
- package/bundled-skills/ai-multilingual-dubbing/SKILL.md +108 -93
- package/bundled-skills/ai-photo-restyler/SKILL.md +108 -93
- package/bundled-skills/ai-podcast-voiceover/SKILL.md +108 -93
- package/bundled-skills/aident-loadout/SKILL.md +88 -0
- package/bundled-skills/antigravity-maintainer-batch-release/SKILL.md +27 -254
- package/bundled-skills/antigravity-maintainer-batch-release/agents/openai.yaml +1 -1
- package/bundled-skills/antigravity-maintainer-batch-release/references/component-validation.md +18 -0
- package/bundled-skills/antigravity-maintainer-batch-release/references/core-preview.md +20 -0
- package/bundled-skills/antigravity-maintainer-batch-release/references/maintenance-contract.md +83 -0
- package/bundled-skills/antigravity-maintainer-batch-release/references/maintenance-cycle.md +149 -0
- package/bundled-skills/antigravity-maintainer-batch-release/references/public-surfaces.md +22 -0
- package/bundled-skills/antigravity-maintainer-batch-release/references/skillspector.md +40 -0
- package/bundled-skills/apify-facebook-ads-library-scraper/SKILL.md +197 -0
- package/bundled-skills/apify-facebook-ads-library-scraper/references/gotchas.md +45 -0
- package/bundled-skills/apify-linkedin-jobs-scraper/SKILL.md +181 -0
- package/bundled-skills/apify-linkedin-jobs-scraper/references/gotchas.md +57 -0
- package/bundled-skills/apify-tiktok-scraper/SKILL.md +199 -0
- package/bundled-skills/apify-tiktok-scraper/references/gotchas.md +45 -0
- package/bundled-skills/arcmira-find-quotes/SKILL.md +5 -0
- package/bundled-skills/beatra/SKILL.md +109 -90
- package/bundled-skills/beatra-ai-video-studio/SKILL.md +110 -90
- package/bundled-skills/curlshot/SKILL.md +139 -0
- package/bundled-skills/datacircle/SKILL.md +159 -98
- package/bundled-skills/deed-page/SKILL.md +161 -0
- package/bundled-skills/design-token-contrast/SKILL.md +128 -0
- package/bundled-skills/design-token-contrast/references/contraste-checker.md +330 -0
- package/bundled-skills/ecommerce-listing-image-set/SKILL.md +109 -90
- package/bundled-skills/goal-instruction-writer/LICENSE +21 -0
- package/bundled-skills/goal-instruction-writer/SKILL.md +275 -0
- package/bundled-skills/goal-instruction-writer/references/contribution-walkthrough.md +9 -0
- package/bundled-skills/goal-instruction-writer/references/drift-control.md +160 -0
- package/bundled-skills/goal-instruction-writer/references/examples.md +220 -0
- package/bundled-skills/goal-instruction-writer/references/goal-contract.md +169 -0
- package/bundled-skills/goal-instruction-writer/references/loop-preview.md +113 -0
- package/bundled-skills/keenable-search-mcp/SKILL.md +176 -0
- package/bundled-skills/krexa/SKILL.md +221 -0
- package/bundled-skills/krexa/references/limits.md +42 -0
- package/bundled-skills/krexa/references/setup.md +60 -0
- package/bundled-skills/krexa/references/tools.md +59 -0
- package/bundled-skills/llm-cost-optimization/SKILL.md +1 -1
- package/bundled-skills/llmops-platform-engineering/SKILL.md +1 -1
- package/bundled-skills/multi-tenant-llm-hosting/SKILL.md +1 -1
- package/bundled-skills/music-generation-studio/SKILL.md +109 -90
- package/bundled-skills/outreachgenie-list-audit/LICENSE +21 -0
- package/bundled-skills/outreachgenie-list-audit/SKILL.md +60 -0
- package/bundled-skills/outreachgenie-list-audit/assets/fictional-snapshot.json +256 -0
- package/bundled-skills/outreachgenie-list-audit/references/capture.md +53 -0
- package/bundled-skills/outreachgenie-list-audit/references/checks.md +35 -0
- package/bundled-skills/outreachgenie-list-audit/references/setup.md +25 -0
- package/bundled-skills/outreachgenie-list-audit/scripts/audit.py +766 -0
- package/bundled-skills/outreachgenie-list-audit/scripts/test_audit.py +360 -0
- package/bundled-skills/pangolinfo-amazon-data-research/SKILL.md +170 -0
- package/bundled-skills/poster-design-studio/SKILL.md +109 -90
- package/bundled-skills/ppl-personal-crm/SKILL.md +118 -0
- package/bundled-skills/product-photo-studio/SKILL.md +109 -90
- package/bundled-skills/project-memory-log/LICENSE +21 -0
- package/bundled-skills/project-memory-log/SKILL.md +110 -0
- package/bundled-skills/project-memory-log/references/example-document-catalog.md +22 -0
- package/bundled-skills/project-memory-log/references/example-notes.md +16 -0
- package/bundled-skills/project-memory-log/references/example-operation-log.md +46 -0
- package/bundled-skills/project-memory-log/references/record-formats.md +77 -0
- package/bundled-skills/solidping/SKILL.md +87 -0
- package/bundled-skills/story-bible-continuity/SKILL.md +149 -0
- package/bundled-skills/story-bible-continuity/references/sbc-checker.md +367 -0
- package/bundled-skills/story-bible-continuity/references/story-bible-schema.md +91 -0
- package/bundled-skills/suno-lyrics-to-song/SKILL.md +109 -90
- package/bundled-skills/taasky/SKILL.md +376 -0
- package/bundled-skills/talking-avatar-video/SKILL.md +109 -90
- package/bundled-skills/uiverify-triage-visual-changes/SKILL.md +304 -0
- package/bundled-skills/unpaid-intern/SKILL.md +159 -0
- package/bundled-skills/viral-video-teardown-remake/SKILL.md +109 -90
- package/bundled-skills/voice-cloning-studio/SKILL.md +109 -90
- package/bundled-skills/voiceover-narration-studio/SKILL.md +109 -90
- package/package.json +1 -1
- package/skills_index.json +654 -24
|
@@ -11,7 +11,7 @@ author: beatra-ai
|
|
|
11
11
|
tags: [video-generation, text-to-video, image-to-video, video-editing, mcp, paid-api, beatra]
|
|
12
12
|
tools: [claude, codex, cursor, gemini]
|
|
13
13
|
license: "MIT-0"
|
|
14
|
-
license_source: "https://github.com/beatra-ai/beatra-skills/blob/
|
|
14
|
+
license_source: "https://github.com/beatra-ai/beatra-skills/blob/b7ab8ed02980ee44b6dac62633f8d79daf0809ab/LICENSE"
|
|
15
15
|
---
|
|
16
16
|
|
|
17
17
|
# Beatra AI Video Studio
|
|
@@ -26,20 +26,20 @@ video is produced on the hosted, paid Beatra service (`mcp.beatra.ai`).
|
|
|
26
26
|
This catalog entry is a **reviewed pointer, not the executable package**. It
|
|
27
27
|
contains no client code and performs no Beatra operation by itself. The package
|
|
28
28
|
it points to bundles three standard-library Python scripts that make network
|
|
29
|
-
calls
|
|
29
|
+
calls and store a credential. It has no self-updater: it never downloads
|
|
30
|
+
code and never changes its own files. Read
|
|
30
31
|
[Install](#install-pinned-verified-approved-twice) and
|
|
31
32
|
[Security & Safety Notes](#security--safety-notes) before activating it.
|
|
32
33
|
|
|
33
34
|
| Pinned identity | Value |
|
|
34
35
|
| --- | --- |
|
|
35
|
-
| Package | `beatra-ai-video-studio` `1.
|
|
36
|
-
|
|
|
37
|
-
|
|
|
38
|
-
| Source tree | [`beatra-ai/beatra-skills@95d662f`](https://github.com/beatra-ai/beatra-skills/tree/95d662f7aeddd6e2aa6da9e14f9c985e3f6b914d/skills/beatra-ai-video-studio) (full SHA `95d662f7aeddd6e2aa6da9e14f9c985e3f6b914d`) |
|
|
36
|
+
| Package | `beatra-ai-video-studio` `1.3.5` |
|
|
37
|
+
| Source commit | [`beatra-ai/beatra-skills@b7ab8ed`](https://github.com/beatra-ai/beatra-skills/tree/b7ab8ed02980ee44b6dac62633f8d79daf0809ab/skills/beatra-ai-video-studio) (full SHA `b7ab8ed02980ee44b6dac62633f8d79daf0809ab`) |
|
|
38
|
+
| Package tree | `5183c76c894e650691c8bb638257dd202b23e66c` (Git tree ID of `skills/beatra-ai-video-studio` at that commit) |
|
|
39
39
|
| License | MIT No Attribution (MIT-0) |
|
|
40
40
|
|
|
41
|
-
The
|
|
42
|
-
binaries)
|
|
41
|
+
The pinned tree holds regular files only (no symlinks, no executable bits, no
|
|
42
|
+
binaries). Confirm that with the inspect commands below.
|
|
43
43
|
|
|
44
44
|
## When to Use This Skill
|
|
45
45
|
|
|
@@ -52,72 +52,55 @@ binaries), and every file is byte-identical to the source tree at that commit.
|
|
|
52
52
|
|
|
53
53
|
## Install (pinned, verified, approved twice)
|
|
54
54
|
|
|
55
|
-
### Step 1:
|
|
55
|
+
### Step 1: Fetch the pinned tree into a review directory
|
|
56
56
|
|
|
57
|
-
Explain that this
|
|
57
|
+
Explain that this fetches an external package from `github.com`, then ask
|
|
58
58
|
for approval. Only after approval:
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
61
|
umask 077
|
|
62
62
|
review_dir="$(mktemp -d)"
|
|
63
63
|
cd "$review_dir" || exit 1
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
'beatra-ai-video-studio-skill-1.2.5.zip' | shasum -a 256 -c -
|
|
64
|
+
git clone --quiet --filter=blob:none --no-checkout https://github.com/beatra-ai/beatra-skills.git src
|
|
65
|
+
git -C src checkout --quiet b7ab8ed02980ee44b6dac62633f8d79daf0809ab -- skills/beatra-ai-video-studio
|
|
66
|
+
test "$(git -C src rev-parse 'b7ab8ed02980ee44b6dac62633f8d79daf0809ab:skills/beatra-ai-video-studio')" = '5183c76c894e650691c8bb638257dd202b23e66c' && echo TREE-OK
|
|
68
67
|
```
|
|
69
68
|
|
|
70
|
-
Stop if the
|
|
71
|
-
catalog entry, not from
|
|
69
|
+
Stop if the last command does not print `TREE-OK`. The expected commit and
|
|
70
|
+
tree IDs come from this catalog entry, not from the package or its website,
|
|
71
|
+
and Git addresses every fetched object by its hash.
|
|
72
72
|
|
|
73
73
|
### Step 2: Inspect before activation
|
|
74
74
|
|
|
75
75
|
```bash
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
find beatra-ai-video-studio -type l -print # expect no output
|
|
79
|
-
find beatra-ai-video-studio -type f -perm -111 -print # expect no output
|
|
80
|
-
grep -n '"auto_update": True' beatra-ai-video-studio/scripts/mcp_client.py
|
|
76
|
+
git -C src ls-tree -r b7ab8ed02980ee44b6dac62633f8d79daf0809ab -- skills/beatra-ai-video-studio | awk '$1 != "100644"' # expect no output
|
|
77
|
+
grep -n -E 'maybe_auto_update|download_update|_apply_update' src/skills/beatra-ai-video-studio/scripts/mcp_client.py # expect no output
|
|
81
78
|
```
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
git clone --quiet --filter=blob:none --no-checkout https://github.com/beatra-ai/beatra-skills.git src
|
|
88
|
-
git -C src checkout --quiet 95d662f7aeddd6e2aa6da9e14f9c985e3f6b914d -- skills/beatra-ai-video-studio
|
|
89
|
-
(cd beatra-ai-video-studio && find . -type f | LC_ALL=C sort | xargs shasum -a 256) > archive.sha
|
|
90
|
-
(cd src/skills/beatra-ai-video-studio && find . -type f | LC_ALL=C sort | xargs shasum -a 256) > tree.sha
|
|
91
|
-
cmp archive.sha tree.sha && echo IDENTICAL
|
|
92
|
-
```
|
|
80
|
+
The first check lists any symlink, executable, or submodule entry; the second
|
|
81
|
+
finds the entry points of the self-updater that earlier versions shipped.
|
|
93
82
|
|
|
94
|
-
Report to the user what the review found: `SKILL.md`, `manifest.json`,
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
83
|
+
Report to the user what the review found: `SKILL.md`, `manifest.json`,
|
|
84
|
+
`install-source.json` (the one-line marker `{"schema_version":1,"source":"github"}`),
|
|
85
|
+
the bundled Markdown references, and `scripts/authorize.py`,
|
|
86
|
+
`scripts/mcp_client.py`, `scripts/uninstall.py` (Python 3.10+, standard
|
|
87
|
+
library only, no dependency installation, no lifecycle hooks). Summarize the
|
|
88
|
+
network, credential, local-state, telemetry, and version-notice behavior
|
|
89
|
+
listed under [Security & Safety Notes](#security--safety-notes).
|
|
100
90
|
|
|
101
|
-
### Step 3: Copy in
|
|
91
|
+
### Step 3: Copy in
|
|
102
92
|
|
|
103
93
|
Ask for a **second, separate** approval, because this changes agent
|
|
104
94
|
configuration. Then copy the reviewed tree to the host's skills directory
|
|
105
|
-
(Claude Code shown; use the equivalent path for other hosts)
|
|
106
|
-
turn off silent self-update for that exact path:
|
|
95
|
+
(Claude Code shown; use the equivalent path for other hosts):
|
|
107
96
|
|
|
108
97
|
```bash
|
|
109
98
|
dest="$HOME/.claude/skills/beatra-ai-video-studio"
|
|
110
|
-
test ! -e "$dest" || { echo "destination exists; stop and ask the user"; exit 1; }
|
|
111
|
-
cp -R beatra-ai-video-studio "$dest"
|
|
112
|
-
python3 "$dest/scripts/mcp_client.py" update --auto off
|
|
99
|
+
test ! -e "$dest" && test ! -L "$dest" || { echo "destination exists; stop and ask the user"; exit 1; }
|
|
100
|
+
cp -R "src/skills/beatra-ai-video-studio" "$dest"
|
|
113
101
|
```
|
|
114
102
|
|
|
115
|
-
|
|
116
|
-
`Automatic Beatra package updates are disabled.` It writes only
|
|
117
|
-
`~/.beatra/updates/<id>/state.json` and makes no network request. Run it
|
|
118
|
-
before `authorize.py`, `verify`, `tools`, `upload`, or `call`: in version 1.2.5
|
|
119
|
-
self-update is **on by default** (see below). The setting is keyed to the
|
|
120
|
-
resolved install path, so repeat it after moving or re-copying the directory.
|
|
103
|
+
There is no update switch to turn off in this version.
|
|
121
104
|
|
|
122
105
|
### Step 4: Authorize as its own decision
|
|
123
106
|
|
|
@@ -165,16 +148,17 @@ identical arguments; never submit a replacement while the task is running.
|
|
|
165
148
|
|
|
166
149
|
## Update
|
|
167
150
|
|
|
168
|
-
This
|
|
169
|
-
|
|
170
|
-
|
|
151
|
+
This pinned version cannot update itself: it has no code that downloads or
|
|
152
|
+
replaces package files. `update` only reports what the store or tool that
|
|
153
|
+
installed the copy offers; for a copy installed by the steps above it finds
|
|
154
|
+
no such record and says to update the way you installed it. See the version
|
|
155
|
+
notice under [Security & Safety Notes](#security--safety-notes).
|
|
171
156
|
|
|
172
|
-
To move to a newer version, repeat Steps 1 to 3 for that
|
|
173
|
-
review directory,
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
the available version from `beatra.ai` without changing files.
|
|
157
|
+
To move to a newer version, repeat Steps 1 to 3 for that commit in a new
|
|
158
|
+
review directory, show the user the file-level changes against the installed
|
|
159
|
+
copy (for example `git -C src diff --stat b7ab8ed <new-commit> -- skills/beatra-ai-video-studio`),
|
|
160
|
+
and replace the directory only after approval. A version not listed in this
|
|
161
|
+
entry has not been reviewed here.
|
|
178
162
|
|
|
179
163
|
## Uninstall
|
|
180
164
|
|
|
@@ -186,22 +170,26 @@ python3 "$dest/scripts/uninstall.py"
|
|
|
186
170
|
|
|
187
171
|
Read the JSON decision. `disconnected` means this was the last Beatra skill on
|
|
188
172
|
the device: the token was revoked (when `revoked` is `true`) and the files
|
|
189
|
-
`credentials.json`, `installation.json`, `host.json`, `skills.json`,
|
|
190
|
-
`
|
|
191
|
-
|
|
192
|
-
|
|
173
|
+
`credentials.json`, `installation.json`, `host.json`, `skills.json`,
|
|
174
|
+
`network.json`, `balance-holds.json`, `pending_authorization.json`, and
|
|
175
|
+
`.authorize.lock` under `~/.beatra` were removed. `keep_connection` means
|
|
176
|
+
another Beatra skill still uses the shared token, which stays.
|
|
177
|
+
`revoke_retry` means the server refused the revocation and nothing changed;
|
|
178
|
+
run it again shortly. The script never deletes the package directory: after
|
|
179
|
+
confirming the path it prints with the user, delete `$dest`.
|
|
193
180
|
|
|
194
181
|
`uninstall.py` does not remove `~/.beatra/updates/`. When the decision is
|
|
195
182
|
`disconnected` and no other Beatra skill is installed, remove that directory
|
|
196
|
-
|
|
197
|
-
days idle and can be revoked at once in the
|
|
183
|
+
and then the empty `~/.beatra`; otherwise leave them. A token that could not
|
|
184
|
+
be revoked expires after 15 days idle and can be revoked at once in the
|
|
185
|
+
Beatra Console under Agents.
|
|
198
186
|
|
|
199
187
|
## Best Practices
|
|
200
188
|
|
|
201
189
|
- ✅ Keep one approval per paid call, per upload set, and per install step.
|
|
202
190
|
- ✅ Start with the shortest duration and lowest resolution the model admits.
|
|
203
191
|
- ✅ Report net charged credits from the terminal task, not the estimate.
|
|
204
|
-
- ❌ Do not
|
|
192
|
+
- ❌ Do not replace the installed copy with an unreviewed version silently.
|
|
205
193
|
- ❌ Do not print, paste, or move the token out of `~/.beatra/credentials.json`.
|
|
206
194
|
- ❌ Do not retry a paid call with a new request ID after an uncertain response.
|
|
207
195
|
|
|
@@ -222,40 +210,72 @@ days idle and can be revoked at once in the Beatra Console under Agents.
|
|
|
222
210
|
|
|
223
211
|
`risk: critical` is deliberate.
|
|
224
212
|
|
|
225
|
-
- **Network.**
|
|
226
|
-
|
|
227
|
-
`
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
213
|
+
- **Network.** Every request is HTTPS and refuses redirects. Authorization
|
|
214
|
+
uses `api.beatra.ai` and tool calls go to `mcp.beatra.ai`; an upload is a
|
|
215
|
+
`PUT` of the approved file to the HTTPS address the server returns, without
|
|
216
|
+
the bearer token. Unless a cached decision is still valid (10 minutes to 7
|
|
217
|
+
days), each run first asks `https://api.beatra.ai/skill-route`, and also
|
|
218
|
+
`https://api.beatra.cn/skill-route` when the first is slow or answers `cn`,
|
|
219
|
+
which network to use. These probes carry no credential or package identity.
|
|
220
|
+
When the answer is `cn`, authorization and tool calls go to `api.beatra.cn`
|
|
221
|
+
and `mcp.beatra.cn` with the same bearer token, and the version notice
|
|
222
|
+
reads from `www.beatra.cn`; Beatra serves these `.cn` hosts from mainland
|
|
223
|
+
China.
|
|
224
|
+
`python3 "$dest/scripts/mcp_client.py" network --use ai` pins the `.ai`
|
|
225
|
+
hosts and stops the probes; a failed version-notice read can still retry
|
|
226
|
+
once on the other network.
|
|
227
|
+
- **Version notice, no self-update.** This version has no code that downloads
|
|
228
|
+
or replaces package files and writes nothing inside the install directory.
|
|
229
|
+
Before `verify`, `tools`, `upload`, or `call`, at most once every 24 hours
|
|
230
|
+
per install path, it records the check time and looks, read-only, for
|
|
231
|
+
records another installer left beside the package (ClawHub `origin.json`,
|
|
232
|
+
SkillHub or `skills` CLI lock entries, `gh skill` frontmatter). A copy
|
|
233
|
+
installed by the steps above normally has none and makes no request. When
|
|
234
|
+
one is found, it reads `https://beatra.ai/skills/beatra-ai-video-studio/sources.json`
|
|
235
|
+
(no credential, 3-second timeout, 64 KiB cap) and, if that installer offers a
|
|
236
|
+
newer version, prints one line to stderr with the installer's own update
|
|
237
|
+
command. It never runs the command.
|
|
236
238
|
- **Uploads and third parties.** Prompts and uploaded media are sent to Beatra
|
|
237
239
|
and forwarded to the third-party model provider executing the task. Beatra
|
|
238
|
-
|
|
240
|
+
runs the service outside mainland China; on the `cn` route (see Network)
|
|
241
|
+
requests reach it through Beatra's hosts in mainland China. See the
|
|
239
242
|
[privacy policy](https://beatra.ai/en/privacy).
|
|
240
243
|
- **Billing.** Paid tools consume prepaid credits. Credits for tasks that fail
|
|
241
244
|
for reasons attributable to Beatra or the upstream model are returned
|
|
242
245
|
automatically; otherwise purchases are non-refundable, and actual usage can
|
|
243
246
|
exceed the estimate and leave a negative balance. See the
|
|
244
247
|
[terms](https://beatra.ai/en/terms).
|
|
245
|
-
- **Credentials.** `authorize.py` runs an OAuth device flow, opens the browser
|
|
246
|
-
and stores one bearer token in
|
|
247
|
-
`0700`, file `0600`). The token never
|
|
248
|
-
or output. It carries full Beatra
|
|
249
|
-
sliding 15-day idle lifetime, and is
|
|
250
|
-
device.
|
|
248
|
+
- **Credentials.** `authorize.py` runs an OAuth device flow, opens the browser
|
|
249
|
+
on the approval page, and stores one bearer token in
|
|
250
|
+
`~/.beatra/credentials.json` (directory `0700`, file `0600`). The token never
|
|
251
|
+
goes into argv, environment variables, or output. It carries full Beatra
|
|
252
|
+
scope, including `wallet:spend`, has a sliding 15-day idle lifetime, and is
|
|
253
|
+
shared by every Beatra skill on the device. While the user has not yet
|
|
254
|
+
selected Allow, the pending device code is kept in
|
|
255
|
+
`~/.beatra/pending_authorization.json` (`0600`) so a rerun finishes the same
|
|
256
|
+
approval instead of opening a new one. When `verify`, `tools`, `upload`, or
|
|
257
|
+
`call` finds no working token, the client makes one check of that saved
|
|
258
|
+
approval and stores the token if the user has already selected Allow; it
|
|
259
|
+
never starts a new authorization or opens a browser.
|
|
251
260
|
- **Local state.** `~/.beatra/` also holds `installation.json` (random
|
|
252
261
|
installation reference), `host.json` (agent platform and hostname),
|
|
253
|
-
`skills.json` (installed Beatra skill paths), `
|
|
254
|
-
|
|
255
|
-
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
262
|
+
`skills.json` (installed Beatra skill paths), `network.json` (route
|
|
263
|
+
decision, with a country code when the route answer includes one),
|
|
264
|
+
`balance-holds.json` (after an insufficient-credit refusal, that tool is
|
|
265
|
+
answered locally for up to 30 minutes; `call --recheck-balance` sends one
|
|
266
|
+
call), a short-lived `.authorize.lock`, and, per install path,
|
|
267
|
+
`updates/<id>/state.json` (last version check), `source.json` (install
|
|
268
|
+
source), and `registration.json` (last registration). Files are `0600`
|
|
269
|
+
except `host.json`, which follows the umask.
|
|
270
|
+
- **Telemetry.** Authorization sends the hostname as the device name, the
|
|
271
|
+
package slug and version, the detected agent platform (for example
|
|
272
|
+
`claude-code`, from environment variables), and the installation reference.
|
|
273
|
+
After connecting, at most once a day unless the version, platform, route, or
|
|
274
|
+
install source changes, the client makes a non-billable
|
|
275
|
+
`beatra.installations.register` call with those package and platform
|
|
276
|
+
fields, the release channel, the network route, the install source
|
|
277
|
+
(`github` for this tree), and coarse runtime facts: OS and OS version, CPU
|
|
278
|
+
architecture, Python version, locale, and UTC offset. Every tool call adds
|
|
259
279
|
`source_package_slug` and `source_platform`. There is no opt-out for these
|
|
260
280
|
fields.
|
|
261
281
|
- **Retention.** Account data is kept for the life of the account. Task
|
|
@@ -267,6 +287,6 @@ days idle and can be revoked at once in the Beatra Console under Agents.
|
|
|
267
287
|
|
|
268
288
|
## Additional Resources
|
|
269
289
|
|
|
270
|
-
- [Source tree at the pinned commit](https://github.com/beatra-ai/beatra-skills/tree/
|
|
290
|
+
- [Source tree at the pinned commit](https://github.com/beatra-ai/beatra-skills/tree/b7ab8ed02980ee44b6dac62633f8d79daf0809ab/skills/beatra-ai-video-studio)
|
|
271
291
|
- [Product page](https://beatra.ai/skills/beatra-ai-video-studio)
|
|
272
292
|
- [Terms](https://beatra.ai/en/terms) and [privacy policy](https://beatra.ai/en/privacy)
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: curlshot
|
|
3
|
+
description: "Capture web page screenshots, PDFs and scrolling videos, or render HTML/Markdown to images, with the hosted CurlShot API."
|
|
4
|
+
category: api-integration
|
|
5
|
+
risk: safe
|
|
6
|
+
source: "https://github.com/SergiuPogor/curlshot-mcp/tree/main/skills/curlshot"
|
|
7
|
+
source_repo: SergiuPogor/curlshot-mcp
|
|
8
|
+
source_type: official
|
|
9
|
+
date_added: "2026-10-16"
|
|
10
|
+
author: SergiuPogor
|
|
11
|
+
tags: [screenshot, pdf, html-to-image, headless-browser, api, mcp]
|
|
12
|
+
tools: [claude-code, codex, cursor, gemini]
|
|
13
|
+
license: "MIT"
|
|
14
|
+
license_source: "https://github.com/SergiuPogor/curlshot-mcp/blob/main/LICENSE"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# CurlShot screenshots
|
|
18
|
+
|
|
19
|
+
CurlShot (https://curlshot.com) is a hosted screenshot API. It renders a web
|
|
20
|
+
page in a real browser and returns an image (PNG, JPEG, WebP), a PDF, or a
|
|
21
|
+
video of the page scrolling (MP4, WebM, GIF). One HTTP request does it.
|
|
22
|
+
|
|
23
|
+
## When to Use
|
|
24
|
+
|
|
25
|
+
- Use when the user wants a screenshot, full-page capture, or mobile/tablet view of a public URL.
|
|
26
|
+
- Use when the user wants a PDF or a scrolling video (MP4, WebM, GIF) of a web page.
|
|
27
|
+
- Use when the user wants their own HTML or Markdown rendered to an image or PDF (social cards, reports, previews).
|
|
28
|
+
- Requires a CurlShot access key in the `CURLSHOT_API_KEY` environment variable.
|
|
29
|
+
|
|
30
|
+
## Before you start
|
|
31
|
+
|
|
32
|
+
- The access key is read from `CURLSHOT_API_KEY`. If it is not set, ask the user to set it. A free key (100 screenshots a month, no card) comes from https://curlshot.com/register.
|
|
33
|
+
- Never print the key, write it into a file in the repository, or put it in a link you show the user.
|
|
34
|
+
- Only public pages work out of the box. Local and private network addresses (localhost, 192.168.x.x, ...) are refused: for a local page, send its HTML instead (see below).
|
|
35
|
+
- Sending HTML or Markdown uploads that content to CurlShot. Confirm with the user before sending anything private or confidential.
|
|
36
|
+
|
|
37
|
+
## Take a screenshot
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
curl -sS -G "https://curlshot.com/api/v1/screenshot" \
|
|
41
|
+
-H "X-Access-Key: $CURLSHOT_API_KEY" \
|
|
42
|
+
--data-urlencode "url=https://example.com" \
|
|
43
|
+
-d format=png \
|
|
44
|
+
--output screenshot.png
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`-G` with `--data-urlencode` keeps the page address correctly encoded. Check
|
|
48
|
+
the HTTP status: on an error the body is JSON with `error_code` and
|
|
49
|
+
`error_message` instead of an image.
|
|
50
|
+
|
|
51
|
+
## Common options
|
|
52
|
+
|
|
53
|
+
Add each option as one more `-d name=value` (GET) or as a field in a POST JSON body.
|
|
54
|
+
|
|
55
|
+
| Want | Option |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| Whole page, top to bottom | `full_page=true` |
|
|
58
|
+
| Phone or tablet view | `viewport_device=<preset>` (list: https://curlshot.com/docs/devices.md) |
|
|
59
|
+
| Window size | `viewport_width=1440`, `viewport_height=900` |
|
|
60
|
+
| Retina sharpness | `device_scale_factor=2` |
|
|
61
|
+
| Dark theme | `dark_mode=true` |
|
|
62
|
+
| One element only | `selector=<css selector>` |
|
|
63
|
+
| Output format | `format=png` / `jpeg` / `webp` / `pdf` / `mp4` / `webm` / `gif` |
|
|
64
|
+
| Hide cookie banners and ads | `block_cookie_banners=true`, `block_ads=true` |
|
|
65
|
+
| Wait for content | `wait_until=networkidle`, `delay=2`, `wait_for_selector=<css selector>` |
|
|
66
|
+
| Reuse a stored copy for free | `cache=true` |
|
|
67
|
+
|
|
68
|
+
A misspelled option is rejected with `invalid_options` and a hint, never
|
|
69
|
+
ignored. Every option: https://curlshot.com/docs/options.md
|
|
70
|
+
|
|
71
|
+
## Render your own HTML or Markdown
|
|
72
|
+
|
|
73
|
+
POST JSON when the input is long:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
curl -sS -X POST "https://curlshot.com/api/v1/screenshot" \
|
|
77
|
+
-H "X-Access-Key: $CURLSHOT_API_KEY" \
|
|
78
|
+
-H "Content-Type: application/json" \
|
|
79
|
+
-d '{"html": "<h1>Hello</h1>", "format": "png", "viewport_width": 1200, "viewport_height": 630}' \
|
|
80
|
+
--output card.png
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Use `"markdown": "..."` instead of `html` to render Markdown as a styled page,
|
|
84
|
+
and `"format": "pdf"` for a PDF.
|
|
85
|
+
|
|
86
|
+
## Examples
|
|
87
|
+
|
|
88
|
+
### Example 1: Full-page mobile screenshot without cookie banners
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
curl -sS -G "https://curlshot.com/api/v1/screenshot" \
|
|
92
|
+
-H "X-Access-Key: $CURLSHOT_API_KEY" \
|
|
93
|
+
--data-urlencode "url=https://example.com/pricing" \
|
|
94
|
+
-d viewport_device=iphone_15_pro \
|
|
95
|
+
-d full_page=true \
|
|
96
|
+
-d block_cookie_banners=true \
|
|
97
|
+
-d format=webp \
|
|
98
|
+
--output pricing-mobile.webp
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Check https://curlshot.com/docs/devices.md for the exact preset names.
|
|
102
|
+
|
|
103
|
+
### Example 2: Save a page as PDF
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
curl -sS -G "https://curlshot.com/api/v1/screenshot" \
|
|
107
|
+
-H "X-Access-Key: $CURLSHOT_API_KEY" \
|
|
108
|
+
--data-urlencode "url=https://example.com/docs" \
|
|
109
|
+
-d format=pdf \
|
|
110
|
+
--output docs.pdf
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Usage and billing
|
|
114
|
+
|
|
115
|
+
One successful render counts as one screenshot, whatever its size. Failed
|
|
116
|
+
renders and cache hits are free. Responses carry rate-limit and concurrency
|
|
117
|
+
headers. Paid plans start at $19/month; the free plan is 100 screenshots a
|
|
118
|
+
month. Ask before running large batches that could use up the user's quota.
|
|
119
|
+
|
|
120
|
+
## MCP alternative
|
|
121
|
+
|
|
122
|
+
Agents with MCP support can use the hosted server instead of HTTP calls:
|
|
123
|
+
`https://curlshot.com/api/mcp` (streamable HTTP, `Authorization: Bearer <key>`),
|
|
124
|
+
tools `take_screenshot` and `list_devices`. Setup per client is in the
|
|
125
|
+
[curlshot-mcp README](https://github.com/SergiuPogor/curlshot-mcp).
|
|
126
|
+
|
|
127
|
+
## Limitations
|
|
128
|
+
|
|
129
|
+
- Needs network access to `curlshot.com` and a CurlShot account key; it does not run a browser locally.
|
|
130
|
+
- Pages behind a login, on localhost, or on private networks cannot be captured by URL; render their HTML instead.
|
|
131
|
+
- Each successful render uses one screenshot from the account's monthly quota.
|
|
132
|
+
- HTML and Markdown inputs are sent to a third-party service; do not send secrets or confidential content without the user's consent.
|
|
133
|
+
- Sites with aggressive bot protection may return an error page or a challenge screen instead of the real content.
|
|
134
|
+
|
|
135
|
+
## Docs
|
|
136
|
+
|
|
137
|
+
- Getting started: https://curlshot.com/docs/getting-started.md
|
|
138
|
+
- Errors: https://curlshot.com/docs/errors.md
|
|
139
|
+
- Everything in one file: https://curlshot.com/llms-full.txt
|