Remotion Best Practices: Install, Source and Security | FunnelSlayer

Remotion Best Practices

Published by skills-il in developer-tools

No known issues19 installs

What this skill does

Best practices for Remotion video creation in React with Hebrew RTL support. Use when dealing with Remotion code, creating programmatic videos, building Hebrew video content with RTL captions and text animations, or generating social media videos with Hebrew fonts. Covers animations, compositions, sequencing, transitions, audio/video, captions, 3D, charts, voiceover, and Hebrew/RTL text rendering. Do NOT use for non-Remotion video editing, general React development, or static image generation.

Add Remotion Best Practices to your agent

Review the source and files first. When you are ready, copy the prompt instruction or use the CLI command supported by your environment.

Install with a prompt

Paste this into a compatible coding agent:

add this skill "remotion-best-practices" from https://github.com/skills-il/developer-tools

Install with the CLI

Run this command in a controlled environment after reviewing the repository:

npx skills add https://github.com/skills-il/developer-tools --skill remotion-best-practices

Skill instructions

Remotion Best Practices for Israeli Developers

Problem

Creating programmatic videos with Hebrew text in Remotion is broken by default. Standard Remotion patterns produce left-aligned text, left-to-right typewriter reveals, and captions that render backwards for RTL content. Israeli developers waste hours debugging RTL layout issues, loading Hebrew fonts incorrectly, and fighting bidirectional text bugs that standard Remotion docs do not address.

Instructions

When to use

Use this skill whenever you are dealing with Remotion code to obtain domain-specific knowledge, especially when creating Hebrew or bilingual video content.

New project setup

When in an empty folder or workspace with no existing Remotion project, scaffold one using:

npx create-video@latest --yes --blank --no-tailwind my-video

Replace my-video with a suitable project name.

Starting preview

Start the Remotion Studio to preview a video:

npx remotion studio

Optional: one-frame render check

You can render a single frame with the CLI to sanity-check layout, colors, or timing. Skip it for trivial edits, pure refactors, or when you already have enough confidence from Studio or prior renders.

npx remotion still [composition-id] --scale=0.25 --frame=30

At 30 fps, --frame=30 is the one-second mark (--frame is zero-based).

Hebrew & RTL Video Production

For any Hebrew video content, load the ./rules/hebrew-rtl.md file. It covers:

  • Hebrew Google Fonts (Heebo, Rubik, Assistant, Noto Sans Hebrew) with subsets: ["hebrew", "latin"] (the hebrew subset has no digits, spaces or punctuation)
  • RTL text direction (direction: "rtl", textAlign: "right")
  • Bidirectional text handling (Unicode bidi isolates for mixed Hebrew/English)
  • Hebrew captions with RTL word highlighting
  • Hebrew typewriter effects (right-to-left character reveal)
  • Hebrew voiceover with ElevenLabs eleven_v3 (multilingual v2 and flash v2.5 do not cover Hebrew; see rules/voiceover.md for the newer v4 family)
  • Israeli map coordinates and Hebrew map labels

Captions

When dealing with captions or subtitles, load the ./rules/subtitles.md file for more information.

Using FFmpeg

For some video operations, such as trimming videos or detecting silence, FFmpeg should be used. Load the ./rules/ffmpeg.md file for more information.

Silence detection

When needing to detect and trim silent segments from video or audio files, load the ./rules/silence-detection.md file.

Audio visualization

When needing to visualize audio (spectrum bars, waveforms, bass-reactive effects), load the ./rules/audio-visualization.md file for more information.

Sound effects

When needing to use sound effects, load the ./rules/sfx.md file for more information.

Rendering and cloud render

Studio is for previewing only. To produce a final video file, render it. Load the ./rules/rendering.md file for the npx remotion render CLI, key flags (--concurrency, --scale, --codec), and cloud rendering with @remotion/lambda and @remotion/cloudrun.

Rule files

Read individual rule files for detailed explanations and code examples:

Examples

Example 1: Hebrew TikTok caption video

User wants a vertical (1080x1920) social clip with a Hebrew voiceover and word-highlighted captions.

  1. Scaffold a project: npx create-video@latest --yes --blank --no-tailwind my-video.
  2. Generate the Hebrew voiceover (load rules/voiceover.md, ElevenLabs eleven_v3).
  3. Convert the MP3 to a 16-bit 16kHz WAV, then transcribe to captions (load rules/transcribe-captions.md, use the medium multilingual Whisper model with language: "he", never medium.en).
  4. Render TikTok-style word-highlighted captions (load rules/display-captions.md and rules/hebrew-rtl.md): set direction: "rtl", textAlign: "right", and wrap any embedded Latin digits in LTR bidi isolates (\u2066 ... \u2069).
  5. Size the composition 1080x1920 and compute each Hebrew display title's font size with fitText() for the caption width instead of reusing the English size (Gotcha #7).
  6. Preview in npx remotion studio, then render with npx remotion render (load rules/rendering.md).

Example 2: Data-driven chart video

User wants a 16:9 explainer where a bar chart animates from a JSON dataset.

  1. Make the composition parametrizable with a Zod schema (load rules/parameters.md) so the dataset is a typed prop.
  2. Compute duration and dimensions from the dataset in calculateMetadata (load rules/calculate-metadata.md); keep it lazy so it does not slow every render.
  3. Build the animated bar chart driven by useCurrentFrame() and interpolation/spring curves (load rules/charts.md and rules/timing.md). Never use CSS animations (Gotcha #1).
  4. For Hebrew axis labels and titles, apply RTL direction and bidi isolates around numbers (load rules/hebrew-rtl.md).
  5. Render to MP4 with npx remotion render, or batch-render many datasets in the cloud with @remotion/lambda (load rules/rendering.md).

Bundled Resources

Rule files (rules/)

The rules/ folder contains focused topic files loaded on demand. Highlights: hebrew-rtl.md (Hebrew fonts, RTL, bidi, Israeli maps), animations.md, timing.md, sequencing.md, transitions.md, compositions.md, calculate-metadata.md, parameters.md, charts.md, text-animations.md, 3d.md, audio rules (audio.md, audio-visualization.md, sfx.md, voiceover.md, get-audio-duration.md, silence-detection.md), video rules (videos.md, assets.md, images.md, gifs.md, lottie.md, transparent-videos.md, light-leaks.md, maps.md, tailwind.md, fonts.md), caption rules (subtitles.md, display-captions.md, transcribe-captions.md, import-srt-captions.md), measurement/decode helpers (measuring-dom-nodes.md, measuring-text.md, can-decode.md, extract-frames.md, get-video-dimensions.md, get-video-duration.md, trimming.md), ffmpeg.md, and rendering.md. See the full list under "Rule files" above.

Assets (rules/assets/)

Ready-to-use TSX component examples referenced by the rule files: charts-bar-chart.tsx (animated bar chart), text-animations-typewriter.tsx (typewriter effect), and text-animations-word-highlight.tsx (word-by-word caption highlighting).

Gotchas

  1. CSS animations are forbidden in Remotion. Never use transition-*, animate-*, @keyframes, or Tailwind animation classes. All motion must be driven by useCurrentFrame(). CSS animations will not render correctly during video export.

  2. Hebrew text without direction: "rtl" renders backwards. Punctuation, numbers, and parentheses will appear on the wrong side. Every Hebrew text container must explicitly set RTL direction.

  3. Whisper needs BOTH a multilingual model and an explicit language for Hebrew. Use medium (or large-v3-turbo), never medium.en, which is English-only and produces garbage for Hebrew. Just as important, pass language: "he" to transcribe(): with auto-detect, whisper.cpp on short or noisy Hebrew voiceover routinely picks Arabic, Yiddish or English, or emits Latin transliteration, and every caption downstream is then wrong however correct the RTL container is. Also convert to a 16-bit 16kHz WAV first (npx remotion ffmpeg -i vo.mp3 -ar 16000 -ac 1 vo.wav); transcribe() accepts nothing else, and TTS providers emit MP3.

  4. useFrame() from React Three Fiber is forbidden. Inside <ThreeCanvas>, only useCurrentFrame() from Remotion is allowed. Using useFrame() causes flickering during rendering because it animates outside Remotion's frame-based timeline.

  5. Native <img> and <video> elements cause blank frames. Always use <Img> from remotion and <Video> from @remotion/media. These components ensure assets are fully loaded before rendering.

  6. RTL flips flex-start and flex-end. In an RTL flex container, flex-start = RIGHT and flex-end = LEFT. To right-align icon+text rows in Hebrew, use justifyContent: "flex-start" (not flex-end). The RTL direction already reverses DOM order, so the first child (icon) renders on the right. Do not use flexDirection: "row-reverse" in RTL containers -- it double-reverses back to LTR order.

  7. Fit Hebrew display titles with fitText(), not with a fixed size cut. Hebrew width relative to English is not a fixed ratio: it varies by font and by wording, and a Hebrew title often has fewer letters than its English source, so the same title can come out narrower as easily as wider. Compute the size instead of guessing it: load the font with subsets: ["hebrew", "latin"], wait for it, then call fitText() from @remotion/layout-utils with the container width (see rules/measuring-text.md and rules/hebrew-rtl.md). Also set flexWrap: "nowrap" and whiteSpace: "nowrap" on any flex row containing display-size Hebrew words to prevent unwanted line breaks mid-phrase.

  8. Hebrew captions must sound Israeli, not translated. Avoid corporate-sounding phrases like "תמיכה מלאה", passive-participle text descriptions, and literal translations of English idioms. Israeli dev slang: "עולים" (load), "מתיישרת" / "נדחפת" / "מופיעה" for movement, "אפקט הקלדה" (not "מכונת כתיבה"). Do NOT use "נופלת", which means falls DOWN, not sideways; see the verb table in rules/hebrew-rtl.md. Use "אפשר" not "ניתן", use active voice, and sprinkle natural connectors like "סוף סוף", "כמו שצריך", "באמת".

  9. Never use em dashes or en dashes. Replace em/en dash characters with commas, colons, parentheses, or double hyphens (--). They are not on standard keyboards, don't render reliably across platforms, and make text feel machine-generated. This applies to both English and Hebrew content in SKILL.md, video captions, and UI copy.

  10. Remotion is not unconditionally free. It is free for individuals, non-profits, and for-profit organizations with 3 or fewer employees. Organizations of 4 or more employees must buy a paid Company License from remotion.pro. This applies to using Remotion at all (Studio, rendering, CI), not just to a specific feature. Check https://www.remotion.dev/license and the bundled LICENSE file before shipping a commercial project.

  11. Tune render performance, do not just accept defaults. Lower --concurrency if a render runs out of memory; raise it on many-core machines for faster renders. Use --scale below 1 for fast draft renders and above 1 for high-resolution masters. For embedded video, prefer the new <Video> from @remotion/media (frame-exact, off the main thread via Mediabunny); the older "prefer <OffthreadVideo> over <Video>" advice applies only to the legacy <Video> from the remotion package. Keep calculateMetadata cheap and lazy since it runs before every render. See rules/rendering.md.

  12. Math.random() breaks renders. A render evaluates your component once per frame, often in parallel across several browser tabs, so Math.random() returns a different value on every frame and anything derived from it jitters or flickers. Use random() from remotion with a fixed seed instead: random("particle-3") is deterministic across frames and across machines. The same applies to Date.now() and new Date(). See https://www.remotion.dev/docs/using-randomness.

  13. Plan for the Remotion 5.0 breaking set. Stable today is the 4.0.x line (4.0.533 as of October 2026); 4.1.0-alpha* is the pre-release train for 5.0, and the migration guide still says 5.0 is not yet released. Five changes hit this skill's advice directly: @remotion/light-leaks and @remotion/starburst get no 5.x releases and are replaced by lightLeak() and starburst() from @remotion/effects (the docs already mark both old packages deprecated, and lightLeak() works today from 4.0.500, so rules/light-leaks.md teaches it); loadFont() from @remotion/google-fonts will REQUIRE explicit weights and subsets (so subsets: ["hebrew", "latin"] goes from best practice to mandatory); measureText() and fitText() default validateFontIsLoaded to true, so the Gotcha #7 fitText() call must run after the Hebrew font has loaded; <Sequence>, <Series.Sequence> and <TransitionSeries.Sequence> premount automatically for one second, with premountFor={0} as the opt-out; and under the 5.0 license, contractors count towards the employee threshold for the Company License. See https://www.remotion.dev/docs/5-0-migration.

Reference Links

SourceURLWhat to Check
Remotion Docshttps://www.remotion.dev/docsAPI reference, latest version changes
Remotion GitHubhttps://github.com/remotion-dev/remotionSource code, issues, releases
Remotion Licensehttps://www.remotion.dev/licenseFree vs paid Company License, 4+ employee threshold
Remotion Render / CLIhttps://www.remotion.dev/docs/cli/rendernpx remotion render flags: concurrency, scale. Its --codec table is STALE and still lists png; use the list in rules/rendering.md
@remotion/lambdahttps://www.remotion.dev/docs/lambdaCloud rendering on AWS Lambda at scale
@remotion/google-fontshttps://www.remotion.dev/docs/google-fontsAvailable Google Fonts with Hebrew subset support
@remotion/captionshttps://www.remotion.dev/docs/captionsCaption types, TikTok-style captions API
ElevenLabs modelshttps://elevenlabs.io/docs/overview/modelsWhich model IDs list Hebrew (v3 and v4 families), which do not (multilingual v2, flash v2.5)
Google Fonts Hebrewhttps://fonts.google.com/?script=HebrBrowse Hebrew-supporting fonts

Troubleshooting

Hebrew text appears left-aligned

Add direction: "rtl" and textAlign: "right" to the text container style. For full-frame layouts, set direction: "rtl" on the <AbsoluteFill>.

Captions show words in wrong order

The caption container needs direction: "rtl" and whiteSpace: "pre". Without RTL direction, token rendering order is LTR.

Hebrew font not rendering (shows squares or fallback)

Ensure you loaded the font with subsets: ["hebrew", "latin"] and called waitUntilDone() before rendering. Without hebrew, the Hebrew glyphs are not downloaded; without latin, digits, spaces and punctuation in the same line fall back to another font.

Numbers appear on wrong side of Hebrew text

Use Unicode bidi isolates: wrap numbers with \u2066...\u2069 (LTR isolate) when embedded in Hebrew text.

Whisper produces gibberish for Hebrew audio

Three causes, check all: (1) the model is medium.en, which is English-only, switch to medium or large-v3-turbo; (2) language: "he" was not passed to transcribe(), so auto-detect picked the wrong language; (3) the input was not a 16-bit 16kHz WAV.

Icons appear on the wrong side in flex rows

In an RTL container, justifyContent: "flex-start" aligns to the RIGHT, not left. Do not use flexDirection: "row-reverse" -- it double-reverses the order. Just put the icon as the first child in the DOM.

Files included

  • evidence.json
  • metadata.json
  • optimization-log.json
  • references/domain-checklist.md
  • rules/3d.md
  • rules/animations.md
  • rules/assets.md
  • rules/assets/charts-bar-chart.tsx
  • rules/assets/text-animations-typewriter.tsx
  • rules/assets/text-animations-word-highlight.tsx
  • rules/audio-visualization.md
  • rules/audio.md
  • rules/calculate-metadata.md
  • rules/can-decode.md
  • rules/charts.md
  • rules/compositions.md
  • rules/display-captions.md
  • rules/extract-frames.md
  • rules/ffmpeg.md
  • rules/fonts.md
  • rules/get-audio-duration.md
  • rules/get-video-dimensions.md
  • rules/get-video-duration.md
  • rules/gifs.md
  • rules/hebrew-rtl.md
  • rules/images.md
  • rules/import-srt-captions.md
  • rules/light-leaks.md
  • rules/lottie.md
  • rules/maps.md
  • rules/measuring-dom-nodes.md
  • rules/measuring-text.md
  • rules/parameters.md
  • rules/rendering.md
  • rules/sequencing.md
  • rules/sfx.md
  • rules/silence-detection.md
  • rules/subtitles.md
  • rules/tailwind.md
  • rules/text-animations.md
  • rules/timing.md
  • rules/transcribe-captions.md
  • rules/transitions.md
  • rules/transparent-videos.md
  • rules/trimming.md
  • rules/videos.md
  • rules/voiceover.md
  • SKILL_HE.md
  • SKILL.md

More skills