Communitygithub.com

iamryoman/remotion-best-practices

社群 Codex 技能,用於製作生產就緒的 Remotion 合成、渲染、Lambda 與儲存靜態畫面

remotion-best-practices 是什麼?

此技能旨在協助開發者使用 Remotion 建立可預測且穩定的輸出,將輸出視為幀、輸入屬性與宣告資產的決定性函數。它強調以證據為基礎的工作流程:先檢查專案設定(package.json、鎖定檔、Remotion 設定檔、進入點與註冊的合成),再執行稽核腳本以收集客觀資訊,並嚴格維持 Remotion 與 @remotion/* 套件版本一致。技能涵蓋多種平台支援,包括標準影片、單張靜態畫面、影片取樣幀,以及 App Store 與 Google Play 的截圖批次,並針對不同使用情境提供專門的參考文檔(如合成與時間控制、資產與非同步處理、渲染與 Lambda、效能與測試、商店靜態畫面)。執行規則禁止使用 CSS 動畫或牆鐘計時器,強制使用 useCurrentFrame() 與 Sequence/Series 進行精確時間控制;資產必須置於 public/ 並以 staticFile() 存取,且 render 程式碼不得包含瀏覽器專用的假設。最後,技能要求以緊湊的渲染循環進行驗證:型別檢查、測試、渲染代表性幀、檢查像素,並在完整昂貴渲染前先產出低畫質草稿,同時保守地進行版本升級與專案結構變更。

相容平台~Claude Code✓Codex CLI~Cursor
npx skills add iamryoman/remotion-best-practices

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Remotion 最佳實踐

將 Remotion 輸出建構成幀、輸入屬性與宣告資產的決定性函數。除非任務需要變更,否則保留使用者編輯與專案現有的套件管理工具、架構與風格。

從證據開始

  1. 閱讀儲存庫指示,並檢查 package.json、鎖定檔、Remotion 設定檔、進入點、已註冊的合成,以及鄰近的測試。
  2. 在現有專案上,執行 node <skill-directory>/scripts/audit-remotion-project.mjs <project-root>。將其輸出視為證據,而非升級的許可。
  3. 在選擇 API 前記錄已安裝的 Remotion 版本。保持所有 remotion 與 @remotion/* 套件在同一精確版本。不要新增第二個鎖定檔。
  4. 確定交付項目是影片、單張靜態畫面、從影片取樣的幀,還是一批商店截圖。
  5. 在實作前定義合成 ID、尺寸、FPS、持續時間、屬性、輸出路徑與所需資產。

僅載入相關參考

  • 若使用 <Composition>、<Still>、useCurrentFrame()、interpolate()、spring()、<Sequence> 或 <Series>,請閱讀 composition-and-timing.md。
  • 若使用 staticFile()、媒體、字型、網路資料、useDelayRender()、delayRender() 或 calculateMetadata(),請閱讀 assets-and-async.md。
  • 若使用 CLI、renderStill()、伺服器端渲染或 Remotion Lambda,請閱讀 rendering-and-lambda.md。
  • 若遇到渲染緩慢、記憶體使用過高、非決定性行為或驗證策略問題,請閱讀 performance-and-testing.md。
  • 若處理 App Store 或 Google Play 圖片(包括由 screenshot-studio 委派的 1284×2778 輸出),請閱讀 store-stills.md。
  • 當某個 API 或平台規則可能已變更時,請在撰寫程式碼前查閱 sources.md 中連結的即時主要來源。

不可妥協的實作規則

  • 使用 useCurrentFrame() 與 useVideoConfig() 推導時間。不要使用 CSS 轉場、CSS 關鍵影格動畫、牆鐘計時器或未設定種子的隨機性來產生動態效果。
  • 除非故意外推,否則將有限動畫限制在邊界內。當時間表示時間長度時,以秒乘以 fps 來表達時間,並集中管理共享場景的持續時間。
  • 記住 useCurrentFrame() 在計時元件內部是相對的。只有當需要全域同步時,才從合成根傳遞絕對幀。
  • 使用 <Sequence> 在父時間軸上明確放置,使用 <Series> 處理連續場景。為每個場景指定明確的持續時間。
  • 將本地資產放在 public/ 中,並使用 staticFile() 解析。使用 Remotion 媒體元件而非原始 HTML 標籤,以便渲染正確等待媒體載入完畢。
  • 偏好使用元件內部的 useDelayRender()。建立一次 handle,精確清除一次,並在失敗時呼叫 cancelRender(error)。對於需要確定 props 或中繼資料的資料,偏好使用 calculateMetadata() 一次渲染。
  • 保持渲染時的程式碼不包含僅在瀏覽器中可用的假設,這些假設在無頭 Chromium 或 Lambda 中無法使用。絕不將 AWS 憑證或其他機密暴露給瀏覽器 bundle。
  • 為每個商店目標獨立驗證尺寸、檔案格式、Alpha 通道政策與平台特定規則。切勿假設一個直向尺寸同時適用於 Apple 與 Google。

在緊湊的渲染迴圈中工作

  1. 執行型別檢查與焦點測試。
  2. 渲染具代表性的靜態幀:起始幀、每個場景邊界、動態中途點與最後一幀。
  3. 檢查實際像素,而非僅依賴 Studio 預覽。檢查裁剪、文字換行、安全邊距、遺失資產與透明背景。
  4. 在進行完整的昂貴影片渲染前,先渲染一小段幀範圍或低解析度草稿。
  5. 根據部署機器進行並發基準測試,而非盲目最大化並發數。
  6. 使用明確的合成 ID、屬性、輸出路徑、尺寸與格式渲染最終成品。
  7. 驗證結束狀態、檔案是否存在、像素尺寸、持續時間/幀數(如相關)以及最終的視覺樣本。

保守地進行變更

  • 除非任務要求或使用者同意,否則不要升級 Remotion、改寫專案結構或更換媒體元件。
  • 將較新的 API 限制在已安裝的版本內;在可行時提供相容的降級方案。
  • 不要透過任意增加逾時來隱藏渲染失敗。應先找出未解析的 handle、網路請求、資產、字型或媒體解碼問題。
  • 未經可比渲染的測量結果,不要聲稱效能提升。

相關技能