# Remotion Rule: Measuring Text > Remotion skill rule: Measuring text dimensions, fitting text to containers, and checking overflow. Part of the official Remotion Agent Skill for programmatic video in React. ## Install Save the content below to `.claude/skills/` or append to your `CLAUDE.md`: ## Quick Use ```bash npx skills add remotion-dev/skills ``` This rule activates automatically when working with measuring text in a Remotion project. --- ## Intro Measuring text dimensions, fitting text to containers, and checking overflow. Part of the [Remotion AI Skill](https://tokrepo.com/en/workflows/57997ead-c8fa-409c-916f-28bbc0adc8d9) — the official Agent Skill for programmatic video creation in React. **Best for**: Developers using Remotion for measuring text **Works with**: Claude Code, OpenAI Codex, Cursor --- ## Rule Content # Measuring text in Remotion ## Prerequisites Install @remotion/layout-utils if it is not already installed: ```bash npx remotion add @remotion/layout-utils ``` ## Measuring text dimensions Use `measureText()` to calculate the width and height of text: ```tsx import { measureText } from "@remotion/layout-utils"; const { width, height } = measureText({ text: "Hello World", fontFamily: "Arial", fontSize: 32, fontWeight: "bold", }); ``` Results are cached - duplicate calls return the cached result. ## Fitting text to a width Use `fitText()` to find the optimal font size for a container: ```tsx import { fitText } from "@remotion/layout-utils"; const { fontSize } = fitText({ text: "Hello World", withinWidth: 600, fontFamily: "Inter", fontWeight: "bold", }); return (
Hello World
); ``` ## Checking text overflow Use `fillTextBox()` to check if text exceeds a box: ```tsx import { fillTextBox } from "@remotion/layout-utils"; const box = fillTextBox({ maxBoxWidth: 400, maxLines: 3 }); const words = ["Hello", "World", "This", "is", "a", "test"]; for (const word of words) { const { exceedsBox } = box.add({ text: word + " ", fontFamily: "Arial", fontSize: 24, }); if (exceedsBox) { // Text would overflow, handle accordingly break; } } ``` ## Best practices **Load fonts first:** Only call measurement functions after fonts are loaded. ```tsx import { loadFont } from "@remotion/google-fonts/Inter"; const { fontFamily, waitUntilDone } = loadFont("normal", { weights: ["400"], subsets: ["latin"], }); waitUntilDone().then(() => { // Now safe to measure const { width } = measureText({ text: "Hello", fontFamily, fontSize: 32, }); }); ``` **Use validateFontIsLoaded:** Catch font loading issues early: ```tsx measureText({ text: "Hello", fontFamily: "MyCustomFont", fontSize: 32, validateFontIsLoaded: true, // Throws if font not loaded }); ``` **Match font properties:** Use the same properties for measurement and rendering: ```tsx const fontStyle = { fontFamily: "Inter", fontSize: 32, fontWeight: "bold" as const, letterSpacing: "0.5px", }; const { width } = measureText({ text: "Hello", ...fontStyle, }); return
Hello
; ``` **Avoid padding and border:** Use `outline` instead of `border` to prevent layout differences: ```tsx
Text
``` --- ## Source & Thanks > Created by [Remotion](https://github.com/remotion-dev). Licensed under MIT. > [remotion-dev/skills](https://github.com/remotion-dev/skills) — Rule: `measuring-text` Part of the [Remotion AI Skill](https://tokrepo.com/en/workflows/57997ead-c8fa-409c-916f-28bbc0adc8d9) collection on TokRepo. --- Source: https://tokrepo.com/en/workflows/7c51fb5b-4260-455e-9f73-3d0b11015d99 Author: Skill Factory