kasaframe 0.0.0-stage → 0.1.3

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 (442) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +148 -0
  3. package/README.md +92 -2
  4. package/app/package.json +12 -0
  5. package/app/server/engine.ts +533 -0
  6. package/app/server/main.ts +209 -0
  7. package/app/web/env.d.ts +2 -0
  8. package/app/web/icons.ts +31 -0
  9. package/app/web/index.html +21 -0
  10. package/app/web/main.ts +1195 -0
  11. package/app/web/style.css +463 -0
  12. package/bin/hooks.mjs +64 -0
  13. package/bin/kf.mjs +32 -0
  14. package/docs/AGENTS.md +286 -0
  15. package/music/README.md +37 -0
  16. package/package.json +44 -4
  17. package/packages/adapters/package.json +36 -0
  18. package/packages/adapters/src/css.ts +11 -0
  19. package/packages/adapters/src/gsap.ts +26 -0
  20. package/packages/adapters/src/index.ts +9 -0
  21. package/packages/adapters/src/lottie.ts +22 -0
  22. package/packages/adapters/src/media.ts +59 -0
  23. package/packages/adapters/src/page.ts +229 -0
  24. package/packages/adapters/src/project.ts +214 -0
  25. package/packages/adapters/src/react.ts +36 -0
  26. package/packages/adapters/src/svelte.ts +22 -0
  27. package/packages/adapters/src/three.ts +18 -0
  28. package/packages/adapters/src/vue.ts +27 -0
  29. package/packages/check/package.json +19 -0
  30. package/packages/check/src/check.ts +280 -0
  31. package/packages/check/src/cli.ts +70 -0
  32. package/packages/check/src/image.ts +146 -0
  33. package/packages/check/src/index.ts +9 -0
  34. package/packages/check/src/ocr.swift +37 -0
  35. package/packages/check/src/probe.ts +328 -0
  36. package/packages/check/src/report.ts +44 -0
  37. package/packages/check/src/rules/assets.ts +45 -0
  38. package/packages/check/src/rules/beats.ts +212 -0
  39. package/packages/check/src/rules/camera.ts +217 -0
  40. package/packages/check/src/rules/captions.ts +49 -0
  41. package/packages/check/src/rules/flash.ts +235 -0
  42. package/packages/check/src/rules/frames.ts +136 -0
  43. package/packages/check/src/rules/layout.ts +281 -0
  44. package/packages/check/src/rules/page.ts +87 -0
  45. package/packages/check/src/rules/runs.ts +20 -0
  46. package/packages/check/src/rules/text.ts +326 -0
  47. package/packages/check/src/scan.ts +240 -0
  48. package/packages/check/src/serve.ts +67 -0
  49. package/packages/check/src/types.ts +80 -0
  50. package/packages/check/src/video.ts +137 -0
  51. package/packages/cli/package.json +30 -0
  52. package/packages/cli/src/blur.ts +80 -0
  53. package/packages/cli/src/browser.ts +203 -0
  54. package/packages/cli/src/command.ts +44 -0
  55. package/packages/cli/src/commands/app.ts +25 -0
  56. package/packages/cli/src/commands/beats.ts +36 -0
  57. package/packages/cli/src/commands/bench.ts +123 -0
  58. package/packages/cli/src/commands/blender.ts +293 -0
  59. package/packages/cli/src/commands/check.ts +25 -0
  60. package/packages/cli/src/commands/direct.ts +210 -0
  61. package/packages/cli/src/commands/doctor.ts +30 -0
  62. package/packages/cli/src/commands/gen.ts +173 -0
  63. package/packages/cli/src/commands/look.ts +46 -0
  64. package/packages/cli/src/commands/lyrics.ts +157 -0
  65. package/packages/cli/src/commands/make.ts +1121 -0
  66. package/packages/cli/src/commands/music.ts +78 -0
  67. package/packages/cli/src/commands/narrate.ts +238 -0
  68. package/packages/cli/src/commands/new.ts +185 -0
  69. package/packages/cli/src/commands/preview.ts +43 -0
  70. package/packages/cli/src/commands/render.ts +250 -0
  71. package/packages/cli/src/commands/series.ts +110 -0
  72. package/packages/cli/src/commands/setup.ts +102 -0
  73. package/packages/cli/src/commands/sheet.ts +114 -0
  74. package/packages/cli/src/commands/skill.ts +43 -0
  75. package/packages/cli/src/commands/still.ts +40 -0
  76. package/packages/cli/src/commands/theme.ts +172 -0
  77. package/packages/cli/src/commands/transitions.ts +40 -0
  78. package/packages/cli/src/deps.ts +122 -0
  79. package/packages/cli/src/ffmpeg.ts +81 -0
  80. package/packages/cli/src/index.ts +8 -0
  81. package/packages/cli/src/kf.ts +64 -0
  82. package/packages/cli/src/lock.ts +72 -0
  83. package/packages/cli/src/mix.ts +131 -0
  84. package/packages/cli/src/out.ts +13 -0
  85. package/packages/cli/src/pool.ts +34 -0
  86. package/packages/cli/src/segments.ts +402 -0
  87. package/packages/cli/src/serve.ts +124 -0
  88. package/packages/clock/package.json +14 -0
  89. package/packages/clock/src/index.ts +25 -0
  90. package/packages/clock/src/install.ts +351 -0
  91. package/packages/clock/src/types.ts +45 -0
  92. package/packages/core/package.json +9 -0
  93. package/packages/core/src/beats.ts +283 -0
  94. package/packages/core/src/ease.ts +87 -0
  95. package/packages/core/src/frame.ts +99 -0
  96. package/packages/core/src/index.ts +27 -0
  97. package/packages/core/src/project.ts +157 -0
  98. package/packages/core/src/rand.ts +56 -0
  99. package/packages/core/src/spring.ts +52 -0
  100. package/packages/core/src/style.ts +100 -0
  101. package/packages/core/src/time.ts +88 -0
  102. package/packages/director/package.json +23 -0
  103. package/packages/director/src/assemble.ts +361 -0
  104. package/packages/director/src/brief.ts +122 -0
  105. package/packages/director/src/catalog.ts +49 -0
  106. package/packages/director/src/content.ts +343 -0
  107. package/packages/director/src/fallback.ts +58 -0
  108. package/packages/director/src/index.ts +13 -0
  109. package/packages/director/src/pattern.ts +90 -0
  110. package/packages/director/src/patterns/fill/cells.ts +115 -0
  111. package/packages/director/src/patterns/formula/stack.ts +93 -0
  112. package/packages/director/src/patterns/util.ts +58 -0
  113. package/packages/director/src/scene.ts +62 -0
  114. package/packages/director/src/select.ts +163 -0
  115. package/packages/director/src/transitions.ts +115 -0
  116. package/packages/gen/PROVIDERS.md +90 -0
  117. package/packages/gen/package.json +9 -0
  118. package/packages/gen/src/ask.ts +132 -0
  119. package/packages/gen/src/audio.ts +91 -0
  120. package/packages/gen/src/blender.ts +54 -0
  121. package/packages/gen/src/capabilities.ts +151 -0
  122. package/packages/gen/src/generate.ts +206 -0
  123. package/packages/gen/src/image/codex.ts +117 -0
  124. package/packages/gen/src/image/og.ts +133 -0
  125. package/packages/gen/src/index.ts +26 -0
  126. package/packages/gen/src/keys.ts +86 -0
  127. package/packages/gen/src/media.ts +150 -0
  128. package/packages/gen/src/music/elevenlabs.ts +41 -0
  129. package/packages/gen/src/music/index.ts +120 -0
  130. package/packages/gen/src/music/library.ts +73 -0
  131. package/packages/gen/src/music/lyria.ts +52 -0
  132. package/packages/gen/src/music/types.ts +28 -0
  133. package/packages/gen/src/plan.ts +106 -0
  134. package/packages/gen/src/registry.ts +54 -0
  135. package/packages/gen/src/seam.ts +103 -0
  136. package/packages/gen/src/tts/dashscope.ts +64 -0
  137. package/packages/gen/src/tts/elevenlabs.ts +84 -0
  138. package/packages/gen/src/tts/gemini.ts +73 -0
  139. package/packages/gen/src/tts/index.ts +241 -0
  140. package/packages/gen/src/tts/local.ts +42 -0
  141. package/packages/gen/src/tts/types.ts +44 -0
  142. package/packages/gen/src/types.ts +90 -0
  143. package/packages/gen/src/video/fal.ts +140 -0
  144. package/packages/gen/src/video/h3.ts +112 -0
  145. package/packages/gen/src/video/http.ts +44 -0
  146. package/packages/gen/src/video/ltx.ts +60 -0
  147. package/packages/gen/src/video/minimax.ts +55 -0
  148. package/packages/gen/src/video/veo.ts +71 -0
  149. package/packages/jizura/package.json +16 -0
  150. package/packages/jizura/src/deny.ts +73 -0
  151. package/packages/jizura/src/index.ts +7 -0
  152. package/packages/jizura/src/install.ts +269 -0
  153. package/packages/jizura/src/layer.ts +325 -0
  154. package/packages/jizura/src/lyrics.ts +81 -0
  155. package/packages/jizura/src/pin.ts +8 -0
  156. package/packages/jizura/src/vendor.ts +140 -0
  157. package/packages/jizura/src/vite.ts +63 -0
  158. package/packages/jizura/vendor/JIZURA_LICENSE.txt +21 -0
  159. package/packages/jizura/vendor/NOTICE +43 -0
  160. package/packages/jizura/vendor/engine.json +47 -0
  161. package/packages/jizura/vendor/fonts/BlackHanSans-Regular.woff2 +0 -0
  162. package/packages/jizura/vendor/fonts/DotGothic16-Regular.woff2 +0 -0
  163. package/packages/jizura/vendor/fonts/GowunBatang-Bold.woff2 +0 -0
  164. package/packages/jizura/vendor/fonts/IBMPlexMono-Medium.ttf +0 -0
  165. package/packages/jizura/vendor/fonts/IBMPlexMono-SemiBold.ttf +0 -0
  166. package/packages/jizura/vendor/fonts/NotoSansKR-VF.woff2 +0 -0
  167. package/packages/jizura/vendor/fonts/NotoSerifKR-VF.woff2 +0 -0
  168. package/packages/jizura/vendor/fonts/OFL-blackhansans.txt +93 -0
  169. package/packages/jizura/vendor/fonts/OFL-dotgothic16.txt +93 -0
  170. package/packages/jizura/vendor/fonts/OFL-gowunbatang.txt +94 -0
  171. package/packages/jizura/vendor/fonts/OFL-ibmplexmono.txt +93 -0
  172. package/packages/jizura/vendor/fonts/OFL-notosanskr.txt +93 -0
  173. package/packages/jizura/vendor/fonts/OFL-notoserifkr.txt +94 -0
  174. package/packages/jizura/vendor/fonts/fonts.json +52 -0
  175. package/packages/jizura/vendor/jizura_engine.js +35024 -0
  176. package/packages/motion/README.md +153 -0
  177. package/packages/motion/package.json +30 -0
  178. package/packages/motion/src/camera.ts +97 -0
  179. package/packages/motion/src/captions.ts +487 -0
  180. package/packages/motion/src/enter.ts +128 -0
  181. package/packages/motion/src/hangul.ts +129 -0
  182. package/packages/motion/src/impact.ts +100 -0
  183. package/packages/motion/src/index.ts +17 -0
  184. package/packages/motion/src/moves/brushWipe.ts +103 -0
  185. package/packages/motion/src/moves/cloneArray.ts +111 -0
  186. package/packages/motion/src/moves/curtains.ts +81 -0
  187. package/packages/motion/src/moves/dress.ts +191 -0
  188. package/packages/motion/src/moves/echoStack.ts +70 -0
  189. package/packages/motion/src/moves/fit.ts +70 -0
  190. package/packages/motion/src/moves/flood.ts +61 -0
  191. package/packages/motion/src/moves/ghostStack.ts +88 -0
  192. package/packages/motion/src/moves/gridFloor.ts +100 -0
  193. package/packages/motion/src/moves/imageSwarm.ts +113 -0
  194. package/packages/motion/src/moves/index.ts +38 -0
  195. package/packages/motion/src/moves/irisBlades.ts +113 -0
  196. package/packages/motion/src/moves/karaokeLine.ts +108 -0
  197. package/packages/motion/src/moves/ledBoard.ts +94 -0
  198. package/packages/motion/src/moves/liquidTab.ts +72 -0
  199. package/packages/motion/src/moves/markerWrite.ts +63 -0
  200. package/packages/motion/src/moves/menu.ts +138 -0
  201. package/packages/motion/src/moves/morphBox.ts +96 -0
  202. package/packages/motion/src/moves/neonSign.ts +78 -0
  203. package/packages/motion/src/moves/panelPop.ts +78 -0
  204. package/packages/motion/src/moves/paperTear.ts +75 -0
  205. package/packages/motion/src/moves/path.ts +64 -0
  206. package/packages/motion/src/moves/pathText.ts +107 -0
  207. package/packages/motion/src/moves/pointSphere.ts +109 -0
  208. package/packages/motion/src/moves/ransomLetters.ts +73 -0
  209. package/packages/motion/src/moves/shapeMorph.ts +143 -0
  210. package/packages/motion/src/moves/slamWords.ts +96 -0
  211. package/packages/motion/src/moves/sparkTrail.ts +130 -0
  212. package/packages/motion/src/moves/speedLines.ts +91 -0
  213. package/packages/motion/src/moves/splitFlap.ts +149 -0
  214. package/packages/motion/src/moves/stepWords.ts +128 -0
  215. package/packages/motion/src/moves/strikeOut.ts +98 -0
  216. package/packages/motion/src/moves/sunburst.ts +58 -0
  217. package/packages/motion/src/moves/tickerRows.ts +91 -0
  218. package/packages/motion/src/moves/tokenPicker.ts +115 -0
  219. package/packages/motion/src/moves/truchet.ts +85 -0
  220. package/packages/motion/src/moves/wordWall.ts +78 -0
  221. package/packages/motion/src/moves/worldRoll.ts +32 -0
  222. package/packages/motion/src/particles.ts +102 -0
  223. package/packages/motion/src/react/index.tsx +21 -0
  224. package/packages/motion/src/react/parts.tsx +431 -0
  225. package/packages/motion/src/react/time.tsx +97 -0
  226. package/packages/motion/src/text.ts +103 -0
  227. package/packages/motion/src/transition.ts +82 -0
  228. package/packages/motion/src/transition3d/cards.ts +65 -0
  229. package/packages/motion/src/transition3d/chain.ts +84 -0
  230. package/packages/motion/src/transition3d/dive.ts +181 -0
  231. package/packages/motion/src/transition3d/fold.ts +110 -0
  232. package/packages/motion/src/transition3d/gl.ts +219 -0
  233. package/packages/motion/src/transition3d/index.ts +235 -0
  234. package/packages/motion/src/transition3d/live.ts +70 -0
  235. package/packages/motion/src/transition3d/portal.ts +115 -0
  236. package/packages/motion/src/transition3d/react.tsx +29 -0
  237. package/packages/motion/src/transition3d/rig.ts +600 -0
  238. package/packages/motion/src/transition3d/shatter.ts +104 -0
  239. package/packages/motion/src/transition3d/space.ts +173 -0
  240. package/packages/motion/src/transition3d/whip.ts +78 -0
  241. package/packages/motion/src/transition3d/world.ts +737 -0
  242. package/packages/motion/src/transition3d/zoomOut.ts +114 -0
  243. package/packages/motion/src/transitions2d/catalog.ts +127 -0
  244. package/packages/motion/src/transitions2d/css.d.ts +2 -0
  245. package/packages/motion/src/transitions2d/cult-ui/LICENSE.md +9 -0
  246. package/packages/motion/src/transitions2d/cult-ui/RollingNumber.tsx +43 -0
  247. package/packages/motion/src/transitions2d/gl-transitions/LICENSE +25 -0
  248. package/packages/motion/src/transitions2d/gl-transitions/shaders.ts +1931 -0
  249. package/packages/motion/src/transitions2d/index.ts +2 -0
  250. package/packages/motion/src/transitions2d/kokonutui/LICENSE +21 -0
  251. package/packages/motion/src/transitions2d/kokonutui/MatrixText.css +16 -0
  252. package/packages/motion/src/transitions2d/kokonutui/MatrixText.tsx +94 -0
  253. package/packages/motion/src/transitions2d/magicui/HyperText.css +15 -0
  254. package/packages/motion/src/transitions2d/magicui/HyperText.tsx +115 -0
  255. package/packages/motion/src/transitions2d/magicui/LICENSE.md +21 -0
  256. package/packages/motion/src/transitions2d/magicui/MorphingText.css +25 -0
  257. package/packages/motion/src/transitions2d/magicui/MorphingText.tsx +130 -0
  258. package/packages/motion/src/transitions2d/magicui/WordRotate.tsx +42 -0
  259. package/packages/motion/src/transitions2d/react.ts +13 -0
  260. package/packages/motion/src/transitions2d/skiper-ui/ClipDiv.css +39 -0
  261. package/packages/motion/src/transitions2d/skiper-ui/ClipDiv.tsx +32 -0
  262. package/packages/motion/src/transitions2d/smoothui/LICENSE +21 -0
  263. package/packages/motion/src/transitions2d/smoothui/SharedAxisY.tsx +50 -0
  264. package/packages/motion/src/transitions2d/smoothui/TextMorph.tsx +90 -0
  265. package/packages/motion/src/transitions2d/smoothui/shaders.ts +223 -0
  266. package/packages/motion/src/transitions2d/unlumen/LICENSE +21 -0
  267. package/packages/motion/src/transitions2d/unlumen/ScrambleText.tsx +114 -0
  268. package/packages/motion/src/transitions2d/vengeance-ui/LICENSE +21 -0
  269. package/packages/motion/src/transitions2d/vengeance-ui/MorphText.css +69 -0
  270. package/packages/motion/src/transitions2d/vengeance-ui/MorphText.tsx +45 -0
  271. package/packages/motion/src/type.ts +131 -0
  272. package/packages/motion/src/ui.ts +172 -0
  273. package/packages/patterns/package.json +15 -0
  274. package/packages/patterns/src/bars/rank.ts +119 -0
  275. package/packages/patterns/src/before-after/shrink.ts +127 -0
  276. package/packages/patterns/src/before-after/strike.ts +125 -0
  277. package/packages/patterns/src/code/terminal.ts +133 -0
  278. package/packages/patterns/src/compare/bars.ts +142 -0
  279. package/packages/patterns/src/compare/duel.ts +103 -0
  280. package/packages/patterns/src/end/lockup.ts +85 -0
  281. package/packages/patterns/src/end/slam.ts +91 -0
  282. package/packages/patterns/src/flow/graph.ts +250 -0
  283. package/packages/patterns/src/hook-number/counter.ts +101 -0
  284. package/packages/patterns/src/hook-number/roll.ts +179 -0
  285. package/packages/patterns/src/hook-number/slam.ts +91 -0
  286. package/packages/patterns/src/index.ts +38 -0
  287. package/packages/patterns/src/kit.ts +449 -0
  288. package/packages/patterns/src/limit/gauge.ts +117 -0
  289. package/packages/patterns/src/list/cards.ts +131 -0
  290. package/packages/patterns/src/list/cycle.ts +22 -0
  291. package/packages/patterns/src/media/panels.ts +100 -0
  292. package/packages/patterns/src/objects.ts +234 -0
  293. package/packages/patterns/src/quote/karaoke.ts +126 -0
  294. package/packages/patterns/src/quote/slam.ts +22 -0
  295. package/packages/patterns/src/screen/focus.ts +85 -0
  296. package/packages/patterns/src/steps/path.ts +137 -0
  297. package/packages/patterns/src/steps/stack.ts +111 -0
  298. package/packages/patterns/src/term-reveal/chips.ts +92 -0
  299. package/packages/patterns/src/term-reveal/expand.ts +127 -0
  300. package/packages/patterns/src/timeline/axis.ts +144 -0
  301. package/packages/patterns/src/title/mask.ts +85 -0
  302. package/packages/patterns/src/title/slam.ts +23 -0
  303. package/packages/patterns/src/toggle-sim/switch.ts +92 -0
  304. package/packages/patterns/src/trend/columns.ts +108 -0
  305. package/packages/patterns/src/trend/draw.ts +140 -0
  306. package/packages/patterns/src/types.ts +67 -0
  307. package/packages/patterns/src/words/moves.ts +42 -0
  308. package/packages/patterns/src/words/slam.ts +4 -0
  309. package/packages/plan/package.json +15 -0
  310. package/packages/plan/src/asks.ts +256 -0
  311. package/packages/plan/src/brief.ts +383 -0
  312. package/packages/plan/src/captions.ts +78 -0
  313. package/packages/plan/src/detect.ts +93 -0
  314. package/packages/plan/src/index.ts +27 -0
  315. package/packages/plan/src/layout.ts +176 -0
  316. package/packages/plan/src/llm.ts +172 -0
  317. package/packages/plan/src/look.ts +222 -0
  318. package/packages/plan/src/plan.ts +179 -0
  319. package/packages/plan/src/request.ts +55 -0
  320. package/packages/plan/src/series.ts +76 -0
  321. package/packages/plan/src/studio.ts +53 -0
  322. package/packages/plan/src/templates.ts +42 -0
  323. package/packages/plan/src/themes.ts +48 -0
  324. package/packages/plan/src/types.ts +157 -0
  325. package/packages/studio/package.json +12 -0
  326. package/packages/studio/src/index.ts +1 -0
  327. package/packages/studio/src/plugin.ts +236 -0
  328. package/packages/studio/src/ui/main.ts +503 -0
  329. package/packages/studio/src/ui/studio.css +165 -0
  330. package/packages/studio/src/ui/timeline.ts +317 -0
  331. package/packages/themes/kit/THEME-MAKE.md +68 -0
  332. package/packages/themes/kit/THEME.md +30 -0
  333. package/packages/themes/kit/briefs/og-intro-15s/brief.json +16 -0
  334. package/packages/themes/kit/briefs/og-intro-15s/facts.ts +29 -0
  335. package/packages/themes/kit/briefs/og-intro-15s/logo.svg +12 -0
  336. package/packages/themes/kit/effects.ts +5 -0
  337. package/packages/themes/kit/sample/index.html +11 -0
  338. package/packages/themes/kit/sample/main.ts +9 -0
  339. package/packages/themes/kit/sample/scenes/scene.ts +15 -0
  340. package/packages/themes/package.json +19 -0
  341. package/packages/themes/src/factory.ts +296 -0
  342. package/packages/themes/src/fx.ts +14 -0
  343. package/packages/themes/src/index.ts +114 -0
  344. package/packages/themes/src/slotkit.ts +79 -0
  345. package/packages/themes/src/slots.ts +46 -0
  346. package/packages/themes/src/stage3d.ts +197 -0
  347. package/packages/themes/src/types.ts +58 -0
  348. package/presets/kawaii-pastel.json +94 -0
  349. package/presets/neutral-dark.json +82 -0
  350. package/presets/og.json +98 -0
  351. package/series/og-shorts.json +14 -0
  352. package/skills/kasaframe/SKILL.md +33 -0
  353. package/templates/_shared/project/index.html +11 -0
  354. package/templates/_shared/project/lib/react.ts +22 -0
  355. package/templates/_shared/project/lib/stage.ts +292 -0
  356. package/templates/_shared/project/main.ts +9 -0
  357. package/templates/_shared/scenes/default.ts +21 -0
  358. package/templates/_shared/scenes/drop.ts +33 -0
  359. package/templates/_shared/scenes/end.ts +26 -0
  360. package/templates/_shared/scenes/hook.ts +18 -0
  361. package/templates/_shared/scenes/seam.ts +41 -0
  362. package/templates/_shared/scenes/step.ts +49 -0
  363. package/templates/ad/preview.png +0 -0
  364. package/templates/ad/template.json +151 -0
  365. package/templates/demo/preview.png +0 -0
  366. package/templates/demo/template.json +141 -0
  367. package/templates/explainer/preview.png +0 -0
  368. package/templates/explainer/template.json +193 -0
  369. package/templates/launch/preview.png +0 -0
  370. package/templates/launch/template.json +163 -0
  371. package/templates/mv/preview.png +0 -0
  372. package/templates/mv/scenes/default.ts +98 -0
  373. package/templates/mv/template.json +178 -0
  374. package/templates/promo/preview.png +0 -0
  375. package/templates/promo/template.json +185 -0
  376. package/templates/shorts/preview.png +0 -0
  377. package/templates/shorts/scenes/hook.ts +37 -0
  378. package/templates/shorts/template.json +196 -0
  379. package/templates/square/preview.png +0 -0
  380. package/templates/square/template.json +133 -0
  381. package/themes/debug-hud/THEME.md +39 -0
  382. package/themes/debug-hud/effects.ts +389 -0
  383. package/themes/debug-hud/sample/assets/og/logo.svg +12 -0
  384. package/themes/debug-hud/sample/beats.json +1 -0
  385. package/themes/debug-hud/sample/index.html +11 -0
  386. package/themes/debug-hud/sample/kf.json +59 -0
  387. package/themes/debug-hud/sample/lib/hudkit.ts +49 -0
  388. package/themes/debug-hud/sample/lib/og.ts +29 -0
  389. package/themes/debug-hud/sample/main.ts +9 -0
  390. package/themes/debug-hud/sample/scenes/end.ts +62 -0
  391. package/themes/debug-hud/sample/scenes/gather.ts +67 -0
  392. package/themes/debug-hud/sample/scenes/models.ts +70 -0
  393. package/themes/debug-hud/sample/scenes/price.ts +79 -0
  394. package/themes/debug-hud/sample/style.json +91 -0
  395. package/themes/debug-hud/slots.ts +99 -0
  396. package/themes/debug-hud/still.png +0 -0
  397. package/themes/debug-hud/style.json +91 -0
  398. package/themes/debug-hud/theme.json +68 -0
  399. package/themes/og-measure/THEME.md +47 -0
  400. package/themes/og-measure/effects.ts +432 -0
  401. package/themes/og-measure/sample/assets/brand/og-logo-full.svg +12 -0
  402. package/themes/og-measure/sample/assets/brand/og-logo.svg +12 -0
  403. package/themes/og-measure/sample/assets/data/measure.json +353 -0
  404. package/themes/og-measure/sample/beats.json +1 -0
  405. package/themes/og-measure/sample/index.html +11 -0
  406. package/themes/og-measure/sample/kf.json +66 -0
  407. package/themes/og-measure/sample/lib/data.ts +62 -0
  408. package/themes/og-measure/sample/main.ts +9 -0
  409. package/themes/og-measure/sample/measure.ts +78 -0
  410. package/themes/og-measure/sample/scenes/end.ts +47 -0
  411. package/themes/og-measure/sample/scenes/gather.ts +51 -0
  412. package/themes/og-measure/sample/scenes/models.ts +34 -0
  413. package/themes/og-measure/sample/scenes/one.ts +39 -0
  414. package/themes/og-measure/sample/scenes/price.ts +56 -0
  415. package/themes/og-measure/sample/style.json +97 -0
  416. package/themes/og-measure/slots.ts +88 -0
  417. package/themes/og-measure/still.png +0 -0
  418. package/themes/og-measure/style.json +97 -0
  419. package/themes/og-measure/theme.json +79 -0
  420. package/themes/riso-zine/THEME.md +43 -0
  421. package/themes/riso-zine/effects.ts +321 -0
  422. package/themes/riso-zine/sample/assets/og/logo.svg +12 -0
  423. package/themes/riso-zine/sample/beats.json +1 -0
  424. package/themes/riso-zine/sample/index.html +11 -0
  425. package/themes/riso-zine/sample/kf.json +59 -0
  426. package/themes/riso-zine/sample/lib/og.ts +29 -0
  427. package/themes/riso-zine/sample/lib/shot.ts +86 -0
  428. package/themes/riso-zine/sample/lib/zine.ts +42 -0
  429. package/themes/riso-zine/sample/main.ts +9 -0
  430. package/themes/riso-zine/sample/scenes/end.ts +61 -0
  431. package/themes/riso-zine/sample/scenes/gather.ts +62 -0
  432. package/themes/riso-zine/sample/scenes/models.ts +52 -0
  433. package/themes/riso-zine/sample/scenes/price.ts +82 -0
  434. package/themes/riso-zine/sample/style.json +99 -0
  435. package/themes/riso-zine/slots.ts +81 -0
  436. package/themes/riso-zine/still.png +0 -0
  437. package/themes/riso-zine/style.json +99 -0
  438. package/themes/riso-zine/theme.json +75 -0
  439. package/tools/beats/beats.py +372 -0
  440. package/tools/beats/requirements.txt +3 -0
  441. package/tools/lyrics/align.py +164 -0
  442. package/tools/lyrics/requirements.txt +9 -0
@@ -0,0 +1,114 @@
1
+ import * as THREE from "three";
2
+ import { RoundedBoxGeometry } from "three/addons/geometries/RoundedBoxGeometry.js";
3
+ import { zoomOutRig, type WindowRect } from "./rig.ts";
4
+ import { aim, disposeTree, imageMaterial, raw, sky, type Kit } from "./world.ts";
5
+
6
+ // 창 — 앞 장면 그림이 끝에 뒤 장면의 그 자리 그림으로 녹아든다. blend 0 이면 앞 장면 텍셀 그대로
7
+ const WINDOW_FRAG = /* glsl */ `
8
+ uniform sampler2D mapA;
9
+ uniform sampler2D mapB;
10
+ uniform vec4 rect;
11
+ uniform float blend;
12
+ varying vec2 vUv;
13
+ void main() {
14
+ vec3 a = texture2D(mapA, vUv).rgb;
15
+ vec3 b = texture2D(mapB, rect.xy + vUv * rect.zw).rgb;
16
+ gl_FragColor = vec4(mix(a, b, blend), 1.0);
17
+ }`;
18
+
19
+ const VERT = /* glsl */ `varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); }`;
20
+
21
+ export const DEFAULT_WINDOW: WindowRect = { x: 0.5, y: 0.5, h: 0.36 };
22
+
23
+ function shadowTexture(): THREE.CanvasTexture {
24
+ const c = document.createElement("canvas");
25
+ c.width = c.height = 128;
26
+ const g = c.getContext("2d")!;
27
+ const grad = g.createRadialGradient(64, 64, 10, 64, 64, 64);
28
+ grad.addColorStop(0, "rgba(0,0,0,0.9)");
29
+ grad.addColorStop(1, "rgba(0,0,0,0)");
30
+ g.fillStyle = grad;
31
+ g.fillRect(0, 0, 128, 128);
32
+ return new THREE.CanvasTexture(c);
33
+ }
34
+
35
+ export function zoomOut(k: Kit, o: { window?: WindowRect }) {
36
+ const { aspect, pal, seed } = k;
37
+ const env = { aspect, seed };
38
+ const win = { ...DEFAULT_WINDOW, ...o.window };
39
+ const scene = new THREE.Scene();
40
+ scene.add(sky({ top: pal.deep, bottom: "#020308", glow: pal.accent, dir: [0, 0.3, -1], amt: 0.4, pow: 4 }));
41
+
42
+ const bMat = imageMaterial(k.to.texture);
43
+ const bPlane = new THREE.Mesh(new THREE.PlaneGeometry(aspect, 1), bMat);
44
+ bPlane.renderOrder = 0;
45
+ scene.add(bPlane);
46
+ // 뒤 장면 판 뒷면·두께 — 비스듬히 볼 때 종이가 아니라 화면으로 보이게
47
+ const slab = new THREE.Mesh(new RoundedBoxGeometry(aspect + 0.04, 1.04, 0.05, 3, 0.02), new THREE.MeshBasicMaterial({ color: raw(pal.deep) }));
48
+ slab.position.z = -0.03;
49
+ scene.add(slab);
50
+
51
+ const h = win.h;
52
+ const w = aspect * h;
53
+ const shadowTex = shadowTexture();
54
+ const shadow = new THREE.Mesh(new THREE.PlaneGeometry(w * 1.25, h * 1.35), new THREE.MeshBasicMaterial({ map: shadowTex, transparent: true, depthTest: false, depthWrite: false }));
55
+ shadow.renderOrder = 1;
56
+ scene.add(shadow);
57
+ const chromeMat = new THREE.MeshBasicMaterial({ color: raw(pal.ink), transparent: true, depthTest: false, depthWrite: false });
58
+ const chrome = new THREE.Mesh(new RoundedBoxGeometry(w + 0.024, h + 0.07, 0.001, 2, 0.0005), chromeMat);
59
+ chrome.renderOrder = 2;
60
+ scene.add(chrome);
61
+ const dots = [pal.accent, pal.glow, pal.bg].map((col, i) => {
62
+ const d = new THREE.Mesh(new THREE.CircleGeometry(0.009, 24), new THREE.MeshBasicMaterial({ color: raw(col), transparent: true, depthTest: false, depthWrite: false }));
63
+ d.renderOrder = 3;
64
+ d.userData.dx = -w / 2 + 0.024 + i * 0.026;
65
+ scene.add(d);
66
+ return d;
67
+ });
68
+ const winMat = new THREE.ShaderMaterial({
69
+ vertexShader: VERT,
70
+ fragmentShader: WINDOW_FRAG,
71
+ uniforms: {
72
+ mapA: { value: k.from.texture },
73
+ mapB: { value: k.to.texture },
74
+ // 창 비율이 화면과 같으므로 가로 uv 폭도 h(뒤 장면 폭 대비)다
75
+ rect: { value: new THREE.Vector4(win.x - h / 2, 1 - win.y - h / 2, h, h) },
76
+ blend: { value: 0 },
77
+ },
78
+ transparent: true,
79
+ depthTest: false,
80
+ depthWrite: false,
81
+ });
82
+ const winPlane = new THREE.Mesh(new THREE.PlaneGeometry(w, h), winMat);
83
+ winPlane.renderOrder = 4;
84
+ scene.add(winPlane);
85
+
86
+ return {
87
+ frame(u: number) {
88
+ const s = zoomOutRig(u, env, win);
89
+ aim(k.cam, s.cam);
90
+ const [cx, cy, cz] = s.win.c;
91
+ winPlane.position.set(cx, cy, cz);
92
+ winMat.uniforms.blend.value = s.blend;
93
+ winPlane.visible = s.blend < 1;
94
+ bMat.uniforms.dim.value = s.dim;
95
+ chrome.position.set(cx, cy + 0.023, cz);
96
+ chromeMat.opacity = s.chrome;
97
+ chrome.visible = s.chrome > 0;
98
+ for (const d of dots) {
99
+ d.position.set(cx + d.userData.dx, cy + h / 2 + 0.023, cz);
100
+ (d.material as THREE.MeshBasicMaterial).opacity = s.chrome;
101
+ d.visible = s.chrome > 0;
102
+ }
103
+ shadow.position.set(cx + 0.04 * s.lift, cy - 0.06 * s.lift, 0.001);
104
+ (shadow.material as THREE.MeshBasicMaterial).opacity = s.chrome * Math.min(1, s.lift * 2.5) * 0.7;
105
+ shadow.visible = s.chrome > 0 && s.lift > 0;
106
+ k.renderer.clear(true, true, true);
107
+ k.renderer.render(scene, k.cam);
108
+ },
109
+ dispose() {
110
+ disposeTree(scene);
111
+ shadowTex.dispose();
112
+ },
113
+ };
114
+ }
@@ -0,0 +1,127 @@
1
+ import { GL_TRANSITIONS } from "./gl-transitions/shaders.ts";
2
+ import { REVEAL_VARIANTS, SDF_VARIANTS } from "./smoothui/shaders.ts";
3
+
4
+ /**
5
+ * 전환 목록 — 이름·출처·라이선스·시계. geono-hub 가 모은 전환(docs/transitions.md) 중 kasaframe 에 들일 수 있는 것과 kasaframe 의 3D 전환.
6
+ * React Bits·Animate UI(Commons Clause)·Aceternity(재배포 금지)는 들이지 않는다 — 여기에도 없다.
7
+ */
8
+ export interface TransitionEntry {
9
+ /** transition3d 의 kind 로 부르는 이름, 아니면 부품·원본 이름 */
10
+ name: string;
11
+ source: string;
12
+ license: string;
13
+ /** seek — 시각 t 의 순수 함수(셰이더 진행도·CSS·GSAP) · step — 자기 시계(rAF·타이머)라 0 초부터 차례로 찍어야 한다 */
14
+ clock: "seek" | "step";
15
+ /**
16
+ * transition3d — `transition3d(root, ctx, { kind: name })` 로 부른다(앞·뒤 화면 = 정지 그림·영상·살아 있는 장면)
17
+ * react — `@kasaframe/motion/transitions2d/react` 의 부품(허브 판을 옮김)
18
+ * vendor — 원본만 geono-hub `vendor/transitions/` 에 있다(아직 옮기지 않음)
19
+ */
20
+ use: "transition3d" | "react" | "vendor";
21
+ author?: string;
22
+ /** 영상에 쓸 때 걸리는 점 */
23
+ note?: string;
24
+ /** react 부품 이름 */
25
+ component?: string;
26
+ }
27
+
28
+ const SPDX: Record<string, string> = { MIT: "MIT", "BSD 2 Clause": "BSD-2-Clause", "BSD 3 Clause": "BSD-3-Clause" };
29
+
30
+ const KASAFRAME_3D: TransitionEntry[] = ["dive", "portal", "cards", "shatter", "zoomOut", "fold", "diveChain", "whip", "rise", "land"].map((name) => ({
31
+ name,
32
+ source: "kasaframe",
33
+ license: "kasaframe",
34
+ clock: "seek",
35
+ use: "transition3d",
36
+ }));
37
+
38
+ const GL: TransitionEntry[] = GL_TRANSITIONS.map((s) => ({
39
+ name: `gl:${s.name}`,
40
+ source: "gl-transitions",
41
+ license: SPDX[s.license] ?? s.license,
42
+ clock: "seek",
43
+ use: "transition3d",
44
+ author: s.author,
45
+ }));
46
+
47
+ const SDF_TITLE: Record<string, string> = { circle: "SDF Circle", warped: "Warped Circle", merge: "Organic Merge", radial: "Radial Circles", final: "SDF Blob" };
48
+ const SMOOTH_SHADERS: TransitionEntry[] = [
49
+ ...REVEAL_VARIANTS.map((v) => ({ name: `smooth:reveal-${v}`, note: `Shader Reveal ${v}` })),
50
+ ...SDF_VARIANTS.map((v) => ({ name: `smooth:sdf-${v}`, note: SDF_TITLE[v] })),
51
+ ].map((e) => ({ ...e, source: "SmoothUI", license: "MIT", clock: "seek" as const, use: "transition3d" as const }));
52
+
53
+ // [이름, 시계, 쓰는 법, 부품 이름?, 걸리는 점?] — 시계·트리거는 docs/transitions.md 표 그대로
54
+ type Row = [string, "seek" | "step", "react" | "vendor", string?, string?];
55
+ const web = (source: string, license: string, rows: Row[]): TransitionEntry[] =>
56
+ rows.map(([name, clock, use, component, note]) => ({ name, source, license, clock, use, ...(component ? { component } : {}), ...(note ? { note } : {}) }));
57
+
58
+ const WEB: TransitionEntry[] = [
59
+ ...web("Magic UI", "MIT", [
60
+ ["Morphing Text", "step", "react", "MagicMorphingText"],
61
+ ["Hyper Text", "step", "react", "HyperText"],
62
+ ["Word Rotate", "step", "react", "WordRotate"],
63
+ ["Typing Animation", "step", "vendor"],
64
+ ["Text Animate", "step", "vendor"],
65
+ ["Blur Fade", "step", "vendor"],
66
+ ["Text 3D Flip", "step", "vendor", undefined, "호버로 켜진다 — 시각으로 바꿔야"],
67
+ ["Animated Theme Toggler", "seek", "vendor", undefined, "누름 + View Transition"],
68
+ ["Dia Text Reveal", "step", "vendor"],
69
+ ["Pixel Image", "seek", "vendor"],
70
+ ]),
71
+ ...web("Cult UI", "MIT", [
72
+ ["Text Animate", "step", "vendor"],
73
+ ["Typewriter", "step", "vendor"],
74
+ ["Direction Aware Tabs", "step", "vendor"],
75
+ ["3D Carousel", "step", "vendor", undefined, "끌기 대신 각도를 t 로"],
76
+ ["Rolling Number", "step", "react", "RollingNumber"],
77
+ ["Morph Surface", "step", "vendor", undefined, "누름으로 켜진다"],
78
+ ["Expandable Screen", "step", "vendor", undefined, "누름으로 켜진다"],
79
+ ]),
80
+ ...web("KokonutUI", "MIT", [
81
+ ["Type Writer", "step", "vendor"],
82
+ ["Matrix Text", "step", "react", "MatrixText"],
83
+ ["Dynamic Text", "step", "vendor"],
84
+ ["Sliced Text", "step", "vendor", undefined, "호버로 켜진다"],
85
+ ["Card Flip", "seek", "vendor", undefined, "호버로 켜진다"],
86
+ ]),
87
+ ...web("SmoothUI", "MIT", [
88
+ ["Aperture Blur", "seek", "vendor", undefined, "셰이더 진행도 함수 — 옮기면 smooth: 로"],
89
+ ["Chroma Blur", "seek", "vendor", undefined, "셰이더 진행도 함수 — 옮기면 smooth: 로"],
90
+ ["Prism Sweep", "seek", "vendor", undefined, "셰이더 진행도 함수 — 옮기면 smooth: 로"],
91
+ ["Page Preloader", "step", "vendor"],
92
+ ["Text Morph", "step", "react", "TextMorph"],
93
+ ["Per Word Crossfade", "step", "vendor"],
94
+ ["Rolling Text", "step", "vendor"],
95
+ ["Mask Reveal Up", "step", "vendor"],
96
+ ["Shared Axis X", "step", "vendor"],
97
+ ["Shared Axis Y", "step", "react", "SharedAxisY"],
98
+ ["Shared Axis Z", "step", "vendor"],
99
+ ["Soft Blur In", "step", "vendor"],
100
+ ["Stagger From Center", "step", "vendor"],
101
+ ["Top Down Letters", "step", "vendor"],
102
+ ["Reveal Text", "step", "vendor"],
103
+ ["Typewriter Text", "step", "vendor"],
104
+ ["SVG Clip Mask", "step", "vendor"],
105
+ ]),
106
+ ...web("unlumen UI", "MIT", [
107
+ ["Page Transition", "seek", "vendor", undefined, "GSAP — gsap 어댑터로 맞춘다"],
108
+ ["Scramble Text", "step", "react", "ScrambleText"],
109
+ ["Motion Subtitle", "step", "vendor"],
110
+ ["Animate Digits", "step", "vendor"],
111
+ ]),
112
+ ...web("Vengeance UI", "MIT", [
113
+ ["Flip Text", "step", "vendor"],
114
+ ["Flip Fade Text", "step", "vendor"],
115
+ ["Morph Text", "seek", "react", "MorphText", "CSS 애니메이션뿐 — 가상 시계가 맞춘다"],
116
+ ["Stagger Text", "step", "vendor"],
117
+ ["Gooey Text Reveal", "step", "vendor"],
118
+ ["Reveal Loader", "step", "vendor"],
119
+ ]),
120
+ ...web("Skiper UI", "무료·출처 표기(Skiper UI)", [
121
+ ["Clip-path Carousel (skiper54)", "step", "vendor"],
122
+ ["Clip Div (skiper66)", "seek", "react", "ClipDiv", "호버로 커진다 — CSS"],
123
+ ["Text Roll Menu (skiper58)", "step", "vendor", undefined, "호버로 켜진다"],
124
+ ]),
125
+ ];
126
+
127
+ export const CATALOG: readonly TransitionEntry[] = [...KASAFRAME_3D, ...GL, ...SMOOTH_SHADERS, ...WEB];
@@ -0,0 +1,2 @@
1
+ // 허브 판 부품이 제 CSS 를 부수 효과로 불러온다 — 묶는 쪽(Vite)이 처리한다
2
+ declare module "*.css";
@@ -0,0 +1,9 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Jordan-Gilliam
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,43 @@
1
+ 'use client';
2
+
3
+ // Cult UI Rolling Number(MIT, vendor/transitions/cult-ui/rolling-number.json). 스타일이 없어 원본 그대로다.
4
+ // 값이 바뀌면 스프링이 옛 값에서 새 값까지 굴러가며 중간 숫자를 그린다.
5
+
6
+ import { useEffect } from 'react';
7
+ import { motion, type MotionValue, useSpring, useTransform } from 'motion/react';
8
+
9
+ type RollingNumberProps = {
10
+ value: number;
11
+ mass?: number;
12
+ stiffness?: number;
13
+ damping?: number;
14
+ precision?: number;
15
+ format?: (value: number) => string;
16
+ onAnimationStart?: () => void;
17
+ onAnimationComplete?: () => void;
18
+ };
19
+
20
+ export function RollingNumber({
21
+ value,
22
+ mass = 0.8,
23
+ stiffness = 75,
24
+ damping = 15,
25
+ precision = 0,
26
+ format = (num) => num.toLocaleString(),
27
+ onAnimationStart,
28
+ onAnimationComplete,
29
+ }: RollingNumberProps) {
30
+ const spring = useSpring(value, { mass, stiffness, damping });
31
+ const display: MotionValue<string> = useTransform(spring, (current) => format(parseFloat(current.toFixed(precision))));
32
+
33
+ useEffect(() => {
34
+ spring.set(value);
35
+ if (onAnimationStart) onAnimationStart();
36
+ const unsubscribe = spring.on('change', () => {
37
+ if (spring.get() === value && onAnimationComplete) onAnimationComplete();
38
+ });
39
+ return () => unsubscribe();
40
+ }, [spring, value, onAnimationStart, onAnimationComplete]);
41
+
42
+ return <motion.span>{display}</motion.span>;
43
+ }
@@ -0,0 +1,25 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2017-present gl-transitions contributors
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.
22
+
23
+ Note: Individual transitions in the transitions/ directory may have their own
24
+ license specified in their file header comments. When no license is specified,
25
+ the transition is covered by this MIT license.