@nguyenphp/antigravity-marketing 1.0.16 → 1.0.19

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 (376) hide show
  1. package/README.md +187 -74
  2. package/bin/index.js +4 -4
  3. package/package.json +4 -3
  4. package/templates/.agent/agents/backend-specialist.md +263 -0
  5. package/templates/.agent/agents/database-architect.md +226 -0
  6. package/templates/.agent/agents/debugger.md +225 -0
  7. package/templates/.agent/agents/devops-engineer.md +242 -0
  8. package/templates/.agent/agents/documentation-writer.md +104 -0
  9. package/templates/.agent/agents/explorer-agent.md +73 -0
  10. package/templates/.agent/agents/frontend-specialist.md +527 -0
  11. package/templates/.agent/agents/game-developer.md +162 -0
  12. package/templates/.agent/agents/mobile-developer.md +377 -0
  13. package/templates/.agent/agents/orchestrator.md +400 -0
  14. package/templates/.agent/agents/penetration-tester.md +188 -0
  15. package/templates/.agent/agents/performance-optimizer.md +187 -0
  16. package/templates/.agent/agents/project-planner.md +403 -0
  17. package/templates/.agent/agents/security-auditor.md +170 -0
  18. package/templates/.agent/agents/seo-specialist.md +111 -0
  19. package/templates/.agent/agents/test-engineer.md +158 -0
  20. package/templates/.agent/rules/GEMINI.md +248 -0
  21. package/templates/.agent/skills/analytics-marketing/SKILL.md +172 -324
  22. package/templates/.agent/skills/api-patterns/SKILL.md +81 -0
  23. package/templates/.agent/skills/api-patterns/api-style.md +42 -0
  24. package/templates/.agent/skills/api-patterns/auth.md +24 -0
  25. package/templates/.agent/skills/api-patterns/documentation.md +26 -0
  26. package/templates/.agent/skills/api-patterns/graphql.md +41 -0
  27. package/templates/.agent/skills/api-patterns/rate-limiting.md +31 -0
  28. package/templates/.agent/skills/api-patterns/response.md +37 -0
  29. package/templates/.agent/skills/api-patterns/rest.md +40 -0
  30. package/templates/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
  31. package/templates/.agent/skills/api-patterns/security-testing.md +122 -0
  32. package/templates/.agent/skills/api-patterns/trpc.md +41 -0
  33. package/templates/.agent/skills/api-patterns/versioning.md +22 -0
  34. package/templates/.agent/skills/app-builder/SKILL.md +75 -0
  35. package/templates/.agent/skills/app-builder/agent-coordination.md +71 -0
  36. package/templates/.agent/skills/app-builder/feature-building.md +53 -0
  37. package/templates/.agent/skills/app-builder/project-detection.md +34 -0
  38. package/templates/.agent/skills/app-builder/scaffolding.md +118 -0
  39. package/templates/.agent/skills/app-builder/tech-stack.md +40 -0
  40. package/templates/.agent/skills/app-builder/templates/SKILL.md +39 -0
  41. package/templates/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  42. package/templates/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  43. package/templates/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  44. package/templates/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  45. package/templates/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  46. package/templates/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  47. package/templates/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  48. package/templates/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
  49. package/templates/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
  50. package/templates/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
  51. package/templates/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
  52. package/templates/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  53. package/templates/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
  54. package/templates/.agent/skills/architecture/SKILL.md +55 -0
  55. package/templates/.agent/skills/architecture/context-discovery.md +43 -0
  56. package/templates/.agent/skills/architecture/examples.md +94 -0
  57. package/templates/.agent/skills/architecture/pattern-selection.md +68 -0
  58. package/templates/.agent/skills/architecture/patterns-reference.md +50 -0
  59. package/templates/.agent/skills/architecture/trade-off-analysis.md +77 -0
  60. package/templates/.agent/skills/banner-design/SKILL.md +192 -0
  61. package/templates/.agent/skills/banner-design/references/banner-sizes-and-styles.md +118 -0
  62. package/templates/.agent/skills/bash-linux/SKILL.md +199 -0
  63. package/templates/.agent/skills/behavioral-modes/SKILL.md +242 -0
  64. package/templates/.agent/skills/brainstorming/SKILL.md +163 -0
  65. package/templates/.agent/skills/brainstorming/dynamic-questioning.md +350 -0
  66. package/templates/.agent/skills/brand/SKILL.md +97 -0
  67. package/templates/.agent/skills/brand/references/approval-checklist.md +169 -0
  68. package/templates/.agent/skills/brand/references/asset-organization.md +157 -0
  69. package/templates/.agent/skills/brand/references/brand-guideline-template.md +140 -0
  70. package/templates/.agent/skills/brand/references/color-palette-management.md +186 -0
  71. package/templates/.agent/skills/brand/references/consistency-checklist.md +94 -0
  72. package/templates/.agent/skills/brand/references/logo-usage-rules.md +185 -0
  73. package/templates/.agent/skills/brand/references/messaging-framework.md +85 -0
  74. package/templates/.agent/skills/brand/references/typography-specifications.md +214 -0
  75. package/templates/.agent/skills/brand/references/update.md +118 -0
  76. package/templates/.agent/skills/brand/references/visual-identity.md +96 -0
  77. package/templates/.agent/skills/brand/references/voice-framework.md +88 -0
  78. package/templates/.agent/skills/brand/scripts/extract-colors.cjs +341 -0
  79. package/templates/.agent/skills/brand/scripts/inject-brand-context.cjs +349 -0
  80. package/templates/.agent/skills/brand/scripts/sync-brand-to-tokens.cjs +266 -0
  81. package/templates/.agent/skills/brand/scripts/validate-asset.cjs +387 -0
  82. package/templates/.agent/skills/brand/templates/brand-guidelines-starter.md +275 -0
  83. package/templates/.agent/skills/clean-code/SKILL.md +201 -0
  84. package/templates/.agent/skills/code-review-checklist/SKILL.md +109 -0
  85. package/templates/.agent/skills/copywriting/SKILL.md +250 -0
  86. package/templates/.agent/skills/database-design/SKILL.md +52 -0
  87. package/templates/.agent/skills/database-design/database-selection.md +43 -0
  88. package/templates/.agent/skills/database-design/indexing.md +39 -0
  89. package/templates/.agent/skills/database-design/migrations.md +48 -0
  90. package/templates/.agent/skills/database-design/optimization.md +36 -0
  91. package/templates/.agent/skills/database-design/orm-selection.md +30 -0
  92. package/templates/.agent/skills/database-design/schema-design.md +56 -0
  93. package/templates/.agent/skills/database-design/scripts/schema_validator.py +172 -0
  94. package/templates/.agent/skills/deployment-procedures/SKILL.md +241 -0
  95. package/templates/.agent/skills/docker-expert/SKILL.md +409 -0
  96. package/templates/.agent/skills/frontend-design/animation-guide.md +331 -0
  97. package/templates/.agent/skills/frontend-design/color-system.md +311 -0
  98. package/templates/.agent/skills/frontend-design/decision-trees.md +418 -0
  99. package/templates/.agent/skills/frontend-design/motion-graphics.md +306 -0
  100. package/templates/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  101. package/templates/.agent/skills/frontend-design/scripts/ux_audit.py +722 -0
  102. package/templates/.agent/skills/frontend-design/typography-system.md +345 -0
  103. package/templates/.agent/skills/frontend-design/ux-psychology.md +541 -0
  104. package/templates/.agent/skills/frontend-design/visual-effects.md +383 -0
  105. package/templates/.agent/skills/frontend-slides/SKILL.md +92 -0
  106. package/templates/.agent/skills/frontend-slides/STYLE_PRESETS.md +347 -0
  107. package/templates/.agent/skills/frontend-slides/animation-patterns.md +110 -0
  108. package/templates/.agent/skills/frontend-slides/examples/n8n-jupviec-automation.html +789 -0
  109. package/templates/.agent/skills/frontend-slides/examples/n8n-jupviec-automation.pptx +0 -0
  110. package/templates/.agent/skills/frontend-slides/html-template.md +347 -0
  111. package/templates/.agent/skills/frontend-slides/scripts/export-pptx.py +58 -0
  112. package/templates/.agent/skills/frontend-slides/scripts/extract-pptx.py +96 -0
  113. package/templates/.agent/skills/frontend-slides/viewport-base.css +153 -0
  114. package/templates/.agent/skills/game-development/2d-games/SKILL.md +119 -0
  115. package/templates/.agent/skills/game-development/3d-games/SKILL.md +135 -0
  116. package/templates/.agent/skills/game-development/SKILL.md +167 -0
  117. package/templates/.agent/skills/game-development/game-art/SKILL.md +185 -0
  118. package/templates/.agent/skills/game-development/game-audio/SKILL.md +190 -0
  119. package/templates/.agent/skills/game-development/game-design/SKILL.md +129 -0
  120. package/templates/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
  121. package/templates/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
  122. package/templates/.agent/skills/game-development/pc-games/SKILL.md +144 -0
  123. package/templates/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
  124. package/templates/.agent/skills/game-development/web-games/SKILL.md +150 -0
  125. package/templates/.agent/skills/geo-fundamentals/SKILL.md +156 -0
  126. package/templates/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  127. package/templates/.agent/skills/growth-engine/SKILL.md +244 -0
  128. package/templates/.agent/skills/i18n-localization/SKILL.md +154 -0
  129. package/templates/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  130. package/templates/.agent/skills/lint-and-validate/SKILL.md +45 -0
  131. package/templates/.agent/skills/lint-and-validate/scripts/lint_runner.py +172 -0
  132. package/templates/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  133. package/templates/.agent/skills/marketing-report-expert/SKILL.md +70 -0
  134. package/templates/.agent/skills/mcp-builder/SKILL.md +176 -0
  135. package/templates/.agent/skills/minimax-docx/LICENSE +21 -0
  136. package/templates/.agent/skills/minimax-docx/SKILL.md +274 -0
  137. package/templates/.agent/skills/minimax-docx/assets/styles/academic_styles.xml +250 -0
  138. package/templates/.agent/skills/minimax-docx/assets/styles/corporate_styles.xml +284 -0
  139. package/templates/.agent/skills/minimax-docx/assets/styles/default_styles.xml +449 -0
  140. package/templates/.agent/skills/minimax-docx/assets/xsd/aesthetic-rules.xsd +470 -0
  141. package/templates/.agent/skills/minimax-docx/assets/xsd/business-rules.xsd +130 -0
  142. package/templates/.agent/skills/minimax-docx/assets/xsd/common-types.xsd +159 -0
  143. package/templates/.agent/skills/minimax-docx/assets/xsd/wml-subset.xsd +589 -0
  144. package/templates/.agent/skills/minimax-docx/references/cjk_typography.md +357 -0
  145. package/templates/.agent/skills/minimax-docx/references/cjk_university_template_guide.md +184 -0
  146. package/templates/.agent/skills/minimax-docx/references/comments_guide.md +191 -0
  147. package/templates/.agent/skills/minimax-docx/references/design_good_bad_examples.md +829 -0
  148. package/templates/.agent/skills/minimax-docx/references/design_principles.md +819 -0
  149. package/templates/.agent/skills/minimax-docx/references/openxml_element_order.md +308 -0
  150. package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part1.md +4061 -0
  151. package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part2.md +2820 -0
  152. package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part3.md +3381 -0
  153. package/templates/.agent/skills/minimax-docx/references/openxml_namespaces.md +82 -0
  154. package/templates/.agent/skills/minimax-docx/references/openxml_units.md +72 -0
  155. package/templates/.agent/skills/minimax-docx/references/scenario_a_create.md +284 -0
  156. package/templates/.agent/skills/minimax-docx/references/scenario_b_edit_content.md +295 -0
  157. package/templates/.agent/skills/minimax-docx/references/scenario_c_apply_template.md +456 -0
  158. package/templates/.agent/skills/minimax-docx/references/track_changes_guide.md +200 -0
  159. package/templates/.agent/skills/minimax-docx/references/troubleshooting.md +506 -0
  160. package/templates/.agent/skills/minimax-docx/references/typography_guide.md +294 -0
  161. package/templates/.agent/skills/minimax-docx/references/xsd_validation_guide.md +158 -0
  162. package/templates/.agent/skills/minimax-docx/scripts/doc_to_docx.sh +40 -0
  163. package/templates/.agent/skills/minimax-docx/scripts/docx_preview.sh +37 -0
  164. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/MiniMaxAIDocx.Cli.csproj +19 -0
  165. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
  166. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
  167. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
  168. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
  169. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
  170. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
  171. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
  172. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
  173. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
  174. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/MiniMaxAIDocx.Core.csproj +15 -0
  175. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
  176. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
  177. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
  178. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
  179. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
  180. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
  181. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
  182. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
  183. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
  184. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
  185. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
  186. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
  187. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
  188. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
  189. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
  190. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
  191. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
  192. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
  193. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
  194. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
  195. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
  196. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
  197. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
  198. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
  199. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
  200. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
  201. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
  202. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
  203. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
  204. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
  205. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
  206. package/templates/.agent/skills/minimax-docx/scripts/env_check.sh +196 -0
  207. package/templates/.agent/skills/minimax-docx/scripts/setup.ps1 +274 -0
  208. package/templates/.agent/skills/minimax-docx/scripts/setup.sh +504 -0
  209. package/templates/.agent/skills/minimax-multimodal-toolkit/SKILL.md +359 -0
  210. package/templates/.agent/skills/minimax-pdf/README.md +222 -0
  211. package/templates/.agent/skills/minimax-pdf/SKILL.md +201 -0
  212. package/templates/.agent/skills/minimax-pdf/design/design.md +381 -0
  213. package/templates/.agent/skills/minimax-pdf/scripts/cover.py +1579 -0
  214. package/templates/.agent/skills/minimax-pdf/scripts/fill_inspect.py +200 -0
  215. package/templates/.agent/skills/minimax-pdf/scripts/fill_write.py +242 -0
  216. package/templates/.agent/skills/minimax-pdf/scripts/make.sh +491 -0
  217. package/templates/.agent/skills/minimax-pdf/scripts/merge.py +112 -0
  218. package/templates/.agent/skills/minimax-pdf/scripts/palette.py +559 -0
  219. package/templates/.agent/skills/minimax-pdf/scripts/reformat_parse.py +374 -0
  220. package/templates/.agent/skills/minimax-pdf/scripts/render_body.py +1055 -0
  221. package/templates/.agent/skills/minimax-pdf/scripts/render_cover.cjs +111 -0
  222. package/templates/.agent/skills/minimax-xlsx/SKILL.md +138 -0
  223. package/templates/.agent/skills/minimax-xlsx/references/create.md +691 -0
  224. package/templates/.agent/skills/minimax-xlsx/references/edit.md +684 -0
  225. package/templates/.agent/skills/minimax-xlsx/references/fix.md +37 -0
  226. package/templates/.agent/skills/minimax-xlsx/references/format.md +768 -0
  227. package/templates/.agent/skills/minimax-xlsx/references/ooxml-cheatsheet.md +231 -0
  228. package/templates/.agent/skills/minimax-xlsx/references/read-analyze.md +97 -0
  229. package/templates/.agent/skills/minimax-xlsx/references/validate.md +772 -0
  230. package/templates/.agent/skills/minimax-xlsx/scripts/formula_check.py +422 -0
  231. package/templates/.agent/skills/minimax-xlsx/scripts/libreoffice_recalc.py +248 -0
  232. package/templates/.agent/skills/minimax-xlsx/scripts/shared_strings_builder.py +163 -0
  233. package/templates/.agent/skills/minimax-xlsx/scripts/style_audit.py +575 -0
  234. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_add_column.py +395 -0
  235. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_insert_row.py +274 -0
  236. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_pack.py +87 -0
  237. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_reader.py +362 -0
  238. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_shift_rows.py +396 -0
  239. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_unpack.py +130 -0
  240. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/[Content_Types].xml +9 -0
  241. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/_rels/.rels +6 -0
  242. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
  243. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
  244. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/styles.xml +160 -0
  245. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/workbook.xml +30 -0
  246. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
  247. package/templates/.agent/skills/mobile-design/SKILL.md +394 -0
  248. package/templates/.agent/skills/mobile-design/decision-trees.md +516 -0
  249. package/templates/.agent/skills/mobile-design/mobile-backend.md +491 -0
  250. package/templates/.agent/skills/mobile-design/mobile-color-system.md +420 -0
  251. package/templates/.agent/skills/mobile-design/mobile-debugging.md +122 -0
  252. package/templates/.agent/skills/mobile-design/mobile-design-thinking.md +357 -0
  253. package/templates/.agent/skills/mobile-design/mobile-navigation.md +458 -0
  254. package/templates/.agent/skills/mobile-design/mobile-performance.md +767 -0
  255. package/templates/.agent/skills/mobile-design/mobile-testing.md +356 -0
  256. package/templates/.agent/skills/mobile-design/mobile-typography.md +433 -0
  257. package/templates/.agent/skills/mobile-design/platform-android.md +666 -0
  258. package/templates/.agent/skills/mobile-design/platform-ios.md +561 -0
  259. package/templates/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
  260. package/templates/.agent/skills/mobile-design/touch-psychology.md +537 -0
  261. package/templates/.agent/skills/nestjs-expert/SKILL.md +552 -0
  262. package/templates/.agent/skills/nextjs-best-practices/SKILL.md +203 -0
  263. package/templates/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
  264. package/templates/.agent/skills/parallel-agents/SKILL.md +175 -0
  265. package/templates/.agent/skills/performance-profiling/SKILL.md +143 -0
  266. package/templates/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  267. package/templates/.agent/skills/plan-writing/SKILL.md +152 -0
  268. package/templates/.agent/skills/powershell-windows/SKILL.md +167 -0
  269. package/templates/.agent/skills/ppc-advertising/SKILL.md +183 -475
  270. package/templates/.agent/skills/pptx-generator/SKILL.md +249 -0
  271. package/templates/.agent/skills/pptx-generator/references/design-system.md +392 -0
  272. package/templates/.agent/skills/pptx-generator/references/editing.md +162 -0
  273. package/templates/.agent/skills/pptx-generator/references/pitfalls.md +112 -0
  274. package/templates/.agent/skills/pptx-generator/references/pptxgenjs.md +420 -0
  275. package/templates/.agent/skills/pptx-generator/references/slide-types.md +413 -0
  276. package/templates/.agent/skills/prisma-expert/SKILL.md +355 -0
  277. package/templates/.agent/skills/python-patterns/SKILL.md +441 -0
  278. package/templates/.agent/skills/react-patterns/SKILL.md +198 -0
  279. package/templates/.agent/skills/red-team-tactics/SKILL.md +199 -0
  280. package/templates/.agent/skills/remotion-best-practices/SKILL.md +45 -111
  281. package/templates/.agent/skills/remotion-best-practices/rules/3d.md +4 -4
  282. package/templates/.agent/skills/remotion-best-practices/rules/animations.md +5 -7
  283. package/templates/.agent/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  284. package/templates/.agent/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  285. package/templates/.agent/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
  286. package/templates/.agent/skills/remotion-best-practices/rules/assets.md +78 -0
  287. package/templates/.agent/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
  288. package/templates/.agent/skills/remotion-best-practices/rules/audio.md +1 -4
  289. package/templates/.agent/skills/remotion-best-practices/rules/calculate-metadata.md +47 -17
  290. package/templates/.agent/skills/remotion-best-practices/rules/can-decode.md +75 -0
  291. package/templates/.agent/skills/remotion-best-practices/rules/charts.md +80 -48
  292. package/templates/.agent/skills/remotion-best-practices/rules/compositions.md +22 -14
  293. package/templates/.agent/skills/remotion-best-practices/rules/display-captions.md +79 -21
  294. package/templates/.agent/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  295. package/templates/.agent/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
  296. package/templates/.agent/skills/remotion-best-practices/rules/fonts.md +96 -54
  297. package/templates/.agent/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  298. package/templates/.agent/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  299. package/templates/.agent/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
  300. package/templates/.agent/skills/remotion-best-practices/rules/gifs.md +21 -18
  301. package/templates/.agent/skills/remotion-best-practices/rules/images.md +6 -2
  302. package/templates/.agent/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
  303. package/templates/.agent/skills/remotion-best-practices/rules/light-leaks.md +73 -0
  304. package/templates/.agent/skills/remotion-best-practices/rules/lottie.md +10 -7
  305. package/templates/.agent/skills/remotion-best-practices/rules/maps.md +412 -0
  306. package/templates/.agent/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  307. package/templates/.agent/skills/remotion-best-practices/rules/measuring-text.md +140 -0
  308. package/templates/.agent/skills/remotion-best-practices/rules/parameters.md +109 -0
  309. package/templates/.agent/skills/remotion-best-practices/rules/sequencing.md +13 -1
  310. package/templates/.agent/skills/remotion-best-practices/rules/sfx.md +26 -0
  311. package/templates/.agent/skills/remotion-best-practices/rules/subtitles.md +36 -0
  312. package/templates/.agent/skills/remotion-best-practices/rules/tailwind.md +11 -0
  313. package/templates/.agent/skills/remotion-best-practices/rules/text-animations.md +4 -115
  314. package/templates/.agent/skills/remotion-best-practices/rules/timing.md +19 -19
  315. package/templates/.agent/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
  316. package/templates/.agent/skills/remotion-best-practices/rules/transitions.md +117 -42
  317. package/templates/.agent/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
  318. package/templates/.agent/skills/remotion-best-practices/rules/trimming.md +51 -0
  319. package/templates/.agent/skills/remotion-best-practices/rules/voiceover.md +99 -0
  320. package/templates/.agent/skills/seo-fundamentals/SKILL.md +83 -441
  321. package/templates/.agent/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
  322. package/templates/.agent/skills/server-management/SKILL.md +161 -0
  323. package/templates/.agent/skills/systematic-debugging/SKILL.md +109 -0
  324. package/templates/.agent/skills/tdd-workflow/SKILL.md +149 -0
  325. package/templates/.agent/skills/testing-patterns/SKILL.md +178 -0
  326. package/templates/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
  327. package/templates/.agent/skills/tutorial-video-expert/SKILL.md +88 -0
  328. package/templates/.agent/skills/typescript-expert/SKILL.md +429 -0
  329. package/templates/.agent/skills/ui-ux-pro-max/SKILL.md +1 -1
  330. package/templates/.agent/skills/ui-ux-pro-max/data/charts.csv +26 -0
  331. package/templates/.agent/skills/ui-ux-pro-max/data/colors.csv +97 -0
  332. package/templates/.agent/skills/ui-ux-pro-max/data/icons.csv +101 -0
  333. package/templates/.agent/skills/ui-ux-pro-max/data/landing.csv +31 -0
  334. package/templates/.agent/skills/ui-ux-pro-max/data/products.csv +97 -0
  335. package/templates/.agent/skills/ui-ux-pro-max/data/prompts.csv +24 -0
  336. package/templates/.agent/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  337. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  338. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  339. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  340. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  341. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  342. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  343. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  344. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  345. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  346. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  347. package/templates/.agent/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  348. package/templates/.agent/skills/ui-ux-pro-max/data/styles.csv +59 -0
  349. package/templates/.agent/skills/ui-ux-pro-max/data/typography.csv +58 -0
  350. package/templates/.agent/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  351. package/templates/.agent/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  352. package/templates/.agent/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  353. package/templates/.agent/skills/ui-ux-pro-max/scripts/core.py +257 -0
  354. package/templates/.agent/skills/ui-ux-pro-max/scripts/design_system.py +487 -0
  355. package/templates/.agent/skills/ui-ux-pro-max/scripts/search.py +76 -0
  356. package/templates/.agent/skills/vision-analysis/SKILL.md +174 -0
  357. package/templates/.agent/skills/vue-expert/SKILL.md +374 -0
  358. package/templates/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
  359. package/templates/.agent/skills/vulnerability-scanner/checklists.md +121 -0
  360. package/templates/.agent/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
  361. package/templates/.agent/skills/webapp-testing/SKILL.md +187 -0
  362. package/templates/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  363. package/templates/.agent/workflows/analyze.md +3 -0
  364. package/templates/.agent/workflows/brainstorm.md +113 -0
  365. package/templates/.agent/workflows/brand-report.md +44 -0
  366. package/templates/.agent/workflows/create.md +59 -0
  367. package/templates/.agent/workflows/debug.md +103 -0
  368. package/templates/.agent/workflows/deploy.md +176 -0
  369. package/templates/.agent/workflows/enhance.md +63 -0
  370. package/templates/.agent/workflows/orchestrate.md +237 -0
  371. package/templates/.agent/workflows/plan.md +89 -0
  372. package/templates/.agent/workflows/preview.md +80 -0
  373. package/templates/.agent/workflows/report.md +49 -0
  374. package/templates/.agent/workflows/status.md +86 -0
  375. package/templates/.agent/workflows/test.md +144 -0
  376. package/templates/.agent/workflows/ui-ux-pro-max.md +231 -0
@@ -0,0 +1,103 @@
1
+ import {loadFont} from '@remotion/google-fonts/Inter';
2
+ import React from 'react';
3
+ import {AbsoluteFill, spring, useCurrentFrame, useVideoConfig} from 'remotion';
4
+
5
+ /*
6
+ * Highlight a word in a sentence with a spring-animated wipe effect.
7
+ */
8
+
9
+ // Ideal composition size: 1280x720
10
+
11
+ const COLOR_BG = '#ffffff';
12
+ const COLOR_TEXT = '#000000';
13
+ const COLOR_HIGHLIGHT = '#A7C7E7';
14
+ const FULL_TEXT = 'This is Remotion.';
15
+ const HIGHLIGHT_WORD = 'Remotion';
16
+ const FONT_SIZE = 72;
17
+ const FONT_WEIGHT = 700;
18
+ const HIGHLIGHT_START_FRAME = 30;
19
+ const HIGHLIGHT_WIPE_DURATION = 18;
20
+
21
+ const {fontFamily} = loadFont();
22
+
23
+ const Highlight: React.FC<{
24
+ word: string;
25
+ color: string;
26
+ delay: number;
27
+ durationInFrames: number;
28
+ }> = ({word, color, delay, durationInFrames}) => {
29
+ const frame = useCurrentFrame();
30
+ const {fps} = useVideoConfig();
31
+
32
+ const highlightProgress = spring({
33
+ fps,
34
+ frame,
35
+ config: {damping: 200},
36
+ delay,
37
+ durationInFrames,
38
+ });
39
+ const scaleX = Math.max(0, Math.min(1, highlightProgress));
40
+
41
+ return (
42
+ <span style={{position: 'relative', display: 'inline-block'}}>
43
+ <span
44
+ style={{
45
+ position: 'absolute',
46
+ left: 0,
47
+ right: 0,
48
+ top: '50%',
49
+ height: '1.05em',
50
+ transform: `translateY(-50%) scaleX(${scaleX})`,
51
+ transformOrigin: 'left center',
52
+ backgroundColor: color,
53
+ borderRadius: '0.18em',
54
+ zIndex: 0,
55
+ }}
56
+ />
57
+ <span style={{position: 'relative', zIndex: 1}}>{word}</span>
58
+ </span>
59
+ );
60
+ };
61
+
62
+ export const MyAnimation = () => {
63
+ const highlightIndex = FULL_TEXT.indexOf(HIGHLIGHT_WORD);
64
+ const hasHighlight = highlightIndex >= 0;
65
+ const preText = hasHighlight ? FULL_TEXT.slice(0, highlightIndex) : FULL_TEXT;
66
+ const postText = hasHighlight
67
+ ? FULL_TEXT.slice(highlightIndex + HIGHLIGHT_WORD.length)
68
+ : '';
69
+
70
+ return (
71
+ <AbsoluteFill
72
+ style={{
73
+ backgroundColor: COLOR_BG,
74
+ alignItems: 'center',
75
+ justifyContent: 'center',
76
+ fontFamily,
77
+ }}
78
+ >
79
+ <div
80
+ style={{
81
+ color: COLOR_TEXT,
82
+ fontSize: FONT_SIZE,
83
+ fontWeight: FONT_WEIGHT,
84
+ }}
85
+ >
86
+ {hasHighlight ? (
87
+ <>
88
+ <span>{preText}</span>
89
+ <Highlight
90
+ word={HIGHLIGHT_WORD}
91
+ color={COLOR_HIGHLIGHT}
92
+ delay={HIGHLIGHT_START_FRAME}
93
+ durationInFrames={HIGHLIGHT_WIPE_DURATION}
94
+ />
95
+ <span>{postText}</span>
96
+ </>
97
+ ) : (
98
+ <span>{FULL_TEXT}</span>
99
+ )}
100
+ </div>
101
+ </AbsoluteFill>
102
+ );
103
+ };
@@ -0,0 +1,78 @@
1
+ ---
2
+ name: assets
3
+ description: Importing images, videos, audio, and fonts into Remotion
4
+ metadata:
5
+ tags: assets, staticFile, images, fonts, public
6
+ ---
7
+
8
+ # Importing assets in Remotion
9
+
10
+ ## The public folder
11
+
12
+ Place assets in the `public/` folder at your project root.
13
+
14
+ ## Using staticFile()
15
+
16
+ You MUST use `staticFile()` to reference files from the `public/` folder:
17
+
18
+ ```tsx
19
+ import { Img, staticFile } from "remotion";
20
+
21
+ export const MyComposition = () => {
22
+ return <Img src={staticFile("logo.png")} />;
23
+ };
24
+ ```
25
+
26
+ The function returns an encoded URL that works correctly when deploying to subdirectories.
27
+
28
+ ## Using with components
29
+
30
+ **Images:**
31
+
32
+ ```tsx
33
+ import { Img, staticFile } from "remotion";
34
+
35
+ <Img src={staticFile("photo.png")} />;
36
+ ```
37
+
38
+ **Videos:**
39
+
40
+ ```tsx
41
+ import { Video } from "@remotion/media";
42
+ import { staticFile } from "remotion";
43
+
44
+ <Video src={staticFile("clip.mp4")} />;
45
+ ```
46
+
47
+ **Audio:**
48
+
49
+ ```tsx
50
+ import { Audio } from "@remotion/media";
51
+ import { staticFile } from "remotion";
52
+
53
+ <Audio src={staticFile("music.mp3")} />;
54
+ ```
55
+
56
+ **Fonts:**
57
+
58
+ ```tsx
59
+ import { staticFile } from "remotion";
60
+
61
+ const fontFamily = new FontFace("MyFont", `url(${staticFile("font.woff2")})`);
62
+ await fontFamily.load();
63
+ document.fonts.add(fontFamily);
64
+ ```
65
+
66
+ ## Remote URLs
67
+
68
+ Remote URLs can be used directly without `staticFile()`:
69
+
70
+ ```tsx
71
+ <Img src="https://example.com/image.png" />
72
+ <Video src="https://remotion.media/video.mp4" />
73
+ ```
74
+
75
+ ## Important notes
76
+
77
+ - Remotion components (`<Img>`, `<Video>`, `<Audio>`) ensure assets are fully loaded before rendering
78
+ - Special characters in filenames (`#`, `?`, `&`) are automatically encoded
@@ -0,0 +1,198 @@
1
+ ---
2
+ name: audio-visualization
3
+ description: Audio visualization patterns - spectrum bars, waveforms, bass-reactive effects
4
+ metadata:
5
+ tags: audio, visualization, spectrum, waveform, bass, music, audiogram, frequency
6
+ ---
7
+
8
+ # Audio Visualization in Remotion
9
+
10
+ ## Prerequisites
11
+
12
+ ```bash
13
+ npx remotion add @remotion/media-utils
14
+ ```
15
+
16
+ ## Loading Audio Data
17
+
18
+ Use `useWindowedAudioData()` (https://www.remotion.dev/docs/use-windowed-audio-data) to load audio data:
19
+
20
+ ```tsx
21
+ import { useWindowedAudioData } from "@remotion/media-utils";
22
+ import { staticFile, useCurrentFrame, useVideoConfig } from "remotion";
23
+
24
+ const frame = useCurrentFrame();
25
+ const { fps } = useVideoConfig();
26
+
27
+ const { audioData, dataOffsetInSeconds } = useWindowedAudioData({
28
+ src: staticFile("podcast.wav"),
29
+ frame,
30
+ fps,
31
+ windowInSeconds: 30,
32
+ });
33
+ ```
34
+
35
+ ## Spectrum Bar Visualization
36
+
37
+ Use `visualizeAudio()` (https://www.remotion.dev/docs/visualize-audio) to get frequency data for bar charts:
38
+
39
+ ```tsx
40
+ import { useWindowedAudioData, visualizeAudio } from "@remotion/media-utils";
41
+ import { staticFile, useCurrentFrame, useVideoConfig } from "remotion";
42
+
43
+ const frame = useCurrentFrame();
44
+ const { fps } = useVideoConfig();
45
+
46
+ const { audioData, dataOffsetInSeconds } = useWindowedAudioData({
47
+ src: staticFile("music.mp3"),
48
+ frame,
49
+ fps,
50
+ windowInSeconds: 30,
51
+ });
52
+
53
+ if (!audioData) {
54
+ return null;
55
+ }
56
+
57
+ const frequencies = visualizeAudio({
58
+ fps,
59
+ frame,
60
+ audioData,
61
+ numberOfSamples: 256,
62
+ optimizeFor: "speed",
63
+ dataOffsetInSeconds,
64
+ });
65
+
66
+ return (
67
+ <div style={{ display: "flex", alignItems: "flex-end", height: 200 }}>
68
+ {frequencies.map((v, i) => (
69
+ <div
70
+ key={i}
71
+ style={{
72
+ flex: 1,
73
+ height: `${v * 100}%`,
74
+ backgroundColor: "#0b84f3",
75
+ margin: "0 1px",
76
+ }}
77
+ />
78
+ ))}
79
+ </div>
80
+ );
81
+ ```
82
+
83
+ - `numberOfSamples` must be power of 2 (32, 64, 128, 256, 512, 1024)
84
+ - Values range 0-1; left of array = bass, right = highs
85
+ - Use `optimizeFor: "speed"` for Lambda or high sample counts
86
+
87
+ **Important:** When passing `audioData` to child components, also pass the `frame` from the parent. Do not call `useCurrentFrame()` in each child - this causes discontinuous visualization when children are inside `<Sequence>` with offsets.
88
+
89
+ ## Waveform Visualization
90
+
91
+ Use `visualizeAudioWaveform()` (https://www.remotion.dev/docs/media-utils/visualize-audio-waveform) with `createSmoothSvgPath()` (https://www.remotion.dev/docs/media-utils/create-smooth-svg-path) for oscilloscope-style displays:
92
+
93
+ ```tsx
94
+ import {
95
+ createSmoothSvgPath,
96
+ useWindowedAudioData,
97
+ visualizeAudioWaveform,
98
+ } from "@remotion/media-utils";
99
+ import { staticFile, useCurrentFrame, useVideoConfig } from "remotion";
100
+
101
+ const frame = useCurrentFrame();
102
+ const { width, fps } = useVideoConfig();
103
+ const HEIGHT = 200;
104
+
105
+ const { audioData, dataOffsetInSeconds } = useWindowedAudioData({
106
+ src: staticFile("voice.wav"),
107
+ frame,
108
+ fps,
109
+ windowInSeconds: 30,
110
+ });
111
+
112
+ if (!audioData) {
113
+ return null;
114
+ }
115
+
116
+ const waveform = visualizeAudioWaveform({
117
+ fps,
118
+ frame,
119
+ audioData,
120
+ numberOfSamples: 256,
121
+ windowInSeconds: 0.5,
122
+ dataOffsetInSeconds,
123
+ });
124
+
125
+ const path = createSmoothSvgPath({
126
+ points: waveform.map((y, i) => ({
127
+ x: (i / (waveform.length - 1)) * width,
128
+ y: HEIGHT / 2 + (y * HEIGHT) / 2,
129
+ })),
130
+ });
131
+
132
+ return (
133
+ <svg width={width} height={HEIGHT}>
134
+ <path d={path} fill="none" stroke="#0b84f3" strokeWidth={2} />
135
+ </svg>
136
+ );
137
+ ```
138
+
139
+ ## Bass-Reactive Effects
140
+
141
+ Extract low frequencies for beat-reactive animations:
142
+
143
+ ```tsx
144
+ const frequencies = visualizeAudio({
145
+ fps,
146
+ frame,
147
+ audioData,
148
+ numberOfSamples: 128,
149
+ optimizeFor: "speed",
150
+ dataOffsetInSeconds,
151
+ });
152
+
153
+ const lowFrequencies = frequencies.slice(0, 32);
154
+ const bassIntensity =
155
+ lowFrequencies.reduce((sum, v) => sum + v, 0) / lowFrequencies.length;
156
+
157
+ const scale = 1 + bassIntensity * 0.5;
158
+ const opacity = Math.min(0.6, bassIntensity * 0.8);
159
+ ```
160
+
161
+ ## Volume-Based Waveform
162
+
163
+ Use `getWaveformPortion()` (https://www.remotion.dev/docs/get-waveform-portion) when you need simplified volume data instead of frequency spectrum:
164
+
165
+ ```tsx
166
+ import { getWaveformPortion } from "@remotion/media-utils";
167
+ import { useCurrentFrame, useVideoConfig } from "remotion";
168
+
169
+ const frame = useCurrentFrame();
170
+ const { fps } = useVideoConfig();
171
+ const currentTimeInSeconds = frame / fps;
172
+
173
+ const waveform = getWaveformPortion({
174
+ audioData,
175
+ startTimeInSeconds: currentTimeInSeconds,
176
+ durationInSeconds: 5,
177
+ numberOfSamples: 50,
178
+ });
179
+
180
+ // Returns array of { index, amplitude } objects (amplitude: 0-1)
181
+ waveform.map((bar) => (
182
+ <div key={bar.index} style={{ height: bar.amplitude * 100 }} />
183
+ ));
184
+ ```
185
+
186
+ ## Postprocessing
187
+
188
+ Low frequencies naturally dominate. Apply logarithmic scaling for visual balance:
189
+
190
+ ```tsx
191
+ const minDb = -100;
192
+ const maxDb = -30;
193
+
194
+ const scaled = frequencies.map((value) => {
195
+ const db = 20 * Math.log10(value);
196
+ return (db - minDb) / (maxDb - minDb);
197
+ });
198
+ ```
@@ -13,10 +13,7 @@ First, the @remotion/media package needs to be installed.
13
13
  If it is not installed, use the following command:
14
14
 
15
15
  ```bash
16
- npx remotion add @remotion/media # If project uses npm
17
- bunx remotion add @remotion/media # If project uses bun
18
- yarn remotion add @remotion/media # If project uses yarn
19
- pnpm exec remotion add @remotion/media # If project uses pnpm
16
+ npx remotion add @remotion/media
20
17
  ```
21
18
 
22
19
  ## Importing Audio
@@ -10,19 +10,30 @@ metadata:
10
10
  Use `calculateMetadata` on a `<Composition>` to dynamically set duration, dimensions, and transform props before rendering.
11
11
 
12
12
  ```tsx
13
- <Composition id="MyComp" component={MyComponent} durationInFrames={300} fps={30} width={1920} height={1080} defaultProps={{videoSrc: 'https://remotion.media/video.mp4'}} calculateMetadata={calculateMetadata} />
13
+ <Composition
14
+ id="MyComp"
15
+ component={MyComponent}
16
+ durationInFrames={300}
17
+ fps={30}
18
+ width={1920}
19
+ height={1080}
20
+ defaultProps={{ videoSrc: "https://remotion.media/video.mp4" }}
21
+ calculateMetadata={calculateMetadata}
22
+ />
14
23
  ```
15
24
 
16
25
  ## Setting duration based on a video
17
26
 
18
- Use the `getMediaMetadata()` function to get the video duration:
27
+ Use the [`getVideoDuration`](./get-video-duration.md) and [`getVideoDimensions`](./get-video-dimensions.md) skills to get the video duration and dimensions:
19
28
 
20
29
  ```tsx
21
- import {CalculateMetadataFunction} from 'remotion';
22
- import {getMediaMetadata} from '../get-media-metadata';
30
+ import { CalculateMetadataFunction } from "remotion";
31
+ import { getVideoDuration } from "./get-video-duration";
23
32
 
24
- const calculateMetadata: CalculateMetadataFunction<Props> = async ({props}) => {
25
- const {durationInSeconds} = await getMediaMetadata(props.videoSrc);
33
+ const calculateMetadata: CalculateMetadataFunction<Props> = async ({
34
+ props,
35
+ }) => {
36
+ const durationInSeconds = await getVideoDuration(props.videoSrc);
26
37
 
27
38
  return {
28
39
  durationInFrames: Math.ceil(durationInSeconds * 30),
@@ -32,14 +43,21 @@ const calculateMetadata: CalculateMetadataFunction<Props> = async ({props}) => {
32
43
 
33
44
  ## Matching dimensions of a video
34
45
 
46
+ Use the [`getVideoDimensions`](./get-video-dimensions.md) skill to get the video dimensions:
47
+
35
48
  ```tsx
36
- const calculateMetadata: CalculateMetadataFunction<Props> = async ({props}) => {
37
- const {durationInSeconds, dimensions} = await getMediaMetadata(props.videoSrc);
49
+ import { CalculateMetadataFunction } from "remotion";
50
+ import { getVideoDuration } from "./get-video-duration";
51
+ import { getVideoDimensions } from "./get-video-dimensions";
52
+
53
+ const calculateMetadata: CalculateMetadataFunction<Props> = async ({
54
+ props,
55
+ }) => {
56
+ const dimensions = await getVideoDimensions(props.videoSrc);
38
57
 
39
58
  return {
40
- durationInFrames: Math.ceil(durationInSeconds * 30),
41
- width: dimensions?.width ?? 1920,
42
- height: dimensions?.height ?? 1080,
59
+ width: dimensions.width,
60
+ height: dimensions.height,
43
61
  };
44
62
  };
45
63
  ```
@@ -47,11 +65,18 @@ const calculateMetadata: CalculateMetadataFunction<Props> = async ({props}) => {
47
65
  ## Setting duration based on multiple videos
48
66
 
49
67
  ```tsx
50
- const calculateMetadata: CalculateMetadataFunction<Props> = async ({props}) => {
51
- const metadataPromises = props.videos.map((video) => getMediaMetadata(video.src));
68
+ const calculateMetadata: CalculateMetadataFunction<Props> = async ({
69
+ props,
70
+ }) => {
71
+ const metadataPromises = props.videos.map((video) =>
72
+ getVideoDuration(video.src),
73
+ );
52
74
  const allMetadata = await Promise.all(metadataPromises);
53
75
 
54
- const totalDuration = allMetadata.reduce((sum, meta) => sum + meta.durationInSeconds, 0);
76
+ const totalDuration = allMetadata.reduce(
77
+ (sum, durationInSeconds) => sum + durationInSeconds,
78
+ 0,
79
+ );
55
80
 
56
81
  return {
57
82
  durationInFrames: Math.ceil(totalDuration * 30),
@@ -64,7 +89,9 @@ const calculateMetadata: CalculateMetadataFunction<Props> = async ({props}) => {
64
89
  Set the default output filename based on props:
65
90
 
66
91
  ```tsx
67
- const calculateMetadata: CalculateMetadataFunction<Props> = async ({props}) => {
92
+ const calculateMetadata: CalculateMetadataFunction<Props> = async ({
93
+ props,
94
+ }) => {
68
95
  return {
69
96
  defaultOutName: `video-${props.id}.mp4`,
70
97
  };
@@ -76,8 +103,11 @@ const calculateMetadata: CalculateMetadataFunction<Props> = async ({props}) => {
76
103
  Fetch data or transform props before rendering:
77
104
 
78
105
  ```tsx
79
- const calculateMetadata: CalculateMetadataFunction<Props> = async ({props, abortSignal}) => {
80
- const response = await fetch(props.dataUrl, {signal: abortSignal});
106
+ const calculateMetadata: CalculateMetadataFunction<Props> = async ({
107
+ props,
108
+ abortSignal,
109
+ }) => {
110
+ const response = await fetch(props.dataUrl, { signal: abortSignal });
81
111
  const data = await response.json();
82
112
 
83
113
  return {
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: can-decode
3
+ description: Check if a video can be decoded by the browser using Mediabunny
4
+ metadata:
5
+ tags: decode, validation, video, audio, compatibility, browser
6
+ ---
7
+
8
+ # Checking if a video can be decoded
9
+
10
+ Use Mediabunny to check if a video can be decoded by the browser before attempting to play it.
11
+
12
+ ## The `canDecode()` function
13
+
14
+ This function can be copy-pasted into any project.
15
+
16
+ ```tsx
17
+ import { Input, ALL_FORMATS, UrlSource } from "mediabunny";
18
+
19
+ export const canDecode = async (src: string) => {
20
+ const input = new Input({
21
+ formats: ALL_FORMATS,
22
+ source: new UrlSource(src, {
23
+ getRetryDelay: () => null,
24
+ }),
25
+ });
26
+
27
+ try {
28
+ await input.getFormat();
29
+ } catch {
30
+ return false;
31
+ }
32
+
33
+ const videoTrack = await input.getPrimaryVideoTrack();
34
+ if (videoTrack && !(await videoTrack.canDecode())) {
35
+ return false;
36
+ }
37
+
38
+ const audioTrack = await input.getPrimaryAudioTrack();
39
+ if (audioTrack && !(await audioTrack.canDecode())) {
40
+ return false;
41
+ }
42
+
43
+ return true;
44
+ };
45
+ ```
46
+
47
+ ## Usage
48
+
49
+ ```tsx
50
+ const src = "https://remotion.media/video.mp4";
51
+ const isDecodable = await canDecode(src);
52
+
53
+ if (isDecodable) {
54
+ console.log("Video can be decoded");
55
+ } else {
56
+ console.log("Video cannot be decoded by this browser");
57
+ }
58
+ ```
59
+
60
+ ## Using with Blob
61
+
62
+ For file uploads or drag-and-drop, use `BlobSource`:
63
+
64
+ ```tsx
65
+ import { Input, ALL_FORMATS, BlobSource } from "mediabunny";
66
+
67
+ export const canDecodeBlob = async (blob: Blob) => {
68
+ const input = new Input({
69
+ formats: ALL_FORMATS,
70
+ source: new BlobSource(blob),
71
+ });
72
+
73
+ // Same validation logic as above
74
+ };
75
+ ```