--- name: compositions description: Defining compositions, stills, folders, default props and dynamic metadata metadata: tags: composition, still, folder, props, metadata --- A `` defines the component, width, height, fps and duration of a renderable video. It normally is placed in the `src/Root.tsx` file. ```tsx import { Composition } from "remotion"; import { MyComposition } from "./MyComposition"; export const RemotionRoot = () => { return ( ); }; ``` ## Default Props Pass `defaultProps` to provide initial values for your component. Values must be JSON-serializable (`Date`, `Map`, `Set`, and `staticFile()` are supported). ```tsx import { Composition } from "remotion"; import { MyComposition, MyCompositionProps } from "./MyComposition"; export const RemotionRoot = () => { return ( ); }; ``` Use `type` declarations for props rather than `interface` to ensure `defaultProps` type safety. ## Folders Use `` to organize compositions in the sidebar. Folder names can only contain letters, numbers, and hyphens. ```tsx import { Composition, Folder } from "remotion"; export const RemotionRoot = () => { return ( <> ); }; ``` ## Stills Use `` for single-frame images. It does not require `durationInFrames` or `fps`. ```tsx import { Still } from "remotion"; import { Thumbnail } from "./Thumbnail"; export const RemotionRoot = () => { return ( ); }; ``` ## Calculate Metadata Use `calculateMetadata` to make dimensions, duration, or props dynamic based on data. ```tsx import { Composition, CalculateMetadataFunction } from "remotion"; import { MyComposition, MyCompositionProps } from "./MyComposition"; const calculateMetadata: CalculateMetadataFunction = async ({ props, abortSignal, }) => { const data = await fetch(`https://api.example.com/video/${props.videoId}`, { signal: abortSignal, }).then((res) => res.json()); return { durationInFrames: Math.ceil(data.duration * 30), props: { ...props, videoUrl: data.url, }, }; }; export const RemotionRoot = () => { return ( ); }; ``` The function can return `props`, `durationInFrames`, `width`, `height`, `fps`, and codec-related defaults. It runs once before rendering begins.