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:
bash
npx create-video@latest --yes --blank --no-tailwind my-video
Replace
with a suitable project name.
Starting preview
Start the Remotion Studio to preview a video:
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.
bash
npx remotion still [composition-id] --scale=0.25 --frame=30
At 30 fps,
is the one-second mark (
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
- RTL text direction (, )
- 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 multilingual v2
- 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
CLI, key flags (
,
,
), and cloud rendering with
and
.
Rule files
Read individual rule files for detailed explanations and code examples:
- rules/hebrew-rtl.md - Hebrew RTL text, fonts, captions, bidi, and Israeli maps
- rules/3d.md - 3D content in Remotion using Three.js and React Three Fiber
- rules/animations.md - Fundamental animation skills for Remotion
- rules/assets.md - Importing images, videos, audio, and fonts into Remotion
- rules/audio.md - Using audio and sound in Remotion
- rules/calculate-metadata.md - Dynamically set composition duration, dimensions, and props
- rules/can-decode.md - Check if a video can be decoded by the browser
- rules/charts.md - Chart and data visualization patterns for Remotion
- rules/compositions.md - Defining compositions, stills, folders, default props
- rules/display-captions.md - TikTok-style captions with word highlighting
- rules/extract-frames.md - Extract frames from videos at specific timestamps
- rules/fonts.md - Loading Google Fonts and local fonts in Remotion
- rules/get-audio-duration.md - Getting audio duration with Mediabunny
- rules/get-video-dimensions.md - Getting video width and height
- rules/get-video-duration.md - Getting video duration in seconds
- rules/gifs.md - Displaying GIFs synchronized with Remotion timeline
- rules/images.md - Embedding images using the Img component
- rules/import-srt-captions.md - Importing .srt subtitle files
- rules/light-leaks.md - Light leak overlay effects
- rules/lottie.md - Embedding Lottie animations
- rules/maps.md - Map animations with Mapbox
- rules/measuring-dom-nodes.md - Measuring DOM element dimensions
- rules/measuring-text.md - Measuring text dimensions and fitting text
- rules/parameters.md - Make a video parametrizable with Zod schema
- rules/sequencing.md - Sequencing patterns for timing and delay
- rules/silence-detection.md - Adaptive silence detection with FFmpeg
- rules/tailwind.md - Using TailwindCSS in Remotion
- rules/text-animations.md - Typography and text animation patterns
- rules/timing.md - Interpolation curves, easing, and spring animations
- rules/transcribe-captions.md - Transcribing audio to generate captions
- rules/transitions.md - Scene transition patterns
- rules/transparent-videos.md - Rendering video with transparency
- rules/trimming.md - Trimming patterns for animations
- rules/videos.md - Embedding videos with trimming, volume, speed
- rules/rendering.md - Rendering videos locally and in the cloud (Lambda, Cloud Run)
- rules/voiceover.md - AI-generated voiceover with ElevenLabs TTS
Examples
Example 1: Hebrew TikTok caption video
User wants a vertical (1080x1920) social clip with a Hebrew voiceover and word-highlighted captions.
- Scaffold a project:
npx create-video@latest --yes --blank --no-tailwind my-video
.
- Generate the Hebrew voiceover (load , ElevenLabs multilingual v2).
- Transcribe the voiceover to captions (load
rules/transcribe-captions.md
, use the multilingual Whisper model, never ).
- Render TikTok-style word-highlighted captions (load
rules/display-captions.md
and ): set , , and wrap any embedded Latin digits with bidi isolates.
- Size the composition 1080x1920, drop the Hebrew display font two steps below the English size you would use (Gotcha #7).
- Preview in , then render with (load ).
Example 2: Data-driven chart video
User wants a 16:9 explainer where a bar chart animates from a JSON dataset.
- Make the composition parametrizable with a Zod schema (load ) so the dataset is a typed prop.
- Compute duration and dimensions from the dataset in (load
rules/calculate-metadata.md
); keep it lazy so it does not slow every render.
- Build the animated bar chart driven by and interpolation/spring curves (load and ). Never use CSS animations (Gotcha #1).
- For Hebrew axis labels and titles, apply RTL direction and bidi isolates around numbers (load ).
- Render to MP4 with , or batch-render many datasets in the cloud with (load ).
Bundled Resources
Rule files ()
The
folder contains focused topic files loaded on demand. Highlights:
(Hebrew fonts, RTL, bidi, Israeli maps),
,
,
,
,
,
,
,
,
,
, audio rules (
,
,
,
,
,
), video rules (
,
,
,
,
,
,
,
,
,
), caption rules (
,
,
,
), measurement/decode helpers (
,
,
,
,
,
,
),
, and
. See the full list under "Rule files" above.
Assets ()
Ready-to-use TSX component examples referenced by the rule files:
(animated bar chart),
text-animations-typewriter.tsx
(typewriter effect), and
text-animations-word-highlight.tsx
(word-by-word caption highlighting).
Gotchas
-
CSS animations are forbidden in Remotion. Never use
,
,
, or Tailwind animation classes. All motion must be driven by
. CSS animations will not render correctly during video export.
-
Hebrew text without renders backwards. Punctuation, numbers, and parentheses will appear on the wrong side. Every Hebrew text container must explicitly set RTL direction.
-
Whisper model does not support Hebrew. Use
(the multilingual model) for Hebrew transcription. Using
produces garbage output for Hebrew audio.
-
from React Three Fiber is forbidden. Inside
, only
from Remotion is allowed. Using
causes flickering during rendering because it animates outside Remotion's frame-based timeline.
-
Native and elements cause blank frames. Always use
from
and
from
. These components ensure assets are fully loaded before rendering.
-
RTL flips and . In an RTL flex container,
= RIGHT and
= LEFT. To right-align icon+text rows in Hebrew, use
justifyContent: "flex-start"
(not
). 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.
-
Hebrew text wraps to a second line at the same font size English fits on one line. Hebrew fonts (Heebo, Rubik, Assistant) at display weights render 20-30% wider than English at the same size. If an English title works at
, the Hebrew equivalent needs
. Also set
and
on any flex row containing display-size Hebrew words to prevent unwanted line breaks mid-phrase.
-
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), "נופלת" (falls), "אפקט הקלדה" (not "מכונת כתיבה"). Use "אפשר" not "ניתן", use active voice, and sprinkle natural connectors like "סוף סוף", "כמו שצריך", "באמת".
-
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.
-
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/docs/license and the bundled
file before shipping a commercial project.
-
Tune render performance, do not just accept defaults. Lower
if a render runs out of memory; raise it on many-core machines for faster renders. Use
below 1 for fast draft renders and above 1 for high-resolution masters. Prefer
over
for embedded video during rendering (it extracts frames deterministically off the main thread). Keep
cheap and lazy since it runs before every render. See
.
Reference Links
Troubleshooting
Hebrew text appears left-aligned
Add
and
to the text container style. For full-frame layouts, set
on the
.
Captions show words in wrong order
The caption container needs
and
. Without RTL direction, token rendering order is LTR.
Hebrew font not rendering (shows squares or fallback)
Ensure you loaded the font with
and called
before rendering. Without the subset, the Hebrew glyphs are not downloaded.
Numbers appear on wrong side of Hebrew text
Use Unicode bidi isolates: wrap numbers with
(LTR isolate) when embedded in Hebrew text.
Whisper produces gibberish for Hebrew audio
Switch from
to
model. The
suffix means English-only.
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.