wizz-method 1.0.3 → 1.2.0

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.
Files changed (630) hide show
  1. package/package.json +4 -2
  2. package/skills-registry.yaml +352 -0
  3. package/src/bmm-skills/4-implementation/wizz-quick-dev/SKILL.md +7 -0
  4. package/src/core-skills/wizz-editorial-review-prose/SKILL.md +20 -45
  5. package/src/core-skills/wizz-party-mode/customize.toml +894 -0
  6. package/src/core-skills/wizz-party-mode/scripts/__pycache__/resolve_party.cpython-314.pyc +0 -0
  7. package/src/core-skills/wizz-review-adversarial-general/SKILL.md +23 -12
  8. package/src/modules/wizz/agents/wizz-maestro/SKILL.md +48 -23
  9. package/src/skills-lib/ab-test-setup/SKILL.md +266 -0
  10. package/src/skills-lib/ab-test-setup/evals/evals.json +105 -0
  11. package/src/skills-lib/ab-test-setup/references/sample-size-guide.md +263 -0
  12. package/src/skills-lib/ab-test-setup/references/test-templates.md +277 -0
  13. package/src/skills-lib/ad-creative/SKILL.md +362 -0
  14. package/src/skills-lib/ad-creative/evals/evals.json +90 -0
  15. package/src/skills-lib/ad-creative/references/generative-tools.md +637 -0
  16. package/src/skills-lib/ad-creative/references/platform-specs.md +213 -0
  17. package/src/skills-lib/adversarial-reviewer/SKILL.md +122 -0
  18. package/src/skills-lib/agent-browser/SKILL.md +139 -0
  19. package/src/skills-lib/ai-seo/SKILL.md +398 -0
  20. package/src/skills-lib/ai-seo/evals/evals.json +90 -0
  21. package/src/skills-lib/ai-seo/references/content-patterns.md +285 -0
  22. package/src/skills-lib/ai-seo/references/platform-ranking-factors.md +152 -0
  23. package/src/skills-lib/analytics-tracking/SKILL.md +309 -0
  24. package/src/skills-lib/analytics-tracking/evals/evals.json +90 -0
  25. package/src/skills-lib/analytics-tracking/references/event-library.md +260 -0
  26. package/src/skills-lib/analytics-tracking/references/ga4-implementation.md +300 -0
  27. package/src/skills-lib/analytics-tracking/references/gtm-implementation.md +390 -0
  28. package/src/skills-lib/auth-and-secrets/SKILL.md +82 -0
  29. package/src/skills-lib/caching-and-queues/SKILL.md +58 -0
  30. package/src/skills-lib/cerebro/SKILL.md +368 -0
  31. package/src/skills-lib/churn-prevention/SKILL.md +424 -0
  32. package/src/skills-lib/churn-prevention/evals/evals.json +93 -0
  33. package/src/skills-lib/churn-prevention/references/cancel-flow-patterns.md +316 -0
  34. package/src/skills-lib/churn-prevention/references/dunning-playbook.md +408 -0
  35. package/src/skills-lib/cloud-and-infra/SKILL.md +36 -0
  36. package/src/skills-lib/cold-email/SKILL.md +158 -0
  37. package/src/skills-lib/cold-email/evals/evals.json +94 -0
  38. package/src/skills-lib/cold-email/references/benchmarks.md +83 -0
  39. package/src/skills-lib/cold-email/references/follow-up-sequences.md +81 -0
  40. package/src/skills-lib/cold-email/references/frameworks.md +90 -0
  41. package/src/skills-lib/cold-email/references/personalization.md +79 -0
  42. package/src/skills-lib/cold-email/references/subject-lines.md +53 -0
  43. package/src/skills-lib/competitor-alternatives/SKILL.md +256 -0
  44. package/src/skills-lib/competitor-alternatives/evals/evals.json +93 -0
  45. package/src/skills-lib/competitor-alternatives/references/content-architecture.md +271 -0
  46. package/src/skills-lib/competitor-alternatives/references/templates.md +223 -0
  47. package/src/skills-lib/content-strategy/SKILL.md +359 -0
  48. package/src/skills-lib/content-strategy/evals/evals.json +90 -0
  49. package/src/skills-lib/copy-editing/SKILL.md +447 -0
  50. package/src/skills-lib/copy-editing/evals/evals.json +89 -0
  51. package/src/skills-lib/copy-editing/references/plain-english-alternatives.md +394 -0
  52. package/src/skills-lib/copywriting/SKILL.md +252 -0
  53. package/src/skills-lib/copywriting/evals/evals.json +111 -0
  54. package/src/skills-lib/copywriting/references/copy-frameworks.md +344 -0
  55. package/src/skills-lib/copywriting/references/natural-transitions.md +272 -0
  56. package/src/skills-lib/database-and-deps/SKILL.md +80 -0
  57. package/src/skills-lib/database-scaling/SKILL.md +44 -0
  58. package/src/skills-lib/decision-maker/SKILL.md +534 -0
  59. package/src/skills-lib/desktop-security/SKILL.md +43 -0
  60. package/src/skills-lib/email-sequence/SKILL.md +309 -0
  61. package/src/skills-lib/email-sequence/evals/evals.json +93 -0
  62. package/src/skills-lib/email-sequence/references/copy-guidelines.md +113 -0
  63. package/src/skills-lib/email-sequence/references/email-types.md +515 -0
  64. package/src/skills-lib/email-sequence/references/sequence-templates.md +168 -0
  65. package/src/skills-lib/enhance-prompt/README.md +34 -0
  66. package/src/skills-lib/enhance-prompt/SKILL.md +204 -0
  67. package/src/skills-lib/enhance-prompt/references/KEYWORDS.md +114 -0
  68. package/src/skills-lib/find-skills/SKILL.md +181 -0
  69. package/src/skills-lib/form-cro/SKILL.md +429 -0
  70. package/src/skills-lib/form-cro/evals/evals.json +90 -0
  71. package/src/skills-lib/free-tool-strategy/SKILL.md +178 -0
  72. package/src/skills-lib/free-tool-strategy/evals/evals.json +90 -0
  73. package/src/skills-lib/free-tool-strategy/references/tool-types.md +217 -0
  74. package/src/skills-lib/graphify/.graphify_version +1 -0
  75. package/src/skills-lib/graphify/SKILL.md +1217 -0
  76. package/src/skills-lib/huashu-design/LICENSE +21 -0
  77. package/src/skills-lib/huashu-design/README.en.md +309 -0
  78. package/src/skills-lib/huashu-design/README.md +348 -0
  79. package/src/skills-lib/huashu-design/SKILL.md +631 -0
  80. package/src/skills-lib/huashu-design/assets/android_frame.jsx +175 -0
  81. package/src/skills-lib/huashu-design/assets/animations.jsx +348 -0
  82. package/src/skills-lib/huashu-design/assets/banner.svg +198 -0
  83. package/src/skills-lib/huashu-design/assets/bgm-ad.mp3 +0 -0
  84. package/src/skills-lib/huashu-design/assets/bgm-educational-alt.mp3 +0 -0
  85. package/src/skills-lib/huashu-design/assets/bgm-educational.mp3 +0 -0
  86. package/src/skills-lib/huashu-design/assets/bgm-tech.mp3 +0 -0
  87. package/src/skills-lib/huashu-design/assets/bgm-tutorial-alt.mp3 +0 -0
  88. package/src/skills-lib/huashu-design/assets/bgm-tutorial.mp3 +0 -0
  89. package/src/skills-lib/huashu-design/assets/browser_window.jsx +166 -0
  90. package/src/skills-lib/huashu-design/assets/deck_index.html +348 -0
  91. package/src/skills-lib/huashu-design/assets/deck_stage.js +420 -0
  92. package/src/skills-lib/huashu-design/assets/design_canvas.jsx +205 -0
  93. package/src/skills-lib/huashu-design/assets/director-notes-samples/launch-film-30s-sample.md +1713 -0
  94. package/src/skills-lib/huashu-design/assets/ios_frame.jsx +192 -0
  95. package/src/skills-lib/huashu-design/assets/macos_window.jsx +96 -0
  96. package/src/skills-lib/huashu-design/assets/narration_stage.jsx +476 -0
  97. package/src/skills-lib/huashu-design/assets/personal-asset-index.example.json +71 -0
  98. package/src/skills-lib/huashu-design/assets/sfx/container/card-flip.mp3 +0 -0
  99. package/src/skills-lib/huashu-design/assets/sfx/container/card-snap.mp3 +0 -0
  100. package/src/skills-lib/huashu-design/assets/sfx/container/modal-open.mp3 +0 -0
  101. package/src/skills-lib/huashu-design/assets/sfx/container/stack-collapse.mp3 +0 -0
  102. package/src/skills-lib/huashu-design/assets/sfx/feedback/achievement.mp3 +0 -0
  103. package/src/skills-lib/huashu-design/assets/sfx/feedback/error-tone.mp3 +0 -0
  104. package/src/skills-lib/huashu-design/assets/sfx/feedback/notification-pop.mp3 +0 -0
  105. package/src/skills-lib/huashu-design/assets/sfx/feedback/success-chime.mp3 +0 -0
  106. package/src/skills-lib/huashu-design/assets/sfx/impact/brand-stamp.mp3 +0 -0
  107. package/src/skills-lib/huashu-design/assets/sfx/impact/drop-thud.mp3 +0 -0
  108. package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal-v2.mp3 +0 -0
  109. package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal.mp3 +0 -0
  110. package/src/skills-lib/huashu-design/assets/sfx/keyboard/delete-key.mp3 +0 -0
  111. package/src/skills-lib/huashu-design/assets/sfx/keyboard/enter.mp3 +0 -0
  112. package/src/skills-lib/huashu-design/assets/sfx/keyboard/space-tap.mp3 +0 -0
  113. package/src/skills-lib/huashu-design/assets/sfx/keyboard/type-fast.mp3 +0 -0
  114. package/src/skills-lib/huashu-design/assets/sfx/keyboard/type.mp3 +0 -0
  115. package/src/skills-lib/huashu-design/assets/sfx/magic/ai-process.mp3 +0 -0
  116. package/src/skills-lib/huashu-design/assets/sfx/magic/sparkle.mp3 +0 -0
  117. package/src/skills-lib/huashu-design/assets/sfx/magic/transform.mp3 +0 -0
  118. package/src/skills-lib/huashu-design/assets/sfx/progress/complete-done.mp3 +0 -0
  119. package/src/skills-lib/huashu-design/assets/sfx/progress/generate-start.mp3 +0 -0
  120. package/src/skills-lib/huashu-design/assets/sfx/progress/loading-tick.mp3 +0 -0
  121. package/src/skills-lib/huashu-design/assets/sfx/terminal/command-execute.mp3 +0 -0
  122. package/src/skills-lib/huashu-design/assets/sfx/terminal/cursor-blink.mp3 +0 -0
  123. package/src/skills-lib/huashu-design/assets/sfx/terminal/output-appear.mp3 +0 -0
  124. package/src/skills-lib/huashu-design/assets/sfx/transition/dissolve.mp3 +0 -0
  125. package/src/skills-lib/huashu-design/assets/sfx/transition/slide-in.mp3 +0 -0
  126. package/src/skills-lib/huashu-design/assets/sfx/transition/swipe-horizontal.mp3 +0 -0
  127. package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh-fast.mp3 +0 -0
  128. package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh.mp3 +0 -0
  129. package/src/skills-lib/huashu-design/assets/sfx/ui/click-soft.mp3 +0 -0
  130. package/src/skills-lib/huashu-design/assets/sfx/ui/click.mp3 +0 -0
  131. package/src/skills-lib/huashu-design/assets/sfx/ui/focus.mp3 +0 -0
  132. package/src/skills-lib/huashu-design/assets/sfx/ui/hover-subtle.mp3 +0 -0
  133. package/src/skills-lib/huashu-design/assets/sfx/ui/tap-finger.mp3 +0 -0
  134. package/src/skills-lib/huashu-design/assets/sfx/ui/toggle-on.mp3 +0 -0
  135. package/src/skills-lib/huashu-design/assets/showcases/INDEX.md +115 -0
  136. package/src/skills-lib/huashu-design/assets/showcases/cover/cover-build.html +235 -0
  137. package/src/skills-lib/huashu-design/assets/showcases/cover/cover-build.png +0 -0
  138. package/src/skills-lib/huashu-design/assets/showcases/cover/cover-pentagram.html +229 -0
  139. package/src/skills-lib/huashu-design/assets/showcases/cover/cover-pentagram.png +0 -0
  140. package/src/skills-lib/huashu-design/assets/showcases/cover/cover-takram.html +288 -0
  141. package/src/skills-lib/huashu-design/assets/showcases/cover/cover-takram.png +0 -0
  142. package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-build.html +503 -0
  143. package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-build.png +0 -0
  144. package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-pentagram.html +600 -0
  145. package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-pentagram.png +0 -0
  146. package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-takram.html +670 -0
  147. package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-takram.png +0 -0
  148. package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-build.html +382 -0
  149. package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-build.png +0 -0
  150. package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-pentagram.html +536 -0
  151. package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-pentagram.png +0 -0
  152. package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-takram.html +497 -0
  153. package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-takram.png +0 -0
  154. package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-build.html +385 -0
  155. package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-build.png +0 -0
  156. package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-pentagram.html +422 -0
  157. package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-pentagram.png +0 -0
  158. package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-takram.html +499 -0
  159. package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-takram.png +0 -0
  160. package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-build.html +562 -0
  161. package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-build.png +0 -0
  162. package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-pentagram.html +548 -0
  163. package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-pentagram.png +0 -0
  164. package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-takram.html +696 -0
  165. package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-takram.png +0 -0
  166. package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-build.html +372 -0
  167. package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-build.png +0 -0
  168. package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-pentagram.html +460 -0
  169. package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-pentagram.png +0 -0
  170. package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-takram.html +494 -0
  171. package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-takram.png +0 -0
  172. package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-build.html +367 -0
  173. package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-build.png +0 -0
  174. package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-pentagram.html +368 -0
  175. package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-pentagram.png +0 -0
  176. package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-takram.html +459 -0
  177. package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-takram.png +0 -0
  178. package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-build.html +493 -0
  179. package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-build.png +0 -0
  180. package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-pentagram.html +556 -0
  181. package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-pentagram.png +0 -0
  182. package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-takram.html +604 -0
  183. package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-takram.png +0 -0
  184. package/src/skills-lib/huashu-design/demos/c1-ios-prototype-en.html +1145 -0
  185. package/src/skills-lib/huashu-design/demos/c1-ios-prototype.html +1142 -0
  186. package/src/skills-lib/huashu-design/demos/c2-slides-pptx-en.html +1055 -0
  187. package/src/skills-lib/huashu-design/demos/c2-slides-pptx.html +1055 -0
  188. package/src/skills-lib/huashu-design/demos/c3-motion-design-en.html +1134 -0
  189. package/src/skills-lib/huashu-design/demos/c3-motion-design.html +1134 -0
  190. package/src/skills-lib/huashu-design/demos/c4-tweaks-en.html +989 -0
  191. package/src/skills-lib/huashu-design/demos/c4-tweaks.html +989 -0
  192. package/src/skills-lib/huashu-design/demos/c5-infographic-en.html +816 -0
  193. package/src/skills-lib/huashu-design/demos/c5-infographic.html +813 -0
  194. package/src/skills-lib/huashu-design/demos/c6-expert-review-en.html +885 -0
  195. package/src/skills-lib/huashu-design/demos/c6-expert-review.html +894 -0
  196. package/src/skills-lib/huashu-design/demos/hero-animation-v10-en.html +1498 -0
  197. package/src/skills-lib/huashu-design/demos/md-html-narration/md-html-demo.html +615 -0
  198. package/src/skills-lib/huashu-design/demos/md-html-narration/script.md +69 -0
  199. package/src/skills-lib/huashu-design/demos/voiceover-demo/script.md +17 -0
  200. package/src/skills-lib/huashu-design/demos/voiceover-demo//344/273/200/344/271/210/346/230/257token.html +201 -0
  201. package/src/skills-lib/huashu-design/demos/w1-brand-protocol-en.html +684 -0
  202. package/src/skills-lib/huashu-design/demos/w1-brand-protocol.html +696 -0
  203. package/src/skills-lib/huashu-design/demos/w2-junior-designer-en.html +983 -0
  204. package/src/skills-lib/huashu-design/demos/w2-junior-designer.html +994 -0
  205. package/src/skills-lib/huashu-design/demos/w3-fallback-advisor-en.html +647 -0
  206. package/src/skills-lib/huashu-design/demos/w3-fallback-advisor.html +704 -0
  207. package/src/skills-lib/huashu-design/package-lock.json +846 -0
  208. package/src/skills-lib/huashu-design/package.json +8 -0
  209. package/src/skills-lib/huashu-design/references/animation-best-practices.md +506 -0
  210. package/src/skills-lib/huashu-design/references/animation-pitfalls.md +402 -0
  211. package/src/skills-lib/huashu-design/references/animations.md +249 -0
  212. package/src/skills-lib/huashu-design/references/apple-gallery-showcase.md +338 -0
  213. package/src/skills-lib/huashu-design/references/audio-design-rules.md +260 -0
  214. package/src/skills-lib/huashu-design/references/brand-asset-protocol.md +250 -0
  215. package/src/skills-lib/huashu-design/references/cinematic-patterns.md +264 -0
  216. package/src/skills-lib/huashu-design/references/content-guidelines.md +260 -0
  217. package/src/skills-lib/huashu-design/references/critique-guide.md +199 -0
  218. package/src/skills-lib/huashu-design/references/design-context.md +213 -0
  219. package/src/skills-lib/huashu-design/references/design-styles.md +370 -0
  220. package/src/skills-lib/huashu-design/references/editable-pptx.md +334 -0
  221. package/src/skills-lib/huashu-design/references/hero-animation-case-study.md +250 -0
  222. package/src/skills-lib/huashu-design/references/launch-film-director-notes.md +293 -0
  223. package/src/skills-lib/huashu-design/references/multi-perspective-parallel-case-study.md +267 -0
  224. package/src/skills-lib/huashu-design/references/react-setup.md +276 -0
  225. package/src/skills-lib/huashu-design/references/scene-templates.md +262 -0
  226. package/src/skills-lib/huashu-design/references/sfx-library.md +226 -0
  227. package/src/skills-lib/huashu-design/references/slide-decks.md +745 -0
  228. package/src/skills-lib/huashu-design/references/tweaks-system.md +313 -0
  229. package/src/skills-lib/huashu-design/references/verification.md +183 -0
  230. package/src/skills-lib/huashu-design/references/video-export.md +232 -0
  231. package/src/skills-lib/huashu-design/references/voiceover-pipeline.md +397 -0
  232. package/src/skills-lib/huashu-design/references/workflow.md +216 -0
  233. package/src/skills-lib/huashu-design/scripts/add-music.sh +108 -0
  234. package/src/skills-lib/huashu-design/scripts/convert-formats.sh +83 -0
  235. package/src/skills-lib/huashu-design/scripts/export_deck_pdf.mjs +98 -0
  236. package/src/skills-lib/huashu-design/scripts/export_deck_pptx.mjs +107 -0
  237. package/src/skills-lib/huashu-design/scripts/export_deck_stage_pdf.mjs +130 -0
  238. package/src/skills-lib/huashu-design/scripts/fetch_images.py +94 -0
  239. package/src/skills-lib/huashu-design/scripts/gen_deck_thumbs.mjs +55 -0
  240. package/src/skills-lib/huashu-design/scripts/html2pptx.js +1178 -0
  241. package/src/skills-lib/huashu-design/scripts/mix-voiceover.sh +127 -0
  242. package/src/skills-lib/huashu-design/scripts/narrate-pipeline.mjs +315 -0
  243. package/src/skills-lib/huashu-design/scripts/render-narration.sh +151 -0
  244. package/src/skills-lib/huashu-design/scripts/render-video-seek.js +238 -0
  245. package/src/skills-lib/huashu-design/scripts/render-video.js +289 -0
  246. package/src/skills-lib/huashu-design/scripts/tts-doubao.mjs +184 -0
  247. package/src/skills-lib/huashu-design/scripts/verify.py +154 -0
  248. package/src/skills-lib/huashu-design/test-prompts.json +38 -0
  249. package/src/skills-lib/humanizer/LICENSE +21 -0
  250. package/src/skills-lib/humanizer/README.md +145 -0
  251. package/src/skills-lib/humanizer/SKILL.md +474 -0
  252. package/src/skills-lib/humanizer/WARP.md +53 -0
  253. package/src/skills-lib/impeccable/SKILL.md +186 -0
  254. package/src/skills-lib/implementation-planner/SKILL.md +630 -0
  255. package/src/skills-lib/infrastructure/SKILL.md +34 -0
  256. package/src/skills-lib/inicio-de-projeto/SKILL.md +313 -0
  257. package/src/skills-lib/launch-strategy/SKILL.md +353 -0
  258. package/src/skills-lib/launch-strategy/evals/evals.json +91 -0
  259. package/src/skills-lib/marketing-ideas/SKILL.md +167 -0
  260. package/src/skills-lib/marketing-ideas/evals/evals.json +90 -0
  261. package/src/skills-lib/marketing-ideas/references/ideas-by-category.md +366 -0
  262. package/src/skills-lib/marketing-psychology/SKILL.md +455 -0
  263. package/src/skills-lib/marketing-psychology/evals/evals.json +88 -0
  264. package/src/skills-lib/motion-3d-director/SKILL.md +485 -0
  265. package/src/skills-lib/onboarding-cro/SKILL.md +220 -0
  266. package/src/skills-lib/onboarding-cro/evals/evals.json +92 -0
  267. package/src/skills-lib/onboarding-cro/references/experiments.md +258 -0
  268. package/src/skills-lib/page-cro/SKILL.md +182 -0
  269. package/src/skills-lib/page-cro/evals/evals.json +111 -0
  270. package/src/skills-lib/page-cro/references/experiments.md +248 -0
  271. package/src/skills-lib/paid-ads/SKILL.md +315 -0
  272. package/src/skills-lib/paid-ads/evals/evals.json +90 -0
  273. package/src/skills-lib/paid-ads/references/ad-copy-templates.md +207 -0
  274. package/src/skills-lib/paid-ads/references/audience-targeting.md +243 -0
  275. package/src/skills-lib/paid-ads/references/platform-setup-checklists.md +277 -0
  276. package/src/skills-lib/paywall-upgrade-cro/SKILL.md +227 -0
  277. package/src/skills-lib/paywall-upgrade-cro/evals/evals.json +93 -0
  278. package/src/skills-lib/paywall-upgrade-cro/references/experiments.md +164 -0
  279. package/src/skills-lib/popup-cro/SKILL.md +453 -0
  280. package/src/skills-lib/popup-cro/evals/evals.json +94 -0
  281. package/src/skills-lib/premium-landing-ui-researcher/SKILL.md +2090 -0
  282. package/src/skills-lib/pricing-strategy/SKILL.md +231 -0
  283. package/src/skills-lib/pricing-strategy/evals/evals.json +90 -0
  284. package/src/skills-lib/pricing-strategy/references/research-methods.md +152 -0
  285. package/src/skills-lib/pricing-strategy/references/tier-structure.md +232 -0
  286. package/src/skills-lib/product-marketing-context/SKILL.md +241 -0
  287. package/src/skills-lib/product-marketing-context/evals/evals.json +85 -0
  288. package/src/skills-lib/programmatic-seo/SKILL.md +238 -0
  289. package/src/skills-lib/programmatic-seo/evals/evals.json +94 -0
  290. package/src/skills-lib/programmatic-seo/references/playbooks.md +308 -0
  291. package/src/skills-lib/react-components/README.md +36 -0
  292. package/src/skills-lib/react-components/SKILL.md +51 -0
  293. package/src/skills-lib/react-components/examples/gold-standard-card.tsx +80 -0
  294. package/src/skills-lib/react-components/package-lock.json +231 -0
  295. package/src/skills-lib/react-components/package.json +16 -0
  296. package/src/skills-lib/react-components/resources/architecture-checklist.md +15 -0
  297. package/src/skills-lib/react-components/resources/component-template.tsx +37 -0
  298. package/src/skills-lib/react-components/resources/stitch-api-reference.md +14 -0
  299. package/src/skills-lib/react-components/resources/style-guide.json +27 -0
  300. package/src/skills-lib/react-components/scripts/fetch-stitch.sh +30 -0
  301. package/src/skills-lib/react-components/scripts/validate.js +70 -0
  302. package/src/skills-lib/references/premium-agency-rules.md +79 -0
  303. package/src/skills-lib/referral-program/SKILL.md +255 -0
  304. package/src/skills-lib/referral-program/evals/evals.json +89 -0
  305. package/src/skills-lib/referral-program/references/affiliate-programs.md +164 -0
  306. package/src/skills-lib/referral-program/references/program-examples.md +143 -0
  307. package/src/skills-lib/remotion-best-practices/SKILL.md +61 -0
  308. package/src/skills-lib/remotion-best-practices/rules/3d.md +86 -0
  309. package/src/skills-lib/remotion-best-practices/rules/animations.md +27 -0
  310. package/src/skills-lib/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  311. package/src/skills-lib/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  312. package/src/skills-lib/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
  313. package/src/skills-lib/remotion-best-practices/rules/assets.md +78 -0
  314. package/src/skills-lib/remotion-best-practices/rules/audio-visualization.md +198 -0
  315. package/src/skills-lib/remotion-best-practices/rules/audio.md +169 -0
  316. package/src/skills-lib/remotion-best-practices/rules/calculate-metadata.md +134 -0
  317. package/src/skills-lib/remotion-best-practices/rules/can-decode.md +75 -0
  318. package/src/skills-lib/remotion-best-practices/rules/charts.md +120 -0
  319. package/src/skills-lib/remotion-best-practices/rules/compositions.md +154 -0
  320. package/src/skills-lib/remotion-best-practices/rules/display-captions.md +184 -0
  321. package/src/skills-lib/remotion-best-practices/rules/extract-frames.md +229 -0
  322. package/src/skills-lib/remotion-best-practices/rules/ffmpeg.md +38 -0
  323. package/src/skills-lib/remotion-best-practices/rules/fonts.md +152 -0
  324. package/src/skills-lib/remotion-best-practices/rules/get-audio-duration.md +58 -0
  325. package/src/skills-lib/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  326. package/src/skills-lib/remotion-best-practices/rules/get-video-duration.md +60 -0
  327. package/src/skills-lib/remotion-best-practices/rules/gifs.md +141 -0
  328. package/src/skills-lib/remotion-best-practices/rules/images.md +134 -0
  329. package/src/skills-lib/remotion-best-practices/rules/import-srt-captions.md +69 -0
  330. package/src/skills-lib/remotion-best-practices/rules/light-leaks.md +73 -0
  331. package/src/skills-lib/remotion-best-practices/rules/lottie.md +70 -0
  332. package/src/skills-lib/remotion-best-practices/rules/maps.md +412 -0
  333. package/src/skills-lib/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  334. package/src/skills-lib/remotion-best-practices/rules/measuring-text.md +140 -0
  335. package/src/skills-lib/remotion-best-practices/rules/parameters.md +109 -0
  336. package/src/skills-lib/remotion-best-practices/rules/sequencing.md +118 -0
  337. package/src/skills-lib/remotion-best-practices/rules/sfx.md +26 -0
  338. package/src/skills-lib/remotion-best-practices/rules/subtitles.md +36 -0
  339. package/src/skills-lib/remotion-best-practices/rules/tailwind.md +11 -0
  340. package/src/skills-lib/remotion-best-practices/rules/text-animations.md +20 -0
  341. package/src/skills-lib/remotion-best-practices/rules/timing.md +179 -0
  342. package/src/skills-lib/remotion-best-practices/rules/transcribe-captions.md +70 -0
  343. package/src/skills-lib/remotion-best-practices/rules/transitions.md +197 -0
  344. package/src/skills-lib/remotion-best-practices/rules/transparent-videos.md +106 -0
  345. package/src/skills-lib/remotion-best-practices/rules/trimming.md +51 -0
  346. package/src/skills-lib/remotion-best-practices/rules/videos.md +171 -0
  347. package/src/skills-lib/remotion-best-practices/rules/voiceover.md +99 -0
  348. package/src/skills-lib/revops/SKILL.md +343 -0
  349. package/src/skills-lib/revops/evals/evals.json +91 -0
  350. package/src/skills-lib/revops/references/automation-playbooks.md +290 -0
  351. package/src/skills-lib/revops/references/lifecycle-definitions.md +278 -0
  352. package/src/skills-lib/revops/references/routing-rules.md +203 -0
  353. package/src/skills-lib/revops/references/scoring-models.md +247 -0
  354. package/src/skills-lib/sales-enablement/SKILL.md +349 -0
  355. package/src/skills-lib/sales-enablement/evals/evals.json +91 -0
  356. package/src/skills-lib/sales-enablement/references/deck-frameworks.md +263 -0
  357. package/src/skills-lib/sales-enablement/references/demo-scripts.md +355 -0
  358. package/src/skills-lib/sales-enablement/references/objection-library.md +270 -0
  359. package/src/skills-lib/sales-enablement/references/one-pager-templates.md +208 -0
  360. package/src/skills-lib/schema-markup/SKILL.md +179 -0
  361. package/src/skills-lib/schema-markup/evals/evals.json +87 -0
  362. package/src/skills-lib/schema-markup/references/schema-examples.md +398 -0
  363. package/src/skills-lib/seo-audit/SKILL.md +412 -0
  364. package/src/skills-lib/seo-audit/evals/evals.json +136 -0
  365. package/src/skills-lib/seo-audit/references/ai-writing-detection.md +200 -0
  366. package/src/skills-lib/signup-flow-cro/SKILL.md +359 -0
  367. package/src/skills-lib/signup-flow-cro/evals/evals.json +88 -0
  368. package/src/skills-lib/site-architecture/SKILL.md +357 -0
  369. package/src/skills-lib/site-architecture/evals/evals.json +88 -0
  370. package/src/skills-lib/site-architecture/references/mermaid-templates.md +216 -0
  371. package/src/skills-lib/site-architecture/references/navigation-patterns.md +305 -0
  372. package/src/skills-lib/site-architecture/references/site-type-templates.md +293 -0
  373. package/src/skills-lib/social-content/SKILL.md +278 -0
  374. package/src/skills-lib/social-content/evals/evals.json +92 -0
  375. package/src/skills-lib/social-content/references/platforms.md +170 -0
  376. package/src/skills-lib/social-content/references/post-templates.md +177 -0
  377. package/src/skills-lib/social-content/references/reverse-engineering.md +195 -0
  378. package/src/skills-lib/supabase-postgres-best-practices/AGENTS.md +68 -0
  379. package/src/skills-lib/supabase-postgres-best-practices/CLAUDE.md +68 -0
  380. package/src/skills-lib/supabase-postgres-best-practices/README.md +116 -0
  381. package/src/skills-lib/supabase-postgres-best-practices/SKILL.md +64 -0
  382. package/src/skills-lib/supabase-postgres-best-practices/references/_contributing.md +171 -0
  383. package/src/skills-lib/supabase-postgres-best-practices/references/_sections.md +39 -0
  384. package/src/skills-lib/supabase-postgres-best-practices/references/_template.md +34 -0
  385. package/src/skills-lib/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
  386. package/src/skills-lib/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
  387. package/src/skills-lib/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
  388. package/src/skills-lib/supabase-postgres-best-practices/references/conn-limits.md +44 -0
  389. package/src/skills-lib/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
  390. package/src/skills-lib/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
  391. package/src/skills-lib/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
  392. package/src/skills-lib/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
  393. package/src/skills-lib/supabase-postgres-best-practices/references/data-pagination.md +50 -0
  394. package/src/skills-lib/supabase-postgres-best-practices/references/data-upsert.md +50 -0
  395. package/src/skills-lib/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
  396. package/src/skills-lib/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
  397. package/src/skills-lib/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
  398. package/src/skills-lib/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
  399. package/src/skills-lib/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
  400. package/src/skills-lib/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
  401. package/src/skills-lib/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
  402. package/src/skills-lib/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
  403. package/src/skills-lib/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
  404. package/src/skills-lib/supabase-postgres-best-practices/references/query-index-types.md +48 -0
  405. package/src/skills-lib/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
  406. package/src/skills-lib/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
  407. package/src/skills-lib/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
  408. package/src/skills-lib/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
  409. package/src/skills-lib/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
  410. package/src/skills-lib/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
  411. package/src/skills-lib/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
  412. package/src/skills-lib/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
  413. package/src/skills-lib/supabase-postgres-best-practices/references/security-privileges.md +54 -0
  414. package/src/skills-lib/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
  415. package/src/skills-lib/supabase-postgres-best-practices/references/security-rls-performance.md +57 -0
  416. package/src/skills-lib/taste-redesign/SKILL.md +178 -0
  417. package/src/skills-lib/taste-skill/SKILL.md +1206 -0
  418. package/src/skills-lib/ui-component-curator/SKILL.md +102 -0
  419. package/src/skills-lib/ui-ux-pro-max/SKILL.md +377 -0
  420. package/src/skills-lib/ui-ux-pro-max/data/charts.csv +26 -0
  421. package/src/skills-lib/ui-ux-pro-max/data/colors.csv +97 -0
  422. package/src/skills-lib/ui-ux-pro-max/data/icons.csv +101 -0
  423. package/src/skills-lib/ui-ux-pro-max/data/landing.csv +31 -0
  424. package/src/skills-lib/ui-ux-pro-max/data/products.csv +97 -0
  425. package/src/skills-lib/ui-ux-pro-max/data/react-performance.csv +45 -0
  426. package/src/skills-lib/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  427. package/src/skills-lib/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  428. package/src/skills-lib/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  429. package/src/skills-lib/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  430. package/src/skills-lib/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  431. package/src/skills-lib/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  432. package/src/skills-lib/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  433. package/src/skills-lib/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  434. package/src/skills-lib/ui-ux-pro-max/data/stacks/react.csv +54 -0
  435. package/src/skills-lib/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  436. package/src/skills-lib/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  437. package/src/skills-lib/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  438. package/src/skills-lib/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  439. package/src/skills-lib/ui-ux-pro-max/data/styles.csv +68 -0
  440. package/src/skills-lib/ui-ux-pro-max/data/typography.csv +58 -0
  441. package/src/skills-lib/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  442. package/src/skills-lib/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  443. package/src/skills-lib/ui-ux-pro-max/data/web-interface.csv +31 -0
  444. package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +0 -0
  445. package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
  446. package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/search.cpython-314.pyc +0 -0
  447. package/src/skills-lib/ui-ux-pro-max/scripts/core.py +253 -0
  448. package/src/skills-lib/ui-ux-pro-max/scripts/design_system.py +1067 -0
  449. package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/0964cef300f753b5cee0cc49777ca97035c85d45c212099405d9ee4da36e523f.json +1 -0
  450. package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/21a40f6810c3a6f17acc3580f106171daf78c7b41bbd066bc80448a821ea0adf.json +1 -0
  451. package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/69ea15a020ac81b8459e37ef63654398a50c1035fc01c43d8069df217389f7f3.json +1 -0
  452. package/src/skills-lib/ui-ux-pro-max/scripts/search.py +114 -0
  453. package/src/skills-lib/web-security/SKILL.md +147 -0
  454. package/src/skills-lib/wizz-router/SKILL.md +262 -0
  455. package/src/squads/README.md +39 -0
  456. package/src/squads/advisory-board/README.md +34 -0
  457. package/src/squads/advisory-board/agents/board-chair.md +161 -0
  458. package/src/squads/advisory-board/agents/brene-brown.md +296 -0
  459. package/src/squads/advisory-board/agents/charlie-munger.md +590 -0
  460. package/src/squads/advisory-board/agents/derek-sivers.md +268 -0
  461. package/src/squads/advisory-board/agents/naval-ravikant.md +251 -0
  462. package/src/squads/advisory-board/agents/patrick-lencioni.md +394 -0
  463. package/src/squads/advisory-board/agents/peter-thiel.md +269 -0
  464. package/src/squads/advisory-board/agents/ray-dalio.md +587 -0
  465. package/src/squads/advisory-board/agents/reid-hoffman.md +278 -0
  466. package/src/squads/advisory-board/agents/simon-sinek.md +291 -0
  467. package/src/squads/advisory-board/agents/yvon-chouinard.md +275 -0
  468. package/src/squads/advisory-board/squad.yaml +50 -0
  469. package/src/squads/brand-squad/README.md +60 -0
  470. package/src/squads/brand-squad/agents/al-ries.md +175 -0
  471. package/src/squads/brand-squad/agents/alina-wheeler.md +184 -0
  472. package/src/squads/brand-squad/agents/archetype-consultant.md +215 -0
  473. package/src/squads/brand-squad/agents/brand-chief.md +158 -0
  474. package/src/squads/brand-squad/agents/byron-sharp.md +169 -0
  475. package/src/squads/brand-squad/agents/david-aaker.md +166 -0
  476. package/src/squads/brand-squad/agents/denise-yohn.md +172 -0
  477. package/src/squads/brand-squad/agents/domain-scout.md +135 -0
  478. package/src/squads/brand-squad/agents/donald-miller.md +179 -0
  479. package/src/squads/brand-squad/agents/emily-heyward.md +147 -0
  480. package/src/squads/brand-squad/agents/jean-noel-kapferer.md +189 -0
  481. package/src/squads/brand-squad/agents/kevin-keller.md +199 -0
  482. package/src/squads/brand-squad/agents/marty-neumeier.md +170 -0
  483. package/src/squads/brand-squad/agents/miller-sticky-brand.md +180 -0
  484. package/src/squads/brand-squad/agents/naming-strategist.md +171 -0
  485. package/src/squads/brand-squad/squad.yaml +117 -0
  486. package/src/squads/c-level-squad/README.md +29 -0
  487. package/src/squads/c-level-squad/agents/caio-architect.md +235 -0
  488. package/src/squads/c-level-squad/agents/cio-engineer.md +209 -0
  489. package/src/squads/c-level-squad/agents/cmo-architect.md +208 -0
  490. package/src/squads/c-level-squad/agents/coo-orchestrator.md +193 -0
  491. package/src/squads/c-level-squad/agents/cto-architect.md +194 -0
  492. package/src/squads/c-level-squad/agents/vision-chief.md +201 -0
  493. package/src/squads/c-level-squad/squad.yaml +45 -0
  494. package/src/squads/claude-code-mastery/README.md +146 -0
  495. package/src/squads/claude-code-mastery/agents/claude-mastery-chief.md +554 -0
  496. package/src/squads/claude-code-mastery/agents/config-engineer.md +865 -0
  497. package/src/squads/claude-code-mastery/agents/hooks-architect.md +1013 -0
  498. package/src/squads/claude-code-mastery/agents/mcp-integrator.md +791 -0
  499. package/src/squads/claude-code-mastery/agents/project-integrator.md +1196 -0
  500. package/src/squads/claude-code-mastery/agents/roadmap-sentinel.md +931 -0
  501. package/src/squads/claude-code-mastery/agents/skill-craftsman.md +1250 -0
  502. package/src/squads/claude-code-mastery/agents/swarm-orchestrator.md +1008 -0
  503. package/src/squads/copy-squad/README.md +65 -0
  504. package/src/squads/copy-squad/agents/andre-chaperon.md +206 -0
  505. package/src/squads/copy-squad/agents/ben-settle.md +194 -0
  506. package/src/squads/copy-squad/agents/claude-hopkins.md +182 -0
  507. package/src/squads/copy-squad/agents/clayton-makepeace.md +225 -0
  508. package/src/squads/copy-squad/agents/copy-chief.md +166 -0
  509. package/src/squads/copy-squad/agents/dan-kennedy.md +202 -0
  510. package/src/squads/copy-squad/agents/dan-koe.md +223 -0
  511. package/src/squads/copy-squad/agents/david-deutsch.md +197 -0
  512. package/src/squads/copy-squad/agents/david-ogilvy.md +198 -0
  513. package/src/squads/copy-squad/agents/eugene-schwartz.md +238 -0
  514. package/src/squads/copy-squad/agents/frank-kern.md +195 -0
  515. package/src/squads/copy-squad/agents/gary-bencivenga.md +197 -0
  516. package/src/squads/copy-squad/agents/gary-halbert.md +219 -0
  517. package/src/squads/copy-squad/agents/jim-rutz.md +193 -0
  518. package/src/squads/copy-squad/agents/joe-sugarman.md +234 -0
  519. package/src/squads/copy-squad/agents/john-carlton.md +203 -0
  520. package/src/squads/copy-squad/agents/jon-benson.md +196 -0
  521. package/src/squads/copy-squad/agents/parris-lampropoulos.md +188 -0
  522. package/src/squads/copy-squad/agents/robert-collier.md +183 -0
  523. package/src/squads/copy-squad/agents/russell-brunson.md +229 -0
  524. package/src/squads/copy-squad/agents/ry-schwartz.md +185 -0
  525. package/src/squads/copy-squad/agents/stefan-georgi.md +188 -0
  526. package/src/squads/copy-squad/agents/todd-brown.md +171 -0
  527. package/src/squads/copy-squad/squad.yaml +87 -0
  528. package/src/squads/cybersecurity/README.md +38 -0
  529. package/src/squads/cybersecurity/agents/busterer.md +108 -0
  530. package/src/squads/cybersecurity/agents/cartographer.md +114 -0
  531. package/src/squads/cybersecurity/agents/chris-sanders.md +205 -0
  532. package/src/squads/cybersecurity/agents/command-generator.md +121 -0
  533. package/src/squads/cybersecurity/agents/cyber-chief.md +120 -0
  534. package/src/squads/cybersecurity/agents/dirber.md +111 -0
  535. package/src/squads/cybersecurity/agents/fuzzer.md +121 -0
  536. package/src/squads/cybersecurity/agents/georgia-weidman.md +178 -0
  537. package/src/squads/cybersecurity/agents/jim-manico.md +182 -0
  538. package/src/squads/cybersecurity/agents/marcus-carey.md +200 -0
  539. package/src/squads/cybersecurity/agents/omar-santos.md +206 -0
  540. package/src/squads/cybersecurity/agents/peter-kim.md +179 -0
  541. package/src/squads/cybersecurity/agents/ripper.md +121 -0
  542. package/src/squads/cybersecurity/agents/rogue.md +116 -0
  543. package/src/squads/cybersecurity/agents/shannon-runner.md +108 -0
  544. package/src/squads/cybersecurity/squad.yaml +56 -0
  545. package/src/squads/data-squad/README.md +30 -0
  546. package/src/squads/data-squad/agents/avinash-kaushik.md +268 -0
  547. package/src/squads/data-squad/agents/data-chief.md +167 -0
  548. package/src/squads/data-squad/agents/david-spinks.md +277 -0
  549. package/src/squads/data-squad/agents/nick-mehta.md +294 -0
  550. package/src/squads/data-squad/agents/peter-fader.md +246 -0
  551. package/src/squads/data-squad/agents/sean-ellis.md +303 -0
  552. package/src/squads/data-squad/agents/wes-kao.md +268 -0
  553. package/src/squads/data-squad/squad.yaml +46 -0
  554. package/src/squads/design-squad/README.md +31 -0
  555. package/src/squads/design-squad/agents/brad-frost.md +185 -0
  556. package/src/squads/design-squad/agents/dan-mall.md +178 -0
  557. package/src/squads/design-squad/agents/dave-malouf.md +198 -0
  558. package/src/squads/design-squad/agents/design-chief.md +109 -0
  559. package/src/squads/design-squad/agents/design-system-architect.md +109 -0
  560. package/src/squads/design-squad/agents/ui-engineer.md +102 -0
  561. package/src/squads/design-squad/agents/ux-designer.md +105 -0
  562. package/src/squads/design-squad/agents/visual-generator.md +108 -0
  563. package/src/squads/design-squad/squad.yaml +48 -0
  564. package/src/squads/hormozi-squad/README.md +39 -0
  565. package/src/squads/hormozi-squad/agents/hormozi-ads.md +159 -0
  566. package/src/squads/hormozi-squad/agents/hormozi-advisor.md +178 -0
  567. package/src/squads/hormozi-squad/agents/hormozi-audit.md +178 -0
  568. package/src/squads/hormozi-squad/agents/hormozi-chief.md +111 -0
  569. package/src/squads/hormozi-squad/agents/hormozi-closer.md +179 -0
  570. package/src/squads/hormozi-squad/agents/hormozi-content.md +166 -0
  571. package/src/squads/hormozi-squad/agents/hormozi-copy.md +152 -0
  572. package/src/squads/hormozi-squad/agents/hormozi-hooks.md +177 -0
  573. package/src/squads/hormozi-squad/agents/hormozi-launch.md +160 -0
  574. package/src/squads/hormozi-squad/agents/hormozi-leads.md +198 -0
  575. package/src/squads/hormozi-squad/agents/hormozi-models.md +191 -0
  576. package/src/squads/hormozi-squad/agents/hormozi-offers.md +197 -0
  577. package/src/squads/hormozi-squad/agents/hormozi-pricing.md +151 -0
  578. package/src/squads/hormozi-squad/agents/hormozi-retention.md +166 -0
  579. package/src/squads/hormozi-squad/agents/hormozi-scale.md +175 -0
  580. package/src/squads/hormozi-squad/agents/hormozi-workshop.md +160 -0
  581. package/src/squads/hormozi-squad/squad.yaml +60 -0
  582. package/src/squads/movement/README.md +29 -0
  583. package/src/squads/movement/agents/analista-de-impacto.md +350 -0
  584. package/src/squads/movement/agents/estrategista-de-ciclo.md +301 -0
  585. package/src/squads/movement/agents/fenomenologo.md +169 -0
  586. package/src/squads/movement/agents/identitario.md +265 -0
  587. package/src/squads/movement/agents/manifestador.md +279 -0
  588. package/src/squads/movement/agents/movement-architect.md +210 -0
  589. package/src/squads/movement/agents/movement-chief.md +135 -0
  590. package/src/squads/movement/squad.yaml +45 -0
  591. package/src/squads/storytelling/README.md +35 -0
  592. package/src/squads/storytelling/agents/blake-snyder.md +225 -0
  593. package/src/squads/storytelling/agents/dan-harmon.md +167 -0
  594. package/src/squads/storytelling/agents/joseph-campbell.md +184 -0
  595. package/src/squads/storytelling/agents/keith-johnstone.md +157 -0
  596. package/src/squads/storytelling/agents/kindra-hall.md +162 -0
  597. package/src/squads/storytelling/agents/marshall-ganz.md +167 -0
  598. package/src/squads/storytelling/agents/matthew-dicks.md +152 -0
  599. package/src/squads/storytelling/agents/nancy-duarte.md +154 -0
  600. package/src/squads/storytelling/agents/oren-klaff.md +166 -0
  601. package/src/squads/storytelling/agents/park-howell.md +152 -0
  602. package/src/squads/storytelling/agents/shawn-coyne.md +208 -0
  603. package/src/squads/storytelling/agents/story-chief.md +155 -0
  604. package/src/squads/storytelling/squad.yaml +52 -0
  605. package/src/squads/traffic-masters/README.md +39 -0
  606. package/src/squads/traffic-masters/agents/ad-midas.md +149 -0
  607. package/src/squads/traffic-masters/agents/ads-analyst.md +135 -0
  608. package/src/squads/traffic-masters/agents/creative-analyst.md +142 -0
  609. package/src/squads/traffic-masters/agents/depesh-mandalia.md +174 -0
  610. package/src/squads/traffic-masters/agents/fiscal.md +144 -0
  611. package/src/squads/traffic-masters/agents/kasim-aslam.md +158 -0
  612. package/src/squads/traffic-masters/agents/media-buyer.md +159 -0
  613. package/src/squads/traffic-masters/agents/molly-pittman.md +185 -0
  614. package/src/squads/traffic-masters/agents/nicholas-kusmich.md +157 -0
  615. package/src/squads/traffic-masters/agents/pedro-sobral.md +158 -0
  616. package/src/squads/traffic-masters/agents/performance-analyst.md +135 -0
  617. package/src/squads/traffic-masters/agents/pixel-specialist.md +144 -0
  618. package/src/squads/traffic-masters/agents/ralph-burns.md +163 -0
  619. package/src/squads/traffic-masters/agents/scale-optimizer.md +144 -0
  620. package/src/squads/traffic-masters/agents/tom-breeze.md +175 -0
  621. package/src/squads/traffic-masters/agents/traffic-chief.md +97 -0
  622. package/src/squads/traffic-masters/squad.yaml +59 -0
  623. package/tools/installer/commands/install.js +12 -0
  624. package/tools/installer/core/config.js +20 -0
  625. package/tools/installer/core/installer.js +100 -0
  626. package/tools/installer/core/manifest-generator.js +14 -3
  627. package/tools/installer/modules/cli-config.js +175 -0
  628. package/tools/installer/modules/mcp-config.js +137 -0
  629. package/tools/installer/modules/skills-lib.js +135 -0
  630. package/tools/installer/ui.js +210 -0
@@ -0,0 +1,232 @@
1
+ # Video Export:HTML 动画导出为 MP4/GIF
2
+
3
+ 动画 HTML 完成后,用户常想「能导出视频吗」。这份指南给出完整流程。
4
+
5
+ ## 何时导出
6
+
7
+ **导出时机**:
8
+ - 动画完整跑通、视觉验证过(Playwright 截图确认各时间点状态正确)
9
+ - 用户在浏览器里看过至少一次,表示效果 OK
10
+ - **不要**在动画 bug 没修完的阶段导出——导出到视频后改起来更贵
11
+
12
+ **用户可能说的触发语**:
13
+ - 「能导出成视频吗」
14
+ - 「转成 MP4」
15
+ - 「做成 GIF」
16
+ - 「60fps」
17
+
18
+ ## 产出规格
19
+
20
+ 默认一次给三种格式,让用户选:
21
+
22
+ | 格式 | 规格 | 适合场景 | 典型大小(30s) |
23
+ |---|---|---|---|
24
+ | MP4 25fps | 1920×1080 · H.264 · CRF 18 | 公众号嵌入、视频号、YouTube | 1-2 MB |
25
+ | MP4 60fps | 1920×1080 · minterpolate 插帧 · H.264 · CRF 18 | 高帧率展示、B站、作品集 | 1.5-3 MB |
26
+ | GIF | 960×540 · 15fps · palette 优化 | Twitter/X、README、Slack 预览 | 2-4 MB |
27
+
28
+ ## 工具链
29
+
30
+ 两个脚本在 `scripts/`:
31
+
32
+ ### 1. `render-video.js` — HTML → MP4
33
+
34
+ 录一个 25fps 的 MP4 基础版本。依赖全局 playwright。
35
+
36
+ ```bash
37
+ NODE_PATH=$(npm root -g) node /path/to/claude-design/scripts/render-video.js <html文件>
38
+ ```
39
+
40
+ 可选参数:
41
+ - `--duration=30` 动画时长(秒)
42
+ - `--width=1920 --height=1080` 分辨率
43
+ - `--trim=2.2` 从视频开头裁掉的秒数(去掉 reload + 字体加载时间)
44
+ - `--fontwait=1.5` 字体加载等待时间(秒),字体多时调高
45
+
46
+ 输出:与 HTML 同目录,同名 `.mp4`。
47
+
48
+ ### 2. `add-music.sh` — MP4 + BGM → MP4
49
+
50
+ 给无声 MP4 混入背景音乐,按场景(mood)从内置 BGM 库里选,也可自带音频。自动匹配时长、加淡入淡出。
51
+
52
+ ```bash
53
+ bash add-music.sh <input.mp4> [--mood=<name>] [--music=<path>] [--out=<path>]
54
+ ```
55
+
56
+ **内置 BGM 库**(在 `assets/bgm-<mood>.mp3`):
57
+
58
+ | `--mood=` | 风格 | 适配场景 |
59
+ |-----------|------|---------|
60
+ | `tech`(默认) | Apple Silicon / 苹果发布会,极简合成器+钢琴 | 产品发布、AI工具、Skill 宣传 |
61
+ | `ad` | upbeat 现代电子,有 build + drop | 社交媒体广告、产品预告、促销片 |
62
+ | `educational` | 温暖明亮、轻吉他/电钢琴,inviting | 科普、教程介绍、课程预告 |
63
+ | `educational-alt` | 同类备选,换一首试试 | 同上 |
64
+ | `tutorial` | lo-fi 环境音,几乎无存在感 | 软件演示、编程教程、长演示 |
65
+ | `tutorial-alt` | 同类备选 | 同上 |
66
+
67
+ **行为**:
68
+ - 音乐按视频时长裁剪
69
+ - 0.3s 淡入 + 1s 淡出(避免硬切)
70
+ - 视频流 `-c:v copy` 不重编码,音频 AAC 192k
71
+ - `--music=<path>` 优先级高于 `--mood`,可以直接指定任意外部音频
72
+ - 传错 mood 名会列出所有可用选项,不会静默失败
73
+
74
+ **典型流水线**(动画导出三件套 + 配乐):
75
+ ```bash
76
+ node render-video.js animation.html # 录屏
77
+ bash convert-formats.sh animation.mp4 # 派生 60fps + GIF
78
+ bash add-music.sh animation-60fps.mp4 # 加默认 tech BGM
79
+ # 或针对不同场景:
80
+ bash add-music.sh tutorial-demo.mp4 --mood=tutorial
81
+ bash add-music.sh product-promo.mp4 --mood=ad --out=promo-final.mp4
82
+ ```
83
+
84
+ ### 3. `convert-formats.sh` — MP4 → 60fps MP4 + GIF
85
+
86
+ 从已有 MP4 生成 60fps 版本和 GIF。
87
+
88
+ ```bash
89
+ bash /path/to/claude-design/scripts/convert-formats.sh <input.mp4> [gif_width] [--minterpolate]
90
+ ```
91
+
92
+ 输出(与输入同目录):
93
+ - `<name>-60fps.mp4` — 默认用 `fps=60` 帧复制(兼容性广);加 `--minterpolate` 启用高质量插帧
94
+ - `<name>.gif` — palette 优化的 GIF(默认 960 宽,可改)
95
+
96
+ **60fps 模式选择**:
97
+
98
+ | 模式 | 命令 | 兼容性 | 使用场景 |
99
+ |---|---|---|---|
100
+ | 帧复制(默认)| `convert-formats.sh in.mp4` | QuickTime/Safari/Chrome/VLC 全通 | 通用交付、上传平台、社交媒体 |
101
+ | minterpolate 插帧 | `convert-formats.sh in.mp4 --minterpolate` | macOS QuickTime/Safari 可能拒打 | B站等需要真插帧的展示场景,**交付前必须本地测**目标播放器 |
102
+
103
+ 为什么默认改成帧复制?minterpolate 输出的 H.264 elementary stream 有 known compat bug——之前默认 minterpolate 时多次踩到「macOS QuickTime 打不开」的问题。详见 `animation-pitfalls.md` §14。
104
+
105
+ `gif_width` 参数:
106
+ - 960(默认)—— 社交平台通用
107
+ - 1280 —— 更清晰但文件更大
108
+ - 600 —— Twitter/X 优先加载
109
+
110
+ ### 4. `render-video-seek.js` — 真 60fps / 确定性渲染(推荐高质量交付)
111
+
112
+ `render-video.js` 的 recordVideo 路径有三个固有限制:帧率被 Chromium compositor 锁死 25fps、开头有加载黑帧需 trim、60fps 只能靠事后 minterpolate 插帧(有 ghosting + macOS QuickTime 兼容 bug,见 `animation-pitfalls.md §14`)。需要**真 60fps、确定性输出、或交付 B站/作品集**时,改用 seek 渲染。
113
+
114
+ 它逐帧 seek 到时间戳截图、再用 ffmpeg 把 PNG 序列编码成 MP4。技术内核借鉴 HeyGen HyperFrames(Apache 2.0)的「冻结时钟 + seek 截图」思路,但不引入任何第三方包——只用本 skill 已有的 playwright + ffmpeg,runtime 中立。
115
+
116
+ ```bash
117
+ NODE_PATH=$(npm root -g) node /path/to/claude-design/scripts/render-video-seek.js <html文件> --fps=60
118
+ ```
119
+
120
+ 参数:`--duration` · `--fps`(默认 60)· `--width` · `--height` · `--concurrency`(默认 4 个 worker 并行)· `--settle`(seek 后等几个 rAF 再截图,默认 2,重 layout 动画可调高)· `--keep-chrome`。输出与 HTML 同目录、同名 `.mp4`。
121
+
122
+ 正面解决 recordVideo 三死结:
123
+ - **真原生任意帧率**:`--fps=60` 出真 60fps(每帧都是真实 seek 画面),不再经 `convert-formats.sh` 的 minterpolate 插帧,绕开 ghosting + macOS 兼容 bug
124
+ - **无开头黑帧**:不录屏,根本没有加载期黑帧,不需要 `--trim` / `--fontwait`
125
+ - **确定性**:seek 到时间戳截图,同输入同输出,不受机器负载/丢帧影响
126
+
127
+ **适用边界(重要)**:只支持走 Stage 时钟的动画——`assets/animations.jsx` 的 `<Stage>` 或 `narration_stage.jsx` 的 `<NarrationStage>`,它们会响应 `window.__seekRender` 冻结自驱时钟并暴露 `window.__seek(t)`。纯 CSS `@keyframes` / Lottie / 手写非 Stage 动画不吃 `__seek`,这类继续用 `render-video.js`(脚本检测不到 `__seek` 会报错并提示)。
128
+
129
+ **代价**:逐帧截图,长视频总耗时可能比 recordVideo 实时录更久(靠 `--concurrency` 多 worker 缓解);大量临时 PNG 占盘,渲染前建议关其他大内存 App。
130
+
131
+ **二选一策略**:默认仍用 `render-video.js`(零风险、覆盖所有动画类型);需要真 60fps / 确定性 / 高质量交付、且动画走 Stage 时钟时,用 `render-video-seek.js`。带解说的长动画用 `render-narration.sh --seek` 一键走 seek 渲染 + 混音。
132
+
133
+ ## 完整流程(标准推荐)
134
+
135
+ 用户说「导出视频」后:
136
+
137
+ ```bash
138
+ cd <项目目录>
139
+
140
+ # 假设 $SKILL 指向本 skill 的根目录(自行按安装位置替换)
141
+
142
+ # 1. 录 25fps 基础 MP4
143
+ NODE_PATH=$(npm root -g) node "$SKILL/scripts/render-video.js" my-animation.html
144
+
145
+ # 2. 派生 60fps MP4 和 GIF
146
+ bash "$SKILL/scripts/convert-formats.sh" my-animation.mp4
147
+
148
+ # 产出清单:
149
+ # my-animation.mp4 (25fps · 1-2 MB)
150
+ # my-animation-60fps.mp4 (60fps · 1.5-3 MB)
151
+ # my-animation.gif (15fps · 2-4 MB)
152
+ ```
153
+
154
+ ## 技术细节(排错用)
155
+
156
+ ### Playwright recordVideo 的坑
157
+
158
+ - 帧率固定 25fps,无法直接录 60fps(Chromium headless 的 compositor 上限)
159
+ - 从 context 创建就开始录,必须用 `trim` 裁掉前面的加载时间
160
+ - 默认 webm 格式,需要 ffmpeg 转 H.264 MP4 才能通用播放
161
+
162
+ `render-video.js` 已处理以上问题。
163
+
164
+ ### ffmpeg minterpolate 参数
165
+
166
+ 当前配置:`minterpolate=fps=60:mi_mode=mci:mc_mode=aobmc:me_mode=bidir:vsbmc=1`
167
+
168
+ - `mi_mode=mci` — motion compensation interpolation(运动补偿)
169
+ - `mc_mode=aobmc` — adaptive overlapped block motion compensation
170
+ - `me_mode=bidir` — 双向运动估计
171
+ - `vsbmc=1` — 可变 size block motion compensation
172
+
173
+ 对 CSS **transform 动画**(translate/scale/rotate)效果好。
174
+ 对**纯 fade** 可能产生轻微 ghosting——如果用户嫌弃,退化为简单帧复制:
175
+
176
+ ```bash
177
+ ffmpeg -i input.mp4 -r 60 -c:v libx264 ... output.mp4
178
+ ```
179
+
180
+ ### GIF palette 为何要两阶段
181
+
182
+ GIF 只能 256 色。一次 pass 的 GIF 会把全动画色彩压到 256 色通用 palette,对米色底+橙色这种细腻配色会糊。
183
+
184
+ 两阶段:
185
+ 1. `palettegen=stats_mode=diff` —— 先扫描全片,生成**针对此动画的 optimal palette**
186
+ 2. `paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle` —— 用这个 palette 编码,rectangle diff 只更新变化区域,大幅减小文件
187
+
188
+ 对 fade 过渡用 `dither=bayer` 比 `none` 更平滑,但文件大一点。
189
+
190
+ ## Pre-flight check(导出前)
191
+
192
+ 导出前 30 秒自检:
193
+
194
+ - [ ] HTML 在浏览器里完整跑过一遍,无控制台错误
195
+ - [ ] 动画第 0 帧是完整初始状态(不是空白加载中)
196
+ - [ ] 动画最后一帧是稳定的收尾状态(不是半截)
197
+ - [ ] 字体/图片/emoji 全部正常渲染(参考 `animation-pitfalls.md`)
198
+ - [ ] Duration 参数与 HTML 里的实际动画时长匹配
199
+ - [ ] HTML 中 Stage 检测 `window.__recording` 强制 loop=false(手写 Stage 必查;用 `assets/animations.jsx` 自带)
200
+ - [ ] 结尾 Sprite 的 `fadeOut={0}`(视频末帧不淡出)
201
+ - [ ] 含「Created by Huashu-Design」水印(仅动画场景必加;第三方品牌作品加「非官方出品 · 」前缀。详见 SKILL.md §「Skill 推广水印」)
202
+
203
+ ## 交付时附带的说明
204
+
205
+ 导出完成后给用户的标准说明格式:
206
+
207
+ ```
208
+ **完整交付**
209
+
210
+ | 文件 | 格式 | 规格 | 大小 |
211
+ |---|---|---|---|
212
+ | foo.mp4 | MP4 | 1920×1080 · 25fps · H.264 | X MB |
213
+ | foo-60fps.mp4 | MP4 | 1920×1080 · 60fps(运动插帧)· H.264 | X MB |
214
+ | foo.gif | GIF | 960×540 · 15fps · palette 优化 | X MB |
215
+
216
+ **说明**
217
+ - 60fps 用 minterpolate 做运动估计插帧,transform 动画效果好
218
+ - GIF 用 palette 优化,30s 动画可压到 3MB 左右
219
+
220
+ 要换尺寸或帧率说一声。
221
+ ```
222
+
223
+ ## 常见用户追加需求
224
+
225
+ | 用户说 | 应对 |
226
+ |---|---|
227
+ | 「太大了」 | MP4:提高 CRF 到 23-28;GIF:降分辨率到 600 或 fps 到 10 |
228
+ | 「GIF 太糊」 | 提高 `gif_width` 到 1280;或者建议用 MP4 代替(微信朋友圈也支持) |
229
+ | 「要竖屏 9:16」 | 改 HTML 源的 `--width=1080 --height=1920`,重新录 |
230
+ | 「加水印」 | ffmpeg 加 `-vf "drawtext=..."` 或 `overlay=` 一个 PNG |
231
+ | 「要透明背景」 | MP4 不支持 alpha;用 WebM VP9 + alpha 或 APNG |
232
+ | 「要无损」 | CRF 改 0 + preset veryslow(文件会大 10 倍) |
@@ -0,0 +1,397 @@
1
+ # Voiceover Pipeline · 解说驱动动画
2
+
3
+ > 把动画从「无声画面 + 后期配音」升级为「**先有解说词,再按音频实测时长驱动画面**」的工作流。
4
+ > 适用:5-20 分钟概念解说视频、教程视频、长篇知识科普。
5
+ >
6
+ > 配套 `references/animation-best-practices.md` 使用——本文件管 **怎么把解说和画面对上**,
7
+ > animation-best-practices 管 **每一帧画面怎么动**。
8
+
9
+ ---
10
+
11
+ ## 🛑 铁律 · 在写一行代码之前必读
12
+
13
+ > **强调多少遍都不够:解说动画的失败模式 #1 是做成了带配音的 PowerPoint。**
14
+
15
+ ### 第一条 · 整片是一个连续的运动叙事,不是一组独立场景
16
+
17
+ PowerPoint 是 7 张幻灯片。我们做的是 **1 段持续 X 分钟的电影**。
18
+
19
+ **身份切换**:
20
+ - ❌ 你不是「在做 7 个 scene 的内容」
21
+ - ✅ 你是「在屏幕上让一个或几个 hero element 演 X 分钟的戏」
22
+
23
+ **视觉骨架 = 一个或几个贯穿全片的 hero element**:
24
+ - 它从 t=0 出现,到结束才离场
25
+ - 每个 cue 是它的**状态变化**(位置 / 大小 / 颜色 / 透视 / 形态),不是「换一个新元素」
26
+ - scene 边界在剧本里有,**在画面里不应该有**——观众看不出"这是第 3 个 scene",只看到一段连续的运动
27
+
28
+ **反例(本 skill v1 实战踩坑 · 2026-05-10)**:
29
+ - 7 个 `<Scene>` 各自独立 layout,scene 切换 = 整页 opacity 1→0 切到下一页
30
+ - 每个 cue = `opacity: p, transform: translateY((1-p)*30px)`(fade-up 单调使用)
31
+ - 结果:观众看完第一反应「像一页页 keynote」,整片质感归零
32
+
33
+ **正确模式**:
34
+ - 选定 1-2 个 hero element(如本文章 demo 应选「md」「html」两个字符作为骨架)
35
+ - 这两个字符**从片头到片尾**一直在屏幕上
36
+ - 每段「scene」实际是 hero element 的一次状态变化
37
+ - opening:两字符在屏幕中央对峙
38
+ - md-side:md 变大变粗占据画面,html 退到角落小字;数据围绕 md 涌入
39
+ - html-side:html 反转为主角;md 退到角落
40
+ - the-real-question:两字符回到中央,但中间出现「≠」分隔
41
+ - the-split:两字符向两侧推开,中间空白展开
42
+ - activity-proof:两字符在 timeline 上交替闪烁
43
+ - closing:两字符落地为最终答案位置
44
+ - 这样整片是「md 和 html 在屏幕上演了 X 分钟」,不是 7 张独立 PPT
45
+
46
+ **最小实现骨架**(直接抄改):
47
+
48
+ ```jsx
49
+ // ── Step 1: 定义 hero 在每个 scene 的目标状态(位置/大小/不透明度)──
50
+ const HERO_KEYS = {
51
+ opening: { md: { x: 50, y: 35, scale: 1.0, opacity: 1 }, html: { x: 50, y: 65, scale: 1.0, opacity: 1 } },
52
+ 'md-side': { md: { x: 78, y: 50, scale: 1.6, opacity: 1 }, html: { x: 92, y: 8, scale: 0.25, opacity: 0.4 } },
53
+ 'html-side':{ md: { x: 8, y: 8, scale: 0.25, opacity: 0.4 }, html: { x: 22, y: 50, scale: 1.6, opacity: 1 } },
54
+ // ... 每段一个 entry,连贯的运动从前一段的 final → 本段的 from
55
+ };
56
+
57
+ // ── Step 2: easing + lerp 工具 ──
58
+ const expoOut = t => t === 1 ? 1 : 1 - Math.pow(2, -10 * t);
59
+ const lerp = (a, b, t) => a + (b - a) * t;
60
+ const lerpPos = (from, to, t) => ({
61
+ x: lerp(from.x, to.x, t), y: lerp(from.y, to.y, t),
62
+ scale: lerp(from.scale, to.scale, t),
63
+ opacity: lerp(from.opacity ?? 1, to.opacity ?? 1, t),
64
+ });
65
+
66
+ // ── Step 3: HeroAnchor 组件 —— 直接挂在 <NarrationStage> 子级,不放进 <Scene> ──
67
+ const HeroAnchor = () => {
68
+ const { time, scene, timeline } = useNarration();
69
+ if (!scene) return null;
70
+ const idx = timeline.scenes.findIndex(s => s.id === scene.id);
71
+ const prevId = idx > 0 ? timeline.scenes[idx - 1].id : scene.id;
72
+ const from = HERO_KEYS[prevId];
73
+ const to = HERO_KEYS[scene.id];
74
+
75
+ // 段内前 ~45% 时间用于从 prev 状态 morph 到本段状态,剩余 hold
76
+ const transitionDur = Math.min(2.0, scene.duration * 0.45);
77
+ const t = expoOut(Math.min(1, (time - scene.start) / transitionDur));
78
+ const md = lerpPos(from.md, to.md, t);
79
+ const html = lerpPos(from.html, to.html, t);
80
+
81
+ // 加 subtle breathing 让任意一帧都有运动(对应铁律第三条)
82
+ const breath = 1 + Math.sin(time * 0.6) * 0.012;
83
+
84
+ const renderHero = (label, pos, color) => (
85
+ <div style={{
86
+ position: 'absolute', left: `${pos.x}%`, top: `${pos.y}%`,
87
+ transform: `translate(-50%, -50%) scale(${pos.scale * breath})`,
88
+ opacity: pos.opacity, color, fontSize: 360, fontWeight: 800,
89
+ lineHeight: 1, willChange: 'transform, opacity', pointerEvents: 'none',
90
+ }}>{label}</div>
91
+ );
92
+ return <>
93
+ {renderHero('md', md, '#1B4965')}
94
+ {renderHero('html', html, '#C04A1A')}
95
+ </>;
96
+ };
97
+
98
+ // ── Step 4: 主组件 —— hero 在 NarrationStage 子级,scene 内辅助元素另外管 ──
99
+ const App = () => (
100
+ <NarrationStage timeline={TIMELINE} audioSrc="_narration/voiceover.mp3" width={1920} height={1080}>
101
+ <HeroAnchor /> {/* ← 跨 scene 持续存在,整片视觉骨架 */}
102
+ {/* scene 内辅助元素用 useSceneFade 控制软淡入淡出,不要硬切 */}
103
+ <MdSideAux />
104
+ <HtmlSideAux />
105
+ {/* ... */}
106
+ </NarrationStage>
107
+ );
108
+ ```
109
+
110
+ **完整可运行参考**:`demos/md-html-narration/md-html-demo.html`(3 分 21 秒,7 段,21 cue,已实战验证)
111
+
112
+ ### 第二条 · 场景之间不能「硬切」
113
+
114
+ | 错误模式(PowerPoint slop) | 正确模式(电影感) |
115
+ |---|---|
116
+ | scene A 整体 `opacity 1→0` 同时 scene B `opacity 0→1` | scene A 的核心元素 **morph 进** B(位置/大小/颜色平滑变换) |
117
+ | 每个 scene 独立 layout,元素出现/消失 | 元素在屏幕上**持续存在**,只是位置和形态在变 |
118
+ | `keepMounted=false`,scene 切换瞬间组件被卸载 | hero 用 `keepMounted=true`,跨 scene 共享 DOM 节点 |
119
+ | 字幕条/数据卡片各自 fade in fade out | 字幕条作为画面唯一的"非 hero" 入场,hold 后**配合 hero 的运动一起退出** |
120
+
121
+ 实现层面:
122
+ - **共享元素跨 scene** → 把 hero 提到 `<NarrationStage>` 直接子级,**不放在任何 `<Scene>` 里**
123
+ - 用 `useNarration()` hook 在 hero 里读 `time`、`scene`、`isCueTriggered`,自己根据当前时间决定形态
124
+ - `<Scene>` 只用来管那些只在该段出现的辅助元素(数据卡、引用块等),并且**这些辅助元素也不要硬切**——出场用 expoOut + stagger,退场用 fade overlap 跟下一段叠
125
+
126
+ ### 第三条 · 每一帧画面都必须有运动
127
+
128
+ **自检方法**:在录制中**任意截一帧**(不是 cue 触发那一秒)。
129
+ - 如果画面看起来「**完全静止**」→ 错。回去加底层运动(background drift / hero subtle scale / camera pan / parallax)
130
+ - 永远有一个**底层运动**在跑(即使不是焦点):
131
+ - hero element 的 `scale: 1 ↔ 1.02` 5 秒呼吸循环
132
+ - 背景 `translateX: 0 ↔ -20px` 缓慢漂移
133
+ - 数据卡片入场后保留 `translateY` 微抖(Perlin noise)
134
+ - 一个完全静止的画面 = PowerPoint slop
135
+
136
+ ### 第四条 · Easing / Stagger / Hold 是底线
137
+
138
+ | 项 | 必须 | 禁止 |
139
+ |---|---|---|
140
+ | Easing | `expoOut` 主轴(`cubic-bezier(0.16, 1, 0.3, 1)`),`overshoot` 强调,`spring` 落位 | `linear`、`ease`、CSS 默认 |
141
+ | 多元素入场 | 30ms stagger(每个晚 30ms 进) | 一刀切全部出现 |
142
+ | 关键 cue 前 | hold 0.3-0.5s 让观众"看见"(前一段元素先静止 0.3s,再触发 cue) | 一段说完无缝切下一段 |
143
+ | 收尾 | 戛然而止,最后一帧 hold 1s | fade to black |
144
+
145
+ 详细规则参考 `animation-best-practices.md` 的 §1-§4。
146
+
147
+ ### 自检 · 第一观众反应
148
+
149
+ 做完拿给一个没看过的人看(或自己 24 小时后再看),**他们的第一反应**是什么?
150
+
151
+ | 反应 | 评级 | 行动 |
152
+ |---|---|---|
153
+ | 「这是带配音的 PPT」 | 失败 | 回去重做 |
154
+ | 「画面跟着声音在切换」 | 不及格 | 缺连续叙事,hero element 不存在或没贯穿 |
155
+ | 「这个东西在动」 | 合格 | 但没记忆点 |
156
+ | 「我想看完」 | 良 | 节奏对了 |
157
+ | 「这一段我想截图」 | great | 你做到了 |
158
+
159
+ ---
160
+
161
+ ## 工作流(高层)
162
+
163
+ ```
164
+ ┌──────────────────────────┐
165
+ │ 解说稿 .md(## scene + │
166
+ │ [[cue:xx]] 标关键句) │
167
+ └──────────────┬───────────┘
168
+
169
+ narrate-pipeline.mjs
170
+
171
+
172
+ ┌──────────────────────────────┐
173
+ │ voiceover.mp3 (拼接的整段) │
174
+ │ timeline.json (实测时长) │
175
+ └──────────────┬───────────────┘
176
+
177
+ ┌────────────┴────────────┐
178
+ ▼ ▼
179
+ ┌─────────────────┐ ┌──────────────────┐
180
+ │ HTML 动画 │ │ 录制 MP4 + 混音 │
181
+ │ (NarrationStage)│ │ render-narration │
182
+ │ 实播带 audio 同步│ │ → 最终发布 MP4 │
183
+ └─────────────────┘ └──────────────────┘
184
+ 交付形态 1 交付形态 2
185
+ ```
186
+
187
+ ## 解说稿格式
188
+
189
+ 放在项目目录下任意位置,文件名建议 `script.md`:
190
+
191
+ ```markdown
192
+ ---
193
+ title: 什么是 LLM
194
+ voice: S_JSdgdWk22 # 可选,覆盖 .env 默认音色
195
+ speed: 1.0 # 可选,0.5-2.0
196
+ gap: 0.4 # 段间静音秒数,默认 0.3
197
+ ---
198
+
199
+ ## intro
200
+ 大家好,今天我们 5 分钟讲清楚 LLM 是什么。
201
+
202
+ ## what-is
203
+ LLM 全称 Large Language Model,[[cue:bigmodel]]它是一个有几千亿参数的神经网络。
204
+ 本质是一个文字接龙的预测器。
205
+
206
+ ## demo
207
+ 比如你输入「今天天气」,[[cue:input]]模型会预测下一个字最可能是什么。
208
+ [[cue:predict]]也许是「真好」,也许是「不错」。
209
+ ```
210
+
211
+ **规则**:
212
+ - 段标题 `## scene-id` 是英文/数字 + 连字符(如 `## what-is`、`## scene-1`)
213
+ - `[[cue:xx]]` 标在**关键句中间**——脚本运行时会在该位置切割文本,cue 之后那一刻就是画面的触发点
214
+ - cue id 在动画 HTML 里用 `<Cue id="xx">` 监听
215
+ - 写解说时**关注节奏 + 短句**,长句 TTS 出来会平淡
216
+
217
+ ## timeline.json schema
218
+
219
+ ```ts
220
+ {
221
+ title: string,
222
+ voice: string | null,
223
+ speed: number,
224
+ gap: number,
225
+ totalDuration: number, // 整段 voiceover.mp3 的实测秒数
226
+ voiceover: 'voiceover.mp3', // 相对 timeline.json 的路径
227
+ scenes: [
228
+ {
229
+ id: string,
230
+ start: number, // 该段在整段音频里的开始时间
231
+ end: number,
232
+ duration: number,
233
+ audio: 'audio/<id>.mp3', // 该段单独音频(合并前的子段已 concat)
234
+ text: string, // 已剥离 [[cue:xx]] 标记的整段文本
235
+ // chunks 是字幕显示的源——每个 chunk 是被 cue 切开的子段,含 TTS 实测时间窗
236
+ chunks: [
237
+ {
238
+ text: string, // 子段文本
239
+ start: number, // 段内相对时间
240
+ end: number,
241
+ absoluteStart: number, // 整轨绝对时间(对齐 voiceover.mp3)
242
+ absoluteEnd: number,
243
+ }
244
+ ],
245
+ cues: [
246
+ {
247
+ id: string,
248
+ offset: number, // 段内相对时间
249
+ absoluteTime: number, // 整段时间轴上的绝对时间
250
+ }
251
+ ]
252
+ }
253
+ ]
254
+ }
255
+ ```
256
+
257
+ `absoluteTime` 和 `absoluteStart/End` 都是**真实测出来的**——pipeline 把段内文本按 cue 切成子段分别 TTS,时间 = 累加前面子段的实测时长。**不是按字符数线性估算的近似值**。
258
+
259
+ ## 字幕(Subtitles)
260
+
261
+ > **字幕是默认带的**——长解说视频没字幕,留存率会显著下降。NarrationStage 提供 `<Subtitles />` 开箱即用。
262
+
263
+ ### 用法(一行)
264
+
265
+ ```jsx
266
+ const { NarrationStage, Subtitles } = NarrationStageLib;
267
+ <NarrationStage timeline={TIMELINE} audioSrc="...">
268
+ {/* 你的 hero / scene 内容 */}
269
+ <Subtitles /> {/* ← 自动从 timeline.scenes[].chunks 取活动文本 */}
270
+ </NarrationStage>
271
+ ```
272
+
273
+ ### 视觉规则(B 站风 · 反 PowerPoint)
274
+
275
+ | 项 | 规则 | 反例 |
276
+ |---|---|---|
277
+ | 背景 | **无背景**(不要黑色横条不要 backdrop-blur)| 半透明黑底 + blur = 字幕条压住画面 = PPT 感 |
278
+ | 字色 | **浅底用深墨 `#1a1a1a` + 白光晕**;深底用白字 + 黑光晕 | 浅底白字+黑描边 = 字糊 |
279
+ | 字号 | 32px(1080p 视频)| <24px 看不清,>40px 抢主视觉 |
280
+ | 字体 | `PingFang SC` / `Noto Sans SC`(无衬线,B 站标准)| 衬线字体 = 像电影字幕 |
281
+ | 位置 | bottom: 90px(不贴边)| 贴底边显得廉价 |
282
+ | 单行长度 | **≤ 12-13 字**(中英混合时英文按 0.5 字算)| >15 字一行手机端读不完 |
283
+ | 切句规则 | **绝不跨句号截断**:先按 `。!?` 切句,每句再按 `,、;:` 合并到 ≤maxLen | 按字数硬切,把「这是好的」切成「这是好」+「的」 |
284
+
285
+ `<Subtitles />` 默认按以上规则跑,不需要传 props。深底场景:`<Subtitles color="#fff" haloColor="rgba(0,0,0,0.85)" />`。
286
+
287
+ ### 切句算法(已在 narration_stage.jsx 内置)
288
+
289
+ ```js
290
+ splitChunkToLines(text, maxLen = 13)
291
+ // 1. 强标点切句(。!?\n)
292
+ // 2. 每句 ≤ maxLen 直接保留
293
+ // 3. 否则按弱标点(,、;:)切片,合并到 ≤ maxLen
294
+ // 4. 兜底硬切(罕见)
295
+ // 中英混合:英文/数字按 0.5 字算视觉宽度
296
+ ```
297
+
298
+ 如果 chunk 切完后某行明显太长或太短,**改解说稿里 cue 位置**(cue 把段切得更细),不要在前端调切句逻辑。
299
+
300
+ ## NarrationStage API
301
+
302
+ ```jsx
303
+ import 'assets/narration_stage.jsx';
304
+ const { NarrationStage, Scene, Cue, useNarration } = NarrationStageLib;
305
+
306
+ <NarrationStage
307
+ timeline={TIMELINE} // timeline.json 内容
308
+ audioSrc="_narration/voiceover.mp3" // 相对当前 HTML 的路径
309
+ width={1920} height={1080}
310
+ background="#f5f1e8"
311
+ controls={true} // 实播时显示底部播放条
312
+ >
313
+ {/* hero element:跨 scene 持续存在 —— 直接放在 NarrationStage 子级 */}
314
+ <HeroAnchor />
315
+
316
+ {/* scene 内辅助元素:只在该段出现 */}
317
+ <Scene id="intro">
318
+ <Cue id="bigmodel">{(triggered, progress) => (
319
+ <SomeElement style={{ opacity: progress }} />
320
+ )}</Cue>
321
+ </Scene>
322
+ </NarrationStage>
323
+ ```
324
+
325
+ **Hooks**:
326
+ - `useNarration()` 返回 `{ time, scene, sceneTime, isCueTriggered, cueProgress }`
327
+ - 在自定义组件里直接读,不需要传 props
328
+
329
+ **Scene 组件**:
330
+ - 默认只在 `scene.id === id` 时挂载
331
+ - 加 `keepMounted` 持续挂载(跨 scene 动画连续时用)
332
+
333
+ **Cue 组件**:
334
+ - children 必须是 `(triggered, progress) => ReactNode`
335
+ - progress 是 cue 触发后 0→1 的渐进值(默认 0.6s ramp)
336
+
337
+ ## 时间源(双轨)
338
+
339
+ NarrationStage 自动检测 `window.__recording`:
340
+ - **实播模式**(默认):跟随 audio 元素的 currentTime,用户暂停/拖动 seek 都能同步
341
+ - **录视频模式**(render-video.js 设置 `window.__recording = true`):rAF wall-clock 自驱动从 0 开始,暴露 `window.__seek(t)` 给 render-video.js 复位
342
+
343
+ ## 三个脚本
344
+
345
+ | 脚本 | 输入 | 输出 |
346
+ |---|---|---|
347
+ | `scripts/tts-doubao.mjs` | 单段文本 | 单个 mp3 + 实测时长 |
348
+ | `scripts/narrate-pipeline.mjs` | 解说稿 .md | voiceover.mp3 + timeline.json |
349
+ | `scripts/mix-voiceover.sh` | 视频 + voiceover.mp3 [+ BGM] | 带音频的 MP4 |
350
+ | `scripts/render-narration.sh` | 解说 HTML + timeline.json | 最终 MP4(录制 + 混音一条龙)|
351
+
352
+ ## .env 配置
353
+
354
+ skill 根目录下 `.env`(已 gitignore):
355
+
356
+ ```
357
+ DOUBAO_TTS_API_KEY=<your_key>
358
+ DOUBAO_TTS_VOICE_ID=<your_clone_voice_id>
359
+ DOUBAO_TTS_CLUSTER=volcano_icl
360
+ DOUBAO_TTS_ENDPOINT=https://openspeech.bytedance.com/api/v1/tts
361
+ ```
362
+
363
+ 参考 `.env.example` 模板。豆包语音克隆音色 ID 在火山引擎控制台获取。
364
+
365
+ ## 标准工作流(10 步)
366
+
367
+ 1. **写解说稿**:解说稿是源代码。先把整段口播写完整,标段标题 `## scene-id`,关键句前加 `[[cue:xx]]`
368
+ 2. **跑 narrate-pipeline**:`node scripts/narrate-pipeline.mjs --script script.md --out-dir _narration`
369
+ 3. **听整段 voiceover.mp3**:节奏不对回去改稿。**这一步决定整片质量上限**
370
+ 4. **🛑 设计前先回答铁律**:hero element 是什么?它在每段是什么状态?跨场景怎么 morph?答不上不要写代码
371
+ 5. **写动画 HTML**:用 NarrationStage + 一个或几个 hero element 跨 scene 演戏
372
+ 6. **实播预览**:浏览器打开 HTML,点 ▶ Play,听画面+解说同步
373
+ 7. **第一观众自检**:用上面「自检 · 第一观众反应」表打分。失败回到 Step 4 重做
374
+ 8. **录视频**:`bash scripts/render-narration.sh demo.html --timeline=_narration/timeline.json`(自动录无声 MP4 + 混入 voiceover)
375
+ 9. **可选 BGM**:在 render-narration 加 `--bgm-mood=educational`(或 tech / tutorial 等)
376
+ 10. **交付**:浏览器 HTML(实时演示用)+ 最终 MP4(发布用)
377
+
378
+ ## 异常处理
379
+
380
+ | 问题 | 解决 |
381
+ |---|---|
382
+ | TTS API 报错 | 检查 .env 里 `DOUBAO_TTS_API_KEY` 是否正确 |
383
+ | 某段音频明显比脚本长/短 | 该段文本里有奇怪标点或 emoji,TTS 解析异常 → 改稿 |
384
+ | cue absoluteTime 不准 | 段内子段拼接时 ffmpeg 有问题 → 检查 mp3 编码一致性 |
385
+ | 录视频结果有黑屏 | render-video.js 没拿到 `window.__ready` 信号 → 检查 NarrationStage 是否正常挂载 |
386
+ | 录视频画面卡顿 | 动画里有重 layout(大量 box-shadow / blur)→ 简化或预合成 |
387
+ | 实播音画不同步 | audio 元素加载延迟 → 加 `preload="auto"` 或本地预加载 |
388
+
389
+ ## 何时不用这套 pipeline
390
+
391
+ - **<60s 短动画**:直接做无声动画 + 后期配音(add-music.sh + 一段单独 TTS)即可,不需要 timeline 驱动
392
+ - **纯 BGM 视频**:用 `add-music.sh` 加预设 BGM
393
+ - **真人录音替换 TTS**:把 `voiceover.mp3` 替换成真人录音,timeline 自己手写或用 ffprobe 测段时长 + 工具脚本生成 → 流程其余部分通用
394
+
395
+ ---
396
+
397
+ **最后一次提醒**:写代码前回到铁律。**别做带配音的 PowerPoint**。