remotion-best-practices/SKILL.md
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.
npx skillsauth add skills-il/developer-tools remotion-best-practicesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
Use this skill whenever you are dealing with Remotion code to obtain domain-specific knowledge, especially when creating Hebrew or bilingual video content.
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.
Start the Remotion Studio to preview a video:
npx remotion studio
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).
For any Hebrew video content, load the ./rules/hebrew-rtl.md file. It covers:
subsets: ["hebrew"]direction: "rtl", textAlign: "right")When dealing with captions or subtitles, load the ./rules/subtitles.md file for more information.
For some video operations, such as trimming videos or detecting silence, FFmpeg should be used. Load the ./rules/ffmpeg.md file for more information.
When needing to detect and trim silent segments from video or audio files, load the ./rules/silence-detection.md file.
When needing to visualize audio (spectrum bars, waveforms, bass-reactive effects), load the ./rules/audio-visualization.md file for more information.
When needing to use sound effects, load the ./rules/sfx.md file for more information.
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.
Read individual rule files for detailed explanations and code examples:
User wants a vertical (1080x1920) social clip with a Hebrew voiceover and word-highlighted captions.
npx create-video@latest --yes --blank --no-tailwind my-video.rules/voiceover.md, ElevenLabs multilingual v2).rules/transcribe-captions.md, use the medium multilingual Whisper model, never medium.en).rules/display-captions.md and rules/hebrew-rtl.md): set direction: "rtl", textAlign: "right", and wrap any embedded Latin digits with ... bidi isolates.npx remotion studio, then render with npx remotion render (load rules/rendering.md).User wants a 16:9 explainer where a bar chart animates from a JSON dataset.
rules/parameters.md) so the dataset is a typed prop.calculateMetadata (load rules/calculate-metadata.md); keep it lazy so it does not slow every render.useCurrentFrame() and interpolation/spring curves (load rules/charts.md and rules/timing.md). Never use CSS animations (Gotcha #1).rules/hebrew-rtl.md).npx remotion render, or batch-render many datasets in the cloud with @remotion/lambda (load rules/rendering.md).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.
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).
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.
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.
Whisper medium.en model does not support Hebrew. Use medium (the multilingual model) for Hebrew transcription. Using medium.en produces garbage output for Hebrew audio.
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.
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.
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.
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 fontSize: 72, the Hebrew equivalent needs 54-60. Also set flexWrap: "nowrap" and whiteSpace: "nowrap" 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 LICENSE file before shipping a commercial project.
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. Prefer <OffthreadVideo> over <Video> for embedded video during rendering (it extracts frames deterministically off the main thread). Keep calculateMetadata cheap and lazy since it runs before every render. See rules/rendering.md.
| Source | URL | What to Check |
|--------|-----|---------------|
| Remotion Docs | https://www.remotion.dev/docs | API reference, latest version changes |
| Remotion GitHub | https://github.com/remotion-dev/remotion | Source code, issues, releases |
| Remotion License | https://www.remotion.dev/docs/license | Free vs paid Company License, 4+ employee threshold |
| Remotion Render / CLI | https://www.remotion.dev/docs/cli/render | npx remotion render flags: concurrency, scale, codec |
| @remotion/lambda | https://www.remotion.dev/docs/lambda | Cloud rendering on AWS Lambda at scale |
| @remotion/google-fonts | https://www.remotion.dev/docs/google-fonts | Available Google Fonts with Hebrew subset support |
| @remotion/captions | https://www.remotion.dev/docs/captions | Caption types, TikTok-style captions API |
| ElevenLabs TTS | https://elevenlabs.io/docs | Multilingual v2 model, Hebrew voice support |
| Google Fonts Hebrew | https://fonts.google.com/?subset=hebrew | Browse Hebrew-supporting fonts |
Add direction: "rtl" and textAlign: "right" to the text container style. For full-frame layouts, set direction: "rtl" on the <AbsoluteFill>.
The caption container needs direction: "rtl" and whiteSpace: "pre". Without RTL direction, token rendering order is LTR.
Ensure you loaded the font with subsets: ["hebrew"] and called waitUntilDone() before rendering. Without the subset, the Hebrew glyphs are not downloaded.
Use Unicode bidi isolates: wrap numbers with \u2066...\u2069 (LTR isolate) when embedded in Hebrew text.
Switch from medium.en to medium model. The .en suffix means English-only.
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.
tools
Best practices for using browser-use/video-use to edit Hebrew videos end-to-end with Claude Code. Covers the Hebrew-specific deltas to video-use's 12 Hard Rules: SUB_FORCE_STYLE override (Helvetica has no Hebrew glyphs), the python-bidi pre-shape recipe for libass+SRT BiDi failures on macOS, Hebrew filler-word post-pass on Scribe word timestamps, fontsdir= parameter for reliable font discovery, takes_packed.md handling for Hebrew with sofit/nikud/code-switching, and animation slot guidance that defers to hyperframes-best-practices and remotion-best-practices. Use when editing Hebrew talking-head video, podcast clips, tutorials, or marketing video with video-use. Do NOT use for non-Hebrew video-use sessions (read upstream SKILL.md directly), Hebrew podcast audio-only post-production (use hebrew-podcast-postproduction), or generic FFmpeg work without video-use orchestration.
development
Best practices for authoring presentations with open-slide, the React slide framework with a fixed 1920×1080 canvas, with full Hebrew and RTL support. Covers the slides/[id]/index.tsx file contract, type scale, DesignSystem tokens, themes/ system, @slide-comment inspector markers, current.json deictic resolution, Hebrew Google Fonts (Heebo, Rubik, Assistant, Noto Sans Hebrew), CSS logical properties, bidirectional Hebrew+English text with the bdi element, and Hebrew-aware type scale tuning. Use when authoring or editing slides under slides/[id]/ in an open-slide project, or when building Hebrew or bilingual decks on the framework. Do NOT use for video creation (use remotion-best-practices or hyperframes-best-practices), or for generic Hebrew presentations outside open-slide (use presentation-generator).
development
Best practices for programmatic video creation using HyperFrames, plain HTML compositions with GSAP animations rendered to MP4, with full Hebrew and RTL support. Covers composition authoring, data-* timing attributes, GSAP timeline contract, layout-before-animation methodology, visual identity gate, Hebrew fonts via Google Fonts (Heebo, Rubik, Assistant), RTL text rendering with dir="rtl", Hebrew TikTok/Reels-style captions via Whisper, audio-reactive visuals, scene transitions, and bidirectional Hebrew+English text. Use when building HTML-based video content or Hebrew social/marketing videos without React. Do NOT use for Remotion or general React video work, use remotion-best-practices for that.
tools
Build Zapier Zaps connecting Israeli business apps (Morning/Green Invoice, Cardcom, Tranzila, iCount, Grow) with global services for billing, payment, and workflow automation. Use when asked to "create a Zap for Israeli invoicing", "automate Morning receipts", "connect Cardcom to my CRM", or set up payment notifications. Covers Hebrew text handling, ILS formatting, bimonthly VAT logic, Invoice Reform 2026, Zapier AI (Copilot, Agents, MCP), and webhooks from Israeli processors. All amounts use decimal shekels, not agorot. Customer WhatsApp requires Twilio/WATI (not Zapier native). Do NOT use for n8n (use n8n-hebrew-workflows), Make.com (use make-com-israeli-automations), or non-Zapier automation.