@xonovex/skills 0.1.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 (341) hide show
  1. package/.claude-plugin/plugin.json +21 -0
  2. package/commands/code-align.md +108 -0
  3. package/commands/code-harden.md +74 -0
  4. package/commands/code-simplify.md +145 -0
  5. package/commands/git-commit.md +146 -0
  6. package/commands/insights-extract.md +109 -0
  7. package/commands/insights-integrate.md +100 -0
  8. package/commands/plan-continue.md +167 -0
  9. package/commands/plan-create.md +107 -0
  10. package/commands/plan-research.md +113 -0
  11. package/commands/plan-subplans-create.md +111 -0
  12. package/commands/plan-tdd-create.md +128 -0
  13. package/commands/plan-update.md +99 -0
  14. package/commands/plan-validate.md +100 -0
  15. package/commands/plan-worktree-abandon.md +104 -0
  16. package/commands/plan-worktree-create.md +92 -0
  17. package/commands/plan-worktree-merge.md +132 -0
  18. package/package.json +44 -0
  19. package/skills/astro-guidelines/SKILL.md +23 -0
  20. package/skills/astro-guidelines/reference/accessibility.md +31 -0
  21. package/skills/astro-guidelines/reference/components.md +42 -0
  22. package/skills/astro-guidelines/reference/content-collections.md +32 -0
  23. package/skills/astro-guidelines/reference/islands-architecture.md +26 -0
  24. package/skills/astro-guidelines/reference/project-structure.md +32 -0
  25. package/skills/c99-game-opinionated-guidelines/SKILL.md +43 -0
  26. package/skills/c99-game-opinionated-guidelines/reference/builder-pattern.md +29 -0
  27. package/skills/c99-game-opinionated-guidelines/reference/coordinate-system.md +27 -0
  28. package/skills/c99-game-opinionated-guidelines/reference/geometry-pipeline.md +29 -0
  29. package/skills/c99-game-opinionated-guidelines/reference/math-types.md +31 -0
  30. package/skills/c99-game-opinionated-guidelines/reference/mesh-types.md +32 -0
  31. package/skills/c99-game-opinionated-guidelines/reference/physics-patterns.md +28 -0
  32. package/skills/c99-game-opinionated-guidelines/reference/spatial-structures.md +26 -0
  33. package/skills/c99-game-opinionated-guidelines/reference/tagged-unions.md +40 -0
  34. package/skills/c99-game-opinionated-guidelines/reference/vertex-packing.md +38 -0
  35. package/skills/c99-guidelines/SKILL.md +29 -0
  36. package/skills/c99-guidelines/reference/compound-literals.md +33 -0
  37. package/skills/c99-guidelines/reference/const-correctness.md +32 -0
  38. package/skills/c99-guidelines/reference/designated-initializers.md +32 -0
  39. package/skills/c99-guidelines/reference/error-handling.md +49 -0
  40. package/skills/c99-guidelines/reference/inline-functions.md +37 -0
  41. package/skills/c99-guidelines/reference/memory-management.md +35 -0
  42. package/skills/c99-opinionated-guidelines/SKILL.md +44 -0
  43. package/skills/c99-opinionated-guidelines/reference/alignment.md +50 -0
  44. package/skills/c99-opinionated-guidelines/reference/caller-owns-memory.md +38 -0
  45. package/skills/c99-opinionated-guidelines/reference/compound-literals.md +33 -0
  46. package/skills/c99-opinionated-guidelines/reference/const-correctness.md +32 -0
  47. package/skills/c99-opinionated-guidelines/reference/data-oriented-design.md +42 -0
  48. package/skills/c99-opinionated-guidelines/reference/designated-initializers.md +32 -0
  49. package/skills/c99-opinionated-guidelines/reference/error-handling.md +49 -0
  50. package/skills/c99-opinionated-guidelines/reference/file-naming.md +33 -0
  51. package/skills/c99-opinionated-guidelines/reference/implementation-variants.md +35 -0
  52. package/skills/c99-opinionated-guidelines/reference/inline-functions.md +37 -0
  53. package/skills/c99-opinionated-guidelines/reference/memory-management.md +35 -0
  54. package/skills/c99-opinionated-guidelines/reference/safety-validations.md +32 -0
  55. package/skills/c99-opinionated-guidelines/reference/testing-patterns.md +39 -0
  56. package/skills/cmake-guidelines/SKILL.md +31 -0
  57. package/skills/cmake-guidelines/reference/compile-options.md +34 -0
  58. package/skills/cmake-guidelines/reference/fetchcontent.md +32 -0
  59. package/skills/cmake-guidelines/reference/find-package.md +29 -0
  60. package/skills/cmake-guidelines/reference/generator-expressions.md +34 -0
  61. package/skills/cmake-guidelines/reference/installation.md +38 -0
  62. package/skills/cmake-guidelines/reference/project-structure.md +40 -0
  63. package/skills/cmake-guidelines/reference/target-types.md +37 -0
  64. package/skills/cmake-guidelines/reference/testing.md +30 -0
  65. package/skills/cmake-guidelines/reference/visibility-specifiers.md +32 -0
  66. package/skills/content-guidelines/SKILL.md +36 -0
  67. package/skills/content-guidelines/reference/humanize.md +30 -0
  68. package/skills/content-guidelines/reference/news.md +28 -0
  69. package/skills/content-guidelines/reference/travelguide.md +31 -0
  70. package/skills/docker-guidelines/SKILL.md +23 -0
  71. package/skills/docker-guidelines/reference/docker-compose.md +40 -0
  72. package/skills/docker-guidelines/reference/layer-caching.md +25 -0
  73. package/skills/docker-guidelines/reference/multi-stage-builds.md +37 -0
  74. package/skills/docker-guidelines/reference/production-config.md +32 -0
  75. package/skills/docker-guidelines/reference/security.md +27 -0
  76. package/skills/express.js-guidelines/SKILL.md +32 -0
  77. package/skills/express.js-guidelines/reference/app-setup.md +39 -0
  78. package/skills/express.js-guidelines/reference/authentication.md +39 -0
  79. package/skills/express.js-guidelines/reference/controllers.md +49 -0
  80. package/skills/express.js-guidelines/reference/error-handling.md +54 -0
  81. package/skills/express.js-guidelines/reference/project-structure.md +29 -0
  82. package/skills/express.js-guidelines/reference/responses.md +30 -0
  83. package/skills/express.js-guidelines/reference/routes.md +29 -0
  84. package/skills/express.js-guidelines/reference/testing.md +39 -0
  85. package/skills/express.js-guidelines/reference/validation.md +41 -0
  86. package/skills/general-fp-guidelines/SKILL.md +28 -0
  87. package/skills/general-oop-guidelines/SKILL.md +28 -0
  88. package/skills/git-guidelines/SKILL.md +46 -0
  89. package/skills/git-guidelines/reference/commit.md +32 -0
  90. package/skills/git-guidelines/reference/merge-resolve.md +38 -0
  91. package/skills/git-guidelines/reference/worktree-abandon.md +48 -0
  92. package/skills/git-guidelines/reference/worktree-cleanup.md +40 -0
  93. package/skills/git-guidelines/reference/worktree-commit.md +46 -0
  94. package/skills/git-guidelines/reference/worktree-create.md +42 -0
  95. package/skills/git-guidelines/reference/worktree-merge.md +45 -0
  96. package/skills/git-guidelines/reference/worktree-validate.md +44 -0
  97. package/skills/hono-guidelines/SKILL.md +49 -0
  98. package/skills/hono-guidelines/reference/application-structure.md +53 -0
  99. package/skills/hono-guidelines/reference/context-storage.md +46 -0
  100. package/skills/hono-guidelines/reference/cookie-handling.md +63 -0
  101. package/skills/hono-guidelines/reference/error-handling.md +69 -0
  102. package/skills/hono-guidelines/reference/middleware-combine.md +47 -0
  103. package/skills/hono-guidelines/reference/middleware-patterns.md +58 -0
  104. package/skills/hono-guidelines/reference/platform-runtime.md +41 -0
  105. package/skills/hono-guidelines/reference/security-middleware.md +60 -0
  106. package/skills/hono-guidelines/reference/validation-type-safety.md +43 -0
  107. package/skills/hono-guidelines/reference/websocket-support.md +59 -0
  108. package/skills/hono-opinionated-guidelines/SKILL.md +49 -0
  109. package/skills/hono-opinionated-guidelines/reference/application-structure.md +53 -0
  110. package/skills/hono-opinionated-guidelines/reference/body-limit.md +57 -0
  111. package/skills/hono-opinionated-guidelines/reference/context-storage.md +46 -0
  112. package/skills/hono-opinionated-guidelines/reference/controllers.md +38 -0
  113. package/skills/hono-opinionated-guidelines/reference/cookie-handling.md +63 -0
  114. package/skills/hono-opinionated-guidelines/reference/error-handling.md +69 -0
  115. package/skills/hono-opinionated-guidelines/reference/middleware-combine.md +47 -0
  116. package/skills/hono-opinionated-guidelines/reference/middleware-patterns.md +58 -0
  117. package/skills/hono-opinionated-guidelines/reference/openapi-explicit-status-codes.md +61 -0
  118. package/skills/hono-opinionated-guidelines/reference/openapi-inline-handlers.md +56 -0
  119. package/skills/hono-opinionated-guidelines/reference/openapi-router-hierarchy.md +64 -0
  120. package/skills/hono-opinionated-guidelines/reference/openapi-spec-generation.md +57 -0
  121. package/skills/hono-opinionated-guidelines/reference/platform-runtime.md +41 -0
  122. package/skills/hono-opinionated-guidelines/reference/router-selection.md +34 -0
  123. package/skills/hono-opinionated-guidelines/reference/security-middleware.md +60 -0
  124. package/skills/hono-opinionated-guidelines/reference/validation-type-safety.md +43 -0
  125. package/skills/hono-opinionated-guidelines/reference/websocket-support.md +59 -0
  126. package/skills/insights-guidelines/SKILL.md +28 -0
  127. package/skills/insights-guidelines/reference/insights-extract.md +31 -0
  128. package/skills/insights-guidelines/reference/insights-integrate.md +35 -0
  129. package/skills/instruction-guidelines/SKILL.md +26 -0
  130. package/skills/instruction-guidelines/reference/assimilate.md +38 -0
  131. package/skills/instruction-guidelines/reference/simplify.md +46 -0
  132. package/skills/instruction-guidelines/reference/sync.md +41 -0
  133. package/skills/kubernetes-guidelines/SKILL.md +28 -0
  134. package/skills/kubernetes-guidelines/reference/configmaps-secrets.md +34 -0
  135. package/skills/kubernetes-guidelines/reference/deployments.md +55 -0
  136. package/skills/kubernetes-guidelines/reference/kustomize.md +41 -0
  137. package/skills/kubernetes-guidelines/reference/network-policies.md +53 -0
  138. package/skills/kubernetes-guidelines/reference/services.md +36 -0
  139. package/skills/kubernetes-guidelines/reference/validation.md +32 -0
  140. package/skills/lua-guidelines/SKILL.md +29 -0
  141. package/skills/lua-guidelines/reference/coroutines.md +66 -0
  142. package/skills/lua-guidelines/reference/error-handling.md +41 -0
  143. package/skills/lua-guidelines/reference/idiomatic-patterns.md +40 -0
  144. package/skills/lua-guidelines/reference/input-validation.md +42 -0
  145. package/skills/lua-guidelines/reference/local-variables.md +33 -0
  146. package/skills/lua-guidelines/reference/metatables.md +52 -0
  147. package/skills/lua-guidelines/reference/module-pattern.md +37 -0
  148. package/skills/lua-guidelines/reference/string-concatenation.md +31 -0
  149. package/skills/lua-opinionated-guidelines/SKILL.md +32 -0
  150. package/skills/lua-opinionated-guidelines/reference/cache-lookups.md +43 -0
  151. package/skills/lua-opinionated-guidelines/reference/coroutines.md +66 -0
  152. package/skills/lua-opinionated-guidelines/reference/error-handling.md +41 -0
  153. package/skills/lua-opinionated-guidelines/reference/idiomatic-patterns.md +40 -0
  154. package/skills/lua-opinionated-guidelines/reference/input-validation.md +42 -0
  155. package/skills/lua-opinionated-guidelines/reference/jit-friendly-tables.md +57 -0
  156. package/skills/lua-opinionated-guidelines/reference/local-variables.md +33 -0
  157. package/skills/lua-opinionated-guidelines/reference/metatables.md +52 -0
  158. package/skills/lua-opinionated-guidelines/reference/module-pattern.md +37 -0
  159. package/skills/lua-opinionated-guidelines/reference/string-concatenation.md +31 -0
  160. package/skills/moon-guidelines/SKILL.md +30 -0
  161. package/skills/moon-guidelines/reference/docker-multistage.md +42 -0
  162. package/skills/moon-guidelines/reference/project-constraints.md +25 -0
  163. package/skills/moon-guidelines/reference/query-language.md +27 -0
  164. package/skills/moon-guidelines/reference/tag-based-filtering.md +28 -0
  165. package/skills/moon-guidelines/reference/task-configuration.md +38 -0
  166. package/skills/moon-guidelines/reference/task-inheritance.md +30 -0
  167. package/skills/motion-react-guidelines/SKILL.md +66 -0
  168. package/skills/motion-react-guidelines/reference/3d-effects.md +35 -0
  169. package/skills/motion-react-guidelines/reference/entrance.md +36 -0
  170. package/skills/motion-react-guidelines/reference/exit.md +35 -0
  171. package/skills/motion-react-guidelines/reference/gestures.md +23 -0
  172. package/skills/motion-react-guidelines/reference/layout.md +39 -0
  173. package/skills/motion-react-guidelines/reference/motion-values.md +33 -0
  174. package/skills/motion-react-guidelines/reference/performance.md +32 -0
  175. package/skills/motion-react-guidelines/reference/scroll.md +38 -0
  176. package/skills/motion-react-guidelines/reference/spring-physics.md +40 -0
  177. package/skills/motion-react-guidelines/reference/stagger.md +34 -0
  178. package/skills/motion-react-guidelines/reference/svg-path.md +33 -0
  179. package/skills/motion-react-guidelines/reference/text-effects.md +39 -0
  180. package/skills/plan-guidelines/SKILL.md +56 -0
  181. package/skills/plan-guidelines/reference/code-align.md +23 -0
  182. package/skills/plan-guidelines/reference/code-barrels-remove.md +24 -0
  183. package/skills/plan-guidelines/reference/code-comments-remove.md +28 -0
  184. package/skills/plan-guidelines/reference/code-harden.md +30 -0
  185. package/skills/plan-guidelines/reference/code-shared-extract.md +25 -0
  186. package/skills/plan-guidelines/reference/code-simplify.md +33 -0
  187. package/skills/plan-guidelines/reference/code-template-extract.md +34 -0
  188. package/skills/plan-guidelines/reference/code-template-scaffold.md +36 -0
  189. package/skills/plan-guidelines/reference/general-research.md +35 -0
  190. package/skills/plan-guidelines/reference/plan-create.md +37 -0
  191. package/skills/plan-guidelines/reference/plan-tdd-create.md +44 -0
  192. package/skills/plan-guidelines/reference/todos.md +39 -0
  193. package/skills/presentation-guidelines/SKILL.md +25 -0
  194. package/skills/presentation-guidelines/reference/presentation-create.md +41 -0
  195. package/skills/presentation-guidelines/reference/presentation-motion-scaffold.md +38 -0
  196. package/skills/python-guidelines/SKILL.md +32 -0
  197. package/skills/python-guidelines/reference/async-await-patterns.md +62 -0
  198. package/skills/python-guidelines/reference/caching-functions.md +47 -0
  199. package/skills/python-guidelines/reference/dataclasses-type-hints.md +63 -0
  200. package/skills/python-guidelines/reference/exception-handling.md +72 -0
  201. package/skills/python-guidelines/reference/generators-comprehensions.md +54 -0
  202. package/skills/python-guidelines/reference/pathlib-file-ops.md +60 -0
  203. package/skills/python-guidelines/reference/resource-management.md +58 -0
  204. package/skills/python-guidelines/reference/string-formatting.md +41 -0
  205. package/skills/python-guidelines/reference/type-checking.md +47 -0
  206. package/skills/react-guidelines/SKILL.md +105 -0
  207. package/skills/react-guidelines/reference/accessibility.md +31 -0
  208. package/skills/react-guidelines/reference/activity-effect-event.md +42 -0
  209. package/skills/react-guidelines/reference/component-design.md +57 -0
  210. package/skills/react-guidelines/reference/hooks.md +39 -0
  211. package/skills/react-guidelines/reference/migration-anti-patterns.md +33 -0
  212. package/skills/react-guidelines/reference/migration-deprecations.md +109 -0
  213. package/skills/react-guidelines/reference/migration-paradigm-shifts.md +33 -0
  214. package/skills/react-guidelines/reference/migration-typescript.md +95 -0
  215. package/skills/react-guidelines/reference/new-hooks.md +94 -0
  216. package/skills/react-guidelines/reference/performance-optimization.md +41 -0
  217. package/skills/react-guidelines/reference/react-compiler.md +34 -0
  218. package/skills/react-guidelines/reference/server-components.md +99 -0
  219. package/skills/react-guidelines/reference/state-management.md +72 -0
  220. package/skills/react-guidelines/reference/suspense-streaming.md +36 -0
  221. package/skills/remotion-guidelines/SKILL.md +67 -0
  222. package/skills/remotion-guidelines/reference/animations.md +121 -0
  223. package/skills/remotion-guidelines/reference/assets.md +21 -0
  224. package/skills/remotion-guidelines/reference/captions.md +33 -0
  225. package/skills/remotion-guidelines/reference/charts.md +35 -0
  226. package/skills/remotion-guidelines/reference/compositions.md +40 -0
  227. package/skills/remotion-guidelines/reference/dom-measurement.md +82 -0
  228. package/skills/remotion-guidelines/reference/gifs.md +33 -0
  229. package/skills/remotion-guidelines/reference/lottie.md +41 -0
  230. package/skills/remotion-guidelines/reference/maps.md +26 -0
  231. package/skills/remotion-guidelines/reference/media.md +39 -0
  232. package/skills/remotion-guidelines/reference/mediabunny.md +28 -0
  233. package/skills/remotion-guidelines/reference/sequencing.md +44 -0
  234. package/skills/remotion-guidelines/reference/text.md +24 -0
  235. package/skills/remotion-guidelines/reference/three-d.md +33 -0
  236. package/skills/remotion-guidelines/reference/timing.md +22 -0
  237. package/skills/remotion-guidelines/reference/transitions.md +52 -0
  238. package/skills/shell-scripting-guidelines/SKILL.md +31 -0
  239. package/skills/shell-scripting-guidelines/reference/argument-parsing.md +67 -0
  240. package/skills/shell-scripting-guidelines/reference/common-patterns.md +46 -0
  241. package/skills/shell-scripting-guidelines/reference/error-handling.md +62 -0
  242. package/skills/shell-scripting-guidelines/reference/functions.md +66 -0
  243. package/skills/shell-scripting-guidelines/reference/idempotency.md +57 -0
  244. package/skills/shell-scripting-guidelines/reference/parameter-expansion.md +38 -0
  245. package/skills/shell-scripting-guidelines/reference/posix-compatibility.md +53 -0
  246. package/skills/shell-scripting-guidelines/reference/quoting.md +42 -0
  247. package/skills/shell-scripting-guidelines/reference/script-template.md +70 -0
  248. package/skills/shell-scripting-guidelines/reference/strict-mode.md +41 -0
  249. package/skills/shell-scripting-guidelines/reference/validation.md +30 -0
  250. package/skills/skill-guidelines/SKILL.md +33 -0
  251. package/skills/skill-guidelines/reference/assimilate.md +51 -0
  252. package/skills/skill-guidelines/reference/create.md +48 -0
  253. package/skills/skill-guidelines/reference/extract.md +48 -0
  254. package/skills/skill-guidelines/reference/simplify.md +56 -0
  255. package/skills/sql-postgresql-guidelines/SKILL.md +31 -0
  256. package/skills/sql-postgresql-guidelines/reference/constraints.md +47 -0
  257. package/skills/sql-postgresql-guidelines/reference/cte-patterns.md +42 -0
  258. package/skills/sql-postgresql-guidelines/reference/data-types.md +46 -0
  259. package/skills/sql-postgresql-guidelines/reference/indexing.md +45 -0
  260. package/skills/sql-postgresql-guidelines/reference/jsonb.md +54 -0
  261. package/skills/sql-postgresql-guidelines/reference/performance.md +46 -0
  262. package/skills/sql-postgresql-guidelines/reference/role-based-access.md +47 -0
  263. package/skills/sql-postgresql-guidelines/reference/row-level-security.md +66 -0
  264. package/skills/strudel-guidelines/SKILL.md +52 -0
  265. package/skills/strudel-guidelines/reference/arrangement.md +24 -0
  266. package/skills/strudel-guidelines/reference/conditionals.md +22 -0
  267. package/skills/strudel-guidelines/reference/effects.md +22 -0
  268. package/skills/strudel-guidelines/reference/genre-ambient.md +26 -0
  269. package/skills/strudel-guidelines/reference/genre-harsh.md +21 -0
  270. package/skills/strudel-guidelines/reference/genre-trance.md +23 -0
  271. package/skills/strudel-guidelines/reference/layering.md +22 -0
  272. package/skills/strudel-guidelines/reference/mini-notation.md +74 -0
  273. package/skills/strudel-guidelines/reference/modulation.md +22 -0
  274. package/skills/strudel-guidelines/reference/scales-harmony.md +20 -0
  275. package/skills/strudel-guidelines/reference/sounds.md +89 -0
  276. package/skills/strudel-guidelines/reference/tempo-timing.md +23 -0
  277. package/skills/terraform-guidelines/SKILL.md +28 -0
  278. package/skills/terraform-guidelines/reference/advanced-patterns.md +88 -0
  279. package/skills/terraform-guidelines/reference/locals.md +53 -0
  280. package/skills/terraform-guidelines/reference/module-definition.md +81 -0
  281. package/skills/terraform-guidelines/reference/module-structure.md +51 -0
  282. package/skills/terraform-guidelines/reference/remote-state.md +38 -0
  283. package/skills/terraform-guidelines/reference/root-module.md +71 -0
  284. package/skills/terraform-guidelines/reference/typed-variables.md +90 -0
  285. package/skills/threejs-guidelines/SKILL.md +38 -0
  286. package/skills/threejs-guidelines/reference/animation.md +26 -0
  287. package/skills/threejs-guidelines/reference/cameras-controls.md +26 -0
  288. package/skills/threejs-guidelines/reference/geometry.md +22 -0
  289. package/skills/threejs-guidelines/reference/interaction.md +25 -0
  290. package/skills/threejs-guidelines/reference/lighting-shadows.md +31 -0
  291. package/skills/threejs-guidelines/reference/loaders.md +29 -0
  292. package/skills/threejs-guidelines/reference/materials.md +25 -0
  293. package/skills/threejs-guidelines/reference/math.md +27 -0
  294. package/skills/threejs-guidelines/reference/node-materials.md +32 -0
  295. package/skills/threejs-guidelines/reference/patterns.md +29 -0
  296. package/skills/threejs-guidelines/reference/performance.md +24 -0
  297. package/skills/threejs-guidelines/reference/physics-vr.md +36 -0
  298. package/skills/threejs-guidelines/reference/postprocessing.md +26 -0
  299. package/skills/threejs-guidelines/reference/scene-fundamentals.md +26 -0
  300. package/skills/threejs-guidelines/reference/shaders.md +28 -0
  301. package/skills/threejs-guidelines/reference/textures.md +21 -0
  302. package/skills/threejs-guidelines/reference/webgpu.md +34 -0
  303. package/skills/typescript-guidelines/SKILL.md +37 -0
  304. package/skills/typescript-guidelines/reference/async-without-await.md +32 -0
  305. package/skills/typescript-guidelines/reference/avoid-barrel-exports.md +25 -0
  306. package/skills/typescript-guidelines/reference/avoid-eslint-disable.md +28 -0
  307. package/skills/typescript-guidelines/reference/avoid-reexports.md +26 -0
  308. package/skills/typescript-guidelines/reference/env-access-bracket-notation.md +29 -0
  309. package/skills/typescript-guidelines/reference/numeric-separator-enforcement.md +30 -0
  310. package/skills/typescript-guidelines/reference/template-literals-require-string-conversion.md +26 -0
  311. package/skills/typescript-guidelines/reference/unbound-method-references.md +32 -0
  312. package/skills/typescript-guidelines/reference/unnecessary-async-keywords.md +37 -0
  313. package/skills/typescript-to-lua-guidelines/SKILL.md +33 -0
  314. package/skills/typescript-to-lua-guidelines/reference/avoiding-heavy-features.md +41 -0
  315. package/skills/typescript-to-lua-guidelines/reference/coroutine-patterns.md +49 -0
  316. package/skills/typescript-to-lua-guidelines/reference/function-patterns.md +59 -0
  317. package/skills/typescript-to-lua-guidelines/reference/lua-interop.md +49 -0
  318. package/skills/typescript-to-lua-guidelines/reference/module-organization.md +42 -0
  319. package/skills/typescript-to-lua-guidelines/reference/multi-return-functions.md +47 -0
  320. package/skills/typescript-to-lua-guidelines/reference/namespaces-vs-classes.md +52 -0
  321. package/skills/typescript-to-lua-guidelines/reference/performance-tips.md +68 -0
  322. package/skills/typescript-to-lua-guidelines/reference/stable-tables.md +60 -0
  323. package/skills/typescript-to-lua-guidelines/reference/tsconfig.md +46 -0
  324. package/skills/typescript-to-lua-guidelines/reference/tstl-decorators.md +61 -0
  325. package/skills/typescript-to-lua-guidelines/reference/type-safety.md +79 -0
  326. package/skills/vitest-guidelines/SKILL.md +32 -0
  327. package/skills/vitest-guidelines/reference/cors-preflight-status-code.md +34 -0
  328. package/skills/vitest-guidelines/reference/http-testing.md +57 -0
  329. package/skills/vitest-guidelines/reference/json-response-type-safety.md +40 -0
  330. package/skills/vitest-guidelines/reference/mock-patterns.md +53 -0
  331. package/skills/vitest-guidelines/reference/project-references-path-resolution.md +36 -0
  332. package/skills/vitest-guidelines/reference/test-organization.md +25 -0
  333. package/skills/vitest-guidelines/reference/timestamp-testing.md +55 -0
  334. package/skills/vitest-guidelines/reference/type-safety.md +55 -0
  335. package/skills/vitest-guidelines/reference/typescript-config.md +43 -0
  336. package/skills/zod-guidelines/SKILL.md +33 -0
  337. package/skills/zod-guidelines/reference/default-values-output-type.md +63 -0
  338. package/skills/zod-guidelines/reference/migration-string-validators.md +38 -0
  339. package/skills/zod-guidelines/reference/migration-v4.md +46 -0
  340. package/skills/zod-guidelines/reference/schema-organization.md +73 -0
  341. package/skills/zod-guidelines/reference/validation-patterns.md +37 -0
@@ -0,0 +1,121 @@
1
+ # animations: Frame-Driven Animation
2
+
3
+ **Guideline:** Drive all animations with `useCurrentFrame()` and `interpolate()` or `spring()` functions, never CSS transitions.
4
+
5
+ **Rationale:** Remotion captures each frame as an image; CSS transitions and Tailwind animations won't render in the video output.
6
+
7
+ **Example:**
8
+
9
+ ```tsx
10
+ // Simple fade-in over 1 second (30fps = 30 frames)
11
+ const frame = useCurrentFrame();
12
+ const opacity = interpolate(frame, [0, 30], [0, 1], {
13
+ extrapolateRight: "clamp",
14
+ });
15
+ return <div style={{opacity}}>Fades in</div>;
16
+
17
+ // Spring bounce entrance
18
+ const scale = spring({frame, fps: 30, config: {damping: 8}});
19
+ return <div style={{transform: `scale(${scale})`}}>Bounces in</div>;
20
+
21
+ // Bad: Won't animate in Remotion
22
+ <div className="animate-bounce">Won't work</div>
23
+ ```
24
+
25
+ **Linear Interpolation:**
26
+
27
+ ```tsx
28
+ import {interpolate, useCurrentFrame, useVideoConfig} from "remotion";
29
+
30
+ function FadeIn() {
31
+ const frame = useCurrentFrame();
32
+ const {fps} = useVideoConfig();
33
+
34
+ // Fade in over 0.5 seconds
35
+ const opacity = interpolate(frame, [0, 0.5 * fps], [0, 1], {
36
+ extrapolateRight: "clamp",
37
+ });
38
+
39
+ return <div style={{opacity}}>Content</div>;
40
+ }
41
+ ```
42
+
43
+ **Spring Animation:**
44
+
45
+ ```tsx
46
+ import {spring, useCurrentFrame, useVideoConfig} from "remotion";
47
+
48
+ function BounceIn() {
49
+ const frame = useCurrentFrame();
50
+ const {fps} = useVideoConfig();
51
+
52
+ const scale = spring({
53
+ frame,
54
+ fps,
55
+ config: {damping: 10, stiffness: 100},
56
+ });
57
+
58
+ return <div style={{transform: `scale(${scale})`}}>Content</div>;
59
+ }
60
+ ```
61
+
62
+ **Spring Presets:**
63
+
64
+ ```tsx
65
+ // Smooth, no bounce (subtle reveals)
66
+ const smooth = {damping: 200};
67
+
68
+ // Snappy, minimal bounce (UI elements)
69
+ const snappy = {damping: 20, stiffness: 200};
70
+
71
+ // Bouncy entrance (playful animations)
72
+ const bouncy = {damping: 8};
73
+
74
+ // Heavy, slow motion
75
+ const heavy = {damping: 15, stiffness: 80, mass: 2};
76
+ ```
77
+
78
+ **Easing Functions:**
79
+
80
+ ```tsx
81
+ import {Easing, interpolate, useCurrentFrame} from "remotion";
82
+
83
+ function EasedMove() {
84
+ const frame = useCurrentFrame();
85
+
86
+ const x = interpolate(frame, [0, 30], [0, 200], {
87
+ easing: Easing.inOut(Easing.ease),
88
+ extrapolateRight: "clamp",
89
+ });
90
+
91
+ // Available easings: Easing.in, Easing.out, Easing.inOut
92
+ // Curves: Easing.ease, Easing.quad, Easing.sin, Easing.exp, Easing.circle
93
+ // Custom: Easing.bezier(0.25, 0.1, 0.25, 1)
94
+
95
+ return <div style={{transform: `translateX(${x}px)`}}>Moving</div>;
96
+ }
97
+ ```
98
+
99
+ **Bad vs. Good:**
100
+
101
+ ```tsx
102
+ // Bad: CSS transitions won't render
103
+ <div className="transition-opacity duration-500 opacity-0 hover:opacity-100">Won't animate</div>
104
+
105
+ // Bad: Tailwind animation
106
+ <div className="animate-bounce">Won't work</div>
107
+
108
+ // Good: Frame-driven
109
+ const frame = useCurrentFrame();
110
+ const opacity = interpolate(frame, [0, 30], [0, 1]);
111
+ <div style={{opacity}}>Renders correctly</div>
112
+ ```
113
+
114
+ **Techniques:**
115
+ - useCurrentFrame(): Get current frame number from video composition
116
+ - interpolate(): Map frame ranges to value ranges with extrapolation control
117
+ - spring(): Apply physics-based motion with damping, stiffness, mass
118
+ - Spring presets: smooth, snappy, bouncy, heavy for different effects
119
+ - Easing functions: Apply easing curves (ease, quad, sin, exp, circle, bezier)
120
+ - No CSS transitions: Avoid transition classes, they won't render
121
+ - No Tailwind animations: animate-bounce, etc. won't work in Remotion
@@ -0,0 +1,21 @@
1
+ # assets: Static Files and Asset Loading
2
+
3
+ **Guideline:** Use `staticFile()` for local assets in `public/` folder; use Remotion media components `<Img>`, `<Video>`, `<Audio>` that await loading.
4
+
5
+ **Rationale:** staticFile() ensures correct paths; Remotion components wait for full asset load before rendering (native HTML doesn't).
6
+
7
+ **Example:**
8
+ ```tsx
9
+ <Img src={staticFile("logo.png")} />
10
+ <Video src={staticFile("video.mp4")} style={{width: "100%"}} />
11
+ <Audio src={staticFile("music.mp3")} volume={0.5} />
12
+ const {fontFamily} = loadFont({family: "Custom", url: staticFile("fonts/font.woff2")});
13
+ ```
14
+
15
+ **Techniques:**
16
+ - staticFile("path"): Reference public/ assets; auto-encodes special characters
17
+ - Local assets: Place in public/; organize as images/, videos/, audio/, fonts/
18
+ - Remote URLs: Use directly without staticFile (CORS enabled)
19
+ - Google Fonts: `loadFont()` from @remotion/google-fonts/FontName
20
+ - Custom fonts: Load with @remotion/fonts; measure with measureText()
21
+ - Avoid: Native `<img>`, `<video>`, `<audio>` (don't wait for load)
@@ -0,0 +1,33 @@
1
+ # filename: captions
2
+
3
+ **Guideline:** Use `@remotion/captions` with `parseSrt()` for accurate timing; use `createTikTokStyleCaptions()` for word-by-word display.
4
+
5
+ **Rationale:** SRT parsing is error-prone manually; library handles edge cases; `TikTokStyleCaptions` enables smooth word highlighting matching audio timing.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ function Captions({captions}) {
10
+ const frame = useCurrentFrame();
11
+ const {fps} = useVideoConfig();
12
+ const currentTimeMs = (frame / fps) * 1000;
13
+
14
+ const activeCaption = captions.find(
15
+ (c) => currentTimeMs >= c.startMs && currentTimeMs < c.endMs
16
+ );
17
+
18
+ return activeCaption ? (
19
+ <div style={{position: "absolute", bottom: 100, fontSize: 48, color: "white"}}>
20
+ {activeCaption.text}
21
+ </div>
22
+ ) : null;
23
+ }
24
+ ```
25
+
26
+ **Techniques:**
27
+ - Parse SRT: `const {captions} = parseSrt({input: srtContent})`; captions have `startMs`, `endMs`, `text`
28
+ - Frame to time: `currentTimeMs = (frame / fps) * 1000`; match against caption range
29
+ - TikTok style: `createTikTokStyleCaptions({captions})` returns pages with tokens (individual words)
30
+ - Word highlighting: Check `isActive` per token; apply color/scale transform on active words
31
+ - Remote SRT: Use `delayRender()`/`continueRender()` for async fetch; load before rendering
32
+ - Styling: Add background, padding, text-shadow for readability; center with `transform: translateX(-50%)`
33
+ - Dynamic timing: Use `spring()` for scale animation on word activation for emphasis effect
@@ -0,0 +1,35 @@
1
+ # filename: charts
2
+
3
+ **Guideline:** Build charts with React/SVG; animate with `useCurrentFrame()` + `interpolate()` or `spring()`; disable third-party library animations.
4
+
5
+ **Rationale:** Remotion controls frame-by-frame timing; library animations bypass frame control; manual rendering ensures sync with audio/video.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ function BarChart({data}) {
10
+ const frame = useCurrentFrame();
11
+ const {fps} = useVideoConfig();
12
+
13
+ return (
14
+ <AbsoluteFill style={{backgroundColor: "#1a1a2e"}}>
15
+ <svg width="100%" height="100%">
16
+ {data.map((item, i) => {
17
+ const delay = i * 5;
18
+ const progress = spring({frame: frame - delay - 10, fps, config: {damping: 18}});
19
+ const barHeight = (item.value / maxValue) * 300 * progress;
20
+ return <rect key={i} y={350 - barHeight} height={barHeight} fill={item.color} />;
21
+ })}
22
+ </svg>
23
+ </AbsoluteFill>
24
+ );
25
+ }
26
+ ```
27
+
28
+ **Techniques:**
29
+ - Bar chart: `spring()` for per-bar stagger; `frame - delay` for sequential animation
30
+ - Pie chart: `interpolate()` for smooth arc fill; use SVG path math for arcs
31
+ - Line chart: SVG path with `strokeDasharray`/`strokeDashoffset` for drawing animation
32
+ - Counter numbers: `interpolate(frame, [0, fps], [0, target])` for smooth count
33
+ - Stagger elements: Use `index * delay` to offset animation start per element
34
+ - Disable library animations: Set `animation: false` in Chart.js; don't use D3 `.transition()`
35
+ - Use `interpolate()` for smooth ranges; `spring()` for bouncy/organic feel
@@ -0,0 +1,40 @@
1
+ # filename: compositions
2
+
3
+ **Guideline:** Define compositions in `Root.tsx` with `type` declarations (not `interface`) and Zod `schema` for visual parameter UI; use `calculateMetadata()` for dynamic values.
4
+
5
+ **Rationale:** `type` works better with `defaultProps` and Zod inference; schema enables GUI parameter editing; `calculateMetadata` enables dynamic duration/dimensions from props.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ const schema = z.object({
10
+ title: z.string(),
11
+ backgroundColor: zColor(),
12
+ fontSize: z.number().min(10).max(200)
13
+ });
14
+ type Props = z.infer<typeof schema>;
15
+
16
+ export function RemotionRoot() {
17
+ return (
18
+ <Composition<Props>
19
+ id="MyVideo"
20
+ component={MyVideo}
21
+ durationInFrames={300}
22
+ fps={30}
23
+ width={1920}
24
+ height={1080}
25
+ schema={schema}
26
+ defaultProps={{title: "Hello", backgroundColor: "#fff", fontSize: 48}}
27
+ />
28
+ );
29
+ }
30
+ ```
31
+
32
+ **Techniques:**
33
+ - Composition setup: `id`, `component`, `durationInFrames`, `fps`, `width`, `height` required
34
+ - Type vs interface: Always use `type`, not `interface`; works better with Zod inference
35
+ - Schema UI: `z.object({...})` with `zColor()`, `z.number().min().max()`, `z.enum()` for visual editor
36
+ - Dynamic metadata: `calculateMetadata({props}) => ({durationInFrames: ...})` for async resolution
37
+ - Folder organization: Wrap `<Composition>` in `<Folder name="...">` for grouping
38
+ - Still images: `<Still>` for single frames; no `durationInFrames`/`fps` needed
39
+ - Props inference: Use `z.infer<typeof schema>` for type-safe props
40
+ - defaultProps required: Set sensible defaults for all schema fields
@@ -0,0 +1,82 @@
1
+ # dom-measurement: Measuring DOM Elements
2
+
3
+ **Guideline:** Divide `getBoundingClientRect()` values by `useCurrentScale()` to account for Remotion's scale transforms.
4
+
5
+ **Rationale:** Remotion applies scale transforms to elements; measurements need correction to reflect actual dimensions at scale 1.
6
+
7
+ **Example:**
8
+
9
+ ```tsx
10
+ // Without scale correction (wrong)
11
+ const rect = ref.current.getBoundingClientRect();
12
+ const width = rect.width; // Scaled value
13
+
14
+ // With scale correction (correct)
15
+ const scale = useCurrentScale();
16
+ const width = rect.width / scale; // Actual unscaled width
17
+
18
+ // Full example
19
+ const scale = useCurrentScale();
20
+ const {width: scaled_width, height: scaled_height} = ref.current.getBoundingClientRect();
21
+ return <div>Actual size: {scaled_width / scale} x {scaled_height / scale}</div>;
22
+ ```
23
+
24
+ **Correct Measurement:**
25
+
26
+ ```tsx
27
+ import {useCurrentScale} from "remotion";
28
+ import {useEffect, useRef, useState} from "react";
29
+
30
+ export function MeasuredComponent() {
31
+ const ref = useRef<HTMLDivElement>(null);
32
+ const scale = useCurrentScale();
33
+ const [dimensions, setDimensions] = useState({width: 0, height: 0});
34
+
35
+ useEffect(() => {
36
+ if (!ref.current) return;
37
+
38
+ const rect = ref.current.getBoundingClientRect();
39
+ setDimensions({
40
+ width: rect.width / scale,
41
+ height: rect.height / scale,
42
+ });
43
+ }, [scale]);
44
+
45
+ return (
46
+ <div ref={ref}>
47
+ Content to measure ({dimensions.width}x{dimensions.height})
48
+ </div>
49
+ );
50
+ }
51
+ ```
52
+
53
+ **Outline vs Border:** Outline doesn't affect layout; border does at different scales.
54
+
55
+ ```tsx
56
+ function PositionedElement() {
57
+ const ref = useRef<HTMLDivElement>(null);
58
+ const scale = useCurrentScale();
59
+ const [position, setPosition] = useState({x: 0, y: 0});
60
+
61
+ useEffect(() => {
62
+ if (!ref.current) return;
63
+
64
+ const rect = ref.current.getBoundingClientRect();
65
+ setPosition({
66
+ x: rect.left / scale,
67
+ y: rect.top / scale,
68
+ });
69
+ }, [scale]);
70
+
71
+ return <div ref={ref}>Element at ({position.x}, {position.y})</div>;
72
+ }
73
+ ```
74
+
75
+ **Techniques:**
76
+ - useCurrentScale(): Get scale factor applied by Remotion
77
+ - Divide measurements: width/scale, height/scale for correct values
78
+ - useEffect hook: Measure elements after mount with scale dependency
79
+ - outline vs border: Use outline to avoid layout shifts at different scales
80
+ - getBoundingClientRect(): Get left, top, width, height of element
81
+ - useRef: Store reference to DOM element for measurement
82
+ - Sync with scale: Update measurements when scale changes
@@ -0,0 +1,33 @@
1
+ # gifs: Animated Images (GIF, APNG, WebP, AVIF)
2
+
3
+ **Guideline:** Use `<AnimatedImage>` for frame-synchronized playback of animated images.
4
+
5
+ **Rationale:** Native img tags don't sync with Remotion's timeline. `<AnimatedImage>` provides proper frame synchronization and playback control.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ import { AnimatedImage, staticFile, Composition } from 'remotion'
10
+
11
+ export const MyComposition = () => (
12
+ <Composition>
13
+ <AnimatedImage
14
+ src={staticFile('animation.gif')}
15
+ width={1920}
16
+ height={1080}
17
+ playbackRate={1}
18
+ loop
19
+ fit="contain"
20
+ />
21
+ </Composition>
22
+ )
23
+ ```
24
+
25
+ **Techniques:**
26
+ - Import `AnimatedImage` and `staticFile` from `remotion` package
27
+ - Set explicit `width` and `height` props for proper sizing and rendering
28
+ - Use `staticFile()` for local assets, remote URLs with CORS headers
29
+ - Control playback speed with `playbackRate` prop (0.5 = half, 2 = double)
30
+ - Set loop behavior: `loop` (default), `pause-after-finish`, or `clear-after-finish`
31
+ - Choose sizing mode: `fit="fill"` (stretch), `fit="contain"` (aspect-ratio), `fit="cover"` (crop)
32
+ - Get GIF duration with `getGifDurationInSeconds()` for dynamic composition length
33
+ - Apply CSS styles: borderRadius, position, opacity, filters
@@ -0,0 +1,41 @@
1
+ # lottie: Lottie Animations
2
+
3
+ **Guideline:** Use `delayRender()` pattern to load Lottie JSON before rendering compositions.
4
+
5
+ **Rationale:** Animations must load asynchronously. `delayRender()` pauses frame rendering until `continueRender()` is called after JSON loads.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ import { Lottie, useVideoConfig } from '@remotion/lottie'
10
+ import { delayRender, continueRender } from 'remotion'
11
+
12
+ const handle = delayRender()
13
+
14
+ export const MyAnimation = () => {
15
+ const [animData, setAnimData] = useState<LottieAnimationData | null>(null)
16
+ const { fps } = useVideoConfig()
17
+
18
+ useEffect(() => {
19
+ fetch('https://lottiefiles.com/animations/123.json')
20
+ .then(r => r.json())
21
+ .then(data => {
22
+ setAnimData(data)
23
+ continueRender(handle)
24
+ })
25
+ .catch(err => cancelRender(err))
26
+ }, [handle])
27
+
28
+ return animData ? <Lottie animationData={animData} /> : null
29
+ }
30
+ ```
31
+
32
+ **Techniques:**
33
+ - Install `@remotion/lottie` package before use
34
+ - Call `delayRender()` to pause frame rendering while loading
35
+ - Fetch animation JSON from remote (Lottie Files) or local with `staticFile()`
36
+ - Store fetched JSON in state with `useState<LottieAnimationData | null>()`
37
+ - Call `continueRender(handle)` when JSON loaded successfully
38
+ - Call `cancelRender(err)` if fetch fails to report error
39
+ - Return null while loading to prevent rendering with undefined data
40
+ - Pass animation data to `<Lottie animationData={...} />` component
41
+ - Apply width/height styles via style props
@@ -0,0 +1,26 @@
1
+ # maps: Map Animations with Mapbox
2
+
3
+ **Guideline:** Disable Mapbox animations (fadeDuration: 0, interactive: false); control camera/lines via Remotion frames; use turf.js for route.
4
+
5
+ **Rationale:** Mapbox animations conflict with frame-by-frame rendering; Remotion frame control ensures deterministic animation.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ const _map = new Map({
10
+ container: ref.current!,
11
+ interactive: false, // CRITICAL
12
+ fadeDuration: 0, // CRITICAL
13
+ zoom: 11.53,
14
+ center: [6.5615, 46.0598],
15
+ });
16
+ // Animate with: turf.along(lineString, distance * progress)
17
+ ```
18
+
19
+ **Techniques:**
20
+ - Map config: interactive: false, fadeDuration: 0 disable Mapbox animations
21
+ - delayRender/continueRender: Wait for map.load and camera.idle events
22
+ - turf.js: Route distance, lineSliceAlong for curved animation
23
+ - Add GeoJSON sources for lines, markers, labels
24
+ - Free camera: Use getFreeCameraOptions(), lookAtPoint() for control
25
+ - Render: --gl=angle --concurrency=1 for Mapbox stability
26
+ - Performance: Hide unwanted features with setConfigProperty("basemap", name, false)
@@ -0,0 +1,39 @@
1
+ # media: Audio and Video Manipulation
2
+
3
+ **Guideline:** Use `<Audio>` and `<Video>` from Remotion for frame-synchronized playback.
4
+
5
+ **Rationale:** Native HTML elements don't sync properly with Remotion's timeline. Remotion components provide frame-synchronized playback control.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ import { Video, Audio, useVideoConfig } from 'remotion'
10
+
11
+ export const MediaComposition = () => {
12
+ const { fps } = useVideoConfig()
13
+
14
+ return (
15
+ <>
16
+ <Video
17
+ src="video.mp4"
18
+ startFrom={fps * 2} // Start at 2 seconds
19
+ endAt={fps * 10} // End at 10 seconds
20
+ playbackRate={1}
21
+ volume={0.8}
22
+ style={{ width: '100%', height: '100%' }}
23
+ />
24
+ <Audio src="audio.mp3" volume={0.5} />
25
+ </>
26
+ )
27
+ }
28
+ ```
29
+
30
+ **Techniques:**
31
+ - Import `Audio` and `Video` from `remotion` for frame-synced playback
32
+ - Use `staticFile()` for local media files, remote URLs for external sources
33
+ - Set static volume with number (0-1 range) or dynamic with callback function
34
+ - Trim playback: `startFrom` and `endAt` props in frames (use `fps` for seconds)
35
+ - Control speed with `playbackRate` prop (0.5 = half speed, 2 = double speed)
36
+ - Enable looping with `loop` prop for indefinite repetition
37
+ - Create fade effects with `interpolate()` and frame-based callbacks
38
+ - Get media duration with `getVideoDuration()` or `getAudioDuration()` in calculateMetadata
39
+ - Apply CSS styles: width, height, position, opacity, filters
@@ -0,0 +1,28 @@
1
+ # mediabunny: Media Metadata and Frame Extraction
2
+
3
+ **Guideline:** Use Mediabunny for video/audio duration, dimensions, and frame extraction; check decode compatibility before playback.
4
+
5
+ **Rationale:** Duration enables accurate durationInFrames; decode checks prevent runtime failures with unsupported codecs.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ import {getVideoDuration, getVideoDimensions} from "mediabunny";
10
+
11
+ calculateMetadata: async ({props}) => {
12
+ const duration = await getVideoDuration(props.videoUrl);
13
+ const {width, height} = await getVideoDimensions(props.videoUrl);
14
+ return {
15
+ durationInFrames: Math.ceil(duration * 30),
16
+ width, height
17
+ };
18
+ }
19
+ ```
20
+
21
+ **Techniques:**
22
+ - getVideoDuration(): Returns seconds; multiply by fps for frames
23
+ - getAudioDuration(): For audio files
24
+ - getVideoDimensions(): Returns {width, height} for dynamic sizing
25
+ - canDecode(): Check Input + getPrimaryVideoTrack/Audio before playback
26
+ - extractFrames(): Sample frames at specific timestamps using VideoSampleSink
27
+ - Filmstrip: Calculate timestamps based on duration and desired grid spacing
28
+ - Cancellation: Pass signal: controller.signal for AbortSignal support
@@ -0,0 +1,44 @@
1
+ # sequencing: Sequencing and Scene Orchestration
2
+
3
+ **Guideline:** Use `<Sequence>` for timed playback with local frame context and `premountFor` to prevent pop-in.
4
+
5
+ **Rationale:** Sequences provide local frame context reset and timing control. `premountFor` preloads components early to avoid rendering artifacts.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ import { Sequence, Series, useCurrentFrame, useVideoConfig } from 'remotion'
10
+
11
+ export const MyComposition = () => {
12
+ const { fps } = useVideoConfig()
13
+
14
+ return (
15
+ <Series>
16
+ <Series.Sequence durationInFrames={2 * fps}>
17
+ <Scene1 />
18
+ </Series.Sequence>
19
+ <Series.Sequence durationInFrames={3 * fps} offset={-0.5 * fps}>
20
+ <Scene2 /> {/* Overlaps with Scene1 by 0.5 sec */}
21
+ </Series.Sequence>
22
+ <Series.Sequence durationInFrames={2 * fps}>
23
+ <Scene3 />
24
+ </Series.Sequence>
25
+ </Series>
26
+ )
27
+ }
28
+
29
+ const Scene1 = () => {
30
+ const frame = useCurrentFrame() // Starts at 0 in this Sequence
31
+ return <div style={{ opacity: frame / 30 }} />
32
+ }
33
+ ```
34
+
35
+ **Techniques:**
36
+ - Use `<Sequence>` to show/hide components at specific frame ranges
37
+ - Set `from` prop for start frame (calculate with `fps`: `1.5 * fps` for 1.5 seconds)
38
+ - Set `durationInFrames` for length in frames (calculate with `fps`: `2 * fps` for 2 seconds)
39
+ - Enable `premountFor` to preload components early and avoid rendering pop-in
40
+ - Use `layout="none"` to skip AbsoluteFill wrapper for flex/grid/canvas layouts
41
+ - Remember `useCurrentFrame()` returns local frame context within Sequence (starts at 0)
42
+ - Use `<Series>` for automatic sequential timing of multiple scenes
43
+ - Create overlaps with `offset` prop on Series.Sequence (negative value for overlap)
44
+ - Nest Sequences for complex timing and layered compositions
@@ -0,0 +1,24 @@
1
+ # text: Text and Typography
2
+
3
+ **Guideline:** Load fonts first; use measureText() for dimensions; fitText() to auto-scale; animate with frame-based calculations.
4
+
5
+ **Rationale:** Font loading is async; measuring text enables precise layout; frame-based animation ensures consistent timing.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ import {loadFont} from "@remotion/google-fonts/Roboto";
10
+ import {measureText, fitText} from "@remotion/layout-utils";
11
+
12
+ const {fontFamily} = loadFont(); // Google Font
13
+ const {width} = measureText({text: "Hello", fontFamily, fontSize: 48});
14
+ const {fontSize} = fitText({text, withinWidth: 500, fontFamily});
15
+ ```
16
+
17
+ **Techniques:**
18
+ - Google Fonts: `loadFont()` from @remotion/google-fonts/FontName
19
+ - Local fonts: `loadFont({family, url: staticFile(), weight})`
20
+ - measureText(): Returns {width, height}; use validateFontIsLoaded: true
21
+ - fitText(): Auto-scale fontSize to fit container width
22
+ - Typewriter: `Math.floor(frame / fps * charsPerSecond)` to slice text
23
+ - Word highlight: spring() to animate background scaleX across word
24
+ - Stagger reveal: Delay each element by `index * delaySeconds * fps`
@@ -0,0 +1,33 @@
1
+ # three-d: 3D Content with Three.js
2
+
3
+ **Guideline:** Use ThreeCanvas (not react-three-fiber Canvas); animate with useCurrentFrame, not useFrame(); use layout="none" in Sequences.
4
+
5
+ **Rationale:** useFrame() updates real-time, not frame-perfect; Remotion requires frame-based deterministic animation.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ import {ThreeCanvas} from "@remotion/three";
10
+ import {useCurrentFrame, useVideoConfig} from "remotion";
11
+
12
+ function RotatingCube() {
13
+ const frame = useCurrentFrame();
14
+ const {fps} = useVideoConfig();
15
+ const rotation = (frame / (2 * fps)) * Math.PI * 2;
16
+ return (
17
+ <mesh rotation={[0, rotation, 0]}>
18
+ <boxGeometry args={[1, 1, 1]} />
19
+ <meshStandardMaterial color="orange" />
20
+ </mesh>
21
+ );
22
+ }
23
+ ```
24
+
25
+ **Techniques:**
26
+ - ThreeCanvas: Remotion-specific wrapper (not R3F Canvas)
27
+ - useCurrentFrame() + fps: Calculate frame-based transforms (rotation, position)
28
+ - interpolate(): Linear motion and camera movement
29
+ - spring(): Bouncing and physics-based animation with config {damping, stiffness}
30
+ - PerspectiveCamera: Animate position/lookAt with useCurrentFrame
31
+ - Sequence layout="none": Required for ThreeCanvas (default layout breaks 3D)
32
+ - Lighting: ambientLight (base), directionalLight (shadows), pointLight (highlights)
33
+ - Stagger: Use `frame - (index * fps * delay)` for sequenced objects
@@ -0,0 +1,22 @@
1
+ # timing: Timing and Frame Calculations
2
+
3
+ **Guideline:** Always write durations as seconds multiplied by fps for consistency; use interpolate with frame ranges, not time.
4
+
5
+ **Rationale:** Seconds * fps pattern is clear and frame-accurate; consistent approach prevents calculation errors.
6
+
7
+ **Example:**
8
+ ```tsx
9
+ const frame = useCurrentFrame();
10
+ const {fps} = useVideoConfig();
11
+ const startFrame = 1 * fps; // 1 second
12
+ const fadeIn = interpolate(frame, [0, 0.5 * fps], [0, 1], {extrapolateLeft: "clamp"});
13
+ ```
14
+
15
+ **Techniques:**
16
+ - Pattern: `seconds * fps` for all durations (0.1 * fps = 100ms, 1 * fps = 1s)
17
+ - interpolate() ranges in frames: [startFrame, endFrame] not seconds
18
+ - Composition: durationInFrames = totalSeconds * fps
19
+ - Stagger delays: index * delaySeconds * fps
20
+ - Visibility check: frame >= startFrame && frame < endFrame
21
+ - Extrapolation: Use extrapolateLeft/extrapolateRight to clamp values at edges
22
+ - Common: Flash 0.1s, fade 0.5s, transitions 1-2s