@kolbo/kolbo-code-linux-arm64-musl 0.0.0-dev-202604161628
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/bin/kolbo +0 -0
- package/package.json +14 -0
- package/skills/brainstorming/SKILL.md +164 -0
- package/skills/brainstorming/scripts/frame-template.html +214 -0
- package/skills/brainstorming/scripts/helper.js +88 -0
- package/skills/brainstorming/scripts/server.cjs +354 -0
- package/skills/brainstorming/scripts/start-server.sh +148 -0
- package/skills/brainstorming/scripts/stop-server.sh +56 -0
- package/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/skills/brainstorming/visual-companion.md +287 -0
- package/skills/color-grading/SKILL.md +152 -0
- package/skills/dispatching-parallel-agents/SKILL.md +182 -0
- package/skills/docx/.skillfish.json +10 -0
- package/skills/docx/SKILL.md +196 -0
- package/skills/docx/docx-js.md +350 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/docx/ooxml/scripts/pack.py +159 -0
- package/skills/docx/ooxml/scripts/unpack.py +29 -0
- package/skills/docx/ooxml/scripts/validate.py +69 -0
- package/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/docx/ooxml/scripts/validation/base.py +951 -0
- package/skills/docx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/docx/ooxml.md +599 -0
- package/skills/docx/scripts/__init__.py +1 -0
- package/skills/docx/scripts/document.py +1272 -0
- package/skills/docx/scripts/templates/comments.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills/docx/scripts/templates/people.xml +3 -0
- package/skills/docx/scripts/utilities.py +374 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/ffmpeg-patterns/SKILL.md +240 -0
- package/skills/finishing-a-development-branch/SKILL.md +200 -0
- package/skills/frontend-design/SKILL.md +42 -0
- package/skills/fullstack-app/SKILL.md +621 -0
- package/skills/image-prompting-guide/SKILL.md +143 -0
- package/skills/kolbo/SKILL.md +610 -0
- package/skills/music-prompting/SKILL.md +146 -0
- package/skills/pdf/.skillfish.json +10 -0
- package/skills/pdf/FORMS.md +205 -0
- package/skills/pdf/REFERENCE.md +612 -0
- package/skills/pdf/SKILL.md +293 -0
- package/skills/pdf/scripts/check_bounding_boxes.py +70 -0
- package/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
- package/skills/pdf/scripts/check_fillable_fields.py +12 -0
- package/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
- package/skills/pdf/scripts/create_validation_image.py +41 -0
- package/skills/pdf/scripts/extract_form_field_info.py +152 -0
- package/skills/pdf/scripts/fill_fillable_fields.py +114 -0
- package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
- package/skills/photo-studio/SKILL.md +130 -0
- package/skills/pptx/.skillfish.json +10 -0
- package/skills/pptx/SKILL.md +483 -0
- package/skills/pptx/html2pptx.md +626 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/pptx/ooxml/scripts/pack.py +159 -0
- package/skills/pptx/ooxml/scripts/unpack.py +29 -0
- package/skills/pptx/ooxml/scripts/validate.py +69 -0
- package/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/pptx/ooxml/scripts/validation/base.py +951 -0
- package/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/pptx/ooxml.md +427 -0
- package/skills/pptx/scripts/html2pptx.js +995 -0
- package/skills/pptx/scripts/inventory.py +1020 -0
- package/skills/pptx/scripts/rearrange.py +231 -0
- package/skills/pptx/scripts/replace.py +385 -0
- package/skills/pptx/scripts/thumbnail.py +450 -0
- package/skills/production-review/SKILL.md +152 -0
- package/skills/receiving-code-review/SKILL.md +213 -0
- package/skills/remotion-best-practices/SKILL.md +62 -0
- package/skills/remotion-best-practices/rules/3d.md +86 -0
- package/skills/remotion-best-practices/rules/animations.md +27 -0
- package/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
- package/skills/remotion-best-practices/rules/assets.md +78 -0
- package/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/skills/remotion-best-practices/rules/audio.md +169 -0
- package/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
- package/skills/remotion-best-practices/rules/can-decode.md +81 -0
- package/skills/remotion-best-practices/rules/charts.md +120 -0
- package/skills/remotion-best-practices/rules/compositions.md +154 -0
- package/skills/remotion-best-practices/rules/display-captions.md +184 -0
- package/skills/remotion-best-practices/rules/extract-frames.md +229 -0
- package/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
- package/skills/remotion-best-practices/rules/fonts.md +152 -0
- package/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/skills/remotion-best-practices/rules/gifs.md +141 -0
- package/skills/remotion-best-practices/rules/images.md +134 -0
- package/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/skills/remotion-best-practices/rules/light-leaks.md +73 -0
- package/skills/remotion-best-practices/rules/lottie.md +70 -0
- package/skills/remotion-best-practices/rules/maps.md +412 -0
- package/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/skills/remotion-best-practices/rules/measuring-text.md +140 -0
- package/skills/remotion-best-practices/rules/motion-design.md +215 -0
- package/skills/remotion-best-practices/rules/parameters.md +109 -0
- package/skills/remotion-best-practices/rules/sequencing.md +118 -0
- package/skills/remotion-best-practices/rules/sfx.md +30 -0
- package/skills/remotion-best-practices/rules/subtitles.md +36 -0
- package/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/skills/remotion-best-practices/rules/text-animations.md +20 -0
- package/skills/remotion-best-practices/rules/timing.md +179 -0
- package/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/skills/remotion-best-practices/rules/transitions.md +197 -0
- package/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/skills/remotion-best-practices/rules/trimming.md +51 -0
- package/skills/remotion-best-practices/rules/videos.md +171 -0
- package/skills/remotion-best-practices/rules/voiceover.md +99 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +146 -0
- package/skills/short-form-video/SKILL.md +168 -0
- package/skills/sound-design/SKILL.md +154 -0
- package/skills/storytelling/SKILL.md +139 -0
- package/skills/subagent-driven-development/SKILL.md +277 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +113 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/subtitle-production/SKILL.md +244 -0
- package/skills/subtitle-production/reference/burn_to_video.py +222 -0
- package/skills/subtitle-production/reference/export_srts.py +127 -0
- package/skills/subtitle-production/reference/gen_srt.py +42 -0
- package/skills/supabase/.skillfish.json +10 -0
- package/skills/supabase/SKILL.md +106 -0
- package/skills/supabase/assets/feedback-issue-template.md +17 -0
- package/skills/supabase/references/skill-feedback.md +17 -0
- package/skills/supabase-postgres-best-practices/.skillfish.json +10 -0
- package/skills/supabase-postgres-best-practices/SKILL.md +64 -0
- package/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
- package/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/skills/supabase-postgres-best-practices/references/_template.md +34 -0
- package/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/skills/supabase-postgres-best-practices/references/security-rls-performance.md +57 -0
- package/skills/supabase-quickstart/SKILL.md +400 -0
- package/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/skills/systematic-debugging/SKILL.md +296 -0
- package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/skills/systematic-debugging/find-polluter.sh +63 -0
- package/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/skills/systematic-debugging/test-academic.md +14 -0
- package/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/skills/test-driven-development/SKILL.md +371 -0
- package/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/skills/typography-video/SKILL.md +182 -0
- package/skills/typography-video/reference/KineticTitleScene.tsx +345 -0
- package/skills/using-git-worktrees/SKILL.md +218 -0
- package/skills/using-superpowers/SKILL.md +115 -0
- package/skills/using-superpowers/references/codex-tools.md +100 -0
- package/skills/using-superpowers/references/gemini-tools.md +33 -0
- package/skills/verification-before-completion/SKILL.md +139 -0
- package/skills/video-editing/SKILL.md +128 -0
- package/skills/video-production/SKILL.md +247 -0
- package/skills/video-prompting-guide/SKILL.md +268 -0
- package/skills/writing-plans/SKILL.md +152 -0
- package/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
- package/skills/writing-skills/SKILL.md +655 -0
- package/skills/writing-skills/anthropic-best-practices.md +1150 -0
- package/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
- package/skills/writing-skills/graphviz-conventions.dot +172 -0
- package/skills/writing-skills/persuasion-principles.md +187 -0
- package/skills/writing-skills/render-graphs.js +168 -0
- package/skills/writing-skills/testing-skills-with-subagents.md +384 -0
- package/skills/xlsx/.skillfish.json +10 -0
- package/skills/xlsx/SKILL.md +288 -0
- package/skills/xlsx/recalc.py +178 -0
- package/skills/youtube-clipper/SKILL.md +187 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Motion Design & Video Production
|
|
3
|
+
impact: HIGH
|
|
4
|
+
impactDescription: transforms generic animations into professional motion graphics with cinematic camera work, beat-driven timing, and production-quality transitions
|
|
5
|
+
tags: motion-design, announcement-video, cinematic, camera, beat, whip-pan, word-reveal, production
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Beat-Driven Absolute Timeline
|
|
9
|
+
|
|
10
|
+
**Never** nest `<Sequence>` components for multi-scene videos. Define a single `T` object with absolute frame positions — the whole timeline becomes readable and easy to adjust.
|
|
11
|
+
|
|
12
|
+
**Incorrect (fragile nested sequences):**
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
<Sequence from={0} durationInFrames={60}>
|
|
16
|
+
<SceneA />
|
|
17
|
+
</Sequence>
|
|
18
|
+
<Sequence from={60} durationInFrames={90}>
|
|
19
|
+
<SceneB />
|
|
20
|
+
</Sequence>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Correct (absolute beat timeline):**
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
const T = {
|
|
27
|
+
intro: 0,
|
|
28
|
+
codeScene: 58,
|
|
29
|
+
terminal: 98,
|
|
30
|
+
terminalEnd: 248,
|
|
31
|
+
shipScene: 252,
|
|
32
|
+
cta: 450,
|
|
33
|
+
TOTAL: 560,
|
|
34
|
+
} as const;
|
|
35
|
+
|
|
36
|
+
// Components self-hide outside their window:
|
|
37
|
+
if (frame < at || frame >= exit) return null;
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Camera Rig — Handheld + 3D Tilt + Z Dolly
|
|
43
|
+
|
|
44
|
+
Every production video needs a camera layer. Wire it once, all content gets it.
|
|
45
|
+
|
|
46
|
+
```tsx
|
|
47
|
+
// Slow Z dolly into each section
|
|
48
|
+
const camZ = frame < T.terminal
|
|
49
|
+
? interpolate(frame, [0, T.terminal], [-120, 0], { extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: Easing.out(Easing.quad) })
|
|
50
|
+
: 0;
|
|
51
|
+
|
|
52
|
+
// Organic breathing tilt (barely perceptible — felt not seen)
|
|
53
|
+
const camTiltY = Math.sin(frame / 180) * 1.2;
|
|
54
|
+
const camTiltX = Math.cos(frame / 240) * 0.8;
|
|
55
|
+
|
|
56
|
+
// Ultra-slow handheld drift
|
|
57
|
+
const driftX = Math.sin(frame * 0.028) * 3.0 + Math.sin(frame * 0.061) * 1.5;
|
|
58
|
+
const driftY = Math.cos(frame * 0.035) * 2.5 + Math.cos(frame * 0.073) * 1.2;
|
|
59
|
+
|
|
60
|
+
// Beat-synced camera kick
|
|
61
|
+
const impactAmt = ALL_BEATS.reduce((acc, bf) => {
|
|
62
|
+
const d = frame - bf;
|
|
63
|
+
if (d >= 0 && d < 22) {
|
|
64
|
+
const peak = BIG_BEATS.has(bf) ? 22 : 13;
|
|
65
|
+
return acc + interpolate(d, [0, 22], [peak, 0], { extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: Easing.out(Easing.cubic) });
|
|
66
|
+
}
|
|
67
|
+
return acc;
|
|
68
|
+
}, 0);
|
|
69
|
+
|
|
70
|
+
const shakeX = driftX + Math.sin(frame * 0.71) * impactAmt * 0.65;
|
|
71
|
+
const shakeY = driftY + Math.cos(frame * 0.83) * impactAmt * 0.35;
|
|
72
|
+
const shakeRot = Math.sin(frame * 0.022) * 0.25 + Math.sin(frame * 0.57) * impactAmt * 0.025;
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
JSX structure — outer shake, inner 3D perspective:
|
|
76
|
+
|
|
77
|
+
```tsx
|
|
78
|
+
<div style={{
|
|
79
|
+
position: 'absolute', inset: 0,
|
|
80
|
+
transform: `translateX(${shakeX + whipX}px) translateY(${shakeY}px) rotate(${shakeRot}deg)`,
|
|
81
|
+
filter: whipBlur > 0 ? `blur(${whipBlur}px)` : undefined,
|
|
82
|
+
}}>
|
|
83
|
+
<div style={{ position: 'absolute', inset: 0, perspective: '1400px', perspectiveOrigin: '50% 50%' }}>
|
|
84
|
+
<div style={{
|
|
85
|
+
position: 'absolute', inset: 0,
|
|
86
|
+
transform: `rotateX(${camTiltX}deg) rotateY(${camTiltY}deg) translateZ(${camZ}px)`,
|
|
87
|
+
transformStyle: 'preserve-3d',
|
|
88
|
+
}}>
|
|
89
|
+
{/* All scene content here */}
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Whip Pan Between Sections
|
|
98
|
+
|
|
99
|
+
Fast lateral translateX + motion blur. Apply to the whole content wrapper at section cut frames.
|
|
100
|
+
|
|
101
|
+
```tsx
|
|
102
|
+
const WHIP_FRAMES = [T.terminal, T.shipScene, T.cta]; // all major cuts
|
|
103
|
+
const WHIP_HALF = 4; // frames each side = 8 total = 0.27s
|
|
104
|
+
|
|
105
|
+
const { whipX, whipBlur } = WHIP_FRAMES.reduce(
|
|
106
|
+
(acc, tf) => {
|
|
107
|
+
const d = frame - tf;
|
|
108
|
+
if (d >= -WHIP_HALF && d < WHIP_HALF) {
|
|
109
|
+
const x = d < 0
|
|
110
|
+
? interpolate(d, [-WHIP_HALF, 0], [0, -420], { extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: Easing.in(Easing.cubic) })
|
|
111
|
+
: interpolate(d, [0, WHIP_HALF], [420, 0], { extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: Easing.out(Easing.cubic) });
|
|
112
|
+
const blur = interpolate(Math.abs(d), [0, WHIP_HALF], [22, 0], { extrapolateLeft: 'clamp', extrapolateRight: 'clamp' });
|
|
113
|
+
return { whipX: acc.whipX + x, whipBlur: Math.max(acc.whipBlur, blur) };
|
|
114
|
+
}
|
|
115
|
+
return acc;
|
|
116
|
+
},
|
|
117
|
+
{ whipX: 0, whipBlur: 0 },
|
|
118
|
+
);
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
No overlay effects needed. The displacement + blur IS the transition.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Masked Word Reveal — Soft Gradient Window
|
|
126
|
+
|
|
127
|
+
**Never use `overflow: hidden`** for word reveals — causes hard cuts at container edges.
|
|
128
|
+
Use CSS `mask-image` gradient instead. Words slide through a soft dissolve zone.
|
|
129
|
+
|
|
130
|
+
```tsx
|
|
131
|
+
const maskGrad = [
|
|
132
|
+
'transparent calc(50% - 185px)',
|
|
133
|
+
'black calc(50% - 105px)',
|
|
134
|
+
'black calc(50% + 105px)',
|
|
135
|
+
'transparent calc(50% + 185px)',
|
|
136
|
+
].join(', ');
|
|
137
|
+
|
|
138
|
+
<div style={{
|
|
139
|
+
position: 'absolute', inset: 0,
|
|
140
|
+
display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
141
|
+
maskImage: `linear-gradient(to bottom, ${maskGrad})`,
|
|
142
|
+
WebkitMaskImage: `linear-gradient(to bottom, ${maskGrad})`,
|
|
143
|
+
}}>
|
|
144
|
+
{words.map((word, i) => {
|
|
145
|
+
const wordAt = at + i * stagger; // stagger: 6-10 frames per word
|
|
146
|
+
const enterY = interpolate(frame, [wordAt, wordAt + enterDur], [215, 0], {
|
|
147
|
+
extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: Easing.out(Easing.cubic),
|
|
148
|
+
});
|
|
149
|
+
const exitY = interpolate(frame, [exit - exitDur, exit], [0, -215], {
|
|
150
|
+
extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: Easing.in(Easing.cubic),
|
|
151
|
+
});
|
|
152
|
+
return (
|
|
153
|
+
<span key={i} style={{ transform: `translateY(${enterY + exitY}%)`, display: 'inline-block', lineHeight: 1 }}>
|
|
154
|
+
{word}
|
|
155
|
+
</span>
|
|
156
|
+
);
|
|
157
|
+
})}
|
|
158
|
+
</div>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Font size guide:**
|
|
162
|
+
- Brand / hero reveal: `fontSize: 192, fontWeight: 900, letterSpacing: '-8px'`
|
|
163
|
+
- Section headlines: `fontSize: 128, fontWeight: 800, letterSpacing: '-4px'`
|
|
164
|
+
- Never drop below 128px for main titles — inconsistency reads as a bug
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Impact Flash System
|
|
169
|
+
|
|
170
|
+
Beat-synced white flash — screen-space overlay, outside the camera rig.
|
|
171
|
+
|
|
172
|
+
```tsx
|
|
173
|
+
const ALL_BEATS = [T.intro, T.codeScene, T.shipScene, T.cta];
|
|
174
|
+
const BIG_BEATS = new Set([T.intro, T.cta]);
|
|
175
|
+
|
|
176
|
+
const flashOpacity = ALL_BEATS.reduce((acc, bf) => {
|
|
177
|
+
const d = frame - bf;
|
|
178
|
+
if (d >= 0 && d < 8) {
|
|
179
|
+
const peak = BIG_BEATS.has(bf) ? 0.14 : 0.07;
|
|
180
|
+
return Math.max(acc, interpolate(d, [0, 8], [peak, 0], { extrapolateLeft: 'clamp', extrapolateRight: 'clamp' }));
|
|
181
|
+
}
|
|
182
|
+
return acc;
|
|
183
|
+
}, 0);
|
|
184
|
+
|
|
185
|
+
{flashOpacity > 0.005 && (
|
|
186
|
+
<div style={{ position: 'absolute', inset: 0, background: 'white', opacity: flashOpacity, pointerEvents: 'none' }} />
|
|
187
|
+
)}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Only add flash beats for major section cuts — not for UI elements fading in within a scene.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Narrative Order — Promise Before Proof
|
|
195
|
+
|
|
196
|
+
Text headlines BEFORE recordings/demos, not after.
|
|
197
|
+
|
|
198
|
+
- ✅ `"Code anything."` → terminal recording → `"Ship anything."` → desktop recording
|
|
199
|
+
- ❌ terminal recording → `"Code anything."` (that's a caption, not a headline)
|
|
200
|
+
|
|
201
|
+
## Cold Open — No Warmup
|
|
202
|
+
|
|
203
|
+
Frame 0 = the brand name or strongest visual. No intro slides, no warmup.
|
|
204
|
+
If you have a brand name, open on it at 192px. Let the first word be the hook.
|
|
205
|
+
|
|
206
|
+
## Avoid Copy Redundancy
|
|
207
|
+
|
|
208
|
+
Adjacent phrases must not repeat words or contradict each other.
|
|
209
|
+
- ❌ `"Beyond code."` immediately followed by a `"Code."` beat
|
|
210
|
+
- ❌ `"Code anything."` then `"Create anything."` (same structure, same word)
|
|
211
|
+
- ✅ `"Code anything."` → `"Ship anything."` (different verb, completes a story arc)
|
|
212
|
+
|
|
213
|
+
## One Logo Rule
|
|
214
|
+
|
|
215
|
+
Never show the product logo twice. If it appears in a mid-video reveal (e.g. orbit converge scene), remove it from the CTA. Use text only at the end.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: parameters
|
|
3
|
+
description: Make a video parametrizable by adding a Zod schema
|
|
4
|
+
metadata:
|
|
5
|
+
tags: parameters, zod, schema
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
To make a video parametrizable, a Zod schema can be added to a composition.
|
|
9
|
+
|
|
10
|
+
First, `zod` must be installed .
|
|
11
|
+
|
|
12
|
+
Search the project for lockfiles and run the correct command depending on the package manager:
|
|
13
|
+
|
|
14
|
+
If `package-lock.json` is found, use the following command:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm i zod
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
If `bun.lockb` is found, use the following command:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
bun i zod
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
If `yarn.lock` is found, use the following command:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
yarn add zod
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
If `pnpm-lock.yaml` is found, use the following command:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pnpm i zod
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Then, a Zod schema can be defined alongside the component:
|
|
39
|
+
|
|
40
|
+
```tsx title="src/MyComposition.tsx"
|
|
41
|
+
import { z } from "zod";
|
|
42
|
+
|
|
43
|
+
export const MyCompositionSchema = z.object({
|
|
44
|
+
title: z.string(),
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const MyComponent: React.FC<z.infer<typeof MyCompositionSchema>> = () => {
|
|
48
|
+
return (
|
|
49
|
+
<div>
|
|
50
|
+
<h1>{props.title}</h1>
|
|
51
|
+
</div>
|
|
52
|
+
);
|
|
53
|
+
};
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
In the root file, the schema can be passed to the composition:
|
|
57
|
+
|
|
58
|
+
```tsx title="src/Root.tsx"
|
|
59
|
+
import { Composition } from "remotion";
|
|
60
|
+
import { MycComponent, MyCompositionSchema } from "./MyComposition";
|
|
61
|
+
|
|
62
|
+
export const RemotionRoot = () => {
|
|
63
|
+
return (
|
|
64
|
+
<Composition
|
|
65
|
+
id="MyComposition"
|
|
66
|
+
component={MyComponent}
|
|
67
|
+
durationInFrames={100}
|
|
68
|
+
fps={30}
|
|
69
|
+
width={1080}
|
|
70
|
+
height={1080}
|
|
71
|
+
defaultProps={{ title: "Hello World" }}
|
|
72
|
+
schema={MyCompositionSchema}
|
|
73
|
+
/>
|
|
74
|
+
);
|
|
75
|
+
};
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Now, the user can edit the parameter visually in the sidebar.
|
|
79
|
+
|
|
80
|
+
All schemas that are supported by Zod are supported by Remotion.
|
|
81
|
+
|
|
82
|
+
Remotion requires that the top-level type is a z.object(), because the collection of props of a React component is always an object.
|
|
83
|
+
|
|
84
|
+
## Color picker
|
|
85
|
+
|
|
86
|
+
For adding a color picker, use `zColor()` from `@remotion/zod-types`.
|
|
87
|
+
|
|
88
|
+
If it is not installed, use the following command:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
npx remotion add @remotion/zod-types # If project uses npm
|
|
92
|
+
bunx remotion add @remotion/zod-types # If project uses bun
|
|
93
|
+
yarn remotion add @remotion/zod-types # If project uses yarn
|
|
94
|
+
pnpm exec remotion add @remotion/zod-types # If project uses pnpm
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Then import `zColor` from `@remotion/zod-types`:
|
|
98
|
+
|
|
99
|
+
```tsx
|
|
100
|
+
import { zColor } from "@remotion/zod-types";
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Then use it in the schema:
|
|
104
|
+
|
|
105
|
+
```tsx
|
|
106
|
+
export const MyCompositionSchema = z.object({
|
|
107
|
+
color: zColor(),
|
|
108
|
+
});
|
|
109
|
+
```
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sequencing
|
|
3
|
+
description: Sequencing patterns for Remotion - delay, trim, limit duration of items
|
|
4
|
+
metadata:
|
|
5
|
+
tags: sequence, series, timing, delay, trim
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Use `<Sequence>` to delay when an element appears in the timeline.
|
|
9
|
+
|
|
10
|
+
```tsx
|
|
11
|
+
import { Sequence } from "remotion";
|
|
12
|
+
|
|
13
|
+
const {fps} = useVideoConfig();
|
|
14
|
+
|
|
15
|
+
<Sequence from={1 * fps} durationInFrames={2 * fps} premountFor={1 * fps}>
|
|
16
|
+
<Title />
|
|
17
|
+
</Sequence>
|
|
18
|
+
<Sequence from={2 * fps} durationInFrames={2 * fps} premountFor={1 * fps}>
|
|
19
|
+
<Subtitle />
|
|
20
|
+
</Sequence>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
This will by default wrap the component in an absolute fill element.
|
|
24
|
+
If the items should not be wrapped, use the `layout` prop:
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
<Sequence layout="none">
|
|
28
|
+
<Title />
|
|
29
|
+
</Sequence>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Premounting
|
|
33
|
+
|
|
34
|
+
This loads the component in the timeline before it is actually played.
|
|
35
|
+
Always premount any `<Sequence>`!
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
<Sequence premountFor={1 * fps}>
|
|
39
|
+
<Title />
|
|
40
|
+
</Sequence>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Series
|
|
44
|
+
|
|
45
|
+
Use `<Series>` when elements should play one after another without overlap.
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
import { Series } from "remotion";
|
|
49
|
+
|
|
50
|
+
<Series>
|
|
51
|
+
<Series.Sequence durationInFrames={45}>
|
|
52
|
+
<Intro />
|
|
53
|
+
</Series.Sequence>
|
|
54
|
+
<Series.Sequence durationInFrames={60}>
|
|
55
|
+
<MainContent />
|
|
56
|
+
</Series.Sequence>
|
|
57
|
+
<Series.Sequence durationInFrames={30}>
|
|
58
|
+
<Outro />
|
|
59
|
+
</Series.Sequence>
|
|
60
|
+
</Series>;
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Same as with `<Sequence>`, the items will be wrapped in an absolute fill element by default when using `<Series.Sequence>`, unless the `layout` prop is set to `none`.
|
|
64
|
+
|
|
65
|
+
### Series with overlaps
|
|
66
|
+
|
|
67
|
+
Use negative offset for overlapping sequences:
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
<Series>
|
|
71
|
+
<Series.Sequence durationInFrames={60}>
|
|
72
|
+
<SceneA />
|
|
73
|
+
</Series.Sequence>
|
|
74
|
+
<Series.Sequence offset={-15} durationInFrames={60}>
|
|
75
|
+
{/* Starts 15 frames before SceneA ends */}
|
|
76
|
+
<SceneB />
|
|
77
|
+
</Series.Sequence>
|
|
78
|
+
</Series>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Frame References Inside Sequences
|
|
82
|
+
|
|
83
|
+
Inside a Sequence, `useCurrentFrame()` returns the local frame (starting from 0):
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
<Sequence from={60} durationInFrames={30}>
|
|
87
|
+
<MyComponent />
|
|
88
|
+
{/* Inside MyComponent, useCurrentFrame() returns 0-29, not 60-89 */}
|
|
89
|
+
</Sequence>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Nested Sequences
|
|
93
|
+
|
|
94
|
+
Sequences can be nested for complex timing:
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
<Sequence from={0} durationInFrames={120}>
|
|
98
|
+
<Background />
|
|
99
|
+
<Sequence from={15} durationInFrames={90} layout="none">
|
|
100
|
+
<Title />
|
|
101
|
+
</Sequence>
|
|
102
|
+
<Sequence from={45} durationInFrames={60} layout="none">
|
|
103
|
+
<Subtitle />
|
|
104
|
+
</Sequence>
|
|
105
|
+
</Sequence>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Nesting compositions within another
|
|
109
|
+
|
|
110
|
+
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.
|
|
111
|
+
|
|
112
|
+
```tsx
|
|
113
|
+
<AbsoluteFill>
|
|
114
|
+
<Sequence width={COMPOSITION_WIDTH} height={COMPOSITION_HEIGHT}>
|
|
115
|
+
<CompositionComponent />
|
|
116
|
+
</Sequence>
|
|
117
|
+
</AbsoluteFill>
|
|
118
|
+
```
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
- `https://remotion.media/ding.wav`
|
|
26
|
+
- `https://remotion.media/bruh.wav`
|
|
27
|
+
- `https://remotion.media/vine-boom.wav`
|
|
28
|
+
- `https://remotion.media/windows-xp-error.wav`
|
|
29
|
+
|
|
30
|
+
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.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: text-animations
|
|
3
|
+
description: Typography and text animation patterns for Remotion.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: typography, text, typewriter, highlighter ken
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Text animations
|
|
9
|
+
|
|
10
|
+
Based on `useCurrentFrame()`, reduce the string character by character to create a typewriter effect.
|
|
11
|
+
|
|
12
|
+
## Typewriter Effect
|
|
13
|
+
|
|
14
|
+
See [Typewriter](assets/text-animations-typewriter.tsx) for an advanced example with a blinking cursor and a pause after the first sentence.
|
|
15
|
+
|
|
16
|
+
Always use string slicing for typewriter effects. Never use per-character opacity.
|
|
17
|
+
|
|
18
|
+
## Word Highlighting
|
|
19
|
+
|
|
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.
|