Not in the top 1,000 by GitHub stars
Matteoikarieth96/whiteboard-video-skill
Claude Code skill: turn any topic into a hand-drawn whiteboard explainer video with voice-over and captions
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
75c7825e3cca → 75c7825e3cca
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 75c7825e3cca
No earlier version was observed for comparison.
Heat
4.3- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
How it works
whiteboard-video
When your agent uses it
Make hand-drawn whiteboard explainer videos (animated marker drawings, voice-over, burned-in captions, MP4) on any topic. Use this whenever the user wants an explainer video, a whiteboard or "drawn" animation, an animated explainer for a talk, a short video for X/LinkedIn/YouTube that explains a concept, or asks to turn a script, article, slide deck or topic into a narrated video, even if they don't say "whiteboard". It interviews the user for context, writes and fact-checks a scene-by-scene script for approval, offers voice-over options with audio samples (free macOS voices, ElevenLabs, OpenAI, or the user's own recordings), then draws, voices and renders the video locally with headless Chrome and ffmpeg.
What it loads into context
Frontmatter
171 tokensAlways available to the agent
SKILL.md
1,787 tokensWhen the skill is activated
Reference documents
5,965 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Why the workflow looks like this
- Step 0: one-time setup check
- Step 1: gather context
- Step 2: write the script and get it approved
- Step 3: offer voice-over options before building
- Step 4: build the project
- Step 5: preview, fix, render
- Step 6: deliver
- Examples
Scripts executed separately
assets/template/scenes.jsexamples/how-it-works/scenes.jsexamples/rwa-on-ethereum/scenes.jsexamples/sec-innovation-exemption/scenes.jsscripts/make_audio.pyscripts/new_project.shscripts/package.jsonscripts/render.js
Files
.gitignoreasset115 bytesLICENSEasset1,073 bytesREADME.mddoc4,155 bytesSKILL.mdcore7,615 bytesSKILL.mdcore7,615 bytesSKILL.mdcore7,615 bytesSKILL.mdcore7,615 bytesassets/fonts/Caveat.ttfasset403,648 bytesassets/fonts/OFL.txtdoc4,385 bytesassets/template/brief.mddoc384 bytesassets/template/config.jsonasset398 bytesassets/template/gitignore.txtdoc66 bytesassets/template/scenes.jsruns1,609 bytesassets/template/script.jsonasset403 bytesassets/template/voice.jsonasset52 bytesdocs/demo.gifasset2,088,950 bytesdocs/demo.mp4asset2,286,411 bytesexamples/how-it-works/brief.mddoc701 bytesexamples/how-it-works/config.jsonasset103 bytesexamples/how-it-works/scenes.jsruns2,759 bytesexamples/how-it-works/script.jsonasset725 bytesexamples/how-it-works/voice.jsonasset61 bytesexamples/rwa-on-ethereum/config.jsonasset90 bytesexamples/rwa-on-ethereum/scenes.jsruns10,423 bytesexamples/rwa-on-ethereum/script.jsonasset3,294 bytesexamples/rwa-on-ethereum/voice.jsonasset61 bytesexamples/sec-innovation-exemption/README.mddoc3,897 bytesexamples/sec-innovation-exemption/config.jsonasset169 bytesexamples/sec-innovation-exemption/scenes.jsruns7,791 bytesexamples/sec-innovation-exemption/script.jsonasset3,205 bytesexamples/sec-innovation-exemption/voice.jsonasset61 bytesreferences/drawing-api.mddoc4,756 bytesreferences/interview.mddoc1,555 bytesreferences/script-writing.mddoc2,425 bytesreferences/voice-options.mddoc5,008 bytesscripts/engine.htmlasset13,572 bytesscripts/make_audio.pyruns11,776 bytesscripts/new_project.shruns955 bytesscripts/package-lock.jsonasset11,580 bytesscripts/package.jsonruns186 bytesscripts/render.jsruns6,077 bytes
Read SKILL.md
# Whiteboard video
Turn a topic into a narrated whiteboard video: a marker draws each scene in sync with the voice, the board slides to the next scene, captions run at the bottom, and the result is an MP4.
Paths below are relative to this skill's folder. The engine lives in `scripts/`, a starter project in `assets/template/`, two complete examples in `examples/`.
## Why the workflow looks like this
A whiteboard video is cheap to re-render and expensive to re-think. Most wasted effort comes from drawing scenes for a script the user did not want, or from a voice they dislike. So the order is: context, then script approval, then voice choice, then drawing. Each gate is short, and each one saves a render.
## Step 0: one-time setup check
Run these once per machine and fix what is missing before promising a video:
View the complete source on GitHubSkills included
- whiteboard-video
Repository facts
- License
- MIT
- Created
- Sep 26, 2026
- Last pushed
- Oct 26, 2026
- Forks
- 4
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 7, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 3 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 128 network referencesin 5 files: scripts/package-lock.json:12 scripts/make_audio.py:37 scripts/engine.html:18 and 2 more
- No hidden or obfuscated text
- No instruction overrides
- 8 executable scriptsin 8 files: assets/template/scenes.js:1 examples/how-it-works/scenes.js:1 examples/rwa-on-ethereum/scenes.js:1 and 5 more
- 13 references to secretsin 6 files: scripts/make_audio.py:17 README.md:48 .gitignore:3 and 3 more
- No requests to vote in Hot
Show all 149 signals by file
.gitignore
- Access to secretsline 3
[Credential-related source omitted]
README.md
- Network accessline 20
Requirements: [Claude Code](https://claude.com/claude-code), Node 18+, Python 3.9+, ffmpeg, and Google Chrome (or Chromium/Edge). - Network accessline 23
git clone https://github.com/Matteoikarieth96/whiteboard-video-skill ~/.claude/skills/whiteboard-video - Access to secretsline 48
[Credential-related source omitted] - Access to secretsline 49
[Credential-related source omitted]
assets/fonts/OFL.txt
- Network accessline 1
Copyright 2014 The Caveat Project Authors (https://github.com/googlefonts/caveat) - Network accessline 3
This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - Network accessline 5
http://scripts.sil.org/OFL
assets/template/gitignore.txt
- Access to secretsline 1
[Credential-related source omitted]
assets/template/scenes.js
- Executable scriptline 1
Executable file
examples/how-it-works/scenes.js
- Executable scriptline 1
Executable file
examples/rwa-on-ethereum/scenes.js
- Executable scriptline 1
Executable file
examples/sec-innovation-exemption/scenes.js
- Executable scriptline 1
Executable file
references/voice-options.md
- Access to secretsline 31
[Credential-related source omitted]
scripts/engine.html
- Network accessline 18
</style></head> <body> <svg id="board" xmlns="http://www.w3.org/2000/svg"> - Network accessline 19
<body> <svg id="board" xmlns="http://www.w3.org/2000/svg"> <defs id="defs"> - Network accessline 20
<svg id="board" xmlns="http://www.w3.org/2000/svg"> - Network accessline 43
<script> // ---------- globals (palette can be overridden by config.palette) ---------- const NS = 'http://www.w3.org/2000/svg'; - Network accessline 44
// ---------- globals (palette can be overridden by config.palette) ---------- const NS = 'http://www.w3.org/2000/svg'; var W = 1920, H = 1080, PAN = 0.45; - Network accessline 45
const NS = 'http://www.w3.org/2000/svg';
scripts/make_audio.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 26
[Credential-related source omitted] - Access to secretsline 27
[Credential-related source omitted] - Network accessline 37
def http_post(url, headers, body, ctx=None): req = urllib.request.Request(url, data=json.dumps(body).encode(), headers=headers, method="POST") - Network accessline 38
req = urllib.request.Request(url, data=json.dumps(body).encode(), headers=headers, method="POST") - Network accessline 39
try: with urllib.request.urlopen(req, timeout=120, context=ctx) as r: return r.read() - Network accessline 40
with urllib.request.urlopen(req, timeout=120, context=ctx) as r: - Access to secretsline 61
[Credential-related source omitted] - Network accessline 64
if "voice_settings" in spec: body["voice_settings"] = spec["voice_settings"] data = http_post(f"https://api.elevenlabs.io/v1/text-to-speech/{vid}?output_format=mp3_44100_128", - Network accessline 65
[Credential-related source omitted] - Network accessline 66
data = http_post(f"https://api.elevenlabs.io/v1/text-to-speech/{vid}?output_format=mp3_44100_128", - Access to secretsline 72
[Credential-related source omitted] - Network accessline 75
if spec.get("instructions"): body["instructions"] = spec["instructions"] data = http_post("https://api.openai.com/v1/audio/speech", - Network accessline 76
[Credential-related source omitted] - Network accessline 77
data = http_post("https://api.openai.com/v1/audio/speech", - Network accessline 200
[Credential-related source omitted] - Network accessline 201
[Credential-related source omitted] - Access to secretsline 201
[Credential-related source omitted] - Network accessline 202
[Credential-related source omitted] - Access to secretsline 202
[Credential-related source omitted] - Network accessline 203
try: data = json.load(urllib.request.urlopen(req, timeout=60)) print("ElevenLabs voices:") - Network accessline 204
data = json.load(urllib.request.urlopen(req, timeout=60))
scripts/new_project.sh
- Executable scriptline 1
#!/usr/bin/env bash
scripts/package-lock.json
- Network accessline 12
"node_modules/@puppeteer/browsers": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.2.3.tgz", - Network accessline 13
"version": "3.2.3", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.2.3.tgz", "integrity": "sha512-2Bt3m6dDAJqmZehn0wiXSYyQmuhyiHHZ7FjvrVaS1W2RoFGV6eCK71UvKYkNJjkwC1Q9nobjhvTMhLQztFVINA==", - Network accessline 14
"resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.2.3.tgz", - Network accessline 40
"node_modules/ansi-regex": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", - Network accessline 41
"version": "6.3.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", - Network accessline 42
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", - Network accessline 47
}, "funding": { "url": "https://github.com/chalk/ansi-regex?sponsor=1" - Network accessline 48
"funding": { "url": "https://github.com/chalk/ansi-regex?sponsor=1" } - Network accessline 49
"url": "https://github.com/chalk/ansi-regex?sponsor=1" - Network accessline 52
"node_modules/ansi-styles": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - Network accessline 53
"version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - Network accessline 54
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - Network accessline 59
}, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" - Network accessline 60
"funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } - Network accessline 61
"url": "https://github.com/chalk/ansi-styles?sponsor=1" - Network accessline 64
"node_modules/chromium-bidi": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-17.0.2.tgz", - Network accessline 65
"version": "17.0.2", "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-17.0.2.tgz", "integrity": "sha512-5v9GQFhTktFvotn/OFNJBmKLKRAb6n9r0bVCwf7sHgWc3/JryK0bj1nn93L3pHFrfgcsu6Be6EWsDi+1XHTGDg==", - Network accessline 66
"resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-17.0.2.tgz", - Network accessline 80
"node_modules/cliui": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", - Network accessline 81
"version": "9.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", - Network accessline 82
"resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", - Network accessline 94
"node_modules/cliui/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - Network accessline 95
"version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - Network accessline 96
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - Network accessline 106
}, "funding": { "url": "https://github.com/sponsors/sindresorhus" - Network accessline 107
"funding": { "url": "https://github.com/sponsors/sindresorhus" } - Network accessline 108
"url": "https://github.com/sponsors/sindresorhus" - Network accessline 111
"node_modules/devtools-protocol": { "version": "0.0.1687809", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1687809.tgz", - Network accessline 112
"version": "0.0.1687809", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1687809.tgz", "integrity": "sha512-t7kSb+UKYdyxcmqy98U2P86ne6rCve3DIJ4+lp54i/hhClgFuG35JrLj23rO14Jw3sWDsp7i+22QhNU0+/qk8 - Network accessline 113
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1687809.tgz", - Network accessline 118
"node_modules/emoji-regex": { "version": "10.6.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - Network accessline 119
"version": "10.6.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - Network accessline 120
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - Network accessline 124
"node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - Network accessline 125
"version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - Network accessline 126
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - Network accessline 133
"node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - Network accessline 134
"version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - Network accessline 135
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - Network accessline 142
"node_modules/get-east-asian-width": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", - Network accessline 143
"version": "1.7.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==", - Network accessline 144
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", - Network accessline 149
}, "funding": { "url": "https://github.com/sponsors/sindresorhus" - Network accessline 150
"funding": { "url": "https://github.com/sponsors/sindresorhus" } - Network accessline 151
"url": "https://github.com/sponsors/sindresorhus" - Network accessline 154
"node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - Network accessline 155
"version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - Network accessline 156
"resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - Network accessline 160
"node_modules/modern-tar": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/modern-tar/-/modern-tar-0.8.5.tgz", - Network accessline 161
"version": "0.8.5", "resolved": "https://registry.npmjs.org/modern-tar/-/modern-tar-0.8.5.tgz", "integrity": "sha512-snEhs+6G5Tjd4I7tLCDOaoln2RgE0bD19RzEKgvgK2hZ5VKy3MpLhLTZ2fWpXSTg4K2cyPwp+VHATFJhxfnOeA==", - Network accessline 162
"resolved": "https://registry.npmjs.org/modern-tar/-/modern-tar-0.8.5.tgz", - Network accessline 169
"node_modules/puppeteer-core": { "version": "25.12.0", "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.12.0.tgz", - Network accessline 170
"version": "25.12.0", "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.12.0.tgz", "integrity": "sha512-z6LQUt5SH7jwGtGA+nMtJuEjZIsqPiwQ+EFHCYuVDQrJpvifNmmGuyDvTzAKPyFzihxgHc5f3aMzu2kn8Ps37A==", - Network accessline 171
"resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.12.0.tgz", - Network accessline 186
"node_modules/string-width": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", - Network accessline 187
"version": "8.3.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", - Network accessline 188
"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", - Network accessline 197
}, "funding": { "url": "https://github.com/sponsors/sindresorhus" - Network accessline 198
"funding": { "url": "https://github.com/sponsors/sindresorhus" } - Network accessline 199
"url": "https://github.com/sponsors/sindresorhus" - Network accessline 202
"node_modules/strip-ansi": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - Network accessline 203
"version": "7.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - Network accessline 204
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - Network accessline 212
}, "funding": { "url": "https://github.com/chalk/strip-ansi?sponsor=1" - Network accessline 213
"funding": { "url": "https://github.com/chalk/strip-ansi?sponsor=1" } - Network accessline 214
"url": "https://github.com/chalk/strip-ansi?sponsor=1" - Network accessline 217
"node_modules/typed-query-selector": { "version": "2.12.2", "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.2.tgz", - Network accessline 218
"version": "2.12.2", "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.2.tgz", "integrity": "sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==" - Network accessline 219
"resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.2.tgz", - Network accessline 223
"node_modules/webdriver-bidi-protocol": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.3.tgz", - Network accessline 224
"version": "0.4.3", "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.3.tgz", "integrity": "sha512-uuN0goWfxP22B7J/uAgBpOYNPttC+XVseYE+rSY5+rQ+YBeVz/VORw8WbmLVcqW78zNg5A4qnjNXYUWR3il2i - Network accessline 225
"resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.3.tgz", - Network accessline 229
"node_modules/wrap-ansi": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - Network accessline 230
"version": "9.0.2", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - Network accessline 231
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - Network accessline 241
}, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - Network accessline 242
"funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } - Network accessline 243
"url": "https://github.com/chalk/wrap-ansi?sponsor=1" - Network accessline 246
"node_modules/wrap-ansi/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - Network accessline 247
"version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - Network accessline 248
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - Network accessline 258
}, "funding": { "url": "https://github.com/sponsors/sindresorhus" - Network accessline 259
"funding": { "url": "https://github.com/sponsors/sindresorhus" } - Network accessline 260
"url": "https://github.com/sponsors/sindresorhus" - Network accessline 263
"node_modules/ws": { "version": "8.21.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", - Network accessline 264
"version": "8.21.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", - Network accessline 265
"resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", - Network accessline 284
"node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - Network accessline 285
"version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - Network accessline 286
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - Network accessline 293
"node_modules/yargs": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.2.0.tgz", - Network accessline 294
"version": "18.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.2.0.tgz", "integrity": "sha512-9OpKOLeaoNFecEp7P6iYbzze/5CqWoH7N3SMs/6y1XF4nMvFMspEGZzJ6uFi9MmQwXhyzqYoSEKO3tvA3Z/o2w==", - Network accessline 295
"resolved": "https://registry.npmjs.org/yargs/-/yargs-18.2.0.tgz", - Network accessline 310
"node_modules/yargs-parser": { "version": "22.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", - Network accessline 311
"version": "22.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", - Network accessline 312
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", - Network accessline 319
"node_modules/zod": { "version": "3.25.76", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - Network accessline 320
"version": "3.25.76", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - Network accessline 321
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - Network accessline 323
"license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" - Network accessline 324
"funding": { "url": "https://github.com/sponsors/colinhacks" } - Network accessline 325
"url": "https://github.com/sponsors/colinhacks"
scripts/package.json
- Executable scriptline 1
Executable file
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 2 facts
- Contacts api.elevenlabs.io, which SKILL.md, the README and the plugin manifest do not mentionscripts/make_audio.py:66High confidence
- Contacts api.openai.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/make_audio.py:77High confidence
Signal confidence: 40 facts
- Network access in prose of documentationREADME.md:20Low confidence
- Network access in code of documentationREADME.md:23Low confidence
- Access to secrets in prose of documentationREADME.md:48Low confidence
- Access to secrets in prose of documentationREADME.md:49Low confidence
- Network access in prose of documentationassets/fonts/OFL.txt:1Low confidence
- Network access in prose of documentationassets/fonts/OFL.txt:3Low confidence
- Network access in prose of documentationassets/fonts/OFL.txt:5Low confidence
- Access to secrets in prose of documentationassets/template/gitignore.txt:1Low confidence
- Executable script in a comment of a file that runsassets/template/scenes.js:1Low confidence
- Executable script in a comment of a file that runsexamples/how-it-works/scenes.js:1Low confidence
- Executable script in a comment of a file that runsexamples/rwa-on-ethereum/scenes.js:1Low confidence
- Executable script in a comment of a file that runsexamples/sec-innovation-exemption/scenes.js:1Low confidence
- Access to secrets in prose of documentation: a variable, placeholder or call, not a stored valuereferences/voice-options.md:31Low confidence
- Executable script in code of a file that runsscripts/make_audio.py:1High confidence
- Access to secrets in prose of a file that runs: a variable, placeholder or call, not a stored valuescripts/make_audio.py:17Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/make_audio.py:26Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/make_audio.py:27Low confidence
- Network access in code of a file that runsscripts/make_audio.py:37High confidence
- Network access in code of a file that runsscripts/make_audio.py:38High confidence
- Network access in code of a file that runsscripts/make_audio.py:39High confidence
- Network access in code of a file that runsscripts/make_audio.py:40High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/make_audio.py:61Low confidence
- Network access in code of a file that runsscripts/make_audio.py:64High confidence
- Network access in code of a file that runsscripts/make_audio.py:65High confidence
- Network access in code of a file that runsscripts/make_audio.py:66High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/make_audio.py:72Low confidence
- Network access in code of a file that runsscripts/make_audio.py:75High confidence
- Network access in code of a file that runsscripts/make_audio.py:76High confidence
- Network access in code of a file that runsscripts/make_audio.py:77High confidence
- Network access in code of a file that runsscripts/make_audio.py:200High confidence
- Network access in code of a file that runsscripts/make_audio.py:201High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/make_audio.py:201Low confidence
- Network access in code of a file that runsscripts/make_audio.py:202High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/make_audio.py:202Low confidence
- Network access in code of a file that runsscripts/make_audio.py:203High confidence
- Network access in code of a file that runsscripts/make_audio.py:204High confidence
- Executable script in code of a file that runsscripts/new_project.sh:1High confidence
- Executable script in code of a file that runsscripts/package.json:1High confidence
- Executable script in code of a file that runsscripts/render.js:1High confidence
- Access to secrets in code of a file that runsscripts/render.js:40High confidence
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.