@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.
- package/README.md +187 -74
- package/bin/index.js +4 -4
- package/package.json +4 -3
- package/templates/.agent/agents/backend-specialist.md +263 -0
- package/templates/.agent/agents/database-architect.md +226 -0
- package/templates/.agent/agents/debugger.md +225 -0
- package/templates/.agent/agents/devops-engineer.md +242 -0
- package/templates/.agent/agents/documentation-writer.md +104 -0
- package/templates/.agent/agents/explorer-agent.md +73 -0
- package/templates/.agent/agents/frontend-specialist.md +527 -0
- package/templates/.agent/agents/game-developer.md +162 -0
- package/templates/.agent/agents/mobile-developer.md +377 -0
- package/templates/.agent/agents/orchestrator.md +400 -0
- package/templates/.agent/agents/penetration-tester.md +188 -0
- package/templates/.agent/agents/performance-optimizer.md +187 -0
- package/templates/.agent/agents/project-planner.md +403 -0
- package/templates/.agent/agents/security-auditor.md +170 -0
- package/templates/.agent/agents/seo-specialist.md +111 -0
- package/templates/.agent/agents/test-engineer.md +158 -0
- package/templates/.agent/rules/GEMINI.md +248 -0
- package/templates/.agent/skills/analytics-marketing/SKILL.md +172 -324
- package/templates/.agent/skills/api-patterns/SKILL.md +81 -0
- package/templates/.agent/skills/api-patterns/api-style.md +42 -0
- package/templates/.agent/skills/api-patterns/auth.md +24 -0
- package/templates/.agent/skills/api-patterns/documentation.md +26 -0
- package/templates/.agent/skills/api-patterns/graphql.md +41 -0
- package/templates/.agent/skills/api-patterns/rate-limiting.md +31 -0
- package/templates/.agent/skills/api-patterns/response.md +37 -0
- package/templates/.agent/skills/api-patterns/rest.md +40 -0
- package/templates/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
- package/templates/.agent/skills/api-patterns/security-testing.md +122 -0
- package/templates/.agent/skills/api-patterns/trpc.md +41 -0
- package/templates/.agent/skills/api-patterns/versioning.md +22 -0
- package/templates/.agent/skills/app-builder/SKILL.md +75 -0
- package/templates/.agent/skills/app-builder/agent-coordination.md +71 -0
- package/templates/.agent/skills/app-builder/feature-building.md +53 -0
- package/templates/.agent/skills/app-builder/project-detection.md +34 -0
- package/templates/.agent/skills/app-builder/scaffolding.md +118 -0
- package/templates/.agent/skills/app-builder/tech-stack.md +40 -0
- package/templates/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/templates/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/templates/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/templates/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/templates/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/templates/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/templates/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/templates/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/templates/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
- package/templates/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
- package/templates/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
- package/templates/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
- package/templates/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/templates/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
- package/templates/.agent/skills/architecture/SKILL.md +55 -0
- package/templates/.agent/skills/architecture/context-discovery.md +43 -0
- package/templates/.agent/skills/architecture/examples.md +94 -0
- package/templates/.agent/skills/architecture/pattern-selection.md +68 -0
- package/templates/.agent/skills/architecture/patterns-reference.md +50 -0
- package/templates/.agent/skills/architecture/trade-off-analysis.md +77 -0
- package/templates/.agent/skills/banner-design/SKILL.md +192 -0
- package/templates/.agent/skills/banner-design/references/banner-sizes-and-styles.md +118 -0
- package/templates/.agent/skills/bash-linux/SKILL.md +199 -0
- package/templates/.agent/skills/behavioral-modes/SKILL.md +242 -0
- package/templates/.agent/skills/brainstorming/SKILL.md +163 -0
- package/templates/.agent/skills/brainstorming/dynamic-questioning.md +350 -0
- package/templates/.agent/skills/brand/SKILL.md +97 -0
- package/templates/.agent/skills/brand/references/approval-checklist.md +169 -0
- package/templates/.agent/skills/brand/references/asset-organization.md +157 -0
- package/templates/.agent/skills/brand/references/brand-guideline-template.md +140 -0
- package/templates/.agent/skills/brand/references/color-palette-management.md +186 -0
- package/templates/.agent/skills/brand/references/consistency-checklist.md +94 -0
- package/templates/.agent/skills/brand/references/logo-usage-rules.md +185 -0
- package/templates/.agent/skills/brand/references/messaging-framework.md +85 -0
- package/templates/.agent/skills/brand/references/typography-specifications.md +214 -0
- package/templates/.agent/skills/brand/references/update.md +118 -0
- package/templates/.agent/skills/brand/references/visual-identity.md +96 -0
- package/templates/.agent/skills/brand/references/voice-framework.md +88 -0
- package/templates/.agent/skills/brand/scripts/extract-colors.cjs +341 -0
- package/templates/.agent/skills/brand/scripts/inject-brand-context.cjs +349 -0
- package/templates/.agent/skills/brand/scripts/sync-brand-to-tokens.cjs +266 -0
- package/templates/.agent/skills/brand/scripts/validate-asset.cjs +387 -0
- package/templates/.agent/skills/brand/templates/brand-guidelines-starter.md +275 -0
- package/templates/.agent/skills/clean-code/SKILL.md +201 -0
- package/templates/.agent/skills/code-review-checklist/SKILL.md +109 -0
- package/templates/.agent/skills/copywriting/SKILL.md +250 -0
- package/templates/.agent/skills/database-design/SKILL.md +52 -0
- package/templates/.agent/skills/database-design/database-selection.md +43 -0
- package/templates/.agent/skills/database-design/indexing.md +39 -0
- package/templates/.agent/skills/database-design/migrations.md +48 -0
- package/templates/.agent/skills/database-design/optimization.md +36 -0
- package/templates/.agent/skills/database-design/orm-selection.md +30 -0
- package/templates/.agent/skills/database-design/schema-design.md +56 -0
- package/templates/.agent/skills/database-design/scripts/schema_validator.py +172 -0
- package/templates/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/templates/.agent/skills/docker-expert/SKILL.md +409 -0
- package/templates/.agent/skills/frontend-design/animation-guide.md +331 -0
- package/templates/.agent/skills/frontend-design/color-system.md +311 -0
- package/templates/.agent/skills/frontend-design/decision-trees.md +418 -0
- package/templates/.agent/skills/frontend-design/motion-graphics.md +306 -0
- package/templates/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/templates/.agent/skills/frontend-design/scripts/ux_audit.py +722 -0
- package/templates/.agent/skills/frontend-design/typography-system.md +345 -0
- package/templates/.agent/skills/frontend-design/ux-psychology.md +541 -0
- package/templates/.agent/skills/frontend-design/visual-effects.md +383 -0
- package/templates/.agent/skills/frontend-slides/SKILL.md +92 -0
- package/templates/.agent/skills/frontend-slides/STYLE_PRESETS.md +347 -0
- package/templates/.agent/skills/frontend-slides/animation-patterns.md +110 -0
- package/templates/.agent/skills/frontend-slides/examples/n8n-jupviec-automation.html +789 -0
- package/templates/.agent/skills/frontend-slides/examples/n8n-jupviec-automation.pptx +0 -0
- package/templates/.agent/skills/frontend-slides/html-template.md +347 -0
- package/templates/.agent/skills/frontend-slides/scripts/export-pptx.py +58 -0
- package/templates/.agent/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/templates/.agent/skills/frontend-slides/viewport-base.css +153 -0
- package/templates/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/templates/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/templates/.agent/skills/game-development/SKILL.md +167 -0
- package/templates/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/templates/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/templates/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/templates/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/templates/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/templates/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/templates/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/templates/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/templates/.agent/skills/geo-fundamentals/SKILL.md +156 -0
- package/templates/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
- package/templates/.agent/skills/growth-engine/SKILL.md +244 -0
- package/templates/.agent/skills/i18n-localization/SKILL.md +154 -0
- package/templates/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/templates/.agent/skills/lint-and-validate/SKILL.md +45 -0
- package/templates/.agent/skills/lint-and-validate/scripts/lint_runner.py +172 -0
- package/templates/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/templates/.agent/skills/marketing-report-expert/SKILL.md +70 -0
- package/templates/.agent/skills/mcp-builder/SKILL.md +176 -0
- package/templates/.agent/skills/minimax-docx/LICENSE +21 -0
- package/templates/.agent/skills/minimax-docx/SKILL.md +274 -0
- package/templates/.agent/skills/minimax-docx/assets/styles/academic_styles.xml +250 -0
- package/templates/.agent/skills/minimax-docx/assets/styles/corporate_styles.xml +284 -0
- package/templates/.agent/skills/minimax-docx/assets/styles/default_styles.xml +449 -0
- package/templates/.agent/skills/minimax-docx/assets/xsd/aesthetic-rules.xsd +470 -0
- package/templates/.agent/skills/minimax-docx/assets/xsd/business-rules.xsd +130 -0
- package/templates/.agent/skills/minimax-docx/assets/xsd/common-types.xsd +159 -0
- package/templates/.agent/skills/minimax-docx/assets/xsd/wml-subset.xsd +589 -0
- package/templates/.agent/skills/minimax-docx/references/cjk_typography.md +357 -0
- package/templates/.agent/skills/minimax-docx/references/cjk_university_template_guide.md +184 -0
- package/templates/.agent/skills/minimax-docx/references/comments_guide.md +191 -0
- package/templates/.agent/skills/minimax-docx/references/design_good_bad_examples.md +829 -0
- package/templates/.agent/skills/minimax-docx/references/design_principles.md +819 -0
- package/templates/.agent/skills/minimax-docx/references/openxml_element_order.md +308 -0
- package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part1.md +4061 -0
- package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part2.md +2820 -0
- package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part3.md +3381 -0
- package/templates/.agent/skills/minimax-docx/references/openxml_namespaces.md +82 -0
- package/templates/.agent/skills/minimax-docx/references/openxml_units.md +72 -0
- package/templates/.agent/skills/minimax-docx/references/scenario_a_create.md +284 -0
- package/templates/.agent/skills/minimax-docx/references/scenario_b_edit_content.md +295 -0
- package/templates/.agent/skills/minimax-docx/references/scenario_c_apply_template.md +456 -0
- package/templates/.agent/skills/minimax-docx/references/track_changes_guide.md +200 -0
- package/templates/.agent/skills/minimax-docx/references/troubleshooting.md +506 -0
- package/templates/.agent/skills/minimax-docx/references/typography_guide.md +294 -0
- package/templates/.agent/skills/minimax-docx/references/xsd_validation_guide.md +158 -0
- package/templates/.agent/skills/minimax-docx/scripts/doc_to_docx.sh +40 -0
- package/templates/.agent/skills/minimax-docx/scripts/docx_preview.sh +37 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/MiniMaxAIDocx.Cli.csproj +19 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/MiniMaxAIDocx.Core.csproj +15 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
- package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
- package/templates/.agent/skills/minimax-docx/scripts/env_check.sh +196 -0
- package/templates/.agent/skills/minimax-docx/scripts/setup.ps1 +274 -0
- package/templates/.agent/skills/minimax-docx/scripts/setup.sh +504 -0
- package/templates/.agent/skills/minimax-multimodal-toolkit/SKILL.md +359 -0
- package/templates/.agent/skills/minimax-pdf/README.md +222 -0
- package/templates/.agent/skills/minimax-pdf/SKILL.md +201 -0
- package/templates/.agent/skills/minimax-pdf/design/design.md +381 -0
- package/templates/.agent/skills/minimax-pdf/scripts/cover.py +1579 -0
- package/templates/.agent/skills/minimax-pdf/scripts/fill_inspect.py +200 -0
- package/templates/.agent/skills/minimax-pdf/scripts/fill_write.py +242 -0
- package/templates/.agent/skills/minimax-pdf/scripts/make.sh +491 -0
- package/templates/.agent/skills/minimax-pdf/scripts/merge.py +112 -0
- package/templates/.agent/skills/minimax-pdf/scripts/palette.py +559 -0
- package/templates/.agent/skills/minimax-pdf/scripts/reformat_parse.py +374 -0
- package/templates/.agent/skills/minimax-pdf/scripts/render_body.py +1055 -0
- package/templates/.agent/skills/minimax-pdf/scripts/render_cover.cjs +111 -0
- package/templates/.agent/skills/minimax-xlsx/SKILL.md +138 -0
- package/templates/.agent/skills/minimax-xlsx/references/create.md +691 -0
- package/templates/.agent/skills/minimax-xlsx/references/edit.md +684 -0
- package/templates/.agent/skills/minimax-xlsx/references/fix.md +37 -0
- package/templates/.agent/skills/minimax-xlsx/references/format.md +768 -0
- package/templates/.agent/skills/minimax-xlsx/references/ooxml-cheatsheet.md +231 -0
- package/templates/.agent/skills/minimax-xlsx/references/read-analyze.md +97 -0
- package/templates/.agent/skills/minimax-xlsx/references/validate.md +772 -0
- package/templates/.agent/skills/minimax-xlsx/scripts/formula_check.py +422 -0
- package/templates/.agent/skills/minimax-xlsx/scripts/libreoffice_recalc.py +248 -0
- package/templates/.agent/skills/minimax-xlsx/scripts/shared_strings_builder.py +163 -0
- package/templates/.agent/skills/minimax-xlsx/scripts/style_audit.py +575 -0
- package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_add_column.py +395 -0
- package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_insert_row.py +274 -0
- package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_pack.py +87 -0
- package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_reader.py +362 -0
- package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_shift_rows.py +396 -0
- package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_unpack.py +130 -0
- package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/[Content_Types].xml +9 -0
- package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/_rels/.rels +6 -0
- package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
- package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
- package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/styles.xml +160 -0
- package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/workbook.xml +30 -0
- package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
- package/templates/.agent/skills/mobile-design/SKILL.md +394 -0
- package/templates/.agent/skills/mobile-design/decision-trees.md +516 -0
- package/templates/.agent/skills/mobile-design/mobile-backend.md +491 -0
- package/templates/.agent/skills/mobile-design/mobile-color-system.md +420 -0
- package/templates/.agent/skills/mobile-design/mobile-debugging.md +122 -0
- package/templates/.agent/skills/mobile-design/mobile-design-thinking.md +357 -0
- package/templates/.agent/skills/mobile-design/mobile-navigation.md +458 -0
- package/templates/.agent/skills/mobile-design/mobile-performance.md +767 -0
- package/templates/.agent/skills/mobile-design/mobile-testing.md +356 -0
- package/templates/.agent/skills/mobile-design/mobile-typography.md +433 -0
- package/templates/.agent/skills/mobile-design/platform-android.md +666 -0
- package/templates/.agent/skills/mobile-design/platform-ios.md +561 -0
- package/templates/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/templates/.agent/skills/mobile-design/touch-psychology.md +537 -0
- package/templates/.agent/skills/nestjs-expert/SKILL.md +552 -0
- package/templates/.agent/skills/nextjs-best-practices/SKILL.md +203 -0
- package/templates/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
- package/templates/.agent/skills/parallel-agents/SKILL.md +175 -0
- package/templates/.agent/skills/performance-profiling/SKILL.md +143 -0
- package/templates/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
- package/templates/.agent/skills/plan-writing/SKILL.md +152 -0
- package/templates/.agent/skills/powershell-windows/SKILL.md +167 -0
- package/templates/.agent/skills/ppc-advertising/SKILL.md +183 -475
- package/templates/.agent/skills/pptx-generator/SKILL.md +249 -0
- package/templates/.agent/skills/pptx-generator/references/design-system.md +392 -0
- package/templates/.agent/skills/pptx-generator/references/editing.md +162 -0
- package/templates/.agent/skills/pptx-generator/references/pitfalls.md +112 -0
- package/templates/.agent/skills/pptx-generator/references/pptxgenjs.md +420 -0
- package/templates/.agent/skills/pptx-generator/references/slide-types.md +413 -0
- package/templates/.agent/skills/prisma-expert/SKILL.md +355 -0
- package/templates/.agent/skills/python-patterns/SKILL.md +441 -0
- package/templates/.agent/skills/react-patterns/SKILL.md +198 -0
- package/templates/.agent/skills/red-team-tactics/SKILL.md +199 -0
- package/templates/.agent/skills/remotion-best-practices/SKILL.md +45 -111
- package/templates/.agent/skills/remotion-best-practices/rules/3d.md +4 -4
- package/templates/.agent/skills/remotion-best-practices/rules/animations.md +5 -7
- package/templates/.agent/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/templates/.agent/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/templates/.agent/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
- package/templates/.agent/skills/remotion-best-practices/rules/assets.md +78 -0
- package/templates/.agent/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/templates/.agent/skills/remotion-best-practices/rules/audio.md +1 -4
- package/templates/.agent/skills/remotion-best-practices/rules/calculate-metadata.md +47 -17
- package/templates/.agent/skills/remotion-best-practices/rules/can-decode.md +75 -0
- package/templates/.agent/skills/remotion-best-practices/rules/charts.md +80 -48
- package/templates/.agent/skills/remotion-best-practices/rules/compositions.md +22 -14
- package/templates/.agent/skills/remotion-best-practices/rules/display-captions.md +79 -21
- package/templates/.agent/skills/remotion-best-practices/rules/extract-frames.md +229 -0
- package/templates/.agent/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
- package/templates/.agent/skills/remotion-best-practices/rules/fonts.md +96 -54
- package/templates/.agent/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/templates/.agent/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/templates/.agent/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/templates/.agent/skills/remotion-best-practices/rules/gifs.md +21 -18
- package/templates/.agent/skills/remotion-best-practices/rules/images.md +6 -2
- package/templates/.agent/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/templates/.agent/skills/remotion-best-practices/rules/light-leaks.md +73 -0
- package/templates/.agent/skills/remotion-best-practices/rules/lottie.md +10 -7
- package/templates/.agent/skills/remotion-best-practices/rules/maps.md +412 -0
- package/templates/.agent/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/templates/.agent/skills/remotion-best-practices/rules/measuring-text.md +140 -0
- package/templates/.agent/skills/remotion-best-practices/rules/parameters.md +109 -0
- package/templates/.agent/skills/remotion-best-practices/rules/sequencing.md +13 -1
- package/templates/.agent/skills/remotion-best-practices/rules/sfx.md +26 -0
- package/templates/.agent/skills/remotion-best-practices/rules/subtitles.md +36 -0
- package/templates/.agent/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/templates/.agent/skills/remotion-best-practices/rules/text-animations.md +4 -115
- package/templates/.agent/skills/remotion-best-practices/rules/timing.md +19 -19
- package/templates/.agent/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/templates/.agent/skills/remotion-best-practices/rules/transitions.md +117 -42
- package/templates/.agent/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/templates/.agent/skills/remotion-best-practices/rules/trimming.md +51 -0
- package/templates/.agent/skills/remotion-best-practices/rules/voiceover.md +99 -0
- package/templates/.agent/skills/seo-fundamentals/SKILL.md +83 -441
- package/templates/.agent/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/templates/.agent/skills/server-management/SKILL.md +161 -0
- package/templates/.agent/skills/systematic-debugging/SKILL.md +109 -0
- package/templates/.agent/skills/tdd-workflow/SKILL.md +149 -0
- package/templates/.agent/skills/testing-patterns/SKILL.md +178 -0
- package/templates/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
- package/templates/.agent/skills/tutorial-video-expert/SKILL.md +88 -0
- package/templates/.agent/skills/typescript-expert/SKILL.md +429 -0
- package/templates/.agent/skills/ui-ux-pro-max/SKILL.md +1 -1
- package/templates/.agent/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/prompts.csv +24 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/styles.csv +59 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/templates/.agent/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/templates/.agent/skills/ui-ux-pro-max/scripts/core.py +257 -0
- package/templates/.agent/skills/ui-ux-pro-max/scripts/design_system.py +487 -0
- package/templates/.agent/skills/ui-ux-pro-max/scripts/search.py +76 -0
- package/templates/.agent/skills/vision-analysis/SKILL.md +174 -0
- package/templates/.agent/skills/vue-expert/SKILL.md +374 -0
- package/templates/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
- package/templates/.agent/skills/vulnerability-scanner/checklists.md +121 -0
- package/templates/.agent/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/templates/.agent/skills/webapp-testing/SKILL.md +187 -0
- package/templates/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
- package/templates/.agent/workflows/analyze.md +3 -0
- package/templates/.agent/workflows/brainstorm.md +113 -0
- package/templates/.agent/workflows/brand-report.md +44 -0
- package/templates/.agent/workflows/create.md +59 -0
- package/templates/.agent/workflows/debug.md +103 -0
- package/templates/.agent/workflows/deploy.md +176 -0
- package/templates/.agent/workflows/enhance.md +63 -0
- package/templates/.agent/workflows/orchestrate.md +237 -0
- package/templates/.agent/workflows/plan.md +89 -0
- package/templates/.agent/workflows/preview.md +80 -0
- package/templates/.agent/workflows/report.md +49 -0
- package/templates/.agent/workflows/status.md +86 -0
- package/templates/.agent/workflows/test.md +144 -0
- package/templates/.agent/workflows/ui-ux-pro-max.md +231 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sfx
|
|
3
|
+
description: Including sound effects
|
|
4
|
+
metadata:
|
|
5
|
+
tags: sfx, sound, effect, audio
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
To include a sound effect, use the `<Audio>` tag:
|
|
9
|
+
|
|
10
|
+
```tsx
|
|
11
|
+
import { Audio } from "@remotion/sfx";
|
|
12
|
+
|
|
13
|
+
<Audio src={"https://remotion.media/whoosh.wav"} />;
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The following sound effects are available:
|
|
17
|
+
|
|
18
|
+
- `https://remotion.media/whoosh.wav`
|
|
19
|
+
- `https://remotion.media/whip.wav`
|
|
20
|
+
- `https://remotion.media/page-turn.wav`
|
|
21
|
+
- `https://remotion.media/switch.wav`
|
|
22
|
+
- `https://remotion.media/mouse-click.wav`
|
|
23
|
+
- `https://remotion.media/shutter-modern.wav`
|
|
24
|
+
- `https://remotion.media/shutter-old.wav`
|
|
25
|
+
|
|
26
|
+
For more sound effects, search the internet. A good resource is https://github.com/kapishdima/soundcn/tree/main/assets.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: subtitles
|
|
3
|
+
description: subtitles and caption rules
|
|
4
|
+
metadata:
|
|
5
|
+
tags: subtitles, captions, remotion, json
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
All captions must be processed in JSON. The captions must use the `Caption` type which is the following:
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
import type { Caption } from "@remotion/captions";
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
This is the definition:
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
type Caption = {
|
|
18
|
+
text: string;
|
|
19
|
+
startMs: number;
|
|
20
|
+
endMs: number;
|
|
21
|
+
timestampMs: number | null;
|
|
22
|
+
confidence: number | null;
|
|
23
|
+
};
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Generating captions
|
|
27
|
+
|
|
28
|
+
To transcribe video and audio files to generate captions, load the [./transcribe-captions.md](./transcribe-captions.md) file for more instructions.
|
|
29
|
+
|
|
30
|
+
## Displaying captions
|
|
31
|
+
|
|
32
|
+
To display captions in your video, load the [./display-captions.md](./display-captions.md) file for more instructions.
|
|
33
|
+
|
|
34
|
+
## Importing captions
|
|
35
|
+
|
|
36
|
+
To import captions from a .srt file, load the [./import-srt-captions.md](./import-srt-captions.md) file for more instructions.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tailwind
|
|
3
|
+
description: Using TailwindCSS in Remotion.
|
|
4
|
+
metadata:
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You can and should use TailwindCSS in Remotion, if TailwindCSS is installed in the project.
|
|
8
|
+
|
|
9
|
+
Don't use `transition-*` or `animate-*` classes - always animate using the `useCurrentFrame()` hook.
|
|
10
|
+
|
|
11
|
+
Tailwind must be installed and enabled first in a Remotion project - fetch https://www.remotion.dev/docs/tailwind using WebFetch for instructions.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: text-animations
|
|
3
3
|
description: Typography and text animation patterns for Remotion.
|
|
4
4
|
metadata:
|
|
5
|
-
tags: typography, text, typewriter, highlighter
|
|
5
|
+
tags: typography, text, typewriter, highlighter ken
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
## Text animations
|
|
@@ -11,121 +11,10 @@ Based on `useCurrentFrame()`, reduce the string character by character to create
|
|
|
11
11
|
|
|
12
12
|
## Typewriter Effect
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
```tsx
|
|
17
|
-
import { useCurrentFrame, useVideoConfig, interpolate } from "remotion";
|
|
18
|
-
|
|
19
|
-
export const Typewriter = ({ text }: { text: string }) => {
|
|
20
|
-
const frame = useCurrentFrame();
|
|
21
|
-
const { fps } = useVideoConfig();
|
|
22
|
-
|
|
23
|
-
// Characters per second
|
|
24
|
-
const CHARS_PER_SECOND = 20;
|
|
25
|
-
const charsToShow = Math.floor((frame / fps) * CHARS_PER_SECOND);
|
|
26
|
-
|
|
27
|
-
const displayText = text.slice(0, charsToShow);
|
|
28
|
-
|
|
29
|
-
return (
|
|
30
|
-
<div style={{ fontFamily: "monospace", fontSize: 48 }}>
|
|
31
|
-
{displayText}
|
|
32
|
-
<span style={{ opacity: frame % 30 < 15 ? 1 : 0 }}>|</span>
|
|
33
|
-
</div>
|
|
34
|
-
);
|
|
35
|
-
};
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### With cursor blink
|
|
39
|
-
|
|
40
|
-
```tsx
|
|
41
|
-
const cursorOpacity = Math.sin(frame * 0.3) > 0 ? 1 : 0;
|
|
42
|
-
|
|
43
|
-
<span style={{ opacity: cursorOpacity }}>|</span>
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## Word-by-word reveal
|
|
47
|
-
|
|
48
|
-
```tsx
|
|
49
|
-
const words = text.split(" ");
|
|
50
|
-
const frame = useCurrentFrame();
|
|
51
|
-
const { fps } = useVideoConfig();
|
|
14
|
+
See [Typewriter](assets/text-animations-typewriter.tsx) for an advanced example with a blinking cursor and a pause after the first sentence.
|
|
52
15
|
|
|
53
|
-
|
|
54
|
-
const wordsToShow = Math.floor((frame / fps) * WORDS_PER_SECOND);
|
|
55
|
-
|
|
56
|
-
const displayWords = words.slice(0, wordsToShow).join(" ");
|
|
57
|
-
```
|
|
16
|
+
Always use string slicing for typewriter effects. Never use per-character opacity.
|
|
58
17
|
|
|
59
18
|
## Word Highlighting
|
|
60
19
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
```tsx
|
|
64
|
-
import { useCurrentFrame, useVideoConfig, interpolate, spring } from "remotion";
|
|
65
|
-
|
|
66
|
-
export const HighlightedWord = ({ text }: { text: string }) => {
|
|
67
|
-
const frame = useCurrentFrame();
|
|
68
|
-
const { fps } = useVideoConfig();
|
|
69
|
-
|
|
70
|
-
const highlightWidth = spring({
|
|
71
|
-
frame,
|
|
72
|
-
fps,
|
|
73
|
-
config: { damping: 200 },
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
const width = interpolate(highlightWidth, [0, 1], [0, 100]);
|
|
77
|
-
|
|
78
|
-
return (
|
|
79
|
-
<span style={{ position: "relative", display: "inline-block" }}>
|
|
80
|
-
<span
|
|
81
|
-
style={{
|
|
82
|
-
position: "absolute",
|
|
83
|
-
bottom: 0,
|
|
84
|
-
left: 0,
|
|
85
|
-
width: `${width}%`,
|
|
86
|
-
height: "30%",
|
|
87
|
-
backgroundColor: "#ffff00",
|
|
88
|
-
zIndex: -1,
|
|
89
|
-
}}
|
|
90
|
-
/>
|
|
91
|
-
{text}
|
|
92
|
-
</span>
|
|
93
|
-
);
|
|
94
|
-
};
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## Staggered text entrance
|
|
98
|
-
|
|
99
|
-
```tsx
|
|
100
|
-
const words = text.split(" ");
|
|
101
|
-
|
|
102
|
-
return (
|
|
103
|
-
<div>
|
|
104
|
-
{words.map((word, i) => {
|
|
105
|
-
const delay = i * 5; // 5 frames delay per word
|
|
106
|
-
const opacity = interpolate(frame - delay, [0, 10], [0, 1], {
|
|
107
|
-
extrapolateLeft: "clamp",
|
|
108
|
-
extrapolateRight: "clamp",
|
|
109
|
-
});
|
|
110
|
-
const y = interpolate(frame - delay, [0, 10], [20, 0], {
|
|
111
|
-
extrapolateLeft: "clamp",
|
|
112
|
-
extrapolateRight: "clamp",
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
return (
|
|
116
|
-
<span
|
|
117
|
-
key={i}
|
|
118
|
-
style={{
|
|
119
|
-
display: "inline-block",
|
|
120
|
-
opacity,
|
|
121
|
-
transform: `translateY(${y}px)`,
|
|
122
|
-
marginRight: 8,
|
|
123
|
-
}}
|
|
124
|
-
>
|
|
125
|
-
{word}
|
|
126
|
-
</span>
|
|
127
|
-
);
|
|
128
|
-
})}
|
|
129
|
-
</div>
|
|
130
|
-
);
|
|
131
|
-
```
|
|
20
|
+
See [Word Highlight](assets/text-animations-word-highlight.tsx) for an example for how a word highlight is animated, like with a highlighter pen.
|
|
@@ -8,7 +8,7 @@ metadata:
|
|
|
8
8
|
A simple linear interpolation is done using the `interpolate` function.
|
|
9
9
|
|
|
10
10
|
```ts title="Going from 0 to 1 over 100 frames"
|
|
11
|
-
import {interpolate} from
|
|
11
|
+
import { interpolate } from "remotion";
|
|
12
12
|
|
|
13
13
|
const opacity = interpolate(frame, [0, 100], [0, 1]);
|
|
14
14
|
```
|
|
@@ -18,8 +18,8 @@ Here is how they can be clamped:
|
|
|
18
18
|
|
|
19
19
|
```ts title="Going from 0 to 1 over 100 frames with extrapolation"
|
|
20
20
|
const opacity = interpolate(frame, [0, 100], [0, 1], {
|
|
21
|
-
extrapolateRight:
|
|
22
|
-
extrapolateLeft:
|
|
21
|
+
extrapolateRight: "clamp",
|
|
22
|
+
extrapolateLeft: "clamp",
|
|
23
23
|
});
|
|
24
24
|
```
|
|
25
25
|
|
|
@@ -29,10 +29,10 @@ Spring animations have a more natural motion.
|
|
|
29
29
|
They go from 0 to 1 over time.
|
|
30
30
|
|
|
31
31
|
```ts title="Spring animation from 0 to 1 over 100 frames"
|
|
32
|
-
import {spring, useCurrentFrame, useVideoConfig} from
|
|
32
|
+
import { spring, useCurrentFrame, useVideoConfig } from "remotion";
|
|
33
33
|
|
|
34
34
|
const frame = useCurrentFrame();
|
|
35
|
-
const {fps} = useVideoConfig();
|
|
35
|
+
const { fps } = useVideoConfig();
|
|
36
36
|
|
|
37
37
|
const scale = spring({
|
|
38
38
|
frame,
|
|
@@ -51,7 +51,7 @@ The config can be overwritten like this:
|
|
|
51
51
|
const scale = spring({
|
|
52
52
|
frame,
|
|
53
53
|
fps,
|
|
54
|
-
config: {damping: 200},
|
|
54
|
+
config: { damping: 200 },
|
|
55
55
|
});
|
|
56
56
|
```
|
|
57
57
|
|
|
@@ -60,10 +60,10 @@ The recommended configuration for a natural motion without a bounce is: `{ dampi
|
|
|
60
60
|
Here are some common configurations:
|
|
61
61
|
|
|
62
62
|
```tsx
|
|
63
|
-
const smooth = {damping: 200}; // Smooth, no bounce (subtle reveals)
|
|
64
|
-
const snappy = {damping: 20, stiffness: 200}; // Snappy, minimal bounce (UI elements)
|
|
65
|
-
const bouncy = {damping: 8}; // Bouncy entrance (playful animations)
|
|
66
|
-
const heavy = {damping: 15, stiffness: 80, mass: 2}; // Heavy, slow, small bounce
|
|
63
|
+
const smooth = { damping: 200 }; // Smooth, no bounce (subtle reveals)
|
|
64
|
+
const snappy = { damping: 20, stiffness: 200 }; // Snappy, minimal bounce (UI elements)
|
|
65
|
+
const bouncy = { damping: 8 }; // Bouncy entrance (playful animations)
|
|
66
|
+
const heavy = { damping: 15, stiffness: 80, mass: 2 }; // Heavy, slow, small bounce
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
### Delay
|
|
@@ -105,7 +105,7 @@ const springProgress = spring({
|
|
|
105
105
|
// Map to rotation
|
|
106
106
|
const rotation = interpolate(springProgress, [0, 1], [0, 360]);
|
|
107
107
|
|
|
108
|
-
<div style={{rotate: rotation +
|
|
108
|
+
<div style={{ rotate: rotation + "deg" }} />;
|
|
109
109
|
```
|
|
110
110
|
|
|
111
111
|
### Adding springs
|
|
@@ -114,7 +114,7 @@ Springs return just numbers, so math can be performed:
|
|
|
114
114
|
|
|
115
115
|
```tsx
|
|
116
116
|
const frame = useCurrentFrame();
|
|
117
|
-
const {fps, durationInFrames} = useVideoConfig();
|
|
117
|
+
const { fps, durationInFrames } = useVideoConfig();
|
|
118
118
|
|
|
119
119
|
const inAnimation = spring({
|
|
120
120
|
frame,
|
|
@@ -135,12 +135,12 @@ const scale = inAnimation - outAnimation;
|
|
|
135
135
|
Easing can be added to the `interpolate` function:
|
|
136
136
|
|
|
137
137
|
```ts
|
|
138
|
-
import {interpolate, Easing} from
|
|
138
|
+
import { interpolate, Easing } from "remotion";
|
|
139
139
|
|
|
140
140
|
const value1 = interpolate(frame, [0, 100], [0, 1], {
|
|
141
141
|
easing: Easing.inOut(Easing.quad),
|
|
142
|
-
extrapolateLeft:
|
|
143
|
-
extrapolateRight:
|
|
142
|
+
extrapolateLeft: "clamp",
|
|
143
|
+
extrapolateRight: "clamp",
|
|
144
144
|
});
|
|
145
145
|
```
|
|
146
146
|
|
|
@@ -163,8 +163,8 @@ Convexities and curves need be combined for an easing function:
|
|
|
163
163
|
```ts
|
|
164
164
|
const value1 = interpolate(frame, [0, 100], [0, 1], {
|
|
165
165
|
easing: Easing.inOut(Easing.quad),
|
|
166
|
-
extrapolateLeft:
|
|
167
|
-
extrapolateRight:
|
|
166
|
+
extrapolateLeft: "clamp",
|
|
167
|
+
extrapolateRight: "clamp",
|
|
168
168
|
});
|
|
169
169
|
```
|
|
170
170
|
|
|
@@ -173,7 +173,7 @@ Cubic bezier curves are also supported:
|
|
|
173
173
|
```ts
|
|
174
174
|
const value1 = interpolate(frame, [0, 100], [0, 1], {
|
|
175
175
|
easing: Easing.bezier(0.8, 0.22, 0.96, 0.65),
|
|
176
|
-
extrapolateLeft:
|
|
177
|
-
extrapolateRight:
|
|
176
|
+
extrapolateLeft: "clamp",
|
|
177
|
+
extrapolateRight: "clamp",
|
|
178
178
|
});
|
|
179
179
|
```
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: transcribe-captions
|
|
3
|
+
description: Transcribing audio to generate captions in Remotion
|
|
4
|
+
metadata:
|
|
5
|
+
tags: captions, transcribe, whisper, audio, speech-to-text
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Transcribing audio
|
|
9
|
+
|
|
10
|
+
To transcribe audio to generate captions in Remotion, you can use the [`transcribe()`](https://www.remotion.dev/docs/install-whisper-cpp/transcribe) function from the [`@remotion/install-whisper-cpp`](https://www.remotion.dev/docs/install-whisper-cpp) package.
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
First, the @remotion/install-whisper-cpp package needs to be installed.
|
|
15
|
+
If it is not installed, use the following command:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx remotion add @remotion/install-whisper-cpp
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Transcribing
|
|
22
|
+
|
|
23
|
+
Make a Node.js script to download Whisper.cpp and a model, and transcribe the audio.
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
import path from "path";
|
|
27
|
+
import {
|
|
28
|
+
downloadWhisperModel,
|
|
29
|
+
installWhisperCpp,
|
|
30
|
+
transcribe,
|
|
31
|
+
toCaptions,
|
|
32
|
+
} from "@remotion/install-whisper-cpp";
|
|
33
|
+
import fs from "fs";
|
|
34
|
+
|
|
35
|
+
const to = path.join(process.cwd(), "whisper.cpp");
|
|
36
|
+
|
|
37
|
+
await installWhisperCpp({
|
|
38
|
+
to,
|
|
39
|
+
version: "1.5.5",
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
await downloadWhisperModel({
|
|
43
|
+
model: "medium.en",
|
|
44
|
+
folder: to,
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// Convert the audio to a 16KHz wav file first if needed:
|
|
48
|
+
// import {execSync} from 'child_process';
|
|
49
|
+
// execSync('ffmpeg -i /path/to/audio.mp4 -ar 16000 /path/to/audio.wav -y');
|
|
50
|
+
|
|
51
|
+
const whisperCppOutput = await transcribe({
|
|
52
|
+
model: "medium.en",
|
|
53
|
+
whisperPath: to,
|
|
54
|
+
whisperCppVersion: "1.5.5",
|
|
55
|
+
inputPath: "/path/to/audio123.wav",
|
|
56
|
+
tokenLevelTimestamps: true,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// Optional: Apply our recommended postprocessing
|
|
60
|
+
const { captions } = toCaptions({
|
|
61
|
+
whisperCppOutput,
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Write it to the public/ folder so it can be fetched from Remotion
|
|
65
|
+
fs.writeFileSync("captions123.json", JSON.stringify(captions, null, 2));
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Transcribe each clip individually and create multiple JSON files.
|
|
69
|
+
|
|
70
|
+
See [Displaying captions](display-captions.md) for how to display the captions in Remotion.
|
|
@@ -1,102 +1,172 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: transitions
|
|
3
|
-
description:
|
|
3
|
+
description: Scene transitions and overlays for Remotion using TransitionSeries.
|
|
4
4
|
metadata:
|
|
5
|
-
tags: transitions, fade, slide, wipe, scenes
|
|
5
|
+
tags: transitions, overlays, fade, slide, wipe, scenes
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## TransitionSeries
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
This will absolutely position the children.
|
|
10
|
+
`<TransitionSeries>` arranges scenes and supports two ways to enhance the cut point between them:
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
- **Transitions** (`<TransitionSeries.Transition>`) — crossfade, slide, wipe, etc. between two scenes. Shortens the timeline because both scenes play simultaneously during the transition.
|
|
13
|
+
- **Overlays** (`<TransitionSeries.Overlay>`) — render an effect (e.g. a light leak) on top of the cut point without shortening the timeline.
|
|
14
|
+
|
|
15
|
+
Children are absolutely positioned.
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
If it is not, use the following command:
|
|
17
|
+
## Prerequisites
|
|
17
18
|
|
|
18
19
|
```bash
|
|
19
|
-
npx remotion add @remotion/transitions
|
|
20
|
-
bunx remotion add @remotion/transitions # If project uses bun
|
|
21
|
-
yarn remotion add @remotion/transitions # If project uses yarn
|
|
22
|
-
pnpm exec remotion add @remotion/transitions # If project uses pnpm
|
|
20
|
+
npx remotion add @remotion/transitions
|
|
23
21
|
```
|
|
24
22
|
|
|
25
|
-
##
|
|
23
|
+
## Transition example
|
|
26
24
|
|
|
27
25
|
```tsx
|
|
28
|
-
import {TransitionSeries, linearTiming} from
|
|
29
|
-
import {fade} from
|
|
26
|
+
import { TransitionSeries, linearTiming } from "@remotion/transitions";
|
|
27
|
+
import { fade } from "@remotion/transitions/fade";
|
|
30
28
|
|
|
31
29
|
<TransitionSeries>
|
|
32
30
|
<TransitionSeries.Sequence durationInFrames={60}>
|
|
33
31
|
<SceneA />
|
|
34
32
|
</TransitionSeries.Sequence>
|
|
35
|
-
<TransitionSeries.Transition
|
|
33
|
+
<TransitionSeries.Transition
|
|
34
|
+
presentation={fade()}
|
|
35
|
+
timing={linearTiming({ durationInFrames: 15 })}
|
|
36
|
+
/>
|
|
36
37
|
<TransitionSeries.Sequence durationInFrames={60}>
|
|
37
38
|
<SceneB />
|
|
38
39
|
</TransitionSeries.Sequence>
|
|
39
40
|
</TransitionSeries>;
|
|
40
41
|
```
|
|
41
42
|
|
|
42
|
-
##
|
|
43
|
+
## Overlay example
|
|
43
44
|
|
|
44
|
-
|
|
45
|
+
Any React component can be used as an overlay. For a ready-made effect, see the **light-leaks** rule.
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
import { TransitionSeries } from "@remotion/transitions";
|
|
49
|
+
import { LightLeak } from "@remotion/light-leaks";
|
|
50
|
+
|
|
51
|
+
<TransitionSeries>
|
|
52
|
+
<TransitionSeries.Sequence durationInFrames={60}>
|
|
53
|
+
<SceneA />
|
|
54
|
+
</TransitionSeries.Sequence>
|
|
55
|
+
<TransitionSeries.Overlay durationInFrames={20}>
|
|
56
|
+
<LightLeak />
|
|
57
|
+
</TransitionSeries.Overlay>
|
|
58
|
+
<TransitionSeries.Sequence durationInFrames={60}>
|
|
59
|
+
<SceneB />
|
|
60
|
+
</TransitionSeries.Sequence>
|
|
61
|
+
</TransitionSeries>;
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Mixing transitions and overlays
|
|
65
|
+
|
|
66
|
+
Transitions and overlays can coexist in the same `<TransitionSeries>`, but an overlay cannot be adjacent to a transition or another overlay.
|
|
45
67
|
|
|
46
68
|
```tsx
|
|
47
|
-
import {
|
|
48
|
-
import {
|
|
49
|
-
import {
|
|
50
|
-
|
|
51
|
-
|
|
69
|
+
import { TransitionSeries, linearTiming } from "@remotion/transitions";
|
|
70
|
+
import { fade } from "@remotion/transitions/fade";
|
|
71
|
+
import { LightLeak } from "@remotion/light-leaks";
|
|
72
|
+
|
|
73
|
+
<TransitionSeries>
|
|
74
|
+
<TransitionSeries.Sequence durationInFrames={60}>
|
|
75
|
+
<SceneA />
|
|
76
|
+
</TransitionSeries.Sequence>
|
|
77
|
+
<TransitionSeries.Overlay durationInFrames={30}>
|
|
78
|
+
<LightLeak />
|
|
79
|
+
</TransitionSeries.Overlay>
|
|
80
|
+
<TransitionSeries.Sequence durationInFrames={60}>
|
|
81
|
+
<SceneB />
|
|
82
|
+
</TransitionSeries.Sequence>
|
|
83
|
+
<TransitionSeries.Transition
|
|
84
|
+
presentation={fade()}
|
|
85
|
+
timing={linearTiming({ durationInFrames: 15 })}
|
|
86
|
+
/>
|
|
87
|
+
<TransitionSeries.Sequence durationInFrames={60}>
|
|
88
|
+
<SceneC />
|
|
89
|
+
</TransitionSeries.Sequence>
|
|
90
|
+
</TransitionSeries>;
|
|
52
91
|
```
|
|
53
92
|
|
|
54
|
-
##
|
|
93
|
+
## Transition props
|
|
94
|
+
|
|
95
|
+
`<TransitionSeries.Transition>` requires:
|
|
96
|
+
|
|
97
|
+
- `presentation` — the visual effect (e.g. `fade()`, `slide()`, `wipe()`).
|
|
98
|
+
- `timing` — controls speed and easing (e.g. `linearTiming()`, `springTiming()`).
|
|
99
|
+
|
|
100
|
+
## Overlay props
|
|
101
|
+
|
|
102
|
+
`<TransitionSeries.Overlay>` accepts:
|
|
103
|
+
|
|
104
|
+
- `durationInFrames` — how long the overlay is visible (positive integer).
|
|
105
|
+
- `offset?` — shifts the overlay relative to the cut point center. Positive = later, negative = earlier. Default: `0`.
|
|
106
|
+
|
|
107
|
+
## Available transition types
|
|
108
|
+
|
|
109
|
+
Import transitions from their respective modules:
|
|
110
|
+
|
|
111
|
+
```tsx
|
|
112
|
+
import { fade } from "@remotion/transitions/fade";
|
|
113
|
+
import { slide } from "@remotion/transitions/slide";
|
|
114
|
+
import { wipe } from "@remotion/transitions/wipe";
|
|
115
|
+
import { flip } from "@remotion/transitions/flip";
|
|
116
|
+
import { clockWipe } from "@remotion/transitions/clock-wipe";
|
|
117
|
+
```
|
|
55
118
|
|
|
56
|
-
|
|
119
|
+
## Slide transition with direction
|
|
57
120
|
|
|
58
121
|
```tsx
|
|
59
|
-
import {slide} from
|
|
122
|
+
import { slide } from "@remotion/transitions/slide";
|
|
60
123
|
|
|
61
|
-
<TransitionSeries.Transition
|
|
124
|
+
<TransitionSeries.Transition
|
|
125
|
+
presentation={slide({ direction: "from-left" })}
|
|
126
|
+
timing={linearTiming({ durationInFrames: 20 })}
|
|
127
|
+
/>;
|
|
62
128
|
```
|
|
63
129
|
|
|
64
130
|
Directions: `"from-left"`, `"from-right"`, `"from-top"`, `"from-bottom"`
|
|
65
131
|
|
|
66
|
-
## Timing
|
|
132
|
+
## Timing options
|
|
67
133
|
|
|
68
134
|
```tsx
|
|
69
|
-
import {linearTiming, springTiming} from
|
|
135
|
+
import { linearTiming, springTiming } from "@remotion/transitions";
|
|
70
136
|
|
|
71
137
|
// Linear timing - constant speed
|
|
72
|
-
linearTiming({durationInFrames: 20});
|
|
138
|
+
linearTiming({ durationInFrames: 20 });
|
|
73
139
|
|
|
74
140
|
// Spring timing - organic motion
|
|
75
|
-
springTiming({config: {damping: 200}, durationInFrames: 25});
|
|
141
|
+
springTiming({ config: { damping: 200 }, durationInFrames: 25 });
|
|
76
142
|
```
|
|
77
143
|
|
|
78
144
|
## Duration calculation
|
|
79
145
|
|
|
80
|
-
Transitions overlap adjacent scenes, so the total composition length is **shorter** than the sum of all sequence durations.
|
|
146
|
+
Transitions overlap adjacent scenes, so the total composition length is **shorter** than the sum of all sequence durations. Overlays do **not** affect the total duration.
|
|
81
147
|
|
|
82
148
|
For example, with two 60-frame sequences and a 15-frame transition:
|
|
83
149
|
|
|
84
150
|
- Without transitions: `60 + 60 = 120` frames
|
|
85
151
|
- With transition: `60 + 60 - 15 = 105` frames
|
|
86
152
|
|
|
87
|
-
|
|
153
|
+
Adding an overlay between two other sequences does not change the total.
|
|
88
154
|
|
|
89
155
|
### Getting the duration of a transition
|
|
90
156
|
|
|
91
157
|
Use the `getDurationInFrames()` method on the timing object:
|
|
92
158
|
|
|
93
159
|
```tsx
|
|
94
|
-
import {linearTiming, springTiming} from
|
|
160
|
+
import { linearTiming, springTiming } from "@remotion/transitions";
|
|
95
161
|
|
|
96
|
-
const linearDuration = linearTiming({
|
|
162
|
+
const linearDuration = linearTiming({
|
|
163
|
+
durationInFrames: 20,
|
|
164
|
+
}).getDurationInFrames({ fps: 30 });
|
|
97
165
|
// Returns 20
|
|
98
166
|
|
|
99
|
-
const springDuration = springTiming({
|
|
167
|
+
const springDuration = springTiming({
|
|
168
|
+
config: { damping: 200 },
|
|
169
|
+
}).getDurationInFrames({ fps: 30 });
|
|
100
170
|
// Returns calculated duration based on spring physics
|
|
101
171
|
```
|
|
102
172
|
|
|
@@ -105,18 +175,23 @@ For `springTiming` without an explicit `durationInFrames`, the duration depends
|
|
|
105
175
|
### Calculating total composition duration
|
|
106
176
|
|
|
107
177
|
```tsx
|
|
108
|
-
import {linearTiming} from
|
|
178
|
+
import { linearTiming } from "@remotion/transitions";
|
|
109
179
|
|
|
110
180
|
const scene1Duration = 60;
|
|
111
181
|
const scene2Duration = 60;
|
|
112
182
|
const scene3Duration = 60;
|
|
113
183
|
|
|
114
|
-
const timing1 = linearTiming({durationInFrames: 15});
|
|
115
|
-
const timing2 = linearTiming({durationInFrames: 20});
|
|
184
|
+
const timing1 = linearTiming({ durationInFrames: 15 });
|
|
185
|
+
const timing2 = linearTiming({ durationInFrames: 20 });
|
|
116
186
|
|
|
117
|
-
const transition1Duration = timing1.getDurationInFrames({fps: 30});
|
|
118
|
-
const transition2Duration = timing2.getDurationInFrames({fps: 30});
|
|
187
|
+
const transition1Duration = timing1.getDurationInFrames({ fps: 30 });
|
|
188
|
+
const transition2Duration = timing2.getDurationInFrames({ fps: 30 });
|
|
119
189
|
|
|
120
|
-
const totalDuration =
|
|
190
|
+
const totalDuration =
|
|
191
|
+
scene1Duration +
|
|
192
|
+
scene2Duration +
|
|
193
|
+
scene3Duration -
|
|
194
|
+
transition1Duration -
|
|
195
|
+
transition2Duration;
|
|
121
196
|
// 60 + 60 + 60 - 15 - 20 = 145 frames
|
|
122
197
|
```
|