Not in the top 1,000 by GitHub stars
anneheartrecord/charles-video-maker
Agent skill: script to narrated vertical video — code animation or real footage underneath, voiceover, subtitles, fact-check, Anatomy machines, optional Lemo-Opuscar styles
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
skills/charles-video-maker/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 27e9d732b5f0
No earlier version was observed for comparison.
skills/charles-video-maker/anatomy/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 27e9d732b5f0
No earlier version was observed for comparison.
Heat
Insufficient historyNot enough history yet to measure heat. It appears after a few days of data.
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
- charles-video-maker
skills/charles-video-maker - anatomy
skills/charles-video-maker/anatomy
How it works
charles-video-maker
When your agent uses it
Make videos with code and explain ideas with machines: code-rendered videos (Canvas / SVG / WebGL / Three.js / Remotion / Manim via Playwright + FFmpeg), narrated vertical shorts from a script, isometric Anatomy figures and machine-explainer videos, optionally over real footage or in one of the 53 Lemo-Opuscar art styles. Also the Douyin mode: remake a trending 抖音 video end to end and find topics for it. Use whenever someone wants to make, animate or render a video, motion graphic, explainer or promo, turn an article or script into a video, or draw how something works, including「做抖音视频」「复刻这条抖音」「用某某风格做一期抖音」「找抖音选题」「抓 Vibe 热点」 「做个视频」「用代码做视频」「做个动效」「把这篇文章做成视频」「文字稿转视频」「口播稿做成视频」「画个原理图」 「做个等距插图」「用机器讲清楚这个概念」「做个油画风 / 水彩 / 浮世绘 / 水墨风的短片」「用原片 / 实录 / 空镜做视频」 「画面不要全是插图」. For a named Lemo-Opuscar style as a narrated vertical short, prefer this over lemo-opuscar. Not for generating footage with video models, editing in Premiere/CapCut/AE, or subtitling an existing video.
What it loads into context
Frontmatter
348 tokensAlways available to the agent
SKILL.md
5,881 tokensWhen the skill is activated
Reference documents
32,946 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 先分流:要做哪一种
- 视频流程
- 文案一律交给本地 Gemini 写
- 工作目录
- 第 0 步:检查环境
- 第 1 步:问清楚要做什么
- 第 2 步:给三个方案
- 第 3 步:给每个方案做预览
- 第 4 步:写 brief.md
- 第 5 步:制作
- 第 6 步:渲染和验收
- 交付
- 遇到这些情况
Scripts executed separately
bridge/clock.jsbridge/overlay.jsbridge/wrap_figure.pyscripts/agy_image.pyscripts/analyze_video.pyscripts/audio_tools.pyscripts/check_env.pyscripts/douyin_comments.pyscripts/douyin_publish.pyscripts/douyin_radar.pyscripts/douyin_stats.pyscripts/factcheck.pyscripts/footage/compose.pyscripts/footage/genimage.pyscripts/footage/record.pyscripts/footage/source.pyscripts/footage/stock.pyscripts/gemini_copy.pyscripts/lemo/setup.shscripts/master_static.pyscripts/qa_stills.pyscripts/render.pyscripts/render_parallel.pyscripts/still_check.pyscripts/topic_name.pyscripts/voice/align.pyscripts/voice/mix.pyscripts/voice/score.pyscripts/voice/timeline.pyscripts/voice/tts.pytemplates/vertical-explainer/stage.js
Files
SKILL.mdcore20,650 bytesSKILL.mdcore20,650 bytesbridge/clock.jsruns3,387 bytesbridge/example/README.mddoc1,079 bytesbridge/example/audio/narration.txtdoc277 bytesbridge/example/audio/scenes.jsonasset345 bytesbridge/example/video.jsonasset838 bytesbridge/overlay.jsruns10,663 bytesbridge/wrap_figure.pyruns2,728 bytesreferences/anatomy-video.mddoc6,606 bytesreferences/brief-template.mddoc3,478 bytesreferences/code-stack.mddoc4,794 bytesreferences/craft-rules.mddoc10,519 bytesreferences/douyin-opening.mddoc9,525 bytesreferences/douyin-remake.mddoc22,300 bytesreferences/douyin-series.mddoc4,576 bytesreferences/fact-check.mddoc4,437 bytesreferences/footage-layer.mddoc7,856 bytesreferences/gemini-copy.mddoc8,384 bytesreferences/lemo-styles.mddoc10,054 bytesreferences/opening-and-cover.mddoc6,375 bytesreferences/plan-format.mddoc3,343 bytesreferences/voiceover-pipeline.mddoc5,573 bytesscripts/agy_image.pyruns4,749 bytesscripts/analyze_video.pyruns3,407 bytesscripts/audio_tools.pyruns8,863 bytesscripts/check_env.pyruns2,526 bytesscripts/douyin_comments.pyruns1,953 bytesscripts/douyin_publish.pyruns6,661 bytesscripts/douyin_radar.pyruns15,373 bytesscripts/douyin_stats.pyruns1,305 bytesscripts/factcheck.pyruns6,395 bytesscripts/footage/compose.pyruns14,167 bytesscripts/footage/genimage.pyruns2,625 bytesscripts/footage/record.pyruns5,285 bytesscripts/footage/source.pyruns5,199 bytesscripts/footage/stock.pyruns6,277 bytesscripts/gemini_copy.pyruns8,649 bytesscripts/lemo/setup.shruns1,352 bytesscripts/master_static.pyruns1,435 bytesscripts/qa_stills.pyruns1,751 bytesscripts/render.pyruns6,047 bytesscripts/render_parallel.pyruns4,974 bytesscripts/still_check.pyruns4,222 bytesscripts/topic_name.pyruns1,243 bytesscripts/voice/align.pyruns2,259 bytesscripts/voice/mix.pyruns9,047 bytesscripts/voice/score.pyruns6,207 bytesscripts/voice/timeline.pyruns5,472 bytesscripts/voice/tts.pyruns10,740 bytestemplates/vertical-explainer/audio/narration.txtdoc258 bytestemplates/vertical-explainer/audio/scenes.jsonasset302 bytestemplates/vertical-explainer/index.htmlasset1,997 bytestemplates/vertical-explainer/stage.jsruns9,830 bytes
Read SKILL.md
# charles-video-maker:用代码和真实素材做视频,用机器讲概念
这个 skill 起步于两个开源项目的合并:用代码逐帧渲染视频的 [xilo-opus-video](https://github.com/Kianzzz/xilo-opus-video)(含本仓库加的配音流水线),和用等距机器解释概念的 [Anatomy](https://github.com/wheresryan22/anatomy)(原样收在 `anatomy/`),再用一层桥接(`bridge/`)把 Anatomy 的机器变成可以逐帧渲染的视频画面。之后又加了素材层(真实画面打底,`scripts/footage/`)和可选的 Lemo-Opuscar 风格库。
## 先分流:要做哪一种
| 用户要的 | 走哪条路 | 从哪读起 |
|---|---|---|
| 一条视频(宣传片、动效、知识讲解、文字稿转视频) | 下面的视频流程(第 0–6 步) | 本文件 |
| 一张插图 / 交互图 / 原理图(给文档、博客、落地页用),不是视频 | Anatomy 的流程,产出 HTML、SVG 或 React 组件 | `anatomy/SKILL.md`,kit 在 `anatomy/kit/` |
| 抖音视频(「做抖音视频」「复刻这条」、给了抖音链接或原片、「用 <风格名> 做一期」;「找选题」「抓热点」「Vibe 有什么在火」先走其中的 D-1 找选题) | 复刻爆款、一锅出:蒸馏原片风格 → 重写文案 → 先测配乐再排画面 → 交付,中途不问,覆盖下面流程的多项默认值 | `references/douyin-remake.md` |
| 一条讲原理的视频,概念能对应到一台会动的机器 | 先按 Anatomy 造机器,再按视频流程配音、包装、渲染 | `references/anatomy-video.md` |
用户嫌画面全是插图、不够精美,或者手上有原视频、要讲的是产品或游戏:照样走视频流程,开工四选的「画面」选「素材打底」,见 [references/footage-layer.md](references/footage-layer.md)。View the complete source on GitHubanatomy
When your agent uses it
Build crafted, highly detailed, interactive isometric SVG figures that explain a technical idea as a real physical object (a test rig, a dial gauge, a cabinet of drawers, a plotter, a lock), with many small precise solid parts, four-tone shading, correct painter's order, a framed card with title, hint and live readout, and calm eased motion. Use this whenever someone wants an isometric illustration, an explanatory diagram or figure for docs, a blog post, a landing page or an article, a "Linear-style" or "premium" technical drawing, an interactive explainer, or an SVG that shows how a system, algorithm or component works, even if they never say "isometric". Works framework-free (TypeScript/JS that writes SVG and HTML) and in React/Next.js, and can add realistic WebGL shaders (fire, exhaust, water, caustics, lamp light) that live inside the drawing in the same isometric perspective. Also publishes a finished figure to the Anatomy community gallery when asked.
What it loads into context
Frontmatter
273 tokensAlways available to the agent
SKILL.md
7,863 tokensWhen the skill is activated
Reference documents
96,445 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The one idea that matters
- Workflow
- Setup
- Craft rules (short form)
- WebGL inside the drawing
- 3D: figures that turn (beta)
- References
Scripts executed separately
examples/arcade-cabinet/build.mjsexamples/arcade-cabinet/live.jsexamples/arcade-cabinet/parts.mjsexamples/arcade-cabinet/screen.mjsexamples/desk-computer/build.mjsexamples/dial-indicator/build.mjsexamples/raptor-engine/build.mjsexamples/raptor-engine/live.jsexamples/ripple-tank/build.mjsexamples/ripple-tank/live.jsexamples/ripple-tank/model.mjsexamples/spot-plate/art.tsxexamples/spot-plate/drops.tsexamples/spot-plate/fan.tsexamples/spot-plate/figure.tsxexamples/spot-plate/geometry.tsexamples/spot-plate/live.tsxexamples/spot-plate/rig.tsexamples/test-rig/art.tsxexamples/test-rig/figure.tsxexamples/test-rig/geometry.tsexamples/test-rig/live.tsxexamples/test-rig/pose.tsexamples/test-rig/rig.tsexamples/test-rig/view.tsexamples/turning-dial/build.mjsexamples/turning-dial/live.jsexamples/turning-dial/stress.mjskit/audit.mjskit/canvas-painter.mjskit/gl-shared.mjskit/gl.mjskit/iso-kit.mjskit/iso-kit.tskit/lathe.mjskit/react/draw.tsxkit/react/live.tsxkit/tube.mjskit/turn-audit.mjskit/turn-build.mjskit/turn-fixed.mjskit/turn.mjsscripts/audit-affine-bounds.test.mjsscripts/audit-cache.test.mjsscripts/audit-clearance-envelope.test.mjsscripts/audit-empty-clipping.test.mjsscripts/audit-order-convergence.test.mjsscripts/audit-path-origin.test.mjsscripts/audit-profile.test.mjsscripts/audit-projection.test.mjsscripts/audit-slide-clearance.test.mjsscripts/audit-svg-attributes.test.mjsscripts/audit-taper.test.mjsscripts/audit-tube-support.test.mjsscripts/capture-current-geometry.test.mjsscripts/capture-selector.test.mjsscripts/capture.mjsscripts/capture.test.mjsscripts/chrome-port.mjsscripts/chrome-startup.test.mjsscripts/curve-density.test.mjsscripts/drive-actions.test.mjsscripts/drive-async-until.test.mjsscripts/drive-page-load.test.mjsscripts/drive-turn-controller.test.mjsscripts/drive.mjsscripts/drive.test.mjsscripts/enter-key.test.mjsscripts/fidelity-cut.test.mjsscripts/fidelity-tube-coverage.test.mjsscripts/fingerprint.mjsscripts/inline-kit.mjsscripts/line-ends.mjsscripts/lines-arcs.test.mjsscripts/lines-bezier.test.mjsscripts/lines-round.test.mjsscripts/lines-rounded-rect.test.mjsscripts/lines.mjsscripts/lines.test.mjsscripts/navigation.test.mjsscripts/orbit-sampling.test.mjsscripts/publish.mjsscripts/publish.test.mjsscripts/react-dots-opacity.test.mjsscripts/react-readout-first-write.test.mjsscripts/react-readout-target.test.mjsscripts/react-solid-seamless.test.mjsscripts/react-visibility-target.test.mjsscripts/session.mjsscripts/session.test.mjsscripts/turn-audit-samples.test.mjsscripts/turn-bench.mjsscripts/turn-check.mjsscripts/turn-convex-check.test.mjsscripts/turn-fidelity.mjsscripts/turn-group-reference.test.mjsscripts/turn-rounded-polygon.test.mjsscripts/turn-split-owner.test.mjs
Files
.gitattributesasset89 bytes.github/ISSUE_TEMPLATE/bug_report.ymlasset2,808 bytes.github/ISSUE_TEMPLATE/config.ymlasset213 bytes.github/ISSUE_TEMPLATE/figure_request.ymlasset1,917 bytes.github/PULL_REQUEST_TEMPLATE.mddoc1,005 bytes.github/assets/dial-indicator.webpasset17,360 bytes.github/assets/raptor-engine-apart.webpasset35,144 bytes.github/assets/raptor-engine-firing.webpasset37,752 bytes.github/assets/ripple-tank.webpasset34,680 bytes.github/assets/turning-dial.webpasset29,958 bytes.github/workflows/ci.ymlasset1,928 bytes.gitignoreasset102 bytesCHANGELOG.mddoc14,251 bytesCODE_OF_CONDUCT.mddoc5,673 bytesCONTRIBUTING.mddoc8,949 bytesLICENSEasset1,061 bytesREADME.mddoc25,822 bytesSECURITY.mddoc1,240 bytesSKILL.mdcore31,614 bytesSKILL.mdcore31,614 bytesSKILL.mdcore31,614 bytesSKILL.mdcore31,614 bytesSKILL.mdcore31,614 bytesSKILL.mdcore31,614 bytesagents/openai.yamlasset120 bytesevals/evals.jsonasset8,226 bytesexamples/arcade-cabinet/arcade-cabinet-light.htmlasset1,007,953 bytesexamples/arcade-cabinet/arcade-cabinet.cssasset3,221 bytesexamples/arcade-cabinet/arcade-cabinet.htmlasset1,007,952 bytesexamples/arcade-cabinet/build.mjsruns51,493 bytesexamples/arcade-cabinet/live.jsruns21,286 bytesexamples/arcade-cabinet/parts.mjsruns4,296 bytesexamples/arcade-cabinet/screen.mjsruns6,701 bytesexamples/desk-computer/build.mjsruns23,023 bytesexamples/desk-computer/desk-computer-light.htmlasset237,394 bytesexamples/desk-computer/desk-computer.htmlasset237,393 bytesexamples/dial-indicator/build.mjsruns14,973 bytesexamples/dial-indicator/dial-indicator-light.htmlasset136,489 bytesexamples/dial-indicator/dial-indicator.htmlasset136,488 bytesexamples/raptor-engine/build.mjsruns70,705 bytesexamples/raptor-engine/live.jsruns30,752 bytesexamples/raptor-engine/raptor-engine-light.htmlasset1,610,583 bytesexamples/raptor-engine/raptor-engine.htmlasset1,610,582 bytesexamples/raptor-engine/raptor.cssasset6,792 bytesexamples/ripple-tank/build.mjsruns32,062 bytesexamples/ripple-tank/live.jsruns21,741 bytesexamples/ripple-tank/model.mjsruns5,004 bytesexamples/ripple-tank/ripple-tank-light.htmlasset505,499 bytesexamples/ripple-tank/ripple-tank.htmlasset505,498 bytesexamples/ripple-tank/ripple.cssasset1,675 bytesexamples/spot-plate/art.tsxruns4,491 bytesexamples/spot-plate/drops.tsruns19,131 bytesexamples/spot-plate/fan.tsruns2,715 bytesexamples/spot-plate/figure.tsxruns1,078 bytesexamples/spot-plate/geometry.tsruns10,962 bytesexamples/spot-plate/live.tsxruns11,718 bytesexamples/spot-plate/rig.tsruns8,160 bytesexamples/spot-plate/spot-plate.cssasset1,518 bytesexamples/test-rig/art.tsxruns7,372 bytesexamples/test-rig/figure.tsxruns850 bytesexamples/test-rig/geometry.tsruns13,085 bytesexamples/test-rig/live.tsxruns17,463 bytesexamples/test-rig/pose.tsruns3,894 bytesexamples/test-rig/rig.tsruns5,604 bytesexamples/test-rig/stretch.cssasset1,210 bytesexamples/test-rig/view.tsruns3,116 bytesexamples/turning-dial/build.mjsruns32,098 bytesexamples/turning-dial/dial.cssasset509 bytesexamples/turning-dial/live.jsruns12,523 bytesexamples/turning-dial/stress.mjsruns19,414 bytesexamples/turning-dial/turning-dial-light.htmlasset673,894 bytesexamples/turning-dial/turning-dial-verify-light.htmlasset701,752 bytesexamples/turning-dial/turning-dial.htmlasset673,893 bytesexamples/turning-dial/turning-stress-light.htmlasset1,228,774 byteskit/audit.mjsruns92,618 byteskit/canvas-painter.mjsruns27,535 byteskit/gl-shared.mjsruns8,863 byteskit/gl.mjsruns8,763 byteskit/iso-kit.mjsruns35,175 byteskit/iso-kit.tsruns38,631 byteskit/iso.cssasset7,698 byteskit/lathe.mjsruns48,028 byteskit/react/draw.tsxruns6,602 byteskit/react/live.tsxruns4,359 byteskit/tube.mjsruns14,230 byteskit/turn-audit.mjsruns57,356 byteskit/turn-build.mjsruns65,975 byteskit/turn-fixed.mjsruns147,055 byteskit/turn.mjsruns139,815 bytesreferences/3d.mddoc44,644 bytesreferences/craft.mddoc50,299 bytesreferences/kit.mddoc67,873 bytesreferences/motion.mddoc22,611 bytesreferences/publish.mddoc4,113 bytesreferences/react.mddoc3,614 bytesreferences/verify.mddoc43,574 bytesreferences/walkthrough.mddoc5,276 bytesreferences/webgl.mddoc61,104 bytesscripts/audit-affine-bounds.test.mjsruns4,175 bytesscripts/audit-cache.test.mjsruns1,603 bytesscripts/audit-clearance-envelope.test.mjsruns2,407 bytesscripts/audit-empty-clipping.test.mjsruns3,936 bytesscripts/audit-order-convergence.test.mjsruns2,875 bytesscripts/audit-path-origin.test.mjsruns1,594 bytesscripts/audit-profile.test.mjsruns2,171 bytesscripts/audit-projection.test.mjsruns1,934 bytesscripts/audit-slide-clearance.test.mjsruns2,875 bytesscripts/audit-svg-attributes.test.mjsruns3,484 bytesscripts/audit-taper.test.mjsruns1,267 bytesscripts/audit-tube-support.test.mjsruns2,636 bytesscripts/capture-current-geometry.test.mjsruns5,109 bytesscripts/capture-selector.test.mjsruns7,665 bytesscripts/capture.mjsruns15,024 bytesscripts/capture.test.mjsruns3,224 bytesscripts/chrome-port.mjsruns1,083 bytesscripts/chrome-startup.test.mjsruns1,838 bytesscripts/curve-density.test.mjsruns4,196 bytesscripts/drive-actions.test.mjsruns3,061 bytesscripts/drive-async-until.test.mjsruns2,743 bytesscripts/drive-page-load.test.mjsruns1,318 bytesscripts/drive-turn-controller.test.mjsruns2,702 bytesscripts/drive.mjsruns23,905 bytesscripts/drive.test.mjsruns3,690 bytesscripts/enter-key.test.mjsruns2,560 bytesscripts/fidelity-cut.test.mjsruns4,852 bytesscripts/fidelity-tube-coverage.test.mjsruns3,223 bytesscripts/fingerprint.mjsruns1,241 bytesscripts/inline-kit.mjsruns648 bytesscripts/line-ends.mjsruns16,206 bytesscripts/lines-arcs.test.mjsruns2,059 bytesscripts/lines-bezier.test.mjsruns1,769 bytesscripts/lines-round.test.mjsruns2,458 bytesscripts/lines-rounded-rect.test.mjsruns2,527 bytesscripts/lines.mjsruns1,700 bytesscripts/lines.test.mjsruns1,537 bytesscripts/navigation.test.mjsruns2,255 bytesscripts/orbit-sampling.test.mjsruns2,810 bytesscripts/publish.mjsruns20,276 bytesscripts/publish.test.mjsruns7,780 bytesscripts/react-dots-opacity.test.mjsruns2,817 bytesscripts/react-readout-first-write.test.mjsruns3,846 bytesscripts/react-readout-target.test.mjsruns4,657 bytesscripts/react-solid-seamless.test.mjsruns2,752 bytesscripts/react-visibility-target.test.mjsruns3,844 bytesscripts/session.mjsruns4,834 bytesscripts/session.test.mjsruns2,663 bytesscripts/turn-audit-samples.test.mjsruns1,370 bytesscripts/turn-bench.mjsruns3,863 bytesscripts/turn-check.mjsruns38,355 bytesscripts/turn-convex-check.test.mjsruns1,875 bytesscripts/turn-fidelity.mjsruns20,340 bytesscripts/turn-group-reference.test.mjsruns2,174 bytesscripts/turn-rounded-polygon.test.mjsruns1,533 bytesscripts/turn-split-owner.test.mjsruns3,411 bytestests/fixtures/react-dots-dark.pngasset4,032 bytestests/fixtures/react-dots-light.pngasset3,848 bytestests/fixtures/react-solid-dark.pngasset9,416 bytestests/fixtures/react-solid-light.pngasset9,847 bytes
Read SKILL.md
# Anatomy
This skill makes figures like a small instrument on a bench: a heavy base on feet, rails with tick rulers, a carriage on bushings, knurled knobs, coil springs, a dial gauge whose needle moves, screws as tiny dots. The reader understands the idea because they recognise the machine. Every number the figure shows comes from the same model that moves its parts.
Eight complete examples ship with the skill. Open the closest one before you start. Each framework-free example is built with `node examples/<name>/build.mjs`, which writes a standalone HTML page next to the script; add `--light` for the light theme.
- `examples/dial-indicator/` is the smallest: a dial gauge on a stand, about 300 lines in all.
- `examples/desk-computer/` is framework-free SVG: a desk computer with a keyboard you can type on. The typed line appears on a CRT screen drawn in the plane of the case front, and the picture collapses to a line and a dot when you switch it off. It has about 85 solids and 850 paths.
- `examples/arcade-cabinet/` is an upright arcade cabinet with its side panel off, a Hero of about 240 solids and 15 cables. A quarter flies into the slot, rolls down the coin chute at the speed a rolling disc reaches on a 30° slope, trips the coin-switch wire and drops into the cash box; the switch's pulse runs chunk by chunk along its cable to the board, and the CRT warms up, self-tests and runs an attract mode drawn in the plane of the tilted monitor. The stick tilts and closes a microswitch under the panel. It shows how to place a camera so a cutaway's mechanism stays in view, a concave board drawn as a prism along any axis, moving parts rebuilt in the page from the same module the build uses, and live coins and a wire drawn in reserved slots of the settled order. `node build.mjs --audit` proves the geometry.
- `examples/raptor-engine/` is a rocket engine hanging in a test stand. Its round parts come from `kit/lathe.mjs` and its pipes and harness from `kit/tube.mjs`. It comes apart into 11 assemblies with staggered springs and per-frame depth re-sorting. Every part records its true shape, and `node build.mjs --audit` (`kit/audit.mjs`) proves, at rest, apart and in every replayed frame of the explode, that nothing passes through anything, that every end sits on a real mount, that no bend pinches, folds or lands on another line, that no curved profile's slope wobbles, and that every overlap is drawn in depth order. A WebGL plume, shock, splash and steam render between the back and front SVG. It is the reference for dense pipework, smooth shading and fades.
- `examples/ripple-tank/` is a school ripple tank on tall legs over a paper screen, seen from 44° up. Two WebGL layers (lamp light, shadows and caustics on the paper, and the water's reflections and glass) are registered to the isometric planes and driven by a pure dispersion and optics model (`model.mjs`); a frequency change travels out from the dippers through a history texture.
- `examples/test-rig/` is a production figure from a real site (React/Next): a glass button on a spring-mounted carriage, a finger probe on a rail that presses and pulls, and a dial gauge reading the lean. It has 53 solids and about 470 paths.
- `examples/spot-plate/` is a second production figure from the same site: six pairs of glass drops on a spot plate, each pair drawn from one distance field, so a pair closer than `merge` runs together into one piece of glass. A fan of feeler blades sets `merge`, one blade per gap. It is the reference for shapes that morph into each other and for one control driving many parts.
- `examples/turning-dial/` is the optional 3D mode: a combination dial that turns in true 3D with a small robot hand on it. It has about 90 live parts in metal materials, a second turn group, a hinge, a three-hinge finger that lifts and a pod that breaks off as a free body. A WebGL LED, its light pool and sparks follow the moving parts. `stress.mjs` beside it is a dense hand of about 380 parts in a cluttered workshop, used to measure performance.View the complete source on GitHubSkills included
- charles-video-maker
- anatomy
Repository facts
- License
- MIT
- Created
- Oct 19, 2026
- Last pushed
- Nov 4, 2026
- Forks
- 10
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 63 notes
skills/charles-video-maker/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/charles-video-maker/anatomy/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/charles-video-maker/anatomy/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/charles-video-maker/anatomy/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/charles-video-maker/anatomy/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/charles-video-maker/anatomy/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/charles-video-maker/anatomy/examples/arcade-cabinet/arcade-cabinet-light.html:158Analysis incomplete: physical or joined line exceeds character limitskills/charles-video-maker/anatomy/examples/arcade-cabinet/arcade-cabinet-light.html:156Analysis incomplete: physical or joined line exceeds character limitskills/charles-video-maker/anatomy/examples/arcade-cabinet/arcade-cabinet-light.html:157Analysis incomplete: physical or joined line exceeds character limitskills/charles-video-maker/anatomy/examples/arcade-cabinet/arcade-cabinet-light.html:2222Analysis incomplete: physical or joined line exceeds character limitskills/charles-video-maker/anatomy/examples/arcade-cabinet/arcade-cabinet.html:158Analysis incomplete: physical or joined line exceeds character limitskills/charles-video-maker/anatomy/examples/arcade-cabinet/arcade-cabinet.html:156Analysis incomplete: physical or joined line exceeds character limitskills/charles-video-maker/anatomy/examples/arcade-cabinet/arcade-cabinet.html:157Analysis incomplete: physical or joined line exceeds character limitskills/charles-video-maker/anatomy/examples/arcade-cabinet/arcade-cabinet.html:2222Analysis incomplete: physical or joined line exceeds character limitskills/charles-video-maker/anatomy/examples/desk-computer/desk-computer-light.html:137Analysis incomplete: physical or joined line exceeds character limitskills/charles-video-maker/anatomy/examples/desk-computer/desk-computer-light.html:135Analysis incomplete: physical or joined line exceeds character limitskills/charles-video-maker/anatomy/examples/desk-computer/desk-computer-light.html:136Analysis incomplete: physical or joined line exceeds character limitskills/charles-video-maker/anatomy/examples/desk-computer/desk-computer.html:137Analysis incomplete: physical or joined line exceeds character limitskills/charles-video-maker/anatomy/examples/desk-computer/desk-computer.html:135Analysis incomplete: physical or joined line exceeds character limitskills/charles-video-maker/anatomy/examples/desk-computer/desk-computer.html:136Analysis incomplete: physical or joined line exceeds character limit
- No broad tool permissions
- 9 dangerous shell commandsin 4 files: anatomy/kit/audit.mjs:230 anatomy/kit/turn-audit.mjs:763 anatomy/.github/workflows/ci.yml:31 and 1 more
- 292 network referencesin 53 files: anatomy/README.md:5 charles-video-maker/scripts/douyin_radar.py:64 charles-video-maker/scripts/voice/tts.py:45 and 50 more
- 5 obfuscation signalsin 5 files: anatomy/kit/turn-fixed.mjs:463 anatomy/kit/turn.mjs:428 charles-video-maker/scripts/footage/genimage.py:33 and 2 more
- 3 instruction override signalsin 1 file: charles-video-maker/scripts/agy_image.py:69
- 129 executable scriptsin 129 files: anatomy/examples/arcade-cabinet/build.mjs:1 anatomy/examples/arcade-cabinet/live.js:1 anatomy/examples/arcade-cabinet/parts.mjs:1 and 126 more
- 24 references to secretsin 11 files: charles-video-maker/scripts/voice/tts.py:4 charles-video-maker/scripts/footage/stock.py:8 charles-video-maker/scripts/gemini_copy.py:14 and 8 more
- No requests to vote in Hot
Show all 462 signals by file
skills/charles-video-maker/SKILL.md
- Network accessline 18
这个 skill 起步于两个开源项目的合并:用代码逐帧渲染视频的 [xilo-opus-video](https://github.com/Kianzzz/xilo-opus-video)(含本仓库加的配音流水线),和用等距机器解释概念的 [Anatomy](https://github.com/wheresryan22/anatomy)(原样收在 `anatomy/`),再用一层桥接(`bridge/`)把 Anatomy 的机器变成可以逐帧渲染的视频画面。之后又加了素材层
skills/charles-video-maker/anatomy/.github/ISSUE_TEMPLATE/config.yml
- Network accessline 2
contact_links: - name: Security problem url: https://github.com/wheresryan22/anatomy/security/advisories/new - Network accessline 3
- name: Security problem url: https://github.com/wheresryan22/anatomy/security/advisories/new about: Report security problems privately, not in a public issue. - Network accessline 4
url: https://github.com/wheresryan22/anatomy/security/advisories/new
skills/charles-video-maker/anatomy/.github/workflows/ci.yml
- Dangerous shell operationline 31
trap 'rm -rf "$test_deps"' EXIT
skills/charles-video-maker/anatomy/.gitignore
- Access to secretsline 5
[Credential-related source omitted]
skills/charles-video-maker/anatomy/CHANGELOG.md
- Network accessline 3
All notable changes to Anatomy are recorded here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Releases follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html); entries from before the first release - Network accessline 14
- A Figure no longer quotes a time to the user. The 30–90 minute estimate was often far longer than the build itself ([#41](https://github.com/wheresryan22/anatomy/issues/41)).
skills/charles-video-maker/anatomy/CODE_OF_CONDUCT.md
- Network accessline 61
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement by direct message to [@wheresryan22](https://x.com/wheresryan22) on X, or, when the report does - Network accessline 62
reported to the community leaders responsible for enforcement by direct message to [@wheresryan22](https://x.com/wheresryan22) on X, or, when the report does not need to be private, through an issue on the - Network accessline 63
to [@wheresryan22](https://x.com/wheresryan22) on X, or, when the report does - Network accessline 64
not need to be private, through an issue on the [GitHub repository](https://github.com/wheresryan22/anatomy/issues). All complaints will be reviewed and investigated promptly and fairly. - Network accessline 65
[GitHub repository](https://github.com/wheresryan22/anatomy/issues). - Network accessline 119
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. - Network accessline 121
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. - Network accessline 126
For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at - Network accessline 127
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at - Network accessline 128
[https://www.contributor-covenant.org/translations][translations]. - Network accessline 130
[homepage]: https://www.contributor-covenant.org - Network accessline 131
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html - Network accessline 132
[Mozilla CoC]: https://github.com/mozilla/diversity - Network accessline 133
[FAQ]: https://www.contributor-covenant.org/faq - Network accessline 134
[translations]: https://www.contributor-covenant.org/translations
skills/charles-video-maker/anatomy/CONTRIBUTING.md
- Network accessline 16
git clone https://github.com/wheresryan22/anatomy.git - Network accessline 167
Use the [issue forms](https://github.com/wheresryan22/anatomy/issues/new/choose). For a figure that came out wrong, include the prompt, the theme, where the figure lives (HTML, SVG or React), and a screenshot or close-up of the fault.
skills/charles-video-maker/anatomy/README.md
- Network accessline 5
<p align="center"> <a href="https://code.claude.com/docs/en/skills"><img src="https://img.shields.io/badge/Claude_Code-skill-1b1b19?style=flat-square&logo=claude&logoColor=white" alt="Claude Code skill"></a> - Network accessline 6
<a href="https://code.claude.com/docs/en/skills"><img src="https://img.shields.io/badge/Claude_Code-skill-1b1b19?style=flat-square&logo=claude&logoColor=white" alt="Claude Code skill"></a> - Network accessline 7
<a href="https://agentskills.io"><img src="https://img.shields.io/badge/Agent_Skills-compatible-1b1b19?style=flat-square" alt="Agent Skills compatible"></a> - Network accessline 8
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-1b1b19?style=flat-square" alt="MIT license"></a> - Network accessline 9
<a href="#requirements"><img src="https://img.shields.io/badge/node-%E2%89%A5%2020.10-1b1b19?style=flat-square&logo=nodedotjs&logoColor=white" alt="Node 20.10 or later"></a> - Network accessline 10
<a href="#requirements"><img src="https://img.shields.io/badge/dependencies-0-1b1b19?style=flat-square" alt="No dependencies"></a> - Network accessline 11
<a href="https://github.com/wheresryan22/anatomy/actions/workflows/ci.yml"><img src="https://github.com/wheresryan22/anatomy/actions/workflows/ci.yml/badge.svg" alt="CI"></a> - Network accessline 14
<p align="center"> <a href="https://skills.wheresryan.sh/anatomy"><img src="https://img.shields.io/badge/Website-skills.wheresryan.sh%2Fanatomy-1b1b19?style=for-the-badge" alt="Website: skills.wheresryan.sh/anatomy"></a> - Network accessline 15
<a href="https://skills.wheresryan.sh/anatomy"><img src="https://img.shields.io/badge/Website-skills.wheresryan.sh%2Fanatomy-1b1b19?style=for-the-badge" alt="Website: skills.wheresryan.sh/anatomy"></a> <a href="https://github.com - Network accessline 16
<a href="https://github.com/wheresryan22/anatomy/archive/refs/heads/main.zip"><img src="https://img.shields.io/badge/Download-ZIP-1b1b19?style=for-the-badge&logo=github&logoColor=white" alt="Download ZIP"></a> - Network accessline 17
<a href="https://github.com/wheresryan22/anatomy/archive/refs/heads/main.zip"><img src="https://img.shields.io/badge/Download-ZIP-1b1b19?style=for-the-badge&logo=github&logoColor=white" alt="Download ZIP"></a> - Network accessline 18
<a href="#install"><img src="https://img.shields.io/badge/Install-npx_skills_add-d7d7d0?style=for-the-badge&labelColor=1b1b19&logo=npm&logoColor=white" alt="Install with npx"></a> </p> - Network accessline 19
<a href="#install"><img src="https://img.shields.io/badge/Install-npx_skills_add-d7d7d0?style=for-the-badge&labelColor=1b1b19&logo=npm&logoColor=white" alt="Install with npx"></a> - Network accessline 100
Anatomy is a standard [Agent Skill](https://agentskills.io): a folder with a `SKILL.md` at its root. This repository is that folder. Pick one way in: - Network accessline 108
| **skills CLI**, for you (MiniMax Code) | `npx skills add wheresryan22/anatomy -g -a minimax-code` | `~/.minimax/skills/anatomy` | | **skills CLI**, for one project | `npx skills add wheresryan22/anatomy` | `.claude/skills/anatomy` for Cla - Network accessline 109
| **skills CLI**, for one project | `npx skills add wheresryan22/anatomy` | `.claude/skills/anatomy` for Claude Code, `.agents/skills/anatomy` for Antigravity, OpenCode and Codex, `.minimax/skills/anatomy` for MiniMax Code | | **git**, for - Network accessline 110
| **git**, for you (Claude Code) | `git clone https://github.com/wheresryan22/anatomy.git ~/.claude/skills/anatomy` | `~/.claude/skills/anatomy` | - Network accessline 111
| **git**, for you (Antigravity) | `git clone https://github.com/wheresryan22/anatomy.git ~/.gemini/antigravity/skills/anatomy` | `~/.gemini/antigravity/skills/anatomy` | - Network accessline 112
| **git**, for you (OpenCode) | `git clone https://github.com/wheresryan22/anatomy.git ~/.config/opencode/skills/anatomy` | `~/.config/opencode/skills/anatomy` | - Network accessline 113
| **git**, for you (Codex) | `git clone https://github.com/wheresryan22/anatomy.git ~/.agents/skills/anatomy` | `~/.agents/skills/anatomy` | - Network accessline 114
| **git**, for you (MiniMax Code) | `git clone https://github.com/wheresryan22/anatomy.git ~/.minimax/skills/anatomy` | `~/.minimax/skills/anatomy` | | **git**, for one project | `git clone https://github.com/wheresryan22/anatomy.git .claud - Network accessline 115
| **git**, for one project | `git clone https://github.com/wheresryan22/anatomy.git .claude/skills/anatomy` | `.claude/skills/anatomy` (Claude Code and OpenCode) or `.agents/skills/anatomy` (Antigravity, OpenCode, Codex and MiniMax Code) | - Network accessline 123
The [`skills`](https://github.com/vercel-labs/skills) CLI finds the `SKILL.md` at the root of this repository and installs it as `anatomy`. By default it installs into the current project and asks which agents to set up. `-g` installs it fo - Network accessline 143
[Download the ZIP](https://github.com/wheresryan22/anatomy/archive/refs/heads/main.zip), unpack it, rename the folder from `anatomy-main` to `anatomy`, and move it into `~/.claude/skills/` (Claude Code), `~/.gemini/antigravity/skills/` (Ant - Network accessline 148
mkdir -p ~/.claude/skills/anatomy && curl -L https://github.com/wheresryan22/anatomy/archive/refs/heads/main.tar.gz | tar -xz --strip-components=1 -C ~/.claude/skills/anatomy - Network accessline 154
mkdir -p ~/.gemini/antigravity/skills/anatomy && curl -L https://github.com/wheresryan22/anatomy/archive/refs/heads/main.tar.gz | tar -xz --strip-components=1 -C ~/.gemini/antigravity/skills/anatomy - Network accessline 158
mkdir -p ~/.config/opencode/skills/anatomy && curl -L https://github.com/wheresryan22/anatomy/archive/refs/heads/main.tar.gz | tar -xz --strip-components=1 -C ~/.config/opencode/skills/anatomy - Network accessline 297
| | Needed for | Notes | |---|---|---| | **[Claude Code](https://code.claude.com/docs/en/overview)**, or [Antigravity](https://antigravity.google), [OpenCode](https://opencode.ai/docs/skills/), [Codex](https://developers.openai.com/codex/sk - Network accessline 298
|---|---|---| | **[Claude Code](https://code.claude.com/docs/en/overview)**, or [Antigravity](https://antigravity.google), [OpenCode](https://opencode.ai/docs/skills/), [Codex](https://developers.openai.com/codex/skills) or [MiniMax Code](h - Network accessline 299
| **[Claude Code](https://code.claude.com/docs/en/overview)**, or [Antigravity](https://antigravity.google), [OpenCode](https://opencode.ai/docs/skills/), [Codex](https://developers.openai.com/codex/skills) or [MiniMax Code](https://github. - Network accessline 316
Made something good? Ask your agent to *"publish this figure to the Anatomy community gallery"*. It asks for a title and your GitHub name, shows what it will send, and after your yes opens a pull request on [anatomy-community](https://githu - Network accessline 322
- [Report a bug](https://github.com/wheresryan22/anatomy/issues/new?template=bug_report.yml) - Network accessline 323
- [Request a figure](https://github.com/wheresryan22/anatomy/issues/new?template=figure_request.yml) - Network accessline 328
[MIT](LICENSE) © 2026 Ryan · [@wheresryan22](https://x.com/wheresryan22)
skills/charles-video-maker/anatomy/SECURITY.md
- Network accessline 15
Please don't open a public issue for a security problem. Report it privately through GitHub's [private vulnerability reporting](https://github.com/wheresryan22/anatomy/security/advisories/new) for this repository. If that link does not work
skills/charles-video-maker/anatomy/examples/arcade-cabinet/arcade-cabinet-light.html
- Network accessline 156
.ac-marquee[data-on] .ac-marquee-art{fill:var(--anatomy-lit)} .ac-marquee-frame{fill:none;stroke:var(--anatomy-lo);stroke-width:.5px;vector-effect:non-scaling-stroke} </style><figure class="iso-figure"><div class="iso-plate"><div class="iso - Network accessline 157
.ac-marquee-frame{fill:none;stroke:var(--anatomy-lo);stroke-width:.5px;vector-effect:non-scaling-stroke} </style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corn - Network accessline 158
</style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 4</span><span class="iso-plate-corner" data-corner="title">Upright cabinet, sid - Network accessline 689
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 690
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 691
xmlns: "http://www.w3.org/2000/svg",
skills/charles-video-maker/anatomy/examples/arcade-cabinet/arcade-cabinet.html
- Network accessline 156
.ac-marquee[data-on] .ac-marquee-art{fill:var(--anatomy-lit)} .ac-marquee-frame{fill:none;stroke:var(--anatomy-lo);stroke-width:.5px;vector-effect:non-scaling-stroke} </style><figure class="iso-figure"><div class="iso-plate"><div class="iso - Network accessline 157
.ac-marquee-frame{fill:none;stroke:var(--anatomy-lo);stroke-width:.5px;vector-effect:non-scaling-stroke} </style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corn - Network accessline 158
</style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 4</span><span class="iso-plate-corner" data-corner="title">Upright cabinet, sid - Network accessline 689
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 690
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 691
xmlns: "http://www.w3.org/2000/svg",
skills/charles-video-maker/anatomy/examples/arcade-cabinet/build.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/arcade-cabinet/live.js
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/arcade-cabinet/parts.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/arcade-cabinet/screen.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/desk-computer/build.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/desk-computer/desk-computer-light.html
- Network accessline 135
.iso-stage:focus{outline:none} .iso-stage:focus-visible{outline:1px solid var(--anatomy-muted);outline-offset:6px} </style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso- - Network accessline 136
.iso-stage:focus-visible{outline:1px solid var(--anatomy-muted);outline-offset:6px} </style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig" - Network accessline 137
</style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 2</span><span class="iso-plate-corner" data-corner="title">Desk computer</span> - Network accessline 668
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 669
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 670
xmlns: "http://www.w3.org/2000/svg",
skills/charles-video-maker/anatomy/examples/desk-computer/desk-computer.html
- Network accessline 135
.iso-stage:focus{outline:none} .iso-stage:focus-visible{outline:1px solid var(--anatomy-muted);outline-offset:6px} </style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso- - Network accessline 136
.iso-stage:focus-visible{outline:1px solid var(--anatomy-muted);outline-offset:6px} </style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig" - Network accessline 137
</style><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 2</span><span class="iso-plate-corner" data-corner="title">Desk computer</span> - Network accessline 668
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 669
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 670
xmlns: "http://www.w3.org/2000/svg",
skills/charles-video-maker/anatomy/examples/dial-indicator/build.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/dial-indicator/dial-indicator-light.html
- Network accessline 112
body{margin:0;background:var(--anatomy-page);color:var(--anatomy-text);font:14px/1.6 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased} .iso-page{width:min(650px,100% - 32px);margin:64px auto 96p - Network accessline 113
.iso-page{width:min(650px,100% - 32px);margin:64px auto 96px} </style></head><body class="iso" data-theme="light"><main class="iso-page"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><sp - Network accessline 114
</style></head><body class="iso" data-theme="light"><main class="iso-page"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 1</span><spa - Network accessline 645
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 646
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 647
xmlns: "http://www.w3.org/2000/svg",
skills/charles-video-maker/anatomy/examples/dial-indicator/dial-indicator.html
- Network accessline 112
body{margin:0;background:var(--anatomy-page);color:var(--anatomy-text);font:14px/1.6 ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased} .iso-page{width:min(650px,100% - 32px);margin:64px auto 96p - Network accessline 113
.iso-page{width:min(650px,100% - 32px);margin:64px auto 96px} </style></head><body class="iso" data-theme="dark"><main class="iso-page"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><spa - Network accessline 114
</style></head><body class="iso" data-theme="dark"><main class="iso-page"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 1</span><span - Network accessline 645
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 646
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 647
xmlns: "http://www.w3.org/2000/svg",
skills/charles-video-maker/anatomy/examples/raptor-engine/build.mjs
- Executable scriptline 1
Executable file - Network accessline 889
const backSvg = k.figureSvg({ width: W, height: H, label: LABEL_TEXT, body: back, className: "rp-back" }); const frontSvg = `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg rp-front" viewBox="0 0 ${W} ${H}" aria-hidden="true"><g clas - Network accessline 890
const frontSvg = `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg rp-front" viewBox="0 0 ${W} ${H}" aria-hidden="true"><g class="rp-engine">${groups.join("")}</g></svg>`; - Network accessline 923
const corners = `<div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 1</span><span class="iso-plate-corner" data-corner="title">Raptor 2 · test stand</span><span class="iso-plate-corner" da - Network accessline 924
const controls = `<div class="rp-controls"><button type="button" class="rp-fire" data-fire><span class="rp-lamp" aria-hidden="true"></span><span data-fire-label>Ignite</span></button><span class="rp-hint">Hover the engine to take it apart</ - Network accessline 925
const glowSvg = `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg rp-glow" viewBox="0 0 ${W} ${H}" aria-hidden="true"><g class="rp-glow-g"><path class="rp-rim rp-rim-soft" d="${LIP}"/><path class="rp-rim" d="${LIP}"/></g></svg>`;
skills/charles-video-maker/anatomy/examples/raptor-engine/live.js
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/raptor-engine/raptor-engine-light.html
- Network accessline 471
stroke: none; } </style><figure class="iso-figure rp"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 1</span><span class="iso-plate-corner" data-corner="title">R - Network accessline 473
</style><figure class="iso-figure rp"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 1</span><span class="iso-plate-corner" data-corner="title">Raptor 2 · test s
skills/charles-video-maker/anatomy/examples/raptor-engine/raptor-engine.html
- Network accessline 471
stroke: none; } </style><figure class="iso-figure rp"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 1</span><span class="iso-plate-corner" data-corner="title">R - Network accessline 473
</style><figure class="iso-figure rp"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 1</span><span class="iso-plate-corner" data-corner="title">Raptor 2 · test s
skills/charles-video-maker/anatomy/examples/ripple-tank/build.mjs
- Executable scriptline 1
Executable file - Network accessline 529
const backSvg = k.figureSvg({ width: W, height: H, label: LABEL_TEXT, body: back, className: "rt-back" }); const layerSvg = (name, body) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg rt-layer ${name}" viewBox="0 0 ${W} ${H}" ar - Network accessline 530
const layerSvg = (name, body) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg rt-layer ${name}" viewBox="0 0 ${W} ${H}" aria-hidden="true">${body.join("")}</svg>`;
skills/charles-video-maker/anatomy/examples/ripple-tank/live.js
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/ripple-tank/model.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/ripple-tank/ripple-tank-light.html
- Network accessline 215
} } </style><div class="rt"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 3</span><span class="iso-plate-corner" data-corner="title"> - Network accessline 216
} </style><div class="rt"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 3</span><span class="iso-plate-corner" data-corner="title">Ri - Network accessline 217
</style><div class="rt"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 3</span><span class="iso-plate-corner" data-corner="title">Ripp - Network accessline 748
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 749
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 750
xmlns: "http://www.w3.org/2000/svg",
skills/charles-video-maker/anatomy/examples/ripple-tank/ripple-tank.html
- Network accessline 215
} } </style><div class="rt"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 3</span><span class="iso-plate-corner" data-corner="title"> - Network accessline 216
} </style><div class="rt"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 3</span><span class="iso-plate-corner" data-corner="title">Ri - Network accessline 217
</style><div class="rt"><figure class="iso-figure"><div class="iso-plate"><div class="iso-plate-corners" aria-hidden="true"><span class="iso-plate-corner" data-corner="fig">Fig 3</span><span class="iso-plate-corner" data-corner="title">Ripp - Network accessline 748
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 749
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 750
xmlns: "http://www.w3.org/2000/svg",
skills/charles-video-maker/anatomy/examples/spot-plate/art.tsx
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/spot-plate/drops.ts
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/spot-plate/fan.ts
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/spot-plate/figure.tsx
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/spot-plate/geometry.ts
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/spot-plate/live.tsx
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/spot-plate/rig.ts
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/test-rig/art.tsx
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/test-rig/figure.tsx
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/test-rig/geometry.ts
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/test-rig/live.tsx
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/test-rig/pose.ts
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/test-rig/rig.ts
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/test-rig/view.ts
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/turning-dial/build.mjs
- Executable scriptline 1
Executable file - Network accessline 449
const LABEL = "A combination dial on a raised door plate. A small robot hand lies on the dial's hub and turns with it: a palm with a cover plate, a connector block, a piston on two saddles with a ball joint, three jointed fingers whose tips - Network accessline 450
const backSvg = k.figureSvg({ width: WIDTH, height: HEIGHT, label: LABEL, body: BACK }); const staticSvg = (list) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg iso-layer" viewBox="0 0 ${WIDTH} ${HEIGHT}" aria-hidden="true">${li - Network accessline 451
const staticSvg = (list) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg iso-layer" viewBox="0 0 ${WIDTH} ${HEIGHT}" aria-hidden="true">${list.join("")}</svg>`;
skills/charles-video-maker/anatomy/examples/turning-dial/live.js
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/examples/turning-dial/stress.mjs
- Executable scriptline 1
Executable file - Network accessline 191
for (let f = 0; f < 5; f++) { const tag = f < 4 ? `f${f}` : "thumb"; const curl = (Math.sin(t * 1.3 + f * 0.9) * 0.5 + 0.5) * lift; - Network accessline 192
const tag = f < 4 ? `f${f}` : "thumb"; const curl = (Math.sin(t * 1.3 + f * 0.9) * 0.5 + 0.5) * lift; out[`${tag}.j0`] = -5 + 10 * curl; - Network accessline 193
const curl = (Math.sin(t * 1.3 + f * 0.9) * 0.5 + 0.5) * lift; - Network accessline 223
const BACK = [`<path class="iso-halo" d="${k.haloOf(BENCH, BENCH_TOP - 6, 6, P)}"/>`, ...layerOf("back")]; const backSvg = k.figureSvg({ width: WIDTH, height: HEIGHT, label: "A dense robot hand on a turntable in a workshop: a stress scene f - Network accessline 224
const backSvg = k.figureSvg({ width: WIDTH, height: HEIGHT, label: "A dense robot hand on a turntable in a workshop: a stress scene for the 3D mode.", body: BACK }); const staticSvg = (list) => `<svg xmlns="http://www.w3.org/2000/svg" class - Network accessline 225
const staticSvg = (list) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg iso-layer" viewBox="0 0 ${WIDTH} ${HEIGHT}" aria-hidden="true">${list.join("")}</svg>`;
skills/charles-video-maker/anatomy/examples/turning-dial/turning-dial-light.html
- Network accessline 167
.td-led-core{fill:var(--td-led-pale)} .td-stage[data-gl] .td-led{opacity:var(--td-fallback,0)} </style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow k - Network accessline 168
.td-stage[data-gl] .td-led{opacity:var(--td-fallback,0)} </style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow keys to turn it, press B to break the p - Network accessline 169
</style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow keys to turn it, press B to break the pod off" aria-valuemin="0" aria-valuemax="99" aria-valueno
skills/charles-video-maker/anatomy/examples/turning-dial/turning-dial-verify-light.html
- Network accessline 167
.td-led-core{fill:var(--td-led-pale)} .td-stage[data-gl] .td-led{opacity:var(--td-fallback,0)} </style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow k - Network accessline 168
.td-stage[data-gl] .td-led{opacity:var(--td-fallback,0)} </style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow keys to turn it, press B to break the p - Network accessline 169
</style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow keys to turn it, press B to break the pod off" aria-valuemin="0" aria-valuemax="99" aria-valueno
skills/charles-video-maker/anatomy/examples/turning-dial/turning-dial.html
- Network accessline 167
.td-led-core{fill:var(--td-led-pale)} .td-stage[data-gl] .td-led{opacity:var(--td-fallback,0)} </style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow k - Network accessline 168
.td-stage[data-gl] .td-led{opacity:var(--td-fallback,0)} </style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow keys to turn it, press B to break the p - Network accessline 169
</style><div class="iso-stage iso-turn td-stage" tabindex="0" role="slider" aria-label="Combination dial: drag around the dial or use the arrow keys to turn it, press B to break the pod off" aria-valuemin="0" aria-valuemax="99" aria-valueno
skills/charles-video-maker/anatomy/examples/turning-dial/turning-stress-light.html
- Network accessline 157
.iso-turn{position:relative} .iso-turn>.iso-layer{position:absolute;inset:0;width:100%;height:100%;pointer-events:none} .ts-stage{outline:none}</style><div class="iso-stage iso-turn ts-stage" tabindex="0" role="img" aria-label="A dense robo - Network accessline 158
.iso-turn>.iso-layer{position:absolute;inset:0;width:100%;height:100%;pointer-events:none} .ts-stage{outline:none}</style><div class="iso-stage iso-turn ts-stage" tabindex="0" role="img" aria-label="A dense robot hand turning on a turntable - Network accessline 159
.ts-stage{outline:none}</style><div class="iso-stage iso-turn ts-stage" tabindex="0" role="img" aria-label="A dense robot hand turning on a turntable"><svg xmlns="http://www.w3.org/2000/svg" class="iso-svg" viewBox="0 0 760 560" role="img"
skills/charles-video-maker/anatomy/kit/audit.mjs
- Executable scriptline 1
Executable file - Dangerous shell operationline 230
const rm = Math.max(...poly.map(([, r]) => r)); - Dangerous shell operationline 233
const spread = [0, 1, 2].map((i) => rm * Math.sqrt(Math.max(0, 1 - F.a[i] * F.a[i]))); - Dangerous shell operationline 340
const { aV, uV, vV, s0, s1, rm } = shape._f; - Dangerous shell operationline 356
const qc = xc * xc + yc * yc - rm * rm; - Dangerous shell operationline 362
} else if (xc * xc + yc * yc > rm * rm) return null;
skills/charles-video-maker/anatomy/kit/canvas-painter.mjs
- Network accessline 1
const CP_Q = 64; const CP_SVG = "http://www.w3.org/2000/svg"; - Executable scriptline 1
Executable file - Network accessline 2
const CP_SVG = "http://www.w3.org/2000/svg"; - Network accessline 689
const theme = holder ? holder.getAttribute("data-theme") : "dark"; const card = getComputedStyle(stage.closest(".iso-plate") || stage).getPropertyValue("--anatomy-card").trim() || "#fff"; return `<svg xmlns="http://www.w3.org/20 - Network accessline 690
const card = getComputedStyle(stage.closest(".iso-plate") || stage).getPropertyValue("--anatomy-card").trim() || "#fff"; return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H}" width="${W}" height="${H}"><style>${css.r - Network accessline 691
return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H}" width="${W}" height="${H}"><style>${css.replace(/<\/style/gi, "")}</style><g class="iso" data-theme="${theme}"><g class="iso-plate" style="padding:0;box-shadow:none">${
skills/charles-video-maker/anatomy/kit/gl-shared.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/kit/gl.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/kit/iso-kit.mjs
- Executable scriptline 1
Executable file - Network accessline 532
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 533
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 534
xmlns: "http://www.w3.org/2000/svg",
skills/charles-video-maker/anatomy/kit/iso-kit.ts
- Executable scriptline 1
Executable file - Network accessline 669
const style = standalone ? `<style>${ISO_CSS}</style>` : ""; return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", - Network accessline 670
return `<svg${attrs({ xmlns: "http://www.w3.org/2000/svg", class: `iso-svg${standalone ? " iso" : ""}${className ? ` ${className}` : ""}`, - Network accessline 671
xmlns: "http://www.w3.org/2000/svg",
skills/charles-video-maker/anatomy/kit/lathe.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/kit/react/draw.tsx
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/kit/react/live.tsx
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/kit/tube.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/kit/turn-audit.mjs
skills/charles-video-maker/anatomy/kit/turn-build.mjs
- Executable scriptline 1
Executable file - Network accessline 1275
}; const out = { svg: markup, data: packed, css: TURN_CSS, report, scene, frames, planesByName }; out.layerSvg = (name, { width, height, label = "" }) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg iso-live iso-layer" data-l - Network accessline 1276
const out = { svg: markup, data: packed, css: TURN_CSS, report, scene, frames, planesByName }; out.layerSvg = (name, { width, height, label = "" }) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg iso-live iso-layer" data-live=" - Network accessline 1277
out.layerSvg = (name, { width, height, label = "" }) => `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg iso-live iso-layer" data-live="${esc(name)}" viewBox="0 0 ${width} ${height}" aria-hidden="true"${label ? ` aria-label="${esc(la
skills/charles-video-maker/anatomy/kit/turn-fixed.mjs
skills/charles-video-maker/anatomy/kit/turn.mjs
skills/charles-video-maker/anatomy/references/verify.md
- Network accessline 14
node scripts/capture.mjs page.html --out shots/joint.png --zoom 200,80,220,170 # close-up at 4x, in card px node scripts/capture.mjs page.html --out shots/still.png --reduced # reduced motion node scripts/capture.mjs http://lo - Network accessline 16
node scripts/capture.mjs http://localhost:3000/docs --select "figure:nth-of-type(3) .iso-plate" # one figure on a dev-server page
skills/charles-video-maker/anatomy/references/webgl.md
- Network accessline 166
const DATA = { W, H, camera: glCamera(P), plateR: 40, deck: [DECK.w / 2, DECK.r] }; const backSvg = k.figureSvg({ width: W, height: H, label: LABEL, body: back }); const frontSvg = `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg fx- - Network accessline 167
const backSvg = k.figureSvg({ width: W, height: H, label: LABEL, body: back }); const frontSvg = `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg fx-layer" viewBox="0 0 ${W} ${H}" aria-hidden="true">${front.join("")}</svg>`; const st - Network accessline 168
const frontSvg = `<svg xmlns="http://www.w3.org/2000/svg" class="iso-svg fx-layer" viewBox="0 0 ${W} ${H}" aria-hidden="true">${front.join("")}</svg>`;
skills/charles-video-maker/anatomy/scripts/audit-affine-bounds.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/audit-cache.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/audit-clearance-envelope.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/audit-empty-clipping.test.mjs
- Executable scriptline 1
Executable file - Network accessline 21
try{ const page=join(directory,"figure.html");await writeFile(page,'<!doctype html><div class="iso-plate"></div>'); const expression=`(async()=>{const fixtures=${JSON.stringify(fixtures.map(([,m])=>m))};const result=[];for(const m of fi - Network accessline 22
const page=join(directory,"figure.html");await writeFile(page,'<!doctype html><div class="iso-plate"></div>'); const expression=`(async()=>{const fixtures=${JSON.stringify(fixtures.map(([,m])=>m))};const result=[];for(const m of fixtures) - Network accessline 23
const expression=`(async()=>{const fixtures=${JSON.stringify(fixtures.map(([,m])=>m))};const result=[];for(const m of fixtures){const svg='<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64">'+m+'</svg>';const
skills/charles-video-maker/anatomy/scripts/audit-order-convergence.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/audit-path-origin.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/audit-profile.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/audit-projection.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/audit-slide-clearance.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/audit-svg-attributes.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/audit-taper.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/audit-tube-support.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/capture-current-geometry.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/capture-selector.test.mjs
- Executable scriptline 1
Executable file - Network accessline 15
const out = join(directory, "capture.png"); const content = svgOnly ? '<svg width="80" height="40" xmlns="http://www.w3.org/2000/svg"><rect width="80" height="40" fill="green"/></svg>' - Network accessline 16
const content = svgOnly ? '<svg width="80" height="40" xmlns="http://www.w3.org/2000/svg"><rect width="80" height="40" fill="green"/></svg>' : `<div class="iso-plate" tabindex="0" id="first" style="width:100px;height:80px;backgr - Network accessline 17
? '<svg width="80" height="40" xmlns="http://www.w3.org/2000/svg"><rect width="80" height="40" fill="green"/></svg>'
skills/charles-video-maker/anatomy/scripts/capture.mjs
- Executable scriptline 1
Executable file - Network accessline 145
}; try { const target = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json(); - Network accessline 146
try { const target = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json(); const socket = new WebSocket(target.webSocketDebuggerUrl); - Network accessline 147
const target = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json();
skills/charles-video-maker/anatomy/scripts/capture.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/chrome-port.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/chrome-startup.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/curve-density.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/drive-actions.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/drive-async-until.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/drive-page-load.test.mjs
- Executable scriptline 1
Executable file - Network accessline 25
const { port } = server.address(); const actions = JSON.stringify([["eval", "document.readyState + ' ' + Boolean(window.slowScriptRan)"]]); const result = await execute(process.execPath, [drive, `http://127.0.0.1:${port}/`, actions] - Network accessline 26
const actions = JSON.stringify([["eval", "document.readyState + ' ' + Boolean(window.slowScriptRan)"]]); const result = await execute(process.execPath, [drive, `http://127.0.0.1:${port}/`, actions], { timeout: 30000 }); assert.match - Network accessline 27
const result = await execute(process.execPath, [drive, `http://127.0.0.1:${port}/`, actions], { timeout: 30000 });
skills/charles-video-maker/anatomy/scripts/drive-turn-controller.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/drive.mjs
- Executable scriptline 1
Executable file - Network accessline 143
}; try { const page = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json(); - Network accessline 144
try { const page = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json(); const socket = new WebSocket(page.webSocketDebuggerUrl); - Network accessline 145
const page = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json();
skills/charles-video-maker/anatomy/scripts/drive.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/enter-key.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/fidelity-cut.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/fidelity-tube-coverage.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/fingerprint.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/inline-kit.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/line-ends.mjs
- Executable scriptline 1
Executable file - Network accessline 116
} else if (C === "A") { const arc = document.createElementNS("http://www.w3.org/2000/svg", "path"); - Network accessline 117
else if (C === "A") { const arc = document.createElementNS("http://www.w3.org/2000/svg", "path"); arc.setAttribute("d", `M${x} ${y}${command}${args}`); - Network accessline 118
const arc = document.createElementNS("http://www.w3.org/2000/svg", "path"); - Network accessline 306
problems.sort((a, b) => b.gap - a.gap); if (show) { const ns = "http://www.w3.org/2000/svg"; - Network accessline 307
if (show) { const ns = "http://www.w3.org/2000/svg"; const overlay = document.createElementNS(ns, "svg"); - Network accessline 308
const ns = "http://www.w3.org/2000/svg";
skills/charles-video-maker/anatomy/scripts/lines-arcs.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/lines-bezier.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/lines-round.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/lines-rounded-rect.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/lines.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/lines.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/navigation.test.mjs
- Executable scriptline 1
Executable file - Network accessline 19
const server = createServer(); await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve)); target = `http://127.0.0.1:${server.address().port}/`; - Network accessline 20
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve)); target = `http://127.0.0.1:${server.address().port}/`; await new Promise((resolve) => server.close(resolve)); - Network accessline 21
target = `http://127.0.0.1:${server.address().port}/`;
skills/charles-video-maker/anatomy/scripts/orbit-sampling.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/publish.mjs
- Executable scriptline 1
Executable file - Network accessline 251
...(canPush ? [] : [{ say: `make (or reuse) your fork, ${target}`, gh: ["repo", "fork", upstream, "--clone=false"] }]), { say: "let git use your GitHub CLI login", gh: ["auth", "setup-git"] }, { say: `start ${branch} from the galler - Network accessline 252
{ say: "let git use your GitHub CLI login", gh: ["auth", "setup-git"] }, { say: `start ${branch} from the gallery's latest main`, git: ["fetch", "--quiet", `https://github.com/${upstream}.git`, "main"] }, { git: ["switch", "--quiet" - Network accessline 253
{ say: `start ${branch} from the gallery's latest main`, git: ["fetch", "--quiet", `https://github.com/${upstream}.git`, "main"] }, - Network accessline 256
{ git: ["add", "--", folder] }, { git: ["commit", "--quiet", "-m", `Add ${title}`, "--", folder] }, { say: `push it to ${target}`, git: ["push", "--quiet", "--force", `https://github.com/${target}.git`, `HEAD:refs/heads/${branch}`] - Network accessline 257
{ git: ["commit", "--quiet", "-m", `Add ${title}`, "--", folder] }, { say: `push it to ${target}`, git: ["push", "--quiet", "--force", `https://github.com/${target}.git`, `HEAD:refs/heads/${branch}`] }, { say: `open the pull request - Network accessline 258
{ say: `push it to ${target}`, git: ["push", "--quiet", "--force", `https://github.com/${target}.git`, `HEAD:refs/heads/${branch}`] }, - Network accessline 275
const repo = resolve(options.into); const who = gh(["api", "user", "--jq", ".login"]); if (who.error || who.status !== 0) throw new Error("--submit needs the GitHub CLI, signed in: install it from https://cli.github.com and run gh auth - Network accessline 276
const who = gh(["api", "user", "--jq", ".login"]); if (who.error || who.status !== 0) throw new Error("--submit needs the GitHub CLI, signed in: install it from https://cli.github.com and run gh auth login"); const login = who.stdout.tr - Network accessline 277
if (who.error || who.status !== 0) throw new Error("--submit needs the GitHub CLI, signed in: install it from https://cli.github.com and run gh auth login");
skills/charles-video-maker/anatomy/scripts/publish.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/react-dots-opacity.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/react-readout-first-write.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/react-readout-target.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/react-solid-seamless.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/react-visibility-target.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/session.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/session.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/turn-audit-samples.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/turn-bench.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/turn-check.mjs
- Executable scriptline 1
Executable file - Network accessline 62
const chrome = spawn(binary, ["--headless=new", ...(process.platform === "linux" ? ["--no-sandbox"] : []), ...(process.platform === "win32" ? ["--do-not-de-elevate"] : []), "--remote-debugging-port=0", `--user-data-dir=${profile}`, "--no-fi - Network accessline 63
const port = await chromePort(chrome, profile); const page = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json(); const socket = new WebSocket(page.webSocketDebuggerUrl); - Network accessline 64
const page = await (await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { method: "PUT" })).json(); - Network accessline 297
} } return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ' + W + " " + H + '" width="' + w + '" height="' + h + '" shape-rendering="crispEdges"><rect width="100%" height="100%" fill="rgb(0,0,0)"/>' + out.join("") + "</svg>"; - Network accessline 298
} return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ' + W + " " + H + '" width="' + w + '" height="' + h + '" shape-rendering="crispEdges"><rect width="100%" height="100%" fill="rgb(0,0,0)"/>' + out.join("") + "</svg>"; }; - Network accessline 299
return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ' + W + " " + H + '" width="' + w + '" height="' + h + '" shape-rendering="crispEdges"><rect width="100%" height="100%" fill="rgb(0,0,0)"/>' + out.join("") + "</svg>"; - Network accessline 369
const h = H * SCALE; let hidden = null; const svgString = () => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ' + W + " " + H + '" width="' + w + '" height="' + h + '" class="iso iso-svg" data-theme="' + theme + '" style="--anat - Network accessline 370
let hidden = null; const svgString = () => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ' + W + " " + H + '" width="' + w + '" height="' + h + '" class="iso iso-svg" data-theme="' + theme + '" style="--anatomy-paper:var(--anatomy - Network accessline 371
const svgString = () => '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ' + W + " " + H + '" width="' + w + '" height="' + h + '" class="iso iso-svg" data-theme="' + theme + '" style="--anatomy-paper:var(--anatomy-card)"><style>' + cs - Network accessline 613
if (argv.includes("--lines")) { const angles = Array.from({ length: 24 }, (_, i) => i * 15); const planted = await page.evaluate(`(() => { window.__isoTurn.set(0); const part = document.querySelector("svg[data-live] [data-p]"); - Network accessline 614
const angles = Array.from({ length: 24 }, (_, i) => i * 15); const planted = await page.evaluate(`(() => { window.__isoTurn.set(0); const part = document.querySelector("svg[data-live] [data-p]"); const el = document.createElementNS("h - Network accessline 615
const planted = await page.evaluate(`(() => { window.__isoTurn.set(0); const part = document.querySelector("svg[data-live] [data-p]"); const el = document.createElementNS("http://www.w3.org/2000/svg", "path"); el.setAttribute("class", "iso-
skills/charles-video-maker/anatomy/scripts/turn-convex-check.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/turn-fidelity.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/turn-group-reference.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/turn-rounded-polygon.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/anatomy/scripts/turn-split-owner.test.mjs
- Executable scriptline 1
Executable file
skills/charles-video-maker/bridge/clock.js
- Executable scriptline 1
Executable file
skills/charles-video-maker/bridge/overlay.js
- Executable scriptline 1
Executable file
skills/charles-video-maker/bridge/wrap_figure.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/references/footage-layer.md
- Access to secretsline 54
[Credential-related source omitted]
skills/charles-video-maker/references/lemo-styles.md
skills/charles-video-maker/references/voiceover-pipeline.md
- Dangerous shell operationline 68
| 批量删除临时文件时卡住 | shell 里 `rm` 被设成了交互确认 | 脚本里一律用 `rm -f` |
skills/charles-video-maker/scripts/agy_image.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 60
a = ap.parse_args() out = os.path.abspath(a.out); os.makedirs(os.path.dirname(out), exist_ok=True) env = dict(os.environ, https_proxy='http://127.0.0.1:7890', http_proxy='http://127.0.0.1:7890') - Network accessline 61
out = os.path.abspath(a.out); os.makedirs(os.path.dirname(out), exist_ok=True) env = dict(os.environ, https_proxy='http://127.0.0.1:7890', http_proxy='http://127.0.0.1:7890') k = 0 - Network accessline 62
[Credential-related source omitted] - Access to secretsline 62
[Credential-related source omitted] - Instruction override signalline 69
ask = (f'Use your image generation tool to create exactly one image, aspect ratio {a.aspect}: {a.prompt}{RULES} ' f'Save it into the current directory as img.png. Do not write code. Then print the absolute path.') - Instruction override signalline 70
f'Save it into the current directory as img.png. Do not write code. Then print the absolute path.') r = subprocess.run([AGY, '-p', ask, '--dangerously-skip-permissions', '--print-timeout', '300s'], - Instruction override signalline 71
r = subprocess.run([AGY, '-p', ask, '--dangerously-skip-permissions', '--print-timeout', '300s'],
skills/charles-video-maker/scripts/analyze_video.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/scripts/audio_tools.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/scripts/check_env.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/scripts/douyin_comments.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 28
pass pg = ctx.new_page(); pg.on('response', on) pg.goto(f'https://www.douyin.com/video/{aid}', timeout=60000); time.sleep(10) - Network accessline 29
pg = ctx.new_page(); pg.on('response', on) pg.goto(f'https://www.douyin.com/video/{aid}', timeout=60000); time.sleep(10) for _ in range(4): - Network accessline 30
pg.goto(f'https://www.douyin.com/video/{aid}', timeout=60000); time.sleep(10)
skills/charles-video-maker/scripts/douyin_publish.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 60
locale='zh-CN', user_agent=UA) pg = ctx.new_page() nick = ctx.request.get('https://creator.douyin.com/web/api/media/user/info/').json() \ - Network accessline 61
pg = ctx.new_page() nick = ctx.request.get('https://creator.douyin.com/web/api/media/user/info/').json() \ .get('user', {}).get('nickname') - Network accessline 62
nick = ctx.request.get('https://creator.douyin.com/web/api/media/user/info/').json() \ - Access to secretsline 64
[Credential-related source omitted] - Network accessline 68
pg.goto('https://creator.douyin.com/creator-micro/content/upload', timeout=180000, wait_until='domcontentloaded')
skills/charles-video-maker/scripts/douyin_radar.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 64
tmp = COOKIE + '.all' for k in range(tries): subprocess.run(['yt-dlp', '--cookies-from-browser', 'chrome', '--cookies', tmp, '--skip-download', 'https://www.douyin.com/'], - Network accessline 65
for k in range(tries): subprocess.run(['yt-dlp', '--cookies-from-browser', 'chrome', '--cookies', tmp, '--skip-download', 'https://www.douyin.com/'], capture_output=True) - Network accessline 66
[Credential-related source omitted] - Access to secretsline 66
[Credential-related source omitted] - Network accessline 80
try: j = ctx.request.get('https://creator.douyin.com/web/api/media/user/info/', timeout=20000).json() - Network accessline 81
j = ctx.request.get('https://creator.douyin.com/web/api/media/user/info/', timeout=20000).json() - Network accessline 109
if page is not None and wait_scan: ctx.clear_cookies() page.goto('https://creator.douyin.com/', timeout=60000) - Network accessline 110
ctx.clear_cookies() page.goto('https://creator.douyin.com/', timeout=60000) print(f'>>> 请在弹出的浏览器窗口里用抖音 App 扫码登录({wait_scan // 60} 分钟内),登录一次之后会一直保存', flush=True) - Network accessline 111
page.goto('https://creator.douyin.com/', timeout=60000) - Network accessline 126
user_agent='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36') page = ctx.new_page(); login(ctx, page, 0 if HEADLESS else 300); page.on('response', on) - Network accessline 128
page.goto('https://www.douyin.com/search/' + urllib.parse.quote(TAG) + f'?type=video&sort_type={SORT}&publish_time={DAYS}', timeout=60000) - Network accessline 135
for name in ['hashtag']: stage['name'] = name page.goto(f"https://www.douyin.com/hashtag/{hid['id']}", timeout=60000); time.sleep(6) - Network accessline 136
stage['name'] = name page.goto(f"https://www.douyin.com/hashtag/{hid['id']}", timeout=60000); time.sleep(6) scroll(page, 40, name) - Network accessline 137
page.goto(f"https://www.douyin.com/hashtag/{hid['id']}", timeout=60000); time.sleep(6) - Network accessline 176
out = f"{D}/refs/{name + '-' if name else ''}{aid}.mp4" for u in urls: subprocess.run(['curl', '-sL', '--max-time', '180', '-o', out, '-H', 'Referer: https://www.douyin.com/', '-A', 'Mozilla/5.0', u]) - Network accessline 177
for u in urls: subprocess.run(['curl', '-sL', '--max-time', '180', '-o', out, '-H', 'Referer: https://www.douyin.com/', '-A', 'Mozilla/5.0', u]) if subprocess.run(['ffprobe', '-v', 'error', out], capture_output=True) - Network accessline 178
subprocess.run(['curl', '-sL', '--max-time', '180', '-o', out, '-H', 'Referer: https://www.douyin.com/', '-A', 'Mozilla/5.0', u]) - Network accessline 182
def fetch(D, args): - Network accessline 189
page = ctx.new_page(); login(ctx, page, 0 if HEADLESS else 300); page.on('response', on) for aid, name in pairs: page.goto(f'https://www.douyin.com/video/{aid}', timeout=60000) - Network accessline 190
for aid, name in pairs: page.goto(f'https://www.douyin.com/video/{aid}', timeout=60000) for _ in range(20): - Network accessline 191
page.goto(f'https://www.douyin.com/video/{aid}', timeout=60000) - Network accessline 222
out = f"{D}/refs/{name + '-' if name else ''}{aid}.mp4" for u in urls: subprocess.run(['curl', '-sL', '--max-time', '180', '-o', out, '-H', 'Referer: https://www.douyin.com/', '-A', 'Mozilla/5.0', u]) - Network accessline 223
for u in urls: subprocess.run(['curl', '-sL', '--max-time', '180', '-o', out, '-H', 'Referer: https://www.douyin.com/', '-A', 'Mozilla/5.0', u]) if subprocess.run(['ffprobe', '-v', 'error', out], capture_outp - Network accessline 224
subprocess.run(['curl', '-sL', '--max-time', '180', '-o', out, '-H', 'Referer: https://www.douyin.com/', '-A', 'Mozilla/5.0', u]) - Network accessline 238
ctx = p.chromium.launch_persistent_context(PROFILE, headless=HEADLESS, locale='zh-CN') login(ctx, ctx.new_page(), 0 if HEADLESS else 300); ctx.close() {'crawl': lambda: crawl(a.out), 'rank': lambda: rank(a.out), 'get': lambd - Network accessline 240
{'crawl': lambda: crawl(a.out), 'rank': lambda: rank(a.out), 'get': lambda: get(a.out, a.ids), 'login': do_login, 'fetch': lambda: fetch(a.out, a.ids)}[a.cmd]()
skills/charles-video-maker/scripts/douyin_stats.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 9
with sync_playwright() as p: ctx = p.chromium.launch_persistent_context(PROFILE, headless=True, locale='zh-CN', user_agent=UA) pg = ctx.new_page(); pg.goto('https://creator.douyin.com/creator-micro/content/manage', timeout=60000); t - Network accessline 10
ctx = p.chromium.launch_persistent_context(PROFILE, headless=True, locale='zh-CN', user_agent=UA) pg = ctx.new_page(); pg.goto('https://creator.douyin.com/creator-micro/content/manage', timeout=60000); time.sleep(5) rows, cur = [], - Network accessline 11
pg = ctx.new_page(); pg.goto('https://creator.douyin.com/creator-micro/content/manage', timeout=60000); time.sleep(5) - Network accessline 12
rows, cur = [], 0 for _ in range(10): j = ctx.request.get('https://creator.douyin.com/janus/douyin/creator/pc/work_list', - Network accessline 13
for _ in range(10): j = ctx.request.get('https://creator.douyin.com/janus/douyin/creator/pc/work_list', params={'status': 0, 'count': 12, 'max_cursor': cur, 'scene': 'star_atlas', - Network accessline 14
j = ctx.request.get('https://creator.douyin.com/janus/douyin/creator/pc/work_list',
skills/charles-video-maker/scripts/factcheck.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/scripts/footage/compose.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/scripts/footage/genimage.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 6
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Network accessline 22
body = {'contents': [{'parts': [{'text': a.prompt + RULES}]}], 'generationConfig': {'responseModalities': ['IMAGE'], 'imageConfig': {'aspectRatio': a.aspect}}} req = urllib.request.Request(f'https://generativelanguage.google - Network accessline 23
'generationConfig': {'responseModalities': ['IMAGE'], 'imageConfig': {'aspectRatio': a.aspect}}} req = urllib.request.Request(f'https://generativelanguage.googleapis.com/v1beta/models/{a.model}:generateContent', - Network accessline 24
req = urllib.request.Request(f'https://generativelanguage.googleapis.com/v1beta/models/{a.model}:generateContent', - Network accessline 25
[Credential-related source omitted] - Network accessline 26
try: parts = json.load(urllib.request.urlopen(req, timeout=300))['candidates'][0]['content']['parts'] except urllib.error.HTTPError as e: - Network accessline 27
parts = json.load(urllib.request.urlopen(req, timeout=300))['candidates'][0]['content']['parts'] - Network accessline 28
except urllib.error.HTTPError as e: msg = json.loads(e.read() or b'{}').get('error', {}).get('message', '')[:200] sys.exit(f'{a.model}: HTTP {e.code} {msg}' + ('\n image quota used up: enable billing for this key (https://a - Network accessline 29
msg = json.loads(e.read() or b'{}').get('error', {}).get('message', '')[:200] sys.exit(f'{a.model}: HTTP {e.code} {msg}' + ('\n image quota used up: enable billing for this key (https://ai.dev/rate-limit), or fill the shot with sto - Network accessline 30
sys.exit(f'{a.model}: HTTP {e.code} {msg}' + ('\n image quota used up: enable billing for this key (https://ai.dev/rate-limit), or fill the shot with stock or a recording' if e.code == 429 else '')) - Possible obfuscationline 33
open(a.out, 'wb').write(base64.b64decode(img['data']))
skills/charles-video-maker/scripts/footage/record.py
skills/charles-video-maker/scripts/footage/source.py
skills/charles-video-maker/scripts/footage/stock.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 8
[Credential-related source omitted] - Access to secretsline 8
[Credential-related source omitted] - Network accessline 16
def get_json(url, headers=None): return json.load(urllib.request.urlopen(urllib.request.Request(url, headers={**UA, **(headers or {})}), timeout=60)) - Network accessline 17
return json.load(urllib.request.urlopen(urllib.request.Request(url, headers={**UA, **(headers or {})}), timeout=60)) - Network accessline 20
def download(url, path): with urllib.request.urlopen(urllib.request.Request(url, headers=UA), timeout=300) as r, open(path, 'wb') as f: - Network accessline 21
with urllib.request.urlopen(urllib.request.Request(url, headers=UA), timeout=300) as r, open(path, 'wb') as f: - Network accessline 26
def pexels(q, n, orient): key = os.environ['PEXELS_API_KEY'] d = get_json(f'https://api.pexels.com/videos/search?query={urllib.parse.quote(q)}&per_page={n}&orientation={orient}&size=medium', - Network accessline 27
[Credential-related source omitted] - Access to secretsline 27
[Credential-related source omitted] - Network accessline 28
d = get_json(f'https://api.pexels.com/videos/search?query={urllib.parse.quote(q)}&per_page={n}&orientation={orient}&size=medium', - Network accessline 36
def pixabay(q, n, orient): key = os.environ['PIXABAY_API_KEY'] d = get_json(f'https://pixabay.com/api/videos/?key={key}&q={urllib.parse.quote(q)}&per_page={max(3, n)}&safesearch=true') - Network accessline 37
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Network accessline 38
d = get_json(f'https://pixabay.com/api/videos/?key={key}&q={urllib.parse.quote(q)}&per_page={max(3, n)}&safesearch=true') - Access to secretsline 50
[Credential-related source omitted] - Access to secretsline 52
[Credential-related source omitted]
skills/charles-video-maker/scripts/gemini_copy.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 7
Brief format and the writing rules: references/gemini-copy.md (the prompt is read from that file). agy needs the proxy in env (it ignores the macOS system proxy); set GEMINI_PROXY to override http://127.0.0.1:7890. - Network accessline 8
agy needs the proxy in env (it ignores the macOS system proxy); set GEMINI_PROXY to override http://127.0.0.1:7890. - Access to secretsline 14
[Credential-related source omitted] - Network accessline 25
def call_agy(prompt, model, timeout=300): px = os.environ.get('GEMINI_PROXY', 'http://127.0.0.1:7890') - Network accessline 26
[Credential-related source omitted] - Access to secretsline 26
[Credential-related source omitted] - Access to secretsline 27
[Credential-related source omitted]
skills/charles-video-maker/scripts/lemo/setup.sh
- Executable scriptline 1
#!/bin/sh - Network accessline 2
# Lemo-Opuscar style library (MIT, https://github.com/lemomo-ai/lemo-opuscar): find it or download it, then hand - Network accessline 15
git clone --quiet --depth 1 --filter=blob:none --sparse --branch main https://github.com/lemomo-ai/lemo-opuscar.git "$LIB"
skills/charles-video-maker/scripts/master_static.py
- Executable scriptline 1
Executable file
skills/charles-video-maker/scripts/qa_stills.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/scripts/render.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/scripts/render_parallel.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/scripts/still_check.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/scripts/topic_name.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/scripts/voice/align.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/scripts/voice/mix.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/scripts/voice/score.py
skills/charles-video-maker/scripts/voice/timeline.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/charles-video-maker/scripts/voice/tts.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 4
[Credential-related source omitted] - Access to secretsline 41
[Credential-related source omitted] - Access to secretsline 43
[Credential-related source omitted] - Network accessline 45
'generationConfig': {'responseModalities': ['AUDIO'], 'speechConfig': {'voiceConfig': {'prebuiltVoiceConfig': {'voiceName': voice}}}}} req = urllib.request.Request(f'https://generativelanguage.googleapis - Network accessline 46
'speechConfig': {'voiceConfig': {'prebuiltVoiceConfig': {'voiceName': voice}}}}} req = urllib.request.Request(f'https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent', data=json - Network accessline 47
req = urllib.request.Request(f'https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent', - Network accessline 48
[Credential-related source omitted] - Network accessline 49
try: resp = urllib.request.urlopen(req, timeout=600) except urllib.error.HTTPError as e: # a 429 body names the exhausted quota (per minute / per day) and its limit - Network accessline 50
resp = urllib.request.urlopen(req, timeout=600) - Possible obfuscationline 57
raw, mime = base64.b64decode(part['data']), part.get('mimeType', '') - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 73
[Credential-related source omitted] - Network accessline 79
for _ in range(40): try: socket.create_connection(('127.0.0.1', port), timeout=1).close(); break - Network accessline 80
try: socket.create_connection(('127.0.0.1', port), timeout=1).close(); break except OSError: - Network accessline 81
socket.create_connection(('127.0.0.1', port), timeout=1).close(); break - Network accessline 82
except OSError: time.sleep(0.5) base = f'http://127.0.0.1:{port}' - Network accessline 83
time.sleep(0.5) base = f'http://127.0.0.1:{port}' try: - Network accessline 84
base = f'http://127.0.0.1:{port}' - Network accessline 86
body = {'task': 'text-to-speech', 'target_id': target, 'params': {'text': text, 'voice_id': voice, 'output_format': 'mp3'}} req = urllib.request.Request(base.rstrip('/') + '/tln/cap/v1/invoke', data=json.dumps(body). - Network accessline 87
'params': {'text': text, 'voice_id': voice, 'output_format': 'mp3'}} req = urllib.request.Request(base.rstrip('/') + '/tln/cap/v1/invoke', data=json.dumps(body).encode(), headers={'Authorization' - Network accessline 88
req = urllib.request.Request(base.rstrip('/') + '/tln/cap/v1/invoke', data=json.dumps(body).encode(), - Network accessline 89
[Credential-related source omitted] - Network accessline 90
try: r = json.load(urllib.request.urlopen(req, timeout=300)) except urllib.error.HTTPError as e: - Network accessline 91
r = json.load(urllib.request.urlopen(req, timeout=300)) - Network accessline 97
url = r['results'][0]['url'] mp3 = urllib.request.urlopen(urllib.request.Request(url, headers={'User-Agent': 'hush-app-api/1.0'}), timeout=120).read() - Network accessline 98
mp3 = urllib.request.urlopen(urllib.request.Request(url, headers={'User-Agent': 'hush-app-api/1.0'}), timeout=120).read() - Access to secretsline 120
[Credential-related source omitted] - Access to secretsline 156
[Credential-related source omitted]
skills/charles-video-maker/templates/vertical-explainer/stage.js
- 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: 15 facts
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionanatomy/examples/raptor-engine/build.mjs:890High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionanatomy/examples/ripple-tank/build.mjs:530High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionanatomy/examples/turning-dial/build.mjs:451High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionanatomy/examples/turning-dial/stress.mjs:225High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionanatomy/kit/canvas-painter.mjs:2High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionanatomy/kit/iso-kit.mjs:534High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionanatomy/kit/iso-kit.ts:671High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionanatomy/kit/turn-build.mjs:1277High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionanatomy/scripts/line-ends.mjs:118High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionanatomy/scripts/turn-check.mjs:299High confidence
- Contacts generativelanguage.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentioncharles-video-maker/scripts/footage/genimage.py:24High confidence
- Contacts ai.dev, which SKILL.md, the README and the plugin manifest do not mentioncharles-video-maker/scripts/footage/genimage.py:30High confidence
- Contacts api.pexels.com, which SKILL.md, the README and the plugin manifest do not mentioncharles-video-maker/scripts/footage/stock.py:28High confidence
- Contacts pixabay.com, which SKILL.md, the README and the plugin manifest do not mentioncharles-video-maker/scripts/footage/stock.py:38High confidence
- Contacts generativelanguage.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentioncharles-video-maker/scripts/voice/tts.py:47High confidence
Signal confidence: 393 facts
- Network access in prose of the SKILL.mdcharles-video-maker/SKILL.md:18Low confidence
- Network access in prose of documentationanatomy/CHANGELOG.md:3Low confidence
- Network access in prose of documentationanatomy/CHANGELOG.md:14Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:61Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:62Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:63Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:64Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:65Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:119Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:121Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:126Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:127Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:128Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:130Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:131Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:132Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:133Low confidence
- Network access in prose of documentationanatomy/CODE_OF_CONDUCT.md:134Low confidence
- Network access in code of documentationanatomy/CONTRIBUTING.md:16Low confidence
- Network access in prose of documentationanatomy/CONTRIBUTING.md:167Low confidence
- Network access in prose of documentationanatomy/README.md:5Low confidence
- Network access in prose of documentationanatomy/README.md:6Low confidence
- Network access in prose of documentationanatomy/README.md:7Low confidence
- Network access in prose of documentationanatomy/README.md:8Low confidence
- Network access in prose of documentationanatomy/README.md:9Low confidence
- Network access in prose of documentationanatomy/README.md:10Low confidence
- Network access in prose of documentationanatomy/README.md:11Low confidence
- Network access in prose of documentationanatomy/README.md:14Low confidence
- Network access in prose of documentationanatomy/README.md:15Low confidence
- Network access in prose of documentationanatomy/README.md:16Low confidence
- Network access in prose of documentationanatomy/README.md:17Low confidence
- Network access in prose of documentationanatomy/README.md:18Low confidence
- Network access in prose of documentationanatomy/README.md:19Low confidence
- Network access in prose of documentationanatomy/README.md:100Low confidence
- Network access in prose of documentationanatomy/README.md:108Low confidence
- Network access in prose of documentationanatomy/README.md:109Low confidence
- Network access in prose of documentationanatomy/README.md:110Low confidence
- Network access in prose of documentationanatomy/README.md:111Low confidence
- Network access in prose of documentationanatomy/README.md:112Low confidence
- Network access in prose of documentationanatomy/README.md:113Low confidence
- Network access in prose of documentationanatomy/README.md:114Low confidence
- Network access in prose of documentationanatomy/README.md:115Low confidence
- Network access in prose of documentationanatomy/README.md:123Low confidence
- Network access in prose of documentationanatomy/README.md:143Low confidence
- Network access in code of documentationanatomy/README.md:148Low confidence
- Network access in code of documentationanatomy/README.md:154Low confidence
- Network access in code of documentationanatomy/README.md:158Low confidence
- Network access in prose of documentationanatomy/README.md:297Low confidence
- Network access in prose of documentationanatomy/README.md:298Low confidence
- Network access in prose of documentationanatomy/README.md:299Low confidence
and 343 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md skills/charles-video-maker/SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/charles-video-maker/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/charles-video-maker/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/charles-video-maker/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/charles-video-maker/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/charles-video-maker/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.