zilmate 1.7.8 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/agent-browser/SKILL.md +55 -0
- package/.agents/skills/agentmail/SKILL.md +282 -0
- package/.agents/skills/agentmail/references/webhooks.md +220 -0
- package/.agents/skills/agentmail/references/websockets.md +263 -0
- package/.agents/skills/ai-elements/SKILL.md +160 -0
- package/.agents/skills/ai-elements/references/agent.md +134 -0
- package/.agents/skills/ai-elements/references/artifact.md +84 -0
- package/.agents/skills/ai-elements/references/attachments.md +190 -0
- package/.agents/skills/ai-elements/references/audio-player.md +134 -0
- package/.agents/skills/ai-elements/references/canvas.md +34 -0
- package/.agents/skills/ai-elements/references/chain-of-thought.md +81 -0
- package/.agents/skills/ai-elements/references/checkpoint.md +183 -0
- package/.agents/skills/ai-elements/references/code-block.md +170 -0
- package/.agents/skills/ai-elements/references/commit.md +177 -0
- package/.agents/skills/ai-elements/references/confirmation.md +262 -0
- package/.agents/skills/ai-elements/references/connection.md +34 -0
- package/.agents/skills/ai-elements/references/context.md +126 -0
- package/.agents/skills/ai-elements/references/controls.md +32 -0
- package/.agents/skills/ai-elements/references/conversation.md +224 -0
- package/.agents/skills/ai-elements/references/edge.md +52 -0
- package/.agents/skills/ai-elements/references/environment-variables.md +102 -0
- package/.agents/skills/ai-elements/references/file-tree.md +72 -0
- package/.agents/skills/ai-elements/references/image.md +146 -0
- package/.agents/skills/ai-elements/references/inline-citation.md +299 -0
- package/.agents/skills/ai-elements/references/jsx-preview.md +104 -0
- package/.agents/skills/ai-elements/references/message.md +237 -0
- package/.agents/skills/ai-elements/references/mic-selector.md +189 -0
- package/.agents/skills/ai-elements/references/model-selector.md +112 -0
- package/.agents/skills/ai-elements/references/node.md +73 -0
- package/.agents/skills/ai-elements/references/open-in-chat.md +67 -0
- package/.agents/skills/ai-elements/references/package-info.md +95 -0
- package/.agents/skills/ai-elements/references/panel.md +33 -0
- package/.agents/skills/ai-elements/references/persona.md +166 -0
- package/.agents/skills/ai-elements/references/plan.md +79 -0
- package/.agents/skills/ai-elements/references/prompt-input.md +579 -0
- package/.agents/skills/ai-elements/references/queue.md +172 -0
- package/.agents/skills/ai-elements/references/reasoning.md +238 -0
- package/.agents/skills/ai-elements/references/sandbox.md +129 -0
- package/.agents/skills/ai-elements/references/schema-display.md +102 -0
- package/.agents/skills/ai-elements/references/shimmer.md +48 -0
- package/.agents/skills/ai-elements/references/snippet.md +64 -0
- package/.agents/skills/ai-elements/references/sources.md +209 -0
- package/.agents/skills/ai-elements/references/speech-input.md +163 -0
- package/.agents/skills/ai-elements/references/stack-trace.md +224 -0
- package/.agents/skills/ai-elements/references/suggestion.md +124 -0
- package/.agents/skills/ai-elements/references/task.md +222 -0
- package/.agents/skills/ai-elements/references/terminal.md +103 -0
- package/.agents/skills/ai-elements/references/test-results.md +157 -0
- package/.agents/skills/ai-elements/references/tool.md +285 -0
- package/.agents/skills/ai-elements/references/toolbar.md +32 -0
- package/.agents/skills/ai-elements/references/transcription.md +120 -0
- package/.agents/skills/ai-elements/references/voice-selector.md +241 -0
- package/.agents/skills/ai-elements/references/web-preview.md +200 -0
- package/.agents/skills/ai-elements/scripts/agent.tsx +61 -0
- package/.agents/skills/ai-elements/scripts/artifact.tsx +127 -0
- package/.agents/skills/ai-elements/scripts/attachments-inline.tsx +128 -0
- package/.agents/skills/ai-elements/scripts/attachments-list.tsx +95 -0
- package/.agents/skills/ai-elements/scripts/attachments.tsx +85 -0
- package/.agents/skills/ai-elements/scripts/audio-player-remote.tsx +35 -0
- package/.agents/skills/ai-elements/scripts/audio-player.tsx +68 -0
- package/.agents/skills/ai-elements/scripts/chain-of-thought.tsx +82 -0
- package/.agents/skills/ai-elements/scripts/checkpoint.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/code-block-dark.tsx +46 -0
- package/.agents/skills/ai-elements/scripts/code-block.tsx +120 -0
- package/.agents/skills/ai-elements/scripts/commit.tsx +94 -0
- package/.agents/skills/ai-elements/scripts/confirmation-accepted.tsx +40 -0
- package/.agents/skills/ai-elements/scripts/confirmation-rejected.tsx +40 -0
- package/.agents/skills/ai-elements/scripts/confirmation-request.tsx +54 -0
- package/.agents/skills/ai-elements/scripts/confirmation.tsx +55 -0
- package/.agents/skills/ai-elements/scripts/context.tsx +45 -0
- package/.agents/skills/ai-elements/scripts/conversation.tsx +177 -0
- package/.agents/skills/ai-elements/scripts/environment-variables.tsx +62 -0
- package/.agents/skills/ai-elements/scripts/file-tree-basic.tsx +18 -0
- package/.agents/skills/ai-elements/scripts/file-tree-expanded.tsx +21 -0
- package/.agents/skills/ai-elements/scripts/file-tree-selection.tsx +24 -0
- package/.agents/skills/ai-elements/scripts/file-tree.tsx +42 -0
- package/.agents/skills/ai-elements/scripts/image.tsx +20 -0
- package/.agents/skills/ai-elements/scripts/inline-citation.tsx +97 -0
- package/.agents/skills/ai-elements/scripts/jsx-preview.tsx +104 -0
- package/.agents/skills/ai-elements/scripts/message.tsx +365 -0
- package/.agents/skills/ai-elements/scripts/mic-selector.tsx +49 -0
- package/.agents/skills/ai-elements/scripts/model-selector.tsx +365 -0
- package/.agents/skills/ai-elements/scripts/open-in-chat.tsx +33 -0
- package/.agents/skills/ai-elements/scripts/package-info.tsx +51 -0
- package/.agents/skills/ai-elements/scripts/persona-command.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-glint.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-halo.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-mana.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-obsidian.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/persona-opal.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/plan.tsx +65 -0
- package/.agents/skills/ai-elements/scripts/prompt-input-cursor.tsx +502 -0
- package/.agents/skills/ai-elements/scripts/prompt-input-tooltip.tsx +44 -0
- package/.agents/skills/ai-elements/scripts/prompt-input.tsx +267 -0
- package/.agents/skills/ai-elements/scripts/queue-prompt-input.tsx +394 -0
- package/.agents/skills/ai-elements/scripts/queue.tsx +295 -0
- package/.agents/skills/ai-elements/scripts/reasoning.tsx +71 -0
- package/.agents/skills/ai-elements/scripts/sandbox.tsx +178 -0
- package/.agents/skills/ai-elements/scripts/schema-display-basic.tsx +9 -0
- package/.agents/skills/ai-elements/scripts/schema-display-body.tsx +20 -0
- package/.agents/skills/ai-elements/scripts/schema-display-nested.tsx +23 -0
- package/.agents/skills/ai-elements/scripts/schema-display-params.tsx +16 -0
- package/.agents/skills/ai-elements/scripts/schema-display.tsx +110 -0
- package/.agents/skills/ai-elements/scripts/shimmer-duration.tsx +31 -0
- package/.agents/skills/ai-elements/scripts/shimmer-elements.tsx +43 -0
- package/.agents/skills/ai-elements/scripts/shimmer.tsx +17 -0
- package/.agents/skills/ai-elements/scripts/snippet-plain.tsx +19 -0
- package/.agents/skills/ai-elements/scripts/snippet.tsx +25 -0
- package/.agents/skills/ai-elements/scripts/sources-custom.tsx +39 -0
- package/.agents/skills/ai-elements/scripts/sources.tsx +32 -0
- package/.agents/skills/ai-elements/scripts/speech-input.tsx +84 -0
- package/.agents/skills/ai-elements/scripts/stack-trace-collapsed.tsx +39 -0
- package/.agents/skills/ai-elements/scripts/stack-trace-no-internal.tsx +41 -0
- package/.agents/skills/ai-elements/scripts/stack-trace.tsx +58 -0
- package/.agents/skills/ai-elements/scripts/suggestion-input.tsx +144 -0
- package/.agents/skills/ai-elements/scripts/suggestion.tsx +32 -0
- package/.agents/skills/ai-elements/scripts/task.tsx +59 -0
- package/.agents/skills/ai-elements/scripts/terminal-basic.tsx +7 -0
- package/.agents/skills/ai-elements/scripts/terminal-clear.tsx +19 -0
- package/.agents/skills/ai-elements/scripts/terminal-streaming.tsx +38 -0
- package/.agents/skills/ai-elements/scripts/terminal.tsx +82 -0
- package/.agents/skills/ai-elements/scripts/test-results-basic.tsx +27 -0
- package/.agents/skills/ai-elements/scripts/test-results-errors.tsx +51 -0
- package/.agents/skills/ai-elements/scripts/test-results-suites.tsx +40 -0
- package/.agents/skills/ai-elements/scripts/test-results.tsx +102 -0
- package/.agents/skills/ai-elements/scripts/tool-input-available.tsx +31 -0
- package/.agents/skills/ai-elements/scripts/tool-input-streaming.tsx +30 -0
- package/.agents/skills/ai-elements/scripts/tool-output-available.tsx +80 -0
- package/.agents/skills/ai-elements/scripts/tool-output-error.tsx +44 -0
- package/.agents/skills/ai-elements/scripts/tool.tsx +222 -0
- package/.agents/skills/ai-elements/scripts/transcription.tsx +290 -0
- package/.agents/skills/ai-elements/scripts/voice-selector.tsx +245 -0
- package/.agents/skills/ai-elements/scripts/web-preview.tsx +115 -0
- package/.agents/skills/ai-sdk/SKILL.md +78 -0
- package/.agents/skills/ai-sdk/references/ai-gateway.md +66 -0
- package/.agents/skills/ai-sdk/references/common-errors.md +443 -0
- package/.agents/skills/ai-sdk/references/devtools.md +52 -0
- package/.agents/skills/ai-sdk/references/type-safe-agents.md +204 -0
- package/.agents/skills/chat-sdk/SKILL.md +240 -0
- package/.agents/skills/composio/AGENTS.md +404 -0
- package/.agents/skills/composio/SKILL.md +55 -0
- package/.agents/skills/composio/rules/_template.md +38 -0
- package/.agents/skills/composio/rules/app-auth-configs.md +224 -0
- package/.agents/skills/composio/rules/app-auth-popup-ui.md +143 -0
- package/.agents/skills/composio/rules/app-connected-accounts.md +240 -0
- package/.agents/skills/composio/rules/app-custom-tools.md +220 -0
- package/.agents/skills/composio/rules/app-execute-tools.md +202 -0
- package/.agents/skills/composio/rules/app-fetch-tools.md +292 -0
- package/.agents/skills/composio/rules/app-modifiers.md +148 -0
- package/.agents/skills/composio/rules/app-tool-versions.md +343 -0
- package/.agents/skills/composio/rules/app-toolkits.md +184 -0
- package/.agents/skills/composio/rules/app-user-context.md +222 -0
- package/.agents/skills/composio/rules/building-with-composio.md +134 -0
- package/.agents/skills/composio/rules/composio-cli.md +223 -0
- package/.agents/skills/composio/rules/setup-api-keys.md +230 -0
- package/.agents/skills/composio/rules/tr-auth-auto.md +110 -0
- package/.agents/skills/composio/rules/tr-auth-connections.md +167 -0
- package/.agents/skills/composio/rules/tr-auth-manual.md +161 -0
- package/.agents/skills/composio/rules/tr-building-chat-ui.md +348 -0
- package/.agents/skills/composio/rules/tr-framework-ai-sdk.md +240 -0
- package/.agents/skills/composio/rules/tr-framework-integration.md +818 -0
- package/.agents/skills/composio/rules/tr-framework-mastra.md +185 -0
- package/.agents/skills/composio/rules/tr-mcp-vs-native.md +248 -0
- package/.agents/skills/composio/rules/tr-session-basic.md +82 -0
- package/.agents/skills/composio/rules/tr-session-config.md +172 -0
- package/.agents/skills/composio/rules/tr-session-lifecycle.md +385 -0
- package/.agents/skills/composio/rules/tr-toolkit-query.md +135 -0
- package/.agents/skills/composio/rules/tr-userid-best-practices.md +476 -0
- package/.agents/skills/composio/rules/triggers-create.md +246 -0
- package/.agents/skills/composio/rules/triggers-manage.md +275 -0
- package/.agents/skills/composio/rules/triggers-subscribe.md +173 -0
- package/.agents/skills/composio/rules/triggers-webhook.md +227 -0
- package/.agents/skills/create-auth-skill/SKILL.md +321 -0
- package/.agents/skills/design-md/README.md +34 -0
- package/.agents/skills/design-md/SKILL.md +172 -0
- package/.agents/skills/design-md/examples/DESIGN.md +154 -0
- package/.agents/skills/expo-tailwind-setup/SKILL.md +480 -0
- package/.agents/skills/expo-tailwind-setup/agents/openai.yaml +4 -0
- package/.agents/skills/find-skills/SKILL.md +142 -0
- package/.agents/skills/firecrawl/SKILL.md +321 -0
- package/.agents/skills/firecrawl/rules/install.md +85 -0
- package/.agents/skills/firecrawl/rules/security.md +26 -0
- package/.agents/skills/frontend-design/LICENSE.txt +177 -0
- package/.agents/skills/frontend-design/SKILL.md +55 -0
- package/.agents/skills/linkup-search/SKILL.md +298 -0
- package/.agents/skills/mcp-builder/LICENSE.txt +202 -0
- package/.agents/skills/mcp-builder/SKILL.md +236 -0
- package/.agents/skills/mcp-builder/reference/evaluation.md +602 -0
- package/.agents/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/.agents/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/.agents/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/.agents/skills/mcp-builder/scripts/connections.py +151 -0
- package/.agents/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/.agents/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/.agents/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/.agents/skills/mobile-android-design/SKILL.md +101 -0
- package/.agents/skills/mobile-android-design/references/android-navigation.md +698 -0
- package/.agents/skills/mobile-android-design/references/compose-components.md +796 -0
- package/.agents/skills/mobile-android-design/references/details.md +337 -0
- package/.agents/skills/mobile-android-design/references/material3-theming.md +604 -0
- package/.agents/skills/mobile-ios-design/SKILL.md +259 -0
- package/.agents/skills/mobile-ios-design/references/hig-patterns.md +529 -0
- package/.agents/skills/mobile-ios-design/references/ios-navigation.md +556 -0
- package/.agents/skills/mobile-ios-design/references/swiftui-components.md +575 -0
- package/.agents/skills/neon-drizzle/SKILL.md +81 -0
- package/.agents/skills/neon-drizzle/guides/existing-project.md +398 -0
- package/.agents/skills/neon-drizzle/guides/new-project.md +312 -0
- package/.agents/skills/neon-drizzle/guides/schema-only.md +415 -0
- package/.agents/skills/neon-drizzle/guides/troubleshooting.md +539 -0
- package/.agents/skills/neon-drizzle/references/adapters.md +478 -0
- package/.agents/skills/neon-drizzle/references/migrations.md +652 -0
- package/.agents/skills/neon-drizzle/references/query-patterns.md +761 -0
- package/.agents/skills/neon-drizzle/scripts/generate-schema.ts +77 -0
- package/.agents/skills/neon-drizzle/scripts/run-migration.ts +133 -0
- package/.agents/skills/neon-drizzle/templates/db-http.ts +6 -0
- package/.agents/skills/neon-drizzle/templates/db-websocket.ts +24 -0
- package/.agents/skills/neon-drizzle/templates/drizzle-config.ts +96 -0
- package/.agents/skills/neon-drizzle/templates/schema-example.ts +231 -0
- package/.agents/skills/neon-postgres/SKILL.md +376 -0
- package/.agents/skills/next-best-practices/SKILL.md +152 -0
- package/.agents/skills/next-best-practices/async-patterns.md +87 -0
- package/.agents/skills/next-best-practices/bundling.md +180 -0
- package/.agents/skills/next-best-practices/data-patterns.md +297 -0
- package/.agents/skills/next-best-practices/debug-tricks.md +105 -0
- package/.agents/skills/next-best-practices/directives.md +73 -0
- package/.agents/skills/next-best-practices/error-handling.md +227 -0
- package/.agents/skills/next-best-practices/file-conventions.md +140 -0
- package/.agents/skills/next-best-practices/font.md +245 -0
- package/.agents/skills/next-best-practices/functions.md +108 -0
- package/.agents/skills/next-best-practices/hydration-error.md +91 -0
- package/.agents/skills/next-best-practices/image.md +173 -0
- package/.agents/skills/next-best-practices/metadata.md +301 -0
- package/.agents/skills/next-best-practices/parallel-routes.md +287 -0
- package/.agents/skills/next-best-practices/route-handlers.md +146 -0
- package/.agents/skills/next-best-practices/rsc-boundaries.md +159 -0
- package/.agents/skills/next-best-practices/runtime-selection.md +39 -0
- package/.agents/skills/next-best-practices/scripts.md +141 -0
- package/.agents/skills/next-best-practices/self-hosting.md +371 -0
- package/.agents/skills/next-best-practices/suspense-boundaries.md +67 -0
- package/.agents/skills/playwright-best-practices/SKILL.md +303 -0
- package/.agents/skills/playwright-cli/SKILL.md +404 -0
- package/.agents/skills/playwright-cli/references/element-attributes.md +23 -0
- package/.agents/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/.agents/skills/playwright-cli/references/request-mocking.md +87 -0
- package/.agents/skills/playwright-cli/references/running-code.md +241 -0
- package/.agents/skills/playwright-cli/references/session-management.md +225 -0
- package/.agents/skills/playwright-cli/references/spec-driven-testing.md +305 -0
- package/.agents/skills/playwright-cli/references/storage-state.md +275 -0
- package/.agents/skills/playwright-cli/references/test-generation.md +134 -0
- package/.agents/skills/playwright-cli/references/tracing.md +139 -0
- package/.agents/skills/playwright-cli/references/video-recording.md +143 -0
- package/.agents/skills/prisma-client-api/SKILL.md +216 -0
- package/.agents/skills/prisma-client-api/references/client-methods.md +223 -0
- package/.agents/skills/prisma-client-api/references/constructor.md +208 -0
- package/.agents/skills/prisma-client-api/references/filters.md +256 -0
- package/.agents/skills/prisma-client-api/references/model-queries.md +281 -0
- package/.agents/skills/prisma-client-api/references/query-options.md +276 -0
- package/.agents/skills/prisma-client-api/references/raw-queries.md +194 -0
- package/.agents/skills/prisma-client-api/references/relations.md +308 -0
- package/.agents/skills/prisma-client-api/references/transactions.md +184 -0
- package/.agents/skills/prisma-database-setup/SKILL.md +192 -0
- package/.agents/skills/prisma-database-setup/references/cockroachdb.md +89 -0
- package/.agents/skills/prisma-database-setup/references/mongodb.md +90 -0
- package/.agents/skills/prisma-database-setup/references/mysql.md +126 -0
- package/.agents/skills/prisma-database-setup/references/postgresql.md +92 -0
- package/.agents/skills/prisma-database-setup/references/prisma-client-setup.md +47 -0
- package/.agents/skills/prisma-database-setup/references/prisma-postgres.md +130 -0
- package/.agents/skills/prisma-database-setup/references/sqlite.md +106 -0
- package/.agents/skills/prisma-database-setup/references/sqlserver.md +94 -0
- package/.agents/skills/prisma-postgres/SKILL.md +127 -0
- package/.agents/skills/prisma-postgres/references/console-and-connections.md +67 -0
- package/.agents/skills/prisma-postgres/references/create-db-cli.md +136 -0
- package/.agents/skills/prisma-postgres/references/management-api-sdk.md +56 -0
- package/.agents/skills/prisma-postgres/references/management-api.md +61 -0
- package/.agents/skills/remotion-best-practices/SKILL.md +340 -0
- package/.agents/skills/remotion-best-practices/rules/3d.md +86 -0
- package/.agents/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/.agents/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/.agents/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
- package/.agents/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/.agents/skills/remotion-best-practices/rules/audio.md +169 -0
- package/.agents/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
- package/.agents/skills/remotion-best-practices/rules/compositions.md +133 -0
- package/.agents/skills/remotion-best-practices/rules/display-captions.md +184 -0
- package/.agents/skills/remotion-best-practices/rules/ffmpeg.md +34 -0
- package/.agents/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/.agents/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/.agents/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/.agents/skills/remotion-best-practices/rules/gifs.md +141 -0
- package/.agents/skills/remotion-best-practices/rules/google-fonts.md +72 -0
- package/.agents/skills/remotion-best-practices/rules/html-in-canvas.md +122 -0
- package/.agents/skills/remotion-best-practices/rules/images.md +71 -0
- package/.agents/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/.agents/skills/remotion-best-practices/rules/light-leaks.md +73 -0
- package/.agents/skills/remotion-best-practices/rules/local-fonts.md +65 -0
- package/.agents/skills/remotion-best-practices/rules/lottie.md +70 -0
- package/.agents/skills/remotion-best-practices/rules/maplibre.md +458 -0
- package/.agents/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/.agents/skills/remotion-best-practices/rules/measuring-text.md +140 -0
- package/.agents/skills/remotion-best-practices/rules/parameters.md +109 -0
- package/.agents/skills/remotion-best-practices/rules/sequencing.md +144 -0
- package/.agents/skills/remotion-best-practices/rules/sfx.md +30 -0
- package/.agents/skills/remotion-best-practices/rules/silence-detection.md +71 -0
- package/.agents/skills/remotion-best-practices/rules/subtitles.md +36 -0
- package/.agents/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/.agents/skills/remotion-best-practices/rules/text-animations.md +20 -0
- package/.agents/skills/remotion-best-practices/rules/timing.md +136 -0
- package/.agents/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/.agents/skills/remotion-best-practices/rules/transitions.md +197 -0
- package/.agents/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/.agents/skills/remotion-best-practices/rules/trimming.md +51 -0
- package/.agents/skills/remotion-best-practices/rules/videos.md +171 -0
- package/.agents/skills/remotion-best-practices/rules/voiceover.md +99 -0
- package/.agents/skills/remotion-render/SKILL.md +212 -0
- package/.agents/skills/skill-creator/LICENSE.txt +202 -0
- package/.agents/skills/skill-creator/SKILL.md +485 -0
- package/.agents/skills/skill-creator/agents/analyzer.md +274 -0
- package/.agents/skills/skill-creator/agents/comparator.md +202 -0
- package/.agents/skills/skill-creator/agents/grader.md +223 -0
- package/.agents/skills/skill-creator/assets/eval_review.html +146 -0
- package/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/.agents/skills/skill-creator/references/schemas.md +430 -0
- package/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
- package/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
- package/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
- package/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
- package/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
- package/.agents/skills/skill-creator/scripts/utils.py +47 -0
- package/.agents/skills/stripe-best-practices/SKILL.md +54 -0
- package/.agents/skills/stripe-best-practices/references/billing.md +58 -0
- package/.agents/skills/stripe-best-practices/references/connect.md +173 -0
- package/.agents/skills/stripe-best-practices/references/payments.md +79 -0
- package/.agents/skills/stripe-best-practices/references/security.md +109 -0
- package/.agents/skills/stripe-best-practices/references/tax.md +37 -0
- package/.agents/skills/stripe-best-practices/references/treasury.md +16 -0
- package/.agents/skills/stripe-projects/SKILL.md +132 -0
- package/.agents/skills/supabase/CHANGELOG.md +35 -0
- package/.agents/skills/supabase/SKILL.md +135 -0
- package/.agents/skills/supabase/assets/feedback-issue-template.md +17 -0
- package/.agents/skills/supabase/references/skill-feedback.md +17 -0
- package/.agents/skills/supabase-postgres-best-practices/CHANGELOG.md +29 -0
- package/.agents/skills/supabase-postgres-best-practices/SKILL.md +64 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_template.md +34 -0
- package/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
- package/.agents/skills/supermemory/LICENSE +201 -0
- package/.agents/skills/supermemory/README.md +221 -0
- package/.agents/skills/supermemory/SKILL.md +172 -0
- package/.agents/skills/supermemory/references/api-reference.md +591 -0
- package/.agents/skills/supermemory/references/architecture.md +557 -0
- package/.agents/skills/supermemory/references/quickstart.md +293 -0
- package/.agents/skills/supermemory/references/sdk-guide.md +655 -0
- package/.agents/skills/supermemory/references/use-cases.md +1033 -0
- package/.agents/skills/supermemory-cli/SKILL.md +490 -0
- package/.agents/skills/tdd/SKILL.md +108 -0
- package/.agents/skills/tdd/mocking.md +59 -0
- package/.agents/skills/tdd/refactoring.md +10 -0
- package/.agents/skills/tdd/tests.md +61 -0
- package/.agents/skills/ui-ux-pro-max/SKILL.md +661 -0
- package/.agents/skills/ui-ux-pro-max/data +1 -0
- package/.agents/skills/ui-ux-pro-max/scripts +1 -0
- package/.agents/skills/vercel-react-native-skills/AGENTS.md +2897 -0
- package/.agents/skills/vercel-react-native-skills/README.md +165 -0
- package/.agents/skills/vercel-react-native-skills/SKILL.md +121 -0
- package/.agents/skills/vercel-react-native-skills/metadata.json +16 -0
- package/.agents/skills/vercel-react-native-skills/rules/_sections.md +86 -0
- package/.agents/skills/vercel-react-native-skills/rules/_template.md +28 -0
- package/.agents/skills/vercel-react-native-skills/rules/animation-derived-value.md +53 -0
- package/.agents/skills/vercel-react-native-skills/rules/animation-gesture-detector-press.md +95 -0
- package/.agents/skills/vercel-react-native-skills/rules/animation-gpu-properties.md +65 -0
- package/.agents/skills/vercel-react-native-skills/rules/design-system-compound-components.md +66 -0
- package/.agents/skills/vercel-react-native-skills/rules/fonts-config-plugin.md +71 -0
- package/.agents/skills/vercel-react-native-skills/rules/imports-design-system-folder.md +68 -0
- package/.agents/skills/vercel-react-native-skills/rules/js-hoist-intl.md +61 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-callbacks.md +44 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-function-references.md +132 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-images.md +53 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-inline-objects.md +97 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-expensive.md +94 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-memo.md +82 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-item-types.md +104 -0
- package/.agents/skills/vercel-react-native-skills/rules/list-performance-virtualize.md +67 -0
- package/.agents/skills/vercel-react-native-skills/rules/monorepo-native-deps-in-app.md +46 -0
- package/.agents/skills/vercel-react-native-skills/rules/monorepo-single-dependency-versions.md +63 -0
- package/.agents/skills/vercel-react-native-skills/rules/navigation-native-navigators.md +188 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-compiler-destructure-functions.md +50 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-compiler-reanimated-shared-values.md +48 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-state-dispatcher.md +91 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-state-fallback.md +56 -0
- package/.agents/skills/vercel-react-native-skills/rules/react-state-minimize.md +65 -0
- package/.agents/skills/vercel-react-native-skills/rules/rendering-no-falsy-and.md +74 -0
- package/.agents/skills/vercel-react-native-skills/rules/rendering-text-in-text-component.md +36 -0
- package/.agents/skills/vercel-react-native-skills/rules/scroll-position-no-state.md +82 -0
- package/.agents/skills/vercel-react-native-skills/rules/state-ground-truth.md +80 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-expo-image.md +66 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-image-gallery.md +104 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-measure-views.md +78 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-menus.md +174 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-native-modals.md +77 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-pressable.md +61 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-safe-area-scroll.md +65 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-scrollview-content-inset.md +45 -0
- package/.agents/skills/vercel-react-native-skills/rules/ui-styling.md +87 -0
- package/.agents/skills/web-design-guidelines/SKILL.md +39 -0
- package/dist/index.js +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: compositions
|
|
3
|
+
description: Defining compositions, stills, folders, default props and dynamic metadata
|
|
4
|
+
metadata:
|
|
5
|
+
tags: composition, still, folder, props, metadata
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
A `<Composition>` defines the component, width, height, fps and duration of a renderable video.
|
|
9
|
+
|
|
10
|
+
## Default Props
|
|
11
|
+
|
|
12
|
+
Pass `defaultProps` to provide initial values for your component.
|
|
13
|
+
Values must be JSON-serializable (`Date`, `Map`, `Set`, and `staticFile()` are supported).
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import { Composition } from "remotion";
|
|
17
|
+
import { MyComposition, MyCompositionProps } from "./MyComposition";
|
|
18
|
+
|
|
19
|
+
export const RemotionRoot = () => {
|
|
20
|
+
return (
|
|
21
|
+
<Composition
|
|
22
|
+
id="MyComposition"
|
|
23
|
+
component={MyComposition}
|
|
24
|
+
durationInFrames={100}
|
|
25
|
+
fps={30}
|
|
26
|
+
width={1080}
|
|
27
|
+
height={1080}
|
|
28
|
+
defaultProps={
|
|
29
|
+
{
|
|
30
|
+
title: "Hello World",
|
|
31
|
+
color: "#ff0000",
|
|
32
|
+
} satisfies MyCompositionProps
|
|
33
|
+
}
|
|
34
|
+
/>
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Use `type` declarations for props rather than `interface` to ensure `defaultProps` type safety.
|
|
40
|
+
|
|
41
|
+
## Folders
|
|
42
|
+
|
|
43
|
+
Use `<Folder>` to organize compositions in the sidebar.
|
|
44
|
+
Folder names can only contain letters, numbers, and hyphens.
|
|
45
|
+
|
|
46
|
+
```tsx
|
|
47
|
+
import { Composition, Folder } from "remotion";
|
|
48
|
+
|
|
49
|
+
export const RemotionRoot = () => {
|
|
50
|
+
return (
|
|
51
|
+
<>
|
|
52
|
+
<Folder name="Marketing">
|
|
53
|
+
<Composition id="Promo" /* ... */ />
|
|
54
|
+
<Composition id="Ad" /* ... */ />
|
|
55
|
+
</Folder>
|
|
56
|
+
<Folder name="Social">
|
|
57
|
+
<Folder name="Instagram">
|
|
58
|
+
<Composition id="Story" /* ... */ />
|
|
59
|
+
<Composition id="Reel" /* ... */ />
|
|
60
|
+
</Folder>
|
|
61
|
+
</Folder>
|
|
62
|
+
</>
|
|
63
|
+
);
|
|
64
|
+
};
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Stills
|
|
68
|
+
|
|
69
|
+
Use `<Still>` for single-frame images. It does not require `durationInFrames` or `fps`.
|
|
70
|
+
|
|
71
|
+
```tsx
|
|
72
|
+
import { Still } from "remotion";
|
|
73
|
+
import { Thumbnail } from "./Thumbnail";
|
|
74
|
+
|
|
75
|
+
export const RemotionRoot = () => {
|
|
76
|
+
return (
|
|
77
|
+
<Still id="Thumbnail" component={Thumbnail} width={1280} height={720} />
|
|
78
|
+
);
|
|
79
|
+
};
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Calculate Metadata
|
|
83
|
+
|
|
84
|
+
Use `calculateMetadata` to make dimensions, duration, or props dynamic based on data.
|
|
85
|
+
|
|
86
|
+
```tsx
|
|
87
|
+
import { Composition, CalculateMetadataFunction } from "remotion";
|
|
88
|
+
import { MyComposition, MyCompositionProps } from "./MyComposition";
|
|
89
|
+
|
|
90
|
+
const calculateMetadata: CalculateMetadataFunction<
|
|
91
|
+
MyCompositionProps
|
|
92
|
+
> = async ({ props, abortSignal }) => {
|
|
93
|
+
const data = await fetch(`https://api.example.com/video/${props.videoId}`, {
|
|
94
|
+
signal: abortSignal,
|
|
95
|
+
}).then((res) => res.json());
|
|
96
|
+
|
|
97
|
+
return {
|
|
98
|
+
durationInFrames: Math.ceil(data.duration * 30),
|
|
99
|
+
props: {
|
|
100
|
+
...props,
|
|
101
|
+
videoUrl: data.url,
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export const RemotionRoot = () => {
|
|
107
|
+
return (
|
|
108
|
+
<Composition
|
|
109
|
+
id="MyComposition"
|
|
110
|
+
component={MyComposition}
|
|
111
|
+
fps={30}
|
|
112
|
+
width={1080}
|
|
113
|
+
height={1080}
|
|
114
|
+
defaultProps={{ videoId: "abc123" }}
|
|
115
|
+
calculateMetadata={calculateMetadata}
|
|
116
|
+
/>
|
|
117
|
+
);
|
|
118
|
+
};
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
The function can return `props`, `durationInFrames`, `width`, `height`, `fps`, and codec-related defaults. It runs once before rendering begins.
|
|
122
|
+
|
|
123
|
+
## Nesting compositions within another
|
|
124
|
+
|
|
125
|
+
To add a composition within another composition, you can use the `<Sequence>` component with a `width` and `height` prop to specify the size of the composition.
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
<AbsoluteFill>
|
|
129
|
+
<Sequence width={COMPOSITION_WIDTH} height={COMPOSITION_HEIGHT}>
|
|
130
|
+
<CompositionComponent />
|
|
131
|
+
</Sequence>
|
|
132
|
+
</AbsoluteFill>
|
|
133
|
+
```
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: display-captions
|
|
3
|
+
description: Displaying captions in Remotion with TikTok-style pages and word highlighting
|
|
4
|
+
metadata:
|
|
5
|
+
tags: captions, subtitles, display, tiktok, highlight
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Displaying captions in Remotion
|
|
9
|
+
|
|
10
|
+
This guide explains how to display captions in Remotion, assuming you already have captions in the [`Caption`](https://www.remotion.dev/docs/captions/caption) format.
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
Read [Transcribing audio](transcribe-captions.md) for how to generate captions.
|
|
15
|
+
|
|
16
|
+
First, the [`@remotion/captions`](https://www.remotion.dev/docs/captions) package needs to be installed.
|
|
17
|
+
If it is not installed, use the following command:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npx remotion add @remotion/captions
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Fetching captions
|
|
24
|
+
|
|
25
|
+
First, fetch your captions JSON file. Use [`useDelayRender()`](https://www.remotion.dev/docs/use-delay-render) to hold the render until the captions are loaded:
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
import { useState, useEffect, useCallback } from "react";
|
|
29
|
+
import { AbsoluteFill, staticFile, useDelayRender } from "remotion";
|
|
30
|
+
import type { Caption } from "@remotion/captions";
|
|
31
|
+
|
|
32
|
+
export const MyComponent: React.FC = () => {
|
|
33
|
+
const [captions, setCaptions] = useState<Caption[] | null>(null);
|
|
34
|
+
const { delayRender, continueRender, cancelRender } = useDelayRender();
|
|
35
|
+
const [handle] = useState(() => delayRender());
|
|
36
|
+
|
|
37
|
+
const fetchCaptions = useCallback(async () => {
|
|
38
|
+
try {
|
|
39
|
+
// Assuming captions.json is in the public/ folder.
|
|
40
|
+
const response = await fetch(staticFile("captions123.json"));
|
|
41
|
+
const data = await response.json();
|
|
42
|
+
setCaptions(data);
|
|
43
|
+
continueRender(handle);
|
|
44
|
+
} catch (e) {
|
|
45
|
+
cancelRender(e);
|
|
46
|
+
}
|
|
47
|
+
}, [continueRender, cancelRender, handle]);
|
|
48
|
+
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
fetchCaptions();
|
|
51
|
+
}, [fetchCaptions]);
|
|
52
|
+
|
|
53
|
+
if (!captions) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return <AbsoluteFill>{/* Render captions here */}</AbsoluteFill>;
|
|
58
|
+
};
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Creating pages
|
|
62
|
+
|
|
63
|
+
Use `createTikTokStyleCaptions()` to group captions into pages. The `combineTokensWithinMilliseconds` option controls how many words appear at once:
|
|
64
|
+
|
|
65
|
+
```tsx
|
|
66
|
+
import { useMemo } from "react";
|
|
67
|
+
import { createTikTokStyleCaptions } from "@remotion/captions";
|
|
68
|
+
import type { Caption } from "@remotion/captions";
|
|
69
|
+
|
|
70
|
+
// How often captions should switch (in milliseconds)
|
|
71
|
+
// Higher values = more words per page
|
|
72
|
+
// Lower values = fewer words (more word-by-word)
|
|
73
|
+
const SWITCH_CAPTIONS_EVERY_MS = 1200;
|
|
74
|
+
|
|
75
|
+
const { pages } = useMemo(() => {
|
|
76
|
+
return createTikTokStyleCaptions({
|
|
77
|
+
captions,
|
|
78
|
+
combineTokensWithinMilliseconds: SWITCH_CAPTIONS_EVERY_MS,
|
|
79
|
+
});
|
|
80
|
+
}, [captions]);
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Rendering with Sequences
|
|
84
|
+
|
|
85
|
+
Map over the pages and render each one in a `<Sequence>`. Calculate the start frame and duration from the page timing:
|
|
86
|
+
|
|
87
|
+
```tsx
|
|
88
|
+
import { Sequence, useVideoConfig, AbsoluteFill } from "remotion";
|
|
89
|
+
import type { TikTokPage } from "@remotion/captions";
|
|
90
|
+
|
|
91
|
+
const CaptionedContent: React.FC = () => {
|
|
92
|
+
const { fps } = useVideoConfig();
|
|
93
|
+
|
|
94
|
+
return (
|
|
95
|
+
<AbsoluteFill>
|
|
96
|
+
{pages.map((page, index) => {
|
|
97
|
+
const nextPage = pages[index + 1] ?? null;
|
|
98
|
+
const startFrame = (page.startMs / 1000) * fps;
|
|
99
|
+
const endFrame = Math.min(
|
|
100
|
+
nextPage ? (nextPage.startMs / 1000) * fps : Infinity,
|
|
101
|
+
startFrame + (SWITCH_CAPTIONS_EVERY_MS / 1000) * fps,
|
|
102
|
+
);
|
|
103
|
+
const durationInFrames = endFrame - startFrame;
|
|
104
|
+
|
|
105
|
+
if (durationInFrames <= 0) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return (
|
|
110
|
+
<Sequence
|
|
111
|
+
key={index}
|
|
112
|
+
from={startFrame}
|
|
113
|
+
durationInFrames={durationInFrames}
|
|
114
|
+
>
|
|
115
|
+
<CaptionPage page={page} />
|
|
116
|
+
</Sequence>
|
|
117
|
+
);
|
|
118
|
+
})}
|
|
119
|
+
</AbsoluteFill>
|
|
120
|
+
);
|
|
121
|
+
};
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## White-space preservation
|
|
125
|
+
|
|
126
|
+
The captions are whitespace sensitive. You should include spaces in the `text` field before each word. Use `whiteSpace: "pre"` to preserve the whitespace in the captions.
|
|
127
|
+
|
|
128
|
+
## Separate component for captions
|
|
129
|
+
|
|
130
|
+
Put captioning logic in a separate component.
|
|
131
|
+
Make a new file for it.
|
|
132
|
+
|
|
133
|
+
## Word highlighting
|
|
134
|
+
|
|
135
|
+
A caption page contains `tokens` which you can use to highlight the currently spoken word:
|
|
136
|
+
|
|
137
|
+
```tsx
|
|
138
|
+
import { AbsoluteFill, useCurrentFrame, useVideoConfig } from "remotion";
|
|
139
|
+
import type { TikTokPage } from "@remotion/captions";
|
|
140
|
+
|
|
141
|
+
const HIGHLIGHT_COLOR = "#39E508";
|
|
142
|
+
|
|
143
|
+
const CaptionPage: React.FC<{ page: TikTokPage }> = ({ page }) => {
|
|
144
|
+
const frame = useCurrentFrame();
|
|
145
|
+
const { fps } = useVideoConfig();
|
|
146
|
+
|
|
147
|
+
// Current time relative to the start of the sequence
|
|
148
|
+
const currentTimeMs = (frame / fps) * 1000;
|
|
149
|
+
// Convert to absolute time by adding the page start
|
|
150
|
+
const absoluteTimeMs = page.startMs + currentTimeMs;
|
|
151
|
+
|
|
152
|
+
return (
|
|
153
|
+
<AbsoluteFill style={{ justifyContent: "center", alignItems: "center" }}>
|
|
154
|
+
<div style={{ fontSize: 80, fontWeight: "bold", whiteSpace: "pre" }}>
|
|
155
|
+
{page.tokens.map((token) => {
|
|
156
|
+
const isActive =
|
|
157
|
+
token.fromMs <= absoluteTimeMs && token.toMs > absoluteTimeMs;
|
|
158
|
+
|
|
159
|
+
return (
|
|
160
|
+
<span
|
|
161
|
+
key={token.fromMs}
|
|
162
|
+
style={{ color: isActive ? HIGHLIGHT_COLOR : "white" }}
|
|
163
|
+
>
|
|
164
|
+
{token.text}
|
|
165
|
+
</span>
|
|
166
|
+
);
|
|
167
|
+
})}
|
|
168
|
+
</div>
|
|
169
|
+
</AbsoluteFill>
|
|
170
|
+
);
|
|
171
|
+
};
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Display captions alongside video content
|
|
175
|
+
|
|
176
|
+
By default, put the captions alongside the video content, so the captions are in sync.
|
|
177
|
+
For each video, make a new captions JSON file.
|
|
178
|
+
|
|
179
|
+
```tsx
|
|
180
|
+
<AbsoluteFill>
|
|
181
|
+
<Video src={staticFile("video.mp4")} />
|
|
182
|
+
<CaptionPage page={page} />
|
|
183
|
+
</AbsoluteFill>
|
|
184
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ffmpeg
|
|
3
|
+
description: Using FFmpeg and FFprobe in Remotion
|
|
4
|
+
metadata:
|
|
5
|
+
tags: ffmpeg, ffprobe, video, trimming
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## FFmpeg in Remotion
|
|
9
|
+
|
|
10
|
+
`ffmpeg` and `ffprobe` do not need to be installed. They are available via the `npx remotion ffmpeg` and `npx remotion ffprobe`:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npx remotion ffmpeg -i input.mp4 output.mp3
|
|
14
|
+
npx remotion ffprobe input.mp4
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Trimming videos
|
|
18
|
+
|
|
19
|
+
You have 2 options for trimming videos:
|
|
20
|
+
|
|
21
|
+
1. **Preferred**: Use the `trimBefore` and `trimAfter` props of the `<Video>` component. This is non-destructive, requires no re-encoding, and you can change the trim at any time.
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import {Video} from '@remotion/media';
|
|
25
|
+
|
|
26
|
+
<Video src={staticFile('video.mp4')} trimBefore={5 * fps} trimAfter={10 * fps} />;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
2. Use the FFmpeg command line. You MUST re-encode the video to avoid frozen frames at the start of the video. Only use this if you need a standalone trimmed file (e.g. for upload or external use).
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Re-encodes from the exact frame
|
|
33
|
+
npx remotion ffmpeg -ss 00:00:05 -i public/input.mp4 -to 00:00:10 -c:v libx264 -c:a aac public/output.mp4
|
|
34
|
+
```
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: get-audio-duration
|
|
3
|
+
description: Getting the duration of an audio file in seconds with Mediabunny
|
|
4
|
+
metadata:
|
|
5
|
+
tags: duration, audio, length, time, seconds, mp3, wav
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Getting audio duration with Mediabunny
|
|
9
|
+
|
|
10
|
+
Mediabunny can extract the duration of an audio file. It works in browser, Node.js, and Bun environments.
|
|
11
|
+
|
|
12
|
+
## Getting audio duration
|
|
13
|
+
|
|
14
|
+
```tsx title="get-audio-duration.ts"
|
|
15
|
+
import { Input, ALL_FORMATS, UrlSource } from "mediabunny";
|
|
16
|
+
|
|
17
|
+
export const getAudioDuration = async (src: string) => {
|
|
18
|
+
const input = new Input({
|
|
19
|
+
formats: ALL_FORMATS,
|
|
20
|
+
source: new UrlSource(src, {
|
|
21
|
+
getRetryDelay: () => null,
|
|
22
|
+
}),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const durationInSeconds = await input.computeDuration();
|
|
26
|
+
return durationInSeconds;
|
|
27
|
+
};
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
const duration = await getAudioDuration("https://remotion.media/audio.mp3");
|
|
34
|
+
console.log(duration); // e.g. 180.5 (seconds)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Using with staticFile in Remotion
|
|
38
|
+
|
|
39
|
+
Make sure to wrap the file path in `staticFile()`:
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
import { staticFile } from "remotion";
|
|
43
|
+
|
|
44
|
+
const duration = await getAudioDuration(staticFile("audio.mp3"));
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## In Node.js and Bun
|
|
48
|
+
|
|
49
|
+
Use `FileSource` instead of `UrlSource`:
|
|
50
|
+
|
|
51
|
+
```tsx
|
|
52
|
+
import { Input, ALL_FORMATS, FileSource } from "mediabunny";
|
|
53
|
+
|
|
54
|
+
const input = new Input({
|
|
55
|
+
formats: ALL_FORMATS,
|
|
56
|
+
source: new FileSource(file), // File object from input or drag-drop
|
|
57
|
+
});
|
|
58
|
+
```
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: get-video-dimensions
|
|
3
|
+
description: Getting the width and height of a video file with Mediabunny
|
|
4
|
+
metadata:
|
|
5
|
+
tags: dimensions, width, height, resolution, size, video
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Getting video dimensions with Mediabunny
|
|
9
|
+
|
|
10
|
+
Mediabunny can extract the width and height of a video file. It works in browser, Node.js, and Bun environments.
|
|
11
|
+
|
|
12
|
+
## Getting video dimensions
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
import { Input, ALL_FORMATS, UrlSource } from "mediabunny";
|
|
16
|
+
|
|
17
|
+
export const getVideoDimensions = async (src: string) => {
|
|
18
|
+
const input = new Input({
|
|
19
|
+
formats: ALL_FORMATS,
|
|
20
|
+
source: new UrlSource(src, {
|
|
21
|
+
getRetryDelay: () => null,
|
|
22
|
+
}),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const videoTrack = await input.getPrimaryVideoTrack();
|
|
26
|
+
if (!videoTrack) {
|
|
27
|
+
throw new Error("No video track found");
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return {
|
|
31
|
+
width: videoTrack.displayWidth,
|
|
32
|
+
height: videoTrack.displayHeight,
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Usage
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
const dimensions = await getVideoDimensions("https://remotion.media/video.mp4");
|
|
41
|
+
console.log(dimensions.width); // e.g. 1920
|
|
42
|
+
console.log(dimensions.height); // e.g. 1080
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Using with local files
|
|
46
|
+
|
|
47
|
+
For local files, use `FileSource` instead of `UrlSource`:
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
import { Input, ALL_FORMATS, FileSource } from "mediabunny";
|
|
51
|
+
|
|
52
|
+
const input = new Input({
|
|
53
|
+
formats: ALL_FORMATS,
|
|
54
|
+
source: new FileSource(file), // File object from input or drag-drop
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
const videoTrack = await input.getPrimaryVideoTrack();
|
|
58
|
+
const width = videoTrack.displayWidth;
|
|
59
|
+
const height = videoTrack.displayHeight;
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Using with staticFile in Remotion
|
|
63
|
+
|
|
64
|
+
```tsx
|
|
65
|
+
import { staticFile } from "remotion";
|
|
66
|
+
|
|
67
|
+
const dimensions = await getVideoDimensions(staticFile("video.mp4"));
|
|
68
|
+
```
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: get-video-duration
|
|
3
|
+
description: Getting the duration of a video file in seconds with Mediabunny
|
|
4
|
+
metadata:
|
|
5
|
+
tags: duration, video, length, time, seconds
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Getting video duration with Mediabunny
|
|
9
|
+
|
|
10
|
+
Mediabunny can extract the duration of a video file. It works in browser, Node.js, and Bun environments.
|
|
11
|
+
|
|
12
|
+
## Getting video duration
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
import { Input, ALL_FORMATS, UrlSource } from "mediabunny";
|
|
16
|
+
|
|
17
|
+
export const getVideoDuration = async (src: string) => {
|
|
18
|
+
const input = new Input({
|
|
19
|
+
formats: ALL_FORMATS,
|
|
20
|
+
source: new UrlSource(src, {
|
|
21
|
+
getRetryDelay: () => null,
|
|
22
|
+
}),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const durationInSeconds = await input.computeDuration();
|
|
26
|
+
return durationInSeconds;
|
|
27
|
+
};
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
const duration = await getVideoDuration("https://remotion.media/video.mp4");
|
|
34
|
+
console.log(duration); // e.g. 10.5 (seconds)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Video files from the public/ directory
|
|
38
|
+
|
|
39
|
+
Make sure to wrap the file path in `staticFile()`:
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
import { staticFile } from "remotion";
|
|
43
|
+
|
|
44
|
+
const duration = await getVideoDuration(staticFile("video.mp4"));
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## In Node.js and Bun
|
|
48
|
+
|
|
49
|
+
Use `FileSource` instead of `UrlSource`:
|
|
50
|
+
|
|
51
|
+
```tsx
|
|
52
|
+
import { Input, ALL_FORMATS, FileSource } from "mediabunny";
|
|
53
|
+
|
|
54
|
+
const input = new Input({
|
|
55
|
+
formats: ALL_FORMATS,
|
|
56
|
+
source: new FileSource(file), // File object from input or drag-drop
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
const durationInSeconds = await input.computeDuration();
|
|
60
|
+
```
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gif
|
|
3
|
+
description: Displaying GIFs, APNG, AVIF and WebP in Remotion
|
|
4
|
+
metadata:
|
|
5
|
+
tags: gif, animation, images, animated, apng, avif, webp
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Using Animated images in Remotion
|
|
9
|
+
|
|
10
|
+
## Basic usage
|
|
11
|
+
|
|
12
|
+
Use `<AnimatedImage>` to display a GIF, APNG, AVIF or WebP image synchronized with Remotion's timeline:
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
import { AnimatedImage, staticFile } from "remotion";
|
|
16
|
+
|
|
17
|
+
export const MyComposition = () => {
|
|
18
|
+
return (
|
|
19
|
+
<AnimatedImage src={staticFile("animation.gif")} width={500} height={500} />
|
|
20
|
+
);
|
|
21
|
+
};
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Remote URLs are also supported (must have CORS enabled):
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
<AnimatedImage
|
|
28
|
+
src="https://example.com/animation.gif"
|
|
29
|
+
width={500}
|
|
30
|
+
height={500}
|
|
31
|
+
/>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Sizing and fit
|
|
35
|
+
|
|
36
|
+
Control how the image fills its container with the `fit` prop:
|
|
37
|
+
|
|
38
|
+
```tsx
|
|
39
|
+
// Stretch to fill (default)
|
|
40
|
+
<AnimatedImage src={staticFile("animation.gif")} width={500} height={300} fit="fill" />
|
|
41
|
+
|
|
42
|
+
// Maintain aspect ratio, fit inside container
|
|
43
|
+
<AnimatedImage src={staticFile("animation.gif")} width={500} height={300} fit="contain" />
|
|
44
|
+
|
|
45
|
+
// Fill container, crop if needed
|
|
46
|
+
<AnimatedImage src={staticFile("animation.gif")} width={500} height={300} fit="cover" />
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Playback speed
|
|
50
|
+
|
|
51
|
+
Use `playbackRate` to control the animation speed:
|
|
52
|
+
|
|
53
|
+
```tsx
|
|
54
|
+
<AnimatedImage src={staticFile("animation.gif")} width={500} height={500} playbackRate={2} /> {/* 2x speed */}
|
|
55
|
+
<AnimatedImage src={staticFile("animation.gif")} width={500} height={500} playbackRate={0.5} /> {/* Half speed */}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Looping behavior
|
|
59
|
+
|
|
60
|
+
Control what happens when the animation finishes:
|
|
61
|
+
|
|
62
|
+
```tsx
|
|
63
|
+
// Loop indefinitely (default)
|
|
64
|
+
<AnimatedImage src={staticFile("animation.gif")} width={500} height={500} loopBehavior="loop" />
|
|
65
|
+
|
|
66
|
+
// Play once, show final frame
|
|
67
|
+
<AnimatedImage src={staticFile("animation.gif")} width={500} height={500} loopBehavior="pause-after-finish" />
|
|
68
|
+
|
|
69
|
+
// Play once, then clear canvas
|
|
70
|
+
<AnimatedImage src={staticFile("animation.gif")} width={500} height={500} loopBehavior="clear-after-finish" />
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Styling
|
|
74
|
+
|
|
75
|
+
Use the `style` prop for additional CSS (use `width` and `height` props for sizing):
|
|
76
|
+
|
|
77
|
+
```tsx
|
|
78
|
+
<AnimatedImage
|
|
79
|
+
src={staticFile("animation.gif")}
|
|
80
|
+
width={500}
|
|
81
|
+
height={500}
|
|
82
|
+
style={{
|
|
83
|
+
borderRadius: 20,
|
|
84
|
+
position: "absolute",
|
|
85
|
+
top: 100,
|
|
86
|
+
left: 50,
|
|
87
|
+
}}
|
|
88
|
+
/>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Getting GIF duration
|
|
92
|
+
|
|
93
|
+
Use `getGifDurationInSeconds()` from `@remotion/gif` to get the duration of a GIF.
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
npx remotion add @remotion/gif
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
```tsx
|
|
100
|
+
import { getGifDurationInSeconds } from "@remotion/gif";
|
|
101
|
+
import { staticFile } from "remotion";
|
|
102
|
+
|
|
103
|
+
const duration = await getGifDurationInSeconds(staticFile("animation.gif"));
|
|
104
|
+
console.log(duration); // e.g. 2.5
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
This is useful for setting the composition duration to match the GIF:
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
import { getGifDurationInSeconds } from "@remotion/gif";
|
|
111
|
+
import { staticFile, CalculateMetadataFunction } from "remotion";
|
|
112
|
+
|
|
113
|
+
const calculateMetadata: CalculateMetadataFunction = async () => {
|
|
114
|
+
const duration = await getGifDurationInSeconds(staticFile("animation.gif"));
|
|
115
|
+
return {
|
|
116
|
+
durationInFrames: Math.ceil(duration * 30),
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Alternative
|
|
122
|
+
|
|
123
|
+
If `<AnimatedImage>` does not work (only supported in Chrome and Firefox), you can use `<Gif>` from `@remotion/gif` instead.
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
npx remotion add @remotion/gif # If project uses npm
|
|
127
|
+
bunx remotion add @remotion/gif # If project uses bun
|
|
128
|
+
yarn remotion add @remotion/gif # If project uses yarn
|
|
129
|
+
pnpm exec remotion add @remotion/gif # If project uses pnpm
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
```tsx
|
|
133
|
+
import { Gif } from "@remotion/gif";
|
|
134
|
+
import { staticFile } from "remotion";
|
|
135
|
+
|
|
136
|
+
export const MyComposition = () => {
|
|
137
|
+
return <Gif src={staticFile("animation.gif")} width={500} height={500} />;
|
|
138
|
+
};
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
The `<Gif>` component has the same props as `<AnimatedImage>` but only supports GIF files.
|