@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,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: videos
|
|
3
|
+
description: Embedding videos in Remotion - trimming, volume, speed, looping, pitch
|
|
4
|
+
metadata:
|
|
5
|
+
tags: video, media, trim, volume, speed, loop, pitch
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Using videos in Remotion
|
|
9
|
+
|
|
10
|
+
## Prerequisites
|
|
11
|
+
|
|
12
|
+
First, the @remotion/media package needs to be installed.
|
|
13
|
+
If it is not, use the following command:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx remotion add @remotion/media # If project uses npm
|
|
17
|
+
bunx remotion add @remotion/media # If project uses bun
|
|
18
|
+
yarn remotion add @remotion/media # If project uses yarn
|
|
19
|
+
pnpm exec remotion add @remotion/media # If project uses pnpm
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Use `<Video>` from `@remotion/media` to embed videos into your composition.
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import { Video } from "@remotion/media";
|
|
26
|
+
import { staticFile } from "remotion";
|
|
27
|
+
|
|
28
|
+
export const MyComposition = () => {
|
|
29
|
+
return <Video src={staticFile("video.mp4")} />;
|
|
30
|
+
};
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Remote URLs are also supported:
|
|
34
|
+
|
|
35
|
+
```tsx
|
|
36
|
+
<Video src="https://remotion.media/video.mp4" />
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Trimming
|
|
40
|
+
|
|
41
|
+
Use `trimBefore` and `trimAfter` to remove portions of the video. Values are in seconds.
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
const { fps } = useVideoConfig();
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<Video
|
|
48
|
+
src={staticFile("video.mp4")}
|
|
49
|
+
trimBefore={2 * fps} // Skip the first 2 seconds
|
|
50
|
+
trimAfter={10 * fps} // End at the 10 second mark
|
|
51
|
+
/>
|
|
52
|
+
);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Delaying
|
|
56
|
+
|
|
57
|
+
Wrap the video in a `<Sequence>` to delay when it appears:
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
import { Sequence, staticFile } from "remotion";
|
|
61
|
+
import { Video } from "@remotion/media";
|
|
62
|
+
|
|
63
|
+
const { fps } = useVideoConfig();
|
|
64
|
+
|
|
65
|
+
return (
|
|
66
|
+
<Sequence from={1 * fps}>
|
|
67
|
+
<Video src={staticFile("video.mp4")} />
|
|
68
|
+
</Sequence>
|
|
69
|
+
);
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
The video will appear after 1 second.
|
|
73
|
+
|
|
74
|
+
## Sizing and Position
|
|
75
|
+
|
|
76
|
+
Use the `style` prop to control size and position:
|
|
77
|
+
|
|
78
|
+
```tsx
|
|
79
|
+
<Video
|
|
80
|
+
src={staticFile("video.mp4")}
|
|
81
|
+
style={{
|
|
82
|
+
width: 500,
|
|
83
|
+
height: 300,
|
|
84
|
+
position: "absolute",
|
|
85
|
+
top: 100,
|
|
86
|
+
left: 50,
|
|
87
|
+
objectFit: "cover",
|
|
88
|
+
}}
|
|
89
|
+
/>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Volume
|
|
93
|
+
|
|
94
|
+
Set a static volume (0 to 1):
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
<Video src={staticFile("video.mp4")} volume={0.5} />
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Or use a callback for dynamic volume based on the current frame:
|
|
101
|
+
|
|
102
|
+
```tsx
|
|
103
|
+
import { interpolate } from "remotion";
|
|
104
|
+
|
|
105
|
+
const { fps } = useVideoConfig();
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
<Video
|
|
109
|
+
src={staticFile("video.mp4")}
|
|
110
|
+
volume={(f) =>
|
|
111
|
+
interpolate(f, [0, 1 * fps], [0, 1], { extrapolateRight: "clamp" })
|
|
112
|
+
}
|
|
113
|
+
/>
|
|
114
|
+
);
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Use `muted` to silence the video entirely:
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
<Video src={staticFile("video.mp4")} muted />
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Speed
|
|
124
|
+
|
|
125
|
+
Use `playbackRate` to change the playback speed:
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
<Video src={staticFile("video.mp4")} playbackRate={2} /> {/* 2x speed */}
|
|
129
|
+
<Video src={staticFile("video.mp4")} playbackRate={0.5} /> {/* Half speed */}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Reverse playback is not supported.
|
|
133
|
+
|
|
134
|
+
## Looping
|
|
135
|
+
|
|
136
|
+
Use `loop` to loop the video indefinitely:
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
<Video src={staticFile("video.mp4")} loop />
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Use `loopVolumeCurveBehavior` to control how the frame count behaves when looping:
|
|
143
|
+
|
|
144
|
+
- `"repeat"`: Frame count resets to 0 each loop (for `volume` callback)
|
|
145
|
+
- `"extend"`: Frame count continues incrementing
|
|
146
|
+
|
|
147
|
+
```tsx
|
|
148
|
+
<Video
|
|
149
|
+
src={staticFile("video.mp4")}
|
|
150
|
+
loop
|
|
151
|
+
loopVolumeCurveBehavior="extend"
|
|
152
|
+
volume={(f) => interpolate(f, [0, 300], [1, 0])} // Fade out over multiple loops
|
|
153
|
+
/>
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Pitch
|
|
157
|
+
|
|
158
|
+
Use `toneFrequency` to adjust the pitch without affecting speed. Values range from 0.01 to 2:
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
<Video
|
|
162
|
+
src={staticFile("video.mp4")}
|
|
163
|
+
toneFrequency={1.5} // Higher pitch
|
|
164
|
+
/>
|
|
165
|
+
<Video
|
|
166
|
+
src={staticFile("video.mp4")}
|
|
167
|
+
toneFrequency={0.8} // Lower pitch
|
|
168
|
+
/>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Pitch shifting only works during server-side rendering, not in the Remotion Studio preview or in the `<Player />`.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: voiceover
|
|
3
|
+
description: Adding AI-generated voiceover to Remotion compositions using TTS
|
|
4
|
+
metadata:
|
|
5
|
+
tags: voiceover, audio, elevenlabs, tts, speech, calculateMetadata, dynamic duration
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Adding AI voiceover to a Remotion composition
|
|
9
|
+
|
|
10
|
+
Use ElevenLabs TTS to generate speech audio per scene, then use [`calculateMetadata`](./calculate-metadata) to dynamically size the composition to match the audio.
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
By default this guide uses **ElevenLabs** as the TTS provider (`ELEVENLABS_API_KEY` environment variable). Users may substitute any TTS service that can produce an audio file.
|
|
15
|
+
|
|
16
|
+
If the user has not specified a TTS provider, recommend ElevenLabs and ask for their API key.
|
|
17
|
+
|
|
18
|
+
Ensure the environment variable is available when running the generation script:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
node --strip-types generate-voiceover.ts
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Generating audio with ElevenLabs
|
|
25
|
+
|
|
26
|
+
Create a script that reads the config, calls the ElevenLabs API for each scene, and writes MP3 files to the `public/` directory so Remotion can access them via `staticFile()`.
|
|
27
|
+
|
|
28
|
+
The core API call for a single scene:
|
|
29
|
+
|
|
30
|
+
```ts title="generate-voiceover.ts"
|
|
31
|
+
const response = await fetch(
|
|
32
|
+
`https://api.elevenlabs.io/v1/text-to-speech/${voiceId}`,
|
|
33
|
+
{
|
|
34
|
+
method: "POST",
|
|
35
|
+
headers: {
|
|
36
|
+
"xi-api-key": process.env.ELEVENLABS_API_KEY!,
|
|
37
|
+
"Content-Type": "application/json",
|
|
38
|
+
Accept: "audio/mpeg",
|
|
39
|
+
},
|
|
40
|
+
body: JSON.stringify({
|
|
41
|
+
text: "Welcome to the show.",
|
|
42
|
+
model_id: "eleven_multilingual_v2",
|
|
43
|
+
voice_settings: {
|
|
44
|
+
stability: 0.5,
|
|
45
|
+
similarity_boost: 0.75,
|
|
46
|
+
style: 0.3,
|
|
47
|
+
},
|
|
48
|
+
}),
|
|
49
|
+
},
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const audioBuffer = Buffer.from(await response.arrayBuffer());
|
|
53
|
+
writeFileSync(`public/voiceover/${compositionId}/${scene.id}.mp3`, audioBuffer);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Dynamic composition duration with calculateMetadata
|
|
57
|
+
|
|
58
|
+
Use [`calculateMetadata`](./calculate-metadata.md) to measure the [audio durations](./get-audio-duration.md) and set the composition length accordingly.
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
import { CalculateMetadataFunction, staticFile } from "remotion";
|
|
62
|
+
import { getAudioDuration } from "./get-audio-duration";
|
|
63
|
+
|
|
64
|
+
const FPS = 30;
|
|
65
|
+
|
|
66
|
+
const SCENE_AUDIO_FILES = [
|
|
67
|
+
"voiceover/my-comp/scene-01-intro.mp3",
|
|
68
|
+
"voiceover/my-comp/scene-02-main.mp3",
|
|
69
|
+
"voiceover/my-comp/scene-03-outro.mp3",
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
export const calculateMetadata: CalculateMetadataFunction<Props> = async ({
|
|
73
|
+
props,
|
|
74
|
+
}) => {
|
|
75
|
+
const durations = await Promise.all(
|
|
76
|
+
SCENE_AUDIO_FILES.map((file) => getAudioDuration(staticFile(file))),
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
const sceneDurations = durations.map((durationInSeconds) => {
|
|
80
|
+
return durationInSeconds * FPS;
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
durationInFrames: Math.ceil(sceneDurations.reduce((sum, d) => sum + d, 0)),
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The computed `sceneDurations` are passed into the component via a `voiceover` prop so the component knows how long each scene should be.
|
|
90
|
+
|
|
91
|
+
If the composition uses [`<TransitionSeries>`](./transitions.md), subtract the overlap from total duration: [./transitions.md#calculating-total-composition-duration](./transitions.md#calculating-total-composition-duration)
|
|
92
|
+
|
|
93
|
+
## Rendering audio in the component
|
|
94
|
+
|
|
95
|
+
See [audio.md](./audio.md) for more information on how to render audio in the component.
|
|
96
|
+
|
|
97
|
+
## Delaying audio start
|
|
98
|
+
|
|
99
|
+
See [audio.md#delaying](./audio.md#delaying) for more information on how to delay the audio start.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: requesting-code-review
|
|
3
|
+
description: Use when completing tasks, implementing major features, or before merging to verify work meets requirements
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Requesting Code Review
|
|
7
|
+
|
|
8
|
+
Dispatch superpowers:code-reviewer subagent to catch issues before they cascade. The reviewer gets precisely crafted context for evaluation — never your session's history. This keeps the reviewer focused on the work product, not your thought process, and preserves your own context for continued work.
|
|
9
|
+
|
|
10
|
+
**Core principle:** Review early, review often.
|
|
11
|
+
|
|
12
|
+
## When to Request Review
|
|
13
|
+
|
|
14
|
+
**Mandatory:**
|
|
15
|
+
- After each task in subagent-driven development
|
|
16
|
+
- After completing major feature
|
|
17
|
+
- Before merge to main
|
|
18
|
+
|
|
19
|
+
**Optional but valuable:**
|
|
20
|
+
- When stuck (fresh perspective)
|
|
21
|
+
- Before refactoring (baseline check)
|
|
22
|
+
- After fixing complex bug
|
|
23
|
+
|
|
24
|
+
## How to Request
|
|
25
|
+
|
|
26
|
+
**1. Get git SHAs:**
|
|
27
|
+
```bash
|
|
28
|
+
BASE_SHA=$(git rev-parse HEAD~1) # or origin/main
|
|
29
|
+
HEAD_SHA=$(git rev-parse HEAD)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**2. Dispatch code-reviewer subagent:**
|
|
33
|
+
|
|
34
|
+
Use Task tool with superpowers:code-reviewer type, fill template at `code-reviewer.md`
|
|
35
|
+
|
|
36
|
+
**Placeholders:**
|
|
37
|
+
- `{WHAT_WAS_IMPLEMENTED}` - What you just built
|
|
38
|
+
- `{PLAN_OR_REQUIREMENTS}` - What it should do
|
|
39
|
+
- `{BASE_SHA}` - Starting commit
|
|
40
|
+
- `{HEAD_SHA}` - Ending commit
|
|
41
|
+
- `{DESCRIPTION}` - Brief summary
|
|
42
|
+
|
|
43
|
+
**3. Act on feedback:**
|
|
44
|
+
- Fix Critical issues immediately
|
|
45
|
+
- Fix Important issues before proceeding
|
|
46
|
+
- Note Minor issues for later
|
|
47
|
+
- Push back if reviewer is wrong (with reasoning)
|
|
48
|
+
|
|
49
|
+
## Example
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
[Just completed Task 2: Add verification function]
|
|
53
|
+
|
|
54
|
+
You: Let me request code review before proceeding.
|
|
55
|
+
|
|
56
|
+
BASE_SHA=$(git log --oneline | grep "Task 1" | head -1 | awk '{print $1}')
|
|
57
|
+
HEAD_SHA=$(git rev-parse HEAD)
|
|
58
|
+
|
|
59
|
+
[Dispatch superpowers:code-reviewer subagent]
|
|
60
|
+
WHAT_WAS_IMPLEMENTED: Verification and repair functions for conversation index
|
|
61
|
+
PLAN_OR_REQUIREMENTS: Task 2 from docs/superpowers/plans/deployment-plan.md
|
|
62
|
+
BASE_SHA: a7981ec
|
|
63
|
+
HEAD_SHA: 3df7661
|
|
64
|
+
DESCRIPTION: Added verifyIndex() and repairIndex() with 4 issue types
|
|
65
|
+
|
|
66
|
+
[Subagent returns]:
|
|
67
|
+
Strengths: Clean architecture, real tests
|
|
68
|
+
Issues:
|
|
69
|
+
Important: Missing progress indicators
|
|
70
|
+
Minor: Magic number (100) for reporting interval
|
|
71
|
+
Assessment: Ready to proceed
|
|
72
|
+
|
|
73
|
+
You: [Fix progress indicators]
|
|
74
|
+
[Continue to Task 3]
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Integration with Workflows
|
|
78
|
+
|
|
79
|
+
**Subagent-Driven Development:**
|
|
80
|
+
- Review after EACH task
|
|
81
|
+
- Catch issues before they compound
|
|
82
|
+
- Fix before moving to next task
|
|
83
|
+
|
|
84
|
+
**Executing Plans:**
|
|
85
|
+
- Review after each batch (3 tasks)
|
|
86
|
+
- Get feedback, apply, continue
|
|
87
|
+
|
|
88
|
+
**Ad-Hoc Development:**
|
|
89
|
+
- Review before merge
|
|
90
|
+
- Review when stuck
|
|
91
|
+
|
|
92
|
+
## Red Flags
|
|
93
|
+
|
|
94
|
+
**Never:**
|
|
95
|
+
- Skip review because "it's simple"
|
|
96
|
+
- Ignore Critical issues
|
|
97
|
+
- Proceed with unfixed Important issues
|
|
98
|
+
- Argue with valid technical feedback
|
|
99
|
+
|
|
100
|
+
**If reviewer wrong:**
|
|
101
|
+
- Push back with technical reasoning
|
|
102
|
+
- Show code/tests that prove it works
|
|
103
|
+
- Request clarification
|
|
104
|
+
|
|
105
|
+
See template at: requesting-code-review/code-reviewer.md
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Code Review Agent
|
|
2
|
+
|
|
3
|
+
You are reviewing code changes for production readiness.
|
|
4
|
+
|
|
5
|
+
**Your task:**
|
|
6
|
+
1. Review {WHAT_WAS_IMPLEMENTED}
|
|
7
|
+
2. Compare against {PLAN_OR_REQUIREMENTS}
|
|
8
|
+
3. Check code quality, architecture, testing
|
|
9
|
+
4. Categorize issues by severity
|
|
10
|
+
5. Assess production readiness
|
|
11
|
+
|
|
12
|
+
## What Was Implemented
|
|
13
|
+
|
|
14
|
+
{DESCRIPTION}
|
|
15
|
+
|
|
16
|
+
## Requirements/Plan
|
|
17
|
+
|
|
18
|
+
{PLAN_REFERENCE}
|
|
19
|
+
|
|
20
|
+
## Git Range to Review
|
|
21
|
+
|
|
22
|
+
**Base:** {BASE_SHA}
|
|
23
|
+
**Head:** {HEAD_SHA}
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
git diff --stat {BASE_SHA}..{HEAD_SHA}
|
|
27
|
+
git diff {BASE_SHA}..{HEAD_SHA}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Review Checklist
|
|
31
|
+
|
|
32
|
+
**Code Quality:**
|
|
33
|
+
- Clean separation of concerns?
|
|
34
|
+
- Proper error handling?
|
|
35
|
+
- Type safety (if applicable)?
|
|
36
|
+
- DRY principle followed?
|
|
37
|
+
- Edge cases handled?
|
|
38
|
+
|
|
39
|
+
**Architecture:**
|
|
40
|
+
- Sound design decisions?
|
|
41
|
+
- Scalability considerations?
|
|
42
|
+
- Performance implications?
|
|
43
|
+
- Security concerns?
|
|
44
|
+
|
|
45
|
+
**Testing:**
|
|
46
|
+
- Tests actually test logic (not mocks)?
|
|
47
|
+
- Edge cases covered?
|
|
48
|
+
- Integration tests where needed?
|
|
49
|
+
- All tests passing?
|
|
50
|
+
|
|
51
|
+
**Requirements:**
|
|
52
|
+
- All plan requirements met?
|
|
53
|
+
- Implementation matches spec?
|
|
54
|
+
- No scope creep?
|
|
55
|
+
- Breaking changes documented?
|
|
56
|
+
|
|
57
|
+
**Production Readiness:**
|
|
58
|
+
- Migration strategy (if schema changes)?
|
|
59
|
+
- Backward compatibility considered?
|
|
60
|
+
- Documentation complete?
|
|
61
|
+
- No obvious bugs?
|
|
62
|
+
|
|
63
|
+
## Output Format
|
|
64
|
+
|
|
65
|
+
### Strengths
|
|
66
|
+
[What's well done? Be specific.]
|
|
67
|
+
|
|
68
|
+
### Issues
|
|
69
|
+
|
|
70
|
+
#### Critical (Must Fix)
|
|
71
|
+
[Bugs, security issues, data loss risks, broken functionality]
|
|
72
|
+
|
|
73
|
+
#### Important (Should Fix)
|
|
74
|
+
[Architecture problems, missing features, poor error handling, test gaps]
|
|
75
|
+
|
|
76
|
+
#### Minor (Nice to Have)
|
|
77
|
+
[Code style, optimization opportunities, documentation improvements]
|
|
78
|
+
|
|
79
|
+
**For each issue:**
|
|
80
|
+
- File:line reference
|
|
81
|
+
- What's wrong
|
|
82
|
+
- Why it matters
|
|
83
|
+
- How to fix (if not obvious)
|
|
84
|
+
|
|
85
|
+
### Recommendations
|
|
86
|
+
[Improvements for code quality, architecture, or process]
|
|
87
|
+
|
|
88
|
+
### Assessment
|
|
89
|
+
|
|
90
|
+
**Ready to merge?** [Yes/No/With fixes]
|
|
91
|
+
|
|
92
|
+
**Reasoning:** [Technical assessment in 1-2 sentences]
|
|
93
|
+
|
|
94
|
+
## Critical Rules
|
|
95
|
+
|
|
96
|
+
**DO:**
|
|
97
|
+
- Categorize by actual severity (not everything is Critical)
|
|
98
|
+
- Be specific (file:line, not vague)
|
|
99
|
+
- Explain WHY issues matter
|
|
100
|
+
- Acknowledge strengths
|
|
101
|
+
- Give clear verdict
|
|
102
|
+
|
|
103
|
+
**DON'T:**
|
|
104
|
+
- Say "looks good" without checking
|
|
105
|
+
- Mark nitpicks as Critical
|
|
106
|
+
- Give feedback on code you didn't review
|
|
107
|
+
- Be vague ("improve error handling")
|
|
108
|
+
- Avoid giving a clear verdict
|
|
109
|
+
|
|
110
|
+
## Example Output
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
### Strengths
|
|
114
|
+
- Clean database schema with proper migrations (db.ts:15-42)
|
|
115
|
+
- Comprehensive test coverage (18 tests, all edge cases)
|
|
116
|
+
- Good error handling with fallbacks (summarizer.ts:85-92)
|
|
117
|
+
|
|
118
|
+
### Issues
|
|
119
|
+
|
|
120
|
+
#### Important
|
|
121
|
+
1. **Missing help text in CLI wrapper**
|
|
122
|
+
- File: index-conversations:1-31
|
|
123
|
+
- Issue: No --help flag, users won't discover --concurrency
|
|
124
|
+
- Fix: Add --help case with usage examples
|
|
125
|
+
|
|
126
|
+
2. **Date validation missing**
|
|
127
|
+
- File: search.ts:25-27
|
|
128
|
+
- Issue: Invalid dates silently return no results
|
|
129
|
+
- Fix: Validate ISO format, throw error with example
|
|
130
|
+
|
|
131
|
+
#### Minor
|
|
132
|
+
1. **Progress indicators**
|
|
133
|
+
- File: indexer.ts:130
|
|
134
|
+
- Issue: No "X of Y" counter for long operations
|
|
135
|
+
- Impact: Users don't know how long to wait
|
|
136
|
+
|
|
137
|
+
### Recommendations
|
|
138
|
+
- Add progress reporting for user experience
|
|
139
|
+
- Consider config file for excluded projects (portability)
|
|
140
|
+
|
|
141
|
+
### Assessment
|
|
142
|
+
|
|
143
|
+
**Ready to merge: With fixes**
|
|
144
|
+
|
|
145
|
+
**Reasoning:** Core implementation is solid with good architecture and tests. Important issues (help text, date validation) are easily fixed and don't affect core functionality.
|
|
146
|
+
```
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: short-form-video
|
|
3
|
+
description: >
|
|
4
|
+
Short-form video optimization for TikTok, Instagram Reels, YouTube Shorts, and Facebook Reels.
|
|
5
|
+
Platform safe zones, upload specs, hook techniques, pacing rules, duration strategy, retention
|
|
6
|
+
benchmarks, caption requirements. Use when creating vertical video content or optimizing for
|
|
7
|
+
social platforms.
|
|
8
|
+
Keywords: tiktok, reels, shorts, vertical video, 9:16, hook, retention, pacing, safe zone,
|
|
9
|
+
caption, short form, social media, viral
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Short-Form Video (TikTok / Reels / Shorts)
|
|
13
|
+
|
|
14
|
+
## Quick Reference
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
ASPECT RATIO: 9:16 vertical (1080x1920)
|
|
18
|
+
SAFE ZONE: 900x1400px centered (universal cross-platform)
|
|
19
|
+
DURATION: 15s (highest completion) | 30s (best engagement) | 60s (most flexible)
|
|
20
|
+
HOOK: First 1-2 seconds — visual or text pattern interrupt
|
|
21
|
+
CAPTIONS: Mandatory (85% watch muted on mobile)
|
|
22
|
+
TEXT SIZE: 42px+ minimum, bold sans-serif
|
|
23
|
+
PACING: Visual change every 1-3 seconds
|
|
24
|
+
TARGET LUFS: -14 LUFS, true peak -1 dBTP
|
|
25
|
+
MUSIC: 120-140 BPM for energetic, 90-110 for explainers
|
|
26
|
+
CODEC: H.264 High Profile, 8-15 Mbps VBR
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Platform Safe Zones (1080x1920)
|
|
30
|
+
|
|
31
|
+
| Platform | Safe Zone | Top Dead | Bottom Dead | Right Dead |
|
|
32
|
+
|----------|-----------|----------|-------------|------------|
|
|
33
|
+
| TikTok | 900x1492 | 108px | 320px | 120px |
|
|
34
|
+
| Instagram Reels | 996x1400 | 210px | 310px | 84px |
|
|
35
|
+
| YouTube Shorts | 984x1500 | 120px | 300px | 96px |
|
|
36
|
+
| Facebook Reels | 1080x1520 | 100px | 300px | 60px |
|
|
37
|
+
|
|
38
|
+
**Universal safe zone: 900x1400px centered** — works across all platforms.
|
|
39
|
+
|
|
40
|
+
**Bottom dead zones are critical** — platform UI (comments, share, captions) covers the bottom 300-320px. Never put important content there.
|
|
41
|
+
|
|
42
|
+
## Duration Strategy
|
|
43
|
+
|
|
44
|
+
| Duration | Avg Completion | Best For |
|
|
45
|
+
|----------|---------------|----------|
|
|
46
|
+
| 0-15s | 92% | Single fact, quick tip, visual gag |
|
|
47
|
+
| 16-30s | 84% | One concept explained, before/after |
|
|
48
|
+
| 31-60s | 68% | Mini tutorial, step-by-step, story arc |
|
|
49
|
+
| 60s+ | 48% | Deep explainer (only with strong retention structure) |
|
|
50
|
+
|
|
51
|
+
**Platform sweet spots:**
|
|
52
|
+
- TikTok: 21-34s for completion; 60-180s for maximum total watch time
|
|
53
|
+
- Reels: 15-30s for viral reach; 60-90s for highest engagement
|
|
54
|
+
- Shorts: Bimodal — ~13s OR full 60s
|
|
55
|
+
|
|
56
|
+
**Key formula:** A 45s video with 70% completion (31.5s watch time) outperforms a 15s video with 40% completion (6s). Total watch time is what the algorithm rewards.
|
|
57
|
+
|
|
58
|
+
## The 1-Second Hook
|
|
59
|
+
|
|
60
|
+
70%+ of TikTok users decide to scroll or stay within 3 seconds (average decision: 1.7s).
|
|
61
|
+
|
|
62
|
+
### 3-Second Retention Impact
|
|
63
|
+
|
|
64
|
+
| 3-Second Retention | Algorithmic Effect | View Multiplier |
|
|
65
|
+
|-------------------|-------------------|-----------------|
|
|
66
|
+
| Below 60% | Minimal promotion | 1.0x |
|
|
67
|
+
| 60-70% | Average distribution | 1.6x |
|
|
68
|
+
| 70-85% | Optimal reach | 2.2x |
|
|
69
|
+
| 85%+ | Viral potential | 2.8x |
|
|
70
|
+
|
|
71
|
+
### Hook Techniques
|
|
72
|
+
|
|
73
|
+
| Technique | Example | When to Use |
|
|
74
|
+
|-----------|---------|-------------|
|
|
75
|
+
| **Bold text on screen** | "STOP doing this..." (frame 1) | Always — works even muted |
|
|
76
|
+
| **Pattern interrupt** | Unexpected visual, jump cut, color flash | Attention-grabbing |
|
|
77
|
+
| **Question** | "Why does X happen?" (text + voiceover) | Educational |
|
|
78
|
+
| **Result first** | Show finished result, then explain how | Tutorial/how-to |
|
|
79
|
+
| **Controversy** | "Everyone gets this wrong" | Engagement bait |
|
|
80
|
+
|
|
81
|
+
### Hook Rules
|
|
82
|
+
|
|
83
|
+
1. **Frame 1 must have visual interest** — no blank intros, no logos, no "hey guys"
|
|
84
|
+
2. **Text appears in the first 0.5 seconds** — viewers scan text before listening
|
|
85
|
+
3. **Voice starts immediately** — no silent buildup
|
|
86
|
+
4. **Movement in frame 1** — static opening frames get scrolled past
|
|
87
|
+
|
|
88
|
+
## Pacing Rules
|
|
89
|
+
|
|
90
|
+
- Visual change every **1-3 seconds** minimum
|
|
91
|
+
- New information every **3-5 seconds**
|
|
92
|
+
- No static shot longer than **2 seconds** without text overlay or motion
|
|
93
|
+
- Scene transitions should be **hard cuts** (no slow fades on short-form)
|
|
94
|
+
|
|
95
|
+
## Retention Checkpoints
|
|
96
|
+
|
|
97
|
+
| Timestamp | Target Retention |
|
|
98
|
+
|-----------|-----------------|
|
|
99
|
+
| 3 seconds | 70%+ |
|
|
100
|
+
| 15 seconds | 60%+ |
|
|
101
|
+
| 30 seconds | 50%+ |
|
|
102
|
+
|
|
103
|
+
## Upload Specs
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
CODEC: H.264 High Profile, Level 4.2
|
|
107
|
+
BITRATE: 8-15 Mbps VBR (below 5 Mbps triggers quality downgrade)
|
|
108
|
+
FORMAT: .mp4 preferred
|
|
109
|
+
MAX SIZE: 500 MB (desktop), 287.6 MB (iOS), 72 MB (Android)
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Caption Requirements
|
|
113
|
+
|
|
114
|
+
- **85% of social video is watched on mute** — captions are mandatory
|
|
115
|
+
- Max 3-4 words per cue on vertical (narrow screen)
|
|
116
|
+
- Max 20 characters per line
|
|
117
|
+
- 42px+ minimum font size
|
|
118
|
+
- Bold sans-serif font (Arial, Inter, Montserrat)
|
|
119
|
+
- Thick outline (3px) for readability on varied backgrounds
|
|
120
|
+
- Position in bottom 20% but above the platform dead zone
|
|
121
|
+
|
|
122
|
+
## 9:16 Conversion (from 16:9 source)
|
|
123
|
+
|
|
124
|
+
Blurred background + centered content — never crop the original:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
ffmpeg -i input.mp4 -filter_complex \
|
|
128
|
+
"[0:v]split[bg][fg]; \
|
|
129
|
+
[bg]scale=1080:1920:force_original_aspect_ratio=increase, \
|
|
130
|
+
crop=1080:1920,gblur=sigma=40[blurred]; \
|
|
131
|
+
[fg]scale=1080:1920:force_original_aspect_ratio=decrease, \
|
|
132
|
+
pad=1080:1920:(ow-iw)/2:(oh-ih)/2:color=black@0[front]; \
|
|
133
|
+
[blurred][front]overlay=0:0" \
|
|
134
|
+
-c:v libx264 -crf 18 -c:a aac output_vertical.mp4
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Kolbo MCP Integration
|
|
140
|
+
|
|
141
|
+
| Task | Kolbo MCP Tool | Notes |
|
|
142
|
+
|------|---------------|-------|
|
|
143
|
+
| Generate vertical video | `generate_video` | Specify "9:16 vertical" in prompt |
|
|
144
|
+
| Image-to-video hook | `generate_video_from_image` | Animate a striking frame for the hook |
|
|
145
|
+
| Batch clips from long-form | `generate_creative_director` | Extract highlights |
|
|
146
|
+
| Add captions | `transcribe_audio` | Get word-level SRT, then burn-in with FFmpeg |
|
|
147
|
+
| Background music | `generate_music` | 120-140 BPM for energetic, instrumental=true |
|
|
148
|
+
| Sound effects | `generate_sound` | Whooshes, pops for transitions |
|
|
149
|
+
| Style consistency | `create_visual_dna` | Same look across a series |
|
|
150
|
+
|
|
151
|
+
**Short-form production workflow:**
|
|
152
|
+
1. Script using the `storytelling` skill (hook → content → close)
|
|
153
|
+
2. `generate_speech` → narration
|
|
154
|
+
3. `generate_video` or `generate_video_from_image` → visual clips
|
|
155
|
+
4. `generate_music` → background track (120-140 BPM, instrumental)
|
|
156
|
+
5. `transcribe_audio` → get word-level SRT for captions
|
|
157
|
+
6. FFmpeg: compose 9:16 video + burn-in captions + mix audio
|
|
158
|
+
7. Review with `production-review` skill checklist
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Local / Free Options
|
|
163
|
+
|
|
164
|
+
> **IMPORTANT:** Always use Kolbo MCP tools by default. FFmpeg is the only tool safe to use without asking — it's standard software. For anything else, confirm with the user first.
|
|
165
|
+
|
|
166
|
+
**FFmpeg (safe, standard):** Handles 9:16 conversion, caption burn-in, audio mixing, silence removal — all commands in this skill and the `ffmpeg-patterns` skill.
|
|
167
|
+
|
|
168
|
+
**Transcription:** Kolbo's `transcribe_audio` is easiest. If the user explicitly wants offline transcription, `faster-whisper` runs on CPU with no GPU needed (`pip install faster-whisper`) — but confirm before installing.
|