creating-explainer-videos-skill 2.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- creating_explainer_videos_skill-2.0.0/.gitignore +8 -0
- creating_explainer_videos_skill-2.0.0/CHANGELOG.md +34 -0
- creating_explainer_videos_skill-2.0.0/LICENSE +21 -0
- creating_explainer_videos_skill-2.0.0/PKG-INFO +180 -0
- creating_explainer_videos_skill-2.0.0/README.en.md +62 -0
- creating_explainer_videos_skill-2.0.0/README.md +158 -0
- creating_explainer_videos_skill-2.0.0/SECURITY.md +19 -0
- creating_explainer_videos_skill-2.0.0/docs/superpowers/plans/2026-08-31-pypi-distribution.md +106 -0
- creating_explainer_videos_skill-2.0.0/docs/superpowers/specs/2026-08-31-pypi-distribution-design.md +36 -0
- creating_explainer_videos_skill-2.0.0/pyproject.toml +67 -0
- creating_explainer_videos_skill-2.0.0/python_src/creating_explainer_videos_skill/__init__.py +3 -0
- creating_explainer_videos_skill-2.0.0/python_src/creating_explainer_videos_skill/__main__.py +4 -0
- creating_explainer_videos_skill-2.0.0/python_src/creating_explainer_videos_skill/cli.py +177 -0
- creating_explainer_videos_skill-2.0.0/python_src/creating_explainer_videos_skill/dist_audit.py +135 -0
- creating_explainer_videos_skill-2.0.0/python_src/creating_explainer_videos_skill/installer.py +351 -0
- creating_explainer_videos_skill-2.0.0/python_src/creating_explainer_videos_skill/integrity.py +77 -0
- creating_explainer_videos_skill-2.0.0/python_src/creating_explainer_videos_skill/resources.py +26 -0
- creating_explainer_videos_skill-2.0.0/python_tests/__init__.py +1 -0
- creating_explainer_videos_skill-2.0.0/python_tests/test_cli.py +66 -0
- creating_explainer_videos_skill-2.0.0/python_tests/test_distribution_audit.py +77 -0
- creating_explainer_videos_skill-2.0.0/python_tests/test_installer.py +151 -0
- creating_explainer_videos_skill-2.0.0/scripts/audit_python_dist.py +27 -0
- creating_explainer_videos_skill-2.0.0/scripts/smoke_pypi_package.py +97 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/SKILL.md +114 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/agents/openai.yaml +4 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/douyin-release/extension.json +15 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/douyin-release/profile.json +12 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/douyin-release/reference.md +6 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/ink-explainer/assets/style-tokens.css +11 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/ink-explainer/extension.json +15 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/ink-explainer/profile.json +12 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/ink-explainer/reference.md +5 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/neutral-technical-zh/extension.json +15 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/neutral-technical-zh/profile.json +14 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/neutral-technical-zh/reference.md +6 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/paper-theatre/assets/style-tokens.css +11 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/paper-theatre/extension.json +15 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/paper-theatre/profile.json +12 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/paper-theatre/reference.md +5 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/primary-source-research/extension.json +15 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/primary-source-research/profile.json +11 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/primary-source-research/reference.md +5 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/spatial-chamber/assets/style-tokens.css +10 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/spatial-chamber/extension.json +15 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/spatial-chamber/profile.json +16 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/spatial-chamber/reference.md +5 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/strict-release-qc/extension.json +15 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/strict-release-qc/profile.json +9 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/extensions/strict-release-qc/reference.md +6 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/presets/ai-principle-series/preset.json +21 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/presets/general-mechanism/preset.json +19 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/references/agent-forward-validation.md +17 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/references/content-and-script-contract.md +75 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/references/engineering-pipeline.md +75 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/references/extension-api.md +65 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/references/install-and-portability.md +68 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/references/release-qc-and-publishing.md +69 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/references/visual-systems-and-motion.md +34 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/references/visual-template-collection.md +186 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/runtime/cli.mjs +211 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/runtime/constants.mjs +27 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/runtime/extensions.mjs +106 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/runtime/gates.mjs +127 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/runtime/json.mjs +40 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/runtime/media.mjs +262 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/runtime/narration.mjs +75 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/runtime/process.mjs +41 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/runtime/project.mjs +186 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/runtime/renderer.mjs +107 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/runtime/state.mjs +196 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/runtime/templates.mjs +107 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/runtime/toolchain.mjs +127 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/scripts/.npmignore +2 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/scripts/explainer-video.mjs +11 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/scripts/extension_catalog.py +156 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/scripts/test_extensions.py +46 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/scripts/test_skill.py +70 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/templates/ink-explainer/cover.css +1 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/templates/ink-explainer/motion.mjs +32 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/templates/ink-explainer/scene.css +2 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/templates/ink-explainer/template.json +48 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/templates/paper-theatre/cover.css +1 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/templates/paper-theatre/motion.mjs +20 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/templates/paper-theatre/scene.css +2 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/templates/paper-theatre/template.json +45 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/templates/spatial-chamber/cover.css +1 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/templates/spatial-chamber/motion.mjs +39 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/templates/spatial-chamber/scene.css +2 -0
- creating_explainer_videos_skill-2.0.0/skill/creating-explainer-videos/templates/spatial-chamber/template.json +48 -0
- creating_explainer_videos_skill-2.0.0/skill-manifest.json +333 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes are documented here.
|
|
4
|
+
|
|
5
|
+
## [2.0.0] - 2026-08-31
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Renamed the product from an AI-series-specific Skill to the domain-neutral `creating-explainer-videos-skill` package and `creating-explainer-videos` Skill.
|
|
10
|
+
- Promoted `explainer-video-skill` to the primary CLI; kept `ai-principle-video-skill` as a deprecated compatibility alias.
|
|
11
|
+
- Moved series-specific defaults into the isolated `ai-principle-series` example preset.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- Executable production state machine and JSON-first project lifecycle commands.
|
|
16
|
+
- Runnable renderer and dedicated cover generated for every new project.
|
|
17
|
+
- Canonical narration normalization, escaped/snake-case underscore guard, caption/TTS identity, and measured timing import.
|
|
18
|
+
- Deterministic render, mux, ffprobe/FFmpeg audit, artifact hashing, packaging, and human-release decision boundary.
|
|
19
|
+
- Three-template visual collection: Paper Theatre, Spatial Chamber, and Ink Explainer.
|
|
20
|
+
- Spatial Chamber depth/path grammar, licensed-plugin fallbacks, and QC limits derived from the former B visual direction.
|
|
21
|
+
- Declarative presets, permission-listed extensions, immutable hash metadata, and legacy research ID alias.
|
|
22
|
+
- Credit-card clearing and quantum-tunneling non-AI fixtures.
|
|
23
|
+
- Windows/Linux and Node.js 18/22 CI plus packed npx/global install smoke tests.
|
|
24
|
+
- PyPI wheel/source distribution with a dependency-free Python lifecycle CLI, bundled canonical Skill assets, Node.js runtime delegation, archive security audit, and clean-environment smoke test.
|
|
25
|
+
|
|
26
|
+
### Security and licensing
|
|
27
|
+
|
|
28
|
+
- No font, premium GSAP, music, audio, image, or video binaries are redistributed.
|
|
29
|
+
- Automated QC cannot set `passed`; a named human must completely review the exact artifact hash.
|
|
30
|
+
- Package commands use argument arrays and keep provider credentials outside projects and logs.
|
|
31
|
+
|
|
32
|
+
## [1.1.0] - 2026-08-30
|
|
33
|
+
|
|
34
|
+
Legacy AI-series-specific first public release: portable installer, declarative extension API, integrity manifest, Ink/Paper profiles, episode scaffold, and release gates.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 wzwailr
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: creating-explainer-videos-skill
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: Executable Agent Skill and scaffold for producing rigorous mechanism and process explainer videos.
|
|
5
|
+
Project-URL: Homepage, https://github.com/wzwailr/creating-explainer-videos-skill
|
|
6
|
+
Project-URL: Repository, https://github.com/wzwailr/creating-explainer-videos-skill
|
|
7
|
+
Project-URL: Issues, https://github.com/wzwailr/creating-explainer-videos-skill/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/wzwailr/creating-explainer-videos-skill/blob/main/CHANGELOG.md
|
|
9
|
+
Author: wzwailr
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: agent-skill,educational-video,explainer-video,gsap,motion-design
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
19
|
+
Classifier: Topic :: Multimedia :: Video
|
|
20
|
+
Requires-Python: >=3.9
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
23
|
+
# Explainer Video Skill
|
|
24
|
+
|
|
25
|
+
[](https://github.com/wzwailr/creating-explainer-videos-skill/actions/workflows/ci.yml)
|
|
26
|
+
[](https://pypi.org/project/creating-explainer-videos-skill/)
|
|
27
|
+
[](https://github.com/wzwailr/creating-explainer-videos-skill/releases)
|
|
28
|
+
[](LICENSE)
|
|
29
|
+
|
|
30
|
+
一套通用、可安装、可扩展、真正可执行的解释型视频 Agent Skill 与工程脚手架。它适用于机制、流程、系统、科学和技术科普,不绑定某个系列或某类题材。
|
|
31
|
+
|
|
32
|
+
它不只是几份 Markdown:包内包含生产状态机、项目生成器、旁白规范化、真实音频时轴导入、三套可编程视觉模板、确定性 HTML/SVG/GSAP 渲染器、HyperFrames/FFmpeg 适配、媒体质检、扩展 API、打包工具和非 AI 端到端示例。
|
|
33
|
+
|
|
34
|
+
[English](README.en.md) · [v2 迁移指南](docs/MIGRATION_V2.md) · [视觉模板集](skill/creating-explainer-videos/references/visual-template-collection.md) · [扩展 API](skill/creating-explainer-videos/references/extension-api.md)
|
|
35
|
+
|
|
36
|
+
## 一键使用
|
|
37
|
+
|
|
38
|
+
推荐使用 `pipx` 安装独立 CLI:
|
|
39
|
+
|
|
40
|
+
```powershell
|
|
41
|
+
pipx install creating-explainer-videos-skill==2.0.0
|
|
42
|
+
explainer-video-skill --version
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
也可以安装到当前 Python 环境:
|
|
46
|
+
|
|
47
|
+
```powershell
|
|
48
|
+
python -m pip install creating-explainer-videos-skill==2.0.0
|
|
49
|
+
explainer-video-skill --version
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Python 入口可在没有 Node.js 时完成 Skill 的安装、更新、校验、回滚、卸载和扩展列表。创建视频工程、模板预览、渲染和媒体命令使用包内同一套 JavaScript runtime,需要 Node.js 18+。
|
|
53
|
+
|
|
54
|
+
需要 npm 形式时,可直接安装 GitHub Release 中经过验证的 tarball:
|
|
55
|
+
|
|
56
|
+
```powershell
|
|
57
|
+
npm install --global https://github.com/wzwailr/creating-explainer-videos-skill/releases/download/v2.0.0/creating-explainer-videos-skill-2.0.0.tgz
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
安装到 Codex:
|
|
61
|
+
|
|
62
|
+
```powershell
|
|
63
|
+
explainer-video-skill install --target codex --json
|
|
64
|
+
explainer-video-skill verify --target codex --json
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
安装到任何支持目录型 `SKILL.md` 的 Agent、仓库或团队目录:
|
|
68
|
+
|
|
69
|
+
```powershell
|
|
70
|
+
explainer-video-skill install --destination "C:\path\to\skills" --json
|
|
71
|
+
explainer-video-skill verify --destination "C:\path\to\skills" --json
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
`--destination` 指向 skills 父目录,实际安装目录是 `creating-explainer-videos`。升级、回滚和卸载均保留可恢复备份。
|
|
75
|
+
|
|
76
|
+
## 直接创建视频工程
|
|
77
|
+
|
|
78
|
+
```powershell
|
|
79
|
+
explainer-video-skill doctor --json
|
|
80
|
+
explainer-video-skill templates list --json
|
|
81
|
+
explainer-video-skill new ".\my-video" `
|
|
82
|
+
--title "信用卡清算" `
|
|
83
|
+
--topic "为什么授权成功后钱还没有到账" `
|
|
84
|
+
--template spatial-chamber `
|
|
85
|
+
--preset general-mechanism `
|
|
86
|
+
--json
|
|
87
|
+
explainer-video-skill status --json ".\my-video"
|
|
88
|
+
explainer-video-skill next --json ".\my-video"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
工程会生成 JSON-first 生产合同、状态机、可运行 renderer、独立 cover、模板资产、旁白/cue 文件、媒体/QC/发布目录。Agent 按以下闭环推进:
|
|
92
|
+
|
|
93
|
+
```text
|
|
94
|
+
status -> next -> 执行真实工作 -> 写入证据 -> validate -> 下一阶段
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
核心阶段:
|
|
98
|
+
|
|
99
|
+
```text
|
|
100
|
+
brief -> evidence -> mechanism_map -> narration_and_cues
|
|
101
|
+
-> real_audio_timing -> scene_spec -> runnable_renderer
|
|
102
|
+
-> render -> automated_qc -> human_listen
|
|
103
|
+
-> publishing_package -> human_release_decision
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
自动化只能生成 `release_candidate_pending_human_listen`。只有人工完整听看过同一个 SHA-256 成片并明确记录决定,才能成为 `passed`。
|
|
107
|
+
|
|
108
|
+
## 视觉模板集
|
|
109
|
+
|
|
110
|
+
| 模板 | 最适合的知识结构 | 核心动作 |
|
|
111
|
+
| --- | --- | --- |
|
|
112
|
+
| `paper-theatre` | 对象身份、证据、分拣、比较、规则、物理处理 | 剪、折、盖章、堆叠、交接 |
|
|
113
|
+
| `spatial-chamber` | 路由、层级、管线、队列、网络、状态迁移 | 镜头纵深、路径飞行、分层变换 |
|
|
114
|
+
| `ink-explainer` | 推导、公式、因果关系、比较、纠错、密集讲解 | 手绘、连接、圈注、推导、修正 |
|
|
115
|
+
|
|
116
|
+
三者是结构和运动语法不同的模板,不是 A/B/C 换色版。每套都包含独立 DOM 指纹、场景 CSS、封面 CSS、时间轴控制器、插件降级和可量化 QC 规则。Spatial Chamber 正式收录了原 B 方案的纵深、路径和空间叙事能力。
|
|
117
|
+
|
|
118
|
+
钉钉进步体/DingTalk Sans 可作为本机显示字体,Noto Sans SC 可作为字幕字体;仓库不分发字体文件。GSAP 商业插件同样不随包分发,每个模板都声明了开源/原生降级路径。
|
|
119
|
+
|
|
120
|
+
## 旁白、动画与渲染
|
|
121
|
+
|
|
122
|
+
字幕与 TTS 来自同一个 canonical 字符串。规范化会移除 `\_`、snake_case 下划线和可能被读成符号名的 Markdown 标记。真实旁白生成后导入测量时轴:
|
|
123
|
+
|
|
124
|
+
```powershell
|
|
125
|
+
explainer-video-skill narration prepare ".\my-video" --json
|
|
126
|
+
explainer-video-skill narration import-timing ".\my-video" --timing ".\timing.json" --json
|
|
127
|
+
explainer-video-skill build ".\my-video" --json
|
|
128
|
+
explainer-video-skill render ".\my-video" --json
|
|
129
|
+
explainer-video-skill cover ".\my-video" --json
|
|
130
|
+
explainer-video-skill mux ".\my-video" --audio ".\narration.wav" --json
|
|
131
|
+
explainer-video-skill audit ".\my-video" --json
|
|
132
|
+
explainer-video-skill package ".\my-video" --json
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
最终动画只使用真实测量旁白时间,渲染页使用可暂停、可 seek、确定性的时间轴。禁止用整屏扫描线、长条扫光或无意义粒子代替知识动作。
|
|
136
|
+
|
|
137
|
+
## 预设与扩展
|
|
138
|
+
|
|
139
|
+
`general-mechanism` 是通用默认预设,而且故意不锁定视觉模板。`ai-principle-series` 只是一个经过真实系列验证的示例预设,AI 不是包的产品身份。
|
|
140
|
+
|
|
141
|
+
扩展 API v1 支持 `visual`、`voice`、`research`、`qc`、`publishing`。扩展是声明式 JSON/文档/可授权资产,包含权限清单和哈希锁,不允许任意 `hooks`、`scripts` 或 `postinstall`。
|
|
142
|
+
|
|
143
|
+
内置扩展:
|
|
144
|
+
|
|
145
|
+
- 三个同名视觉 profile;
|
|
146
|
+
- `neutral-technical-zh` 中文技术讲解声音规则;
|
|
147
|
+
- `primary-source-research` 一手资料证据规则;
|
|
148
|
+
- `strict-release-qc` 自动与人工发布门禁;
|
|
149
|
+
- `douyin-release` 抖音标题、封面与发布资料规则。
|
|
150
|
+
|
|
151
|
+
## 示例与验证
|
|
152
|
+
|
|
153
|
+
包内提供两个非 AI fixture:
|
|
154
|
+
|
|
155
|
+
- `credit-card-clearing`:Spatial Chamber;
|
|
156
|
+
- `quantum-tunneling`:Ink Explainer。
|
|
157
|
+
|
|
158
|
+
```powershell
|
|
159
|
+
npm test
|
|
160
|
+
npm run examples:verify
|
|
161
|
+
python -m unittest discover -s python_tests -v
|
|
162
|
+
$env:PYTHONUTF8='1'
|
|
163
|
+
python skill\creating-explainer-videos\scripts\test_skill.py
|
|
164
|
+
python skill\creating-explainer-videos\scripts\test_extensions.py
|
|
165
|
+
npm run pack:local
|
|
166
|
+
npm run pack:zip
|
|
167
|
+
npm run smoke:packed -- .\dist\creating-explainer-videos-skill-2.0.0.tgz
|
|
168
|
+
python -m build --sdist --wheel --outdir .\dist\pypi
|
|
169
|
+
python -m twine check .\dist\pypi\*
|
|
170
|
+
python .\scripts\audit_python_dist.py .\dist\pypi\*
|
|
171
|
+
python .\scripts\smoke_pypi_package.py .\dist\pypi\creating_explainer_videos_skill-2.0.0-py3-none-any.whl
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
CI 覆盖 Windows/Linux、Node.js 18/22 和 Python 分发。发布前会分别从实际 npm `.tgz` 与 Python wheel 隔离安装,验证主/旧命令、项目脚手架、模板集、Skill 安装/校验/升级/回滚/卸载和全局命令。
|
|
175
|
+
|
|
176
|
+
## 许可证与安全边界
|
|
177
|
+
|
|
178
|
+
原创代码和文档采用 [MIT License](LICENSE)。字体、GSAP 商业插件、音乐、音效、图片、视频和供应商凭据不在包内。付费或异步生成必须显式授权、保存任务 ID、先查询既有任务再决定是否重试。
|
|
179
|
+
|
|
180
|
+
详见 [安全策略](SECURITY.md)、[贡献指南](CONTRIBUTING.md)、[更新记录](CHANGELOG.md) 和 [v2.0.0 Release Notes](docs/releases/v2.0.0.md)。
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Explainer Video Skill
|
|
2
|
+
|
|
3
|
+
An installable, extensible, executable Agent Skill and project scaffold for mechanism, process, system, science, and technical explainer videos.
|
|
4
|
+
|
|
5
|
+
This is not a Markdown-only prompt pack. It ships a production state machine, JSON-first project generator, narration normalization, measured-audio timing import, three programmable visual templates, deterministic HTML/SVG/GSAP rendering, HyperFrames/FFmpeg adapters, media QC, declarative extensions, release gates, and non-AI end-to-end fixtures.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
Recommended isolated CLI installation:
|
|
10
|
+
|
|
11
|
+
```powershell
|
|
12
|
+
pipx install creating-explainer-videos-skill==2.0.0
|
|
13
|
+
explainer-video-skill --version
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Or install into the current Python environment:
|
|
17
|
+
|
|
18
|
+
```powershell
|
|
19
|
+
python -m pip install creating-explainer-videos-skill==2.0.0
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Python lifecycle commands work without Node.js. Project creation, template preview, rendering, and media commands execute the bundled canonical JavaScript runtime and require Node.js 18+.
|
|
23
|
+
|
|
24
|
+
The verified npm tarball is also available from the GitHub Release:
|
|
25
|
+
|
|
26
|
+
```powershell
|
|
27
|
+
npm install --global https://github.com/wzwailr/creating-explainer-videos-skill/releases/download/v2.0.0/creating-explainer-videos-skill-2.0.0.tgz
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Install the Skill into Codex or another folder-based Agent host:
|
|
31
|
+
|
|
32
|
+
```powershell
|
|
33
|
+
explainer-video-skill install --target codex --json
|
|
34
|
+
explainer-video-skill install --destination "C:\path\to\skills" --json
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Create a project
|
|
38
|
+
|
|
39
|
+
```powershell
|
|
40
|
+
explainer-video-skill doctor --json
|
|
41
|
+
explainer-video-skill new ".\demo" --title "Credit-card clearing" --topic "Why authorization is not settlement" --template spatial-chamber --preset general-mechanism --json
|
|
42
|
+
explainer-video-skill status --json ".\demo"
|
|
43
|
+
explainer-video-skill next --json ".\demo"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Agents advance through `status -> next -> real work -> evidence -> validate`. The production stages cover brief, evidence, mechanism mapping, canonical narration/cues, measured audio timing, scene design, renderer, media render, automated QC, human listening, publishing package, and explicit human release decision.
|
|
47
|
+
|
|
48
|
+
Automation cannot approve a release. It can only produce `release_candidate_pending_human_listen`; `passed` requires a named human who reviewed the exact artifact hash.
|
|
49
|
+
|
|
50
|
+
## Visual template collection
|
|
51
|
+
|
|
52
|
+
- `paper-theatre`: object identity, evidence, sorting, comparison, and physical processing.
|
|
53
|
+
- `spatial-chamber`: routes, layers, pipelines, networks, queues, and spatial state transitions.
|
|
54
|
+
- `ink-explainer`: derivations, formulas, causal relations, comparison, annotation, and correction.
|
|
55
|
+
|
|
56
|
+
The templates have distinct DOM and motion fingerprints, cover grammars, plugin fallbacks, and measurable QC rules. They are not lettered recolors.
|
|
57
|
+
|
|
58
|
+
## Portable boundaries
|
|
59
|
+
|
|
60
|
+
The package does not redistribute fonts, premium GSAP plugins, music, sound effects, stock media, or credentials. DingTalk JinBuTi/DingTalk Sans and Noto Sans SC may be used when legally installed on the host. Paid or asynchronous providers require explicit authorization and task-ID recovery rules.
|
|
61
|
+
|
|
62
|
+
See the [Chinese README](README.md), [visual collection](skill/creating-explainer-videos/references/visual-template-collection.md), [extension API](skill/creating-explainer-videos/references/extension-api.md), [v2 migration](docs/MIGRATION_V2.md), and [release notes](docs/releases/v2.0.0.md).
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Explainer Video Skill
|
|
2
|
+
|
|
3
|
+
[](https://github.com/wzwailr/creating-explainer-videos-skill/actions/workflows/ci.yml)
|
|
4
|
+
[](https://pypi.org/project/creating-explainer-videos-skill/)
|
|
5
|
+
[](https://github.com/wzwailr/creating-explainer-videos-skill/releases)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
|
|
8
|
+
一套通用、可安装、可扩展、真正可执行的解释型视频 Agent Skill 与工程脚手架。它适用于机制、流程、系统、科学和技术科普,不绑定某个系列或某类题材。
|
|
9
|
+
|
|
10
|
+
它不只是几份 Markdown:包内包含生产状态机、项目生成器、旁白规范化、真实音频时轴导入、三套可编程视觉模板、确定性 HTML/SVG/GSAP 渲染器、HyperFrames/FFmpeg 适配、媒体质检、扩展 API、打包工具和非 AI 端到端示例。
|
|
11
|
+
|
|
12
|
+
[English](README.en.md) · [v2 迁移指南](docs/MIGRATION_V2.md) · [视觉模板集](skill/creating-explainer-videos/references/visual-template-collection.md) · [扩展 API](skill/creating-explainer-videos/references/extension-api.md)
|
|
13
|
+
|
|
14
|
+
## 一键使用
|
|
15
|
+
|
|
16
|
+
推荐使用 `pipx` 安装独立 CLI:
|
|
17
|
+
|
|
18
|
+
```powershell
|
|
19
|
+
pipx install creating-explainer-videos-skill==2.0.0
|
|
20
|
+
explainer-video-skill --version
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
也可以安装到当前 Python 环境:
|
|
24
|
+
|
|
25
|
+
```powershell
|
|
26
|
+
python -m pip install creating-explainer-videos-skill==2.0.0
|
|
27
|
+
explainer-video-skill --version
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Python 入口可在没有 Node.js 时完成 Skill 的安装、更新、校验、回滚、卸载和扩展列表。创建视频工程、模板预览、渲染和媒体命令使用包内同一套 JavaScript runtime,需要 Node.js 18+。
|
|
31
|
+
|
|
32
|
+
需要 npm 形式时,可直接安装 GitHub Release 中经过验证的 tarball:
|
|
33
|
+
|
|
34
|
+
```powershell
|
|
35
|
+
npm install --global https://github.com/wzwailr/creating-explainer-videos-skill/releases/download/v2.0.0/creating-explainer-videos-skill-2.0.0.tgz
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
安装到 Codex:
|
|
39
|
+
|
|
40
|
+
```powershell
|
|
41
|
+
explainer-video-skill install --target codex --json
|
|
42
|
+
explainer-video-skill verify --target codex --json
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
安装到任何支持目录型 `SKILL.md` 的 Agent、仓库或团队目录:
|
|
46
|
+
|
|
47
|
+
```powershell
|
|
48
|
+
explainer-video-skill install --destination "C:\path\to\skills" --json
|
|
49
|
+
explainer-video-skill verify --destination "C:\path\to\skills" --json
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`--destination` 指向 skills 父目录,实际安装目录是 `creating-explainer-videos`。升级、回滚和卸载均保留可恢复备份。
|
|
53
|
+
|
|
54
|
+
## 直接创建视频工程
|
|
55
|
+
|
|
56
|
+
```powershell
|
|
57
|
+
explainer-video-skill doctor --json
|
|
58
|
+
explainer-video-skill templates list --json
|
|
59
|
+
explainer-video-skill new ".\my-video" `
|
|
60
|
+
--title "信用卡清算" `
|
|
61
|
+
--topic "为什么授权成功后钱还没有到账" `
|
|
62
|
+
--template spatial-chamber `
|
|
63
|
+
--preset general-mechanism `
|
|
64
|
+
--json
|
|
65
|
+
explainer-video-skill status --json ".\my-video"
|
|
66
|
+
explainer-video-skill next --json ".\my-video"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
工程会生成 JSON-first 生产合同、状态机、可运行 renderer、独立 cover、模板资产、旁白/cue 文件、媒体/QC/发布目录。Agent 按以下闭环推进:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
status -> next -> 执行真实工作 -> 写入证据 -> validate -> 下一阶段
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
核心阶段:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
brief -> evidence -> mechanism_map -> narration_and_cues
|
|
79
|
+
-> real_audio_timing -> scene_spec -> runnable_renderer
|
|
80
|
+
-> render -> automated_qc -> human_listen
|
|
81
|
+
-> publishing_package -> human_release_decision
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
自动化只能生成 `release_candidate_pending_human_listen`。只有人工完整听看过同一个 SHA-256 成片并明确记录决定,才能成为 `passed`。
|
|
85
|
+
|
|
86
|
+
## 视觉模板集
|
|
87
|
+
|
|
88
|
+
| 模板 | 最适合的知识结构 | 核心动作 |
|
|
89
|
+
| --- | --- | --- |
|
|
90
|
+
| `paper-theatre` | 对象身份、证据、分拣、比较、规则、物理处理 | 剪、折、盖章、堆叠、交接 |
|
|
91
|
+
| `spatial-chamber` | 路由、层级、管线、队列、网络、状态迁移 | 镜头纵深、路径飞行、分层变换 |
|
|
92
|
+
| `ink-explainer` | 推导、公式、因果关系、比较、纠错、密集讲解 | 手绘、连接、圈注、推导、修正 |
|
|
93
|
+
|
|
94
|
+
三者是结构和运动语法不同的模板,不是 A/B/C 换色版。每套都包含独立 DOM 指纹、场景 CSS、封面 CSS、时间轴控制器、插件降级和可量化 QC 规则。Spatial Chamber 正式收录了原 B 方案的纵深、路径和空间叙事能力。
|
|
95
|
+
|
|
96
|
+
钉钉进步体/DingTalk Sans 可作为本机显示字体,Noto Sans SC 可作为字幕字体;仓库不分发字体文件。GSAP 商业插件同样不随包分发,每个模板都声明了开源/原生降级路径。
|
|
97
|
+
|
|
98
|
+
## 旁白、动画与渲染
|
|
99
|
+
|
|
100
|
+
字幕与 TTS 来自同一个 canonical 字符串。规范化会移除 `\_`、snake_case 下划线和可能被读成符号名的 Markdown 标记。真实旁白生成后导入测量时轴:
|
|
101
|
+
|
|
102
|
+
```powershell
|
|
103
|
+
explainer-video-skill narration prepare ".\my-video" --json
|
|
104
|
+
explainer-video-skill narration import-timing ".\my-video" --timing ".\timing.json" --json
|
|
105
|
+
explainer-video-skill build ".\my-video" --json
|
|
106
|
+
explainer-video-skill render ".\my-video" --json
|
|
107
|
+
explainer-video-skill cover ".\my-video" --json
|
|
108
|
+
explainer-video-skill mux ".\my-video" --audio ".\narration.wav" --json
|
|
109
|
+
explainer-video-skill audit ".\my-video" --json
|
|
110
|
+
explainer-video-skill package ".\my-video" --json
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
最终动画只使用真实测量旁白时间,渲染页使用可暂停、可 seek、确定性的时间轴。禁止用整屏扫描线、长条扫光或无意义粒子代替知识动作。
|
|
114
|
+
|
|
115
|
+
## 预设与扩展
|
|
116
|
+
|
|
117
|
+
`general-mechanism` 是通用默认预设,而且故意不锁定视觉模板。`ai-principle-series` 只是一个经过真实系列验证的示例预设,AI 不是包的产品身份。
|
|
118
|
+
|
|
119
|
+
扩展 API v1 支持 `visual`、`voice`、`research`、`qc`、`publishing`。扩展是声明式 JSON/文档/可授权资产,包含权限清单和哈希锁,不允许任意 `hooks`、`scripts` 或 `postinstall`。
|
|
120
|
+
|
|
121
|
+
内置扩展:
|
|
122
|
+
|
|
123
|
+
- 三个同名视觉 profile;
|
|
124
|
+
- `neutral-technical-zh` 中文技术讲解声音规则;
|
|
125
|
+
- `primary-source-research` 一手资料证据规则;
|
|
126
|
+
- `strict-release-qc` 自动与人工发布门禁;
|
|
127
|
+
- `douyin-release` 抖音标题、封面与发布资料规则。
|
|
128
|
+
|
|
129
|
+
## 示例与验证
|
|
130
|
+
|
|
131
|
+
包内提供两个非 AI fixture:
|
|
132
|
+
|
|
133
|
+
- `credit-card-clearing`:Spatial Chamber;
|
|
134
|
+
- `quantum-tunneling`:Ink Explainer。
|
|
135
|
+
|
|
136
|
+
```powershell
|
|
137
|
+
npm test
|
|
138
|
+
npm run examples:verify
|
|
139
|
+
python -m unittest discover -s python_tests -v
|
|
140
|
+
$env:PYTHONUTF8='1'
|
|
141
|
+
python skill\creating-explainer-videos\scripts\test_skill.py
|
|
142
|
+
python skill\creating-explainer-videos\scripts\test_extensions.py
|
|
143
|
+
npm run pack:local
|
|
144
|
+
npm run pack:zip
|
|
145
|
+
npm run smoke:packed -- .\dist\creating-explainer-videos-skill-2.0.0.tgz
|
|
146
|
+
python -m build --sdist --wheel --outdir .\dist\pypi
|
|
147
|
+
python -m twine check .\dist\pypi\*
|
|
148
|
+
python .\scripts\audit_python_dist.py .\dist\pypi\*
|
|
149
|
+
python .\scripts\smoke_pypi_package.py .\dist\pypi\creating_explainer_videos_skill-2.0.0-py3-none-any.whl
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
CI 覆盖 Windows/Linux、Node.js 18/22 和 Python 分发。发布前会分别从实际 npm `.tgz` 与 Python wheel 隔离安装,验证主/旧命令、项目脚手架、模板集、Skill 安装/校验/升级/回滚/卸载和全局命令。
|
|
153
|
+
|
|
154
|
+
## 许可证与安全边界
|
|
155
|
+
|
|
156
|
+
原创代码和文档采用 [MIT License](LICENSE)。字体、GSAP 商业插件、音乐、音效、图片、视频和供应商凭据不在包内。付费或异步生成必须显式授权、保存任务 ID、先查询既有任务再决定是否重试。
|
|
157
|
+
|
|
158
|
+
详见 [安全策略](SECURITY.md)、[贡献指南](CONTRIBUTING.md)、[更新记录](CHANGELOG.md) 和 [v2.0.0 Release Notes](docs/releases/v2.0.0.md)。
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Security policy
|
|
2
|
+
|
|
3
|
+
## Supported version
|
|
4
|
+
|
|
5
|
+
Security fixes target the latest major release. v1 is retained as a legacy release; upgrade to v2 for current fixes.
|
|
6
|
+
|
|
7
|
+
## Reporting
|
|
8
|
+
|
|
9
|
+
Do not post credentials, tokens, private media, paid-provider task IDs, or personal filesystem paths in a public issue. Create a minimal non-sensitive report and request a private follow-up when sensitive evidence is unavoidable.
|
|
10
|
+
|
|
11
|
+
## Trust boundaries
|
|
12
|
+
|
|
13
|
+
- Extension API v1 is declarative, permission-listed, path-contained, and rejects executable hooks.
|
|
14
|
+
- Skill installation verifies a SHA-256 package manifest before copying files.
|
|
15
|
+
- Update, rollback, and uninstall target one exact Skill directory and preserve recoverable backups.
|
|
16
|
+
- CLI process execution uses argument arrays; it does not build shell commands from project text.
|
|
17
|
+
- Provider credentials and paid-execution authorization remain outside the package and generated projects.
|
|
18
|
+
- Automated QC cannot create a human `passed` decision.
|
|
19
|
+
- Published archives must exclude tokens, personal absolute paths, cache files, generated media, font binaries, and premium plugin binaries.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# PyPI Distribution Implementation Plan
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
|
4
|
+
|
|
5
|
+
**Goal:** Add, validate, and publish a Python distribution that installs the complete explainer-video Skill and exposes the existing command surface.
|
|
6
|
+
|
|
7
|
+
**Architecture:** A dependency-free Python installer owns filesystem-safe Skill lifecycle commands. Project and render commands execute the canonical bundled JavaScript runtime after checking Node.js 18+, while Hatchling includes the canonical Skill tree directly in the wheel so assets have one source of truth.
|
|
8
|
+
|
|
9
|
+
**Tech Stack:** Python 3.9+, standard library, Hatchling, unittest, Node.js 18+, Twine
|
|
10
|
+
|
|
11
|
+
**Spec:** `docs/superpowers/specs/2026-08-31-pypi-distribution-design.md`
|
|
12
|
+
|
|
13
|
+
## Global Constraints
|
|
14
|
+
|
|
15
|
+
- Package and command identity remain `creating-explainer-videos-skill` and `explainer-video-skill` at version `2.0.0`.
|
|
16
|
+
- The Python distribution contains the canonical Skill, template collection, extensions, presets, runtime, scripts, and manifest.
|
|
17
|
+
- Python lifecycle commands work without Node.js; project and rendering commands require Node.js 18+.
|
|
18
|
+
- Publication credentials must never be printed, copied into the repository, or included in an archive.
|
|
19
|
+
- Existing npm behavior and its package file allowlist remain unchanged.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
### Task 1: Python CLI and packaged-resource contract
|
|
24
|
+
|
|
25
|
+
**Files:**
|
|
26
|
+
- Create: `python_tests/test_cli.py`
|
|
27
|
+
- Create: `python_src/creating_explainer_videos_skill/__init__.py`
|
|
28
|
+
- Create: `python_src/creating_explainer_videos_skill/__main__.py`
|
|
29
|
+
- Create: `python_src/creating_explainer_videos_skill/cli.py`
|
|
30
|
+
- Create: `python_src/creating_explainer_videos_skill/resources.py`
|
|
31
|
+
|
|
32
|
+
**Interfaces:**
|
|
33
|
+
- Produces: `main(argv: Sequence[str] | None) -> int`, `package_paths() -> PackagePaths`, and the two console entrypoints.
|
|
34
|
+
- Consumes: canonical Skill files from the repository in source mode and bundled `assets/` in an installed wheel.
|
|
35
|
+
|
|
36
|
+
- [x] **Step 1: Write failing CLI tests**
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
def test_version_works_without_node(self):
|
|
40
|
+
result = run_cli("--version", env={"PATH": ""})
|
|
41
|
+
self.assertEqual(result.returncode, 0)
|
|
42
|
+
self.assertEqual(result.stdout.strip(), "2.0.0")
|
|
43
|
+
|
|
44
|
+
def test_project_command_reports_node_18_requirement(self):
|
|
45
|
+
result = run_cli("templates", "list", env={"PATH": ""})
|
|
46
|
+
self.assertNotEqual(result.returncode, 0)
|
|
47
|
+
self.assertIn("Node.js 18+", result.stderr)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
- [x] **Step 2: Run `py -m unittest python_tests.test_cli -v` and confirm failure because the package does not exist.**
|
|
51
|
+
- [x] **Step 3: Implement version/help handling, packaged-resource discovery, and Node command delegation.**
|
|
52
|
+
- [x] **Step 4: Re-run the focused test and confirm it passes.**
|
|
53
|
+
|
|
54
|
+
### Task 2: Safe Python Skill lifecycle
|
|
55
|
+
|
|
56
|
+
**Files:**
|
|
57
|
+
- Create: `python_tests/test_installer.py`
|
|
58
|
+
- Create: `python_src/creating_explainer_videos_skill/installer.py`
|
|
59
|
+
- Create: `python_src/creating_explainer_videos_skill/integrity.py`
|
|
60
|
+
- Modify: `python_src/creating_explainer_videos_skill/cli.py`
|
|
61
|
+
|
|
62
|
+
**Interfaces:**
|
|
63
|
+
- Produces: `install_skill`, `verify_installed_skill`, `rollback_skill`, `uninstall_skill`, and `discover_extensions`.
|
|
64
|
+
- Consumes: `PackagePaths.skill_root` and `PackagePaths.manifest_path` from Task 1.
|
|
65
|
+
|
|
66
|
+
- [x] **Step 1: Write failing integration tests for install, update backup, manifest tampering, rollback, uninstall recovery, custom destinations, and extension traversal.**
|
|
67
|
+
- [x] **Step 2: Run `py -m unittest python_tests.test_installer -v` and confirm failures name missing lifecycle behavior.**
|
|
68
|
+
- [x] **Step 3: Implement staged copies, manifest verification, extension validation, recoverable backups, and JSON output.**
|
|
69
|
+
- [x] **Step 4: Re-run both Python test modules and confirm they pass.**
|
|
70
|
+
|
|
71
|
+
### Task 3: Build metadata and archive smoke test
|
|
72
|
+
|
|
73
|
+
**Files:**
|
|
74
|
+
- Create: `pyproject.toml`
|
|
75
|
+
- Create: `scripts/smoke_pypi_package.py`
|
|
76
|
+
- Create: `scripts/audit_python_dist.py`
|
|
77
|
+
- Create: `python_tests/__init__.py`
|
|
78
|
+
- Modify: `.gitignore`
|
|
79
|
+
|
|
80
|
+
**Interfaces:**
|
|
81
|
+
- Produces: `dist/*.whl`, `dist/*.tar.gz`, and deterministic archive audit/smoke commands.
|
|
82
|
+
- Consumes: Python package and canonical Skill tree from Tasks 1-2.
|
|
83
|
+
|
|
84
|
+
- [x] **Step 1: Write the smoke script expectations for wheel installation, both CLI names, templates, Skill installation, and verification.**
|
|
85
|
+
- [x] **Step 2: Run the build before metadata exists and confirm it fails for the expected missing configuration.**
|
|
86
|
+
- [x] **Step 3: Add Hatchling metadata, console scripts, force-included assets, and archive auditing.**
|
|
87
|
+
- [x] **Step 4: Build wheel/sdist in an isolated environment, run `twine check`, audit both archives, and run the exact-wheel smoke test.**
|
|
88
|
+
|
|
89
|
+
### Task 4: Documentation, release evidence, and publication
|
|
90
|
+
|
|
91
|
+
**Files:**
|
|
92
|
+
- Modify: `README.md`
|
|
93
|
+
- Modify: `README.en.md`
|
|
94
|
+
- Modify: `CHANGELOG.md`
|
|
95
|
+
- Modify: `docs/releases/v2.0.0.md`
|
|
96
|
+
- Modify: `docs/superpowers/plans/2026-08-31-pypi-distribution.md`
|
|
97
|
+
|
|
98
|
+
**Interfaces:**
|
|
99
|
+
- Produces: verified install instructions and public registry evidence.
|
|
100
|
+
- Consumes: exact built archives and local PyPI credential.
|
|
101
|
+
|
|
102
|
+
- [x] **Step 1: Document `pipx`/`pip` installation, Node.js boundary, dual-registry identity, and public verification commands.**
|
|
103
|
+
- [x] **Step 2: Run all Python tests, existing Node tests, Skill validators, build, `twine check`, archive audit, and clean-wheel smoke test.**
|
|
104
|
+
- [ ] **Step 3: Upload only the verified wheel and source distribution to production PyPI without exposing the token.**
|
|
105
|
+
- [ ] **Step 4: Install `creating-explainer-videos-skill==2.0.0` from public PyPI in a fresh environment and repeat the smoke checks.**
|
|
106
|
+
- [ ] **Step 5: Commit and push the verified source changes, then update the GitHub repository homepage/release links if publication succeeds.**
|
creating_explainer_videos_skill-2.0.0/docs/superpowers/specs/2026-08-31-pypi-distribution-design.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# PyPI Distribution Design
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Publish `creating-explainer-videos-skill` as a real Python distribution without weakening the existing npm package or duplicating the maintained Skill and template assets.
|
|
6
|
+
|
|
7
|
+
## User Experience
|
|
8
|
+
|
|
9
|
+
- Install with `pipx install creating-explainer-videos-skill` or `python -m pip install creating-explainer-videos-skill`.
|
|
10
|
+
- Run `explainer-video-skill --help` and `explainer-video-skill --version` without Node.js.
|
|
11
|
+
- Install, update, verify, roll back, uninstall, and list extensions through the Python CLI.
|
|
12
|
+
- Keep `ai-principle-video-skill` as a compatibility command.
|
|
13
|
+
- Delegate project creation, validation, rendering, and media commands to the bundled JavaScript runtime, with a clear Node.js 18+ diagnostic when Node is unavailable.
|
|
14
|
+
|
|
15
|
+
## Architecture
|
|
16
|
+
|
|
17
|
+
The Python package is an additional distribution layer in the same repository. Hatchling builds a pure-Python wheel from `python_src/creating_explainer_videos_skill` and force-includes the canonical `skill/creating-explainer-videos` tree plus `skill-manifest.json` as package assets. This avoids a second maintained copy of the Skill, templates, extensions, and runtime.
|
|
18
|
+
|
|
19
|
+
The Python installer mirrors the safety properties of the Node installer: validate before mutation, stage before replace, back up an existing installation, keep uninstall recoverable, reject path traversal in extension entrypoints, and verify every packaged file against the canonical manifest.
|
|
20
|
+
|
|
21
|
+
## Boundaries
|
|
22
|
+
|
|
23
|
+
- Python 3.9+ is required for the Python distribution.
|
|
24
|
+
- Node.js 18+ remains required for project and rendering commands because the canonical runtime, GSAP templates, and rendering toolchain are JavaScript-based.
|
|
25
|
+
- No credentials, `.npmrc`, `.pypirc`, fonts, media binaries, caches, or machine-specific paths may enter wheel or source distribution files.
|
|
26
|
+
- The npm tarball allowlist remains unchanged.
|
|
27
|
+
- PyPI publication uses the local credential only at upload time; it is never printed, committed, or copied into project files.
|
|
28
|
+
|
|
29
|
+
## Verification Gates
|
|
30
|
+
|
|
31
|
+
1. Python unit and integration tests pass.
|
|
32
|
+
2. Existing Node tests and Skill validators pass.
|
|
33
|
+
3. Wheel and sdist build successfully and pass `twine check`.
|
|
34
|
+
4. A clean virtual environment installs the exact wheel and exercises version, help, template listing, Skill installation, and verification.
|
|
35
|
+
5. The built archives pass a secret and portability audit.
|
|
36
|
+
6. After upload, a second clean environment installs the exact public PyPI version and repeats the smoke checks.
|