# Layout Morph

Images rearrange between named layouts (grid, mosaic, strip) with a closed-form tile morph: each image is always rendered full-canvas and only its clip-path window moves, so nothing ever reflows or distorts mid-morph.

```bash
npx shadcn add https://www.reelcn.dev/r/layout-morph.json
```

Usage:

```tsx
<LayoutMorph
  items={[{ src: "/a.jpg" }, { src: "/b.jpg" }, { src: "/c.jpg" }, { src: "/d.jpg" }]}
  layouts={[{ at: 0, layout: "grid" }, { at: 1.5, layout: "mosaic" }]}
/>
```

Use for:

- A brand collage or portfolio grid that rearranges itself
- Any beat that needs several images to feel like one continuous composition, not a cut

Avoid:

- Two images. Use `split-screen` or a plain crossfade

Dependencies:

- `remotion`


## Props

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| delay? | `number` | — | Frames to wait before entering. |
| duration? | `number` | — | Enter duration in frames. Defaults to 0.6s. Some items reuse `duration` for an unrelated local timing. See that item's own prop docs. |
| exit? | `number \| boolean` | — | Exit at the end of the parent `<Sequence>`. `false` keeps it on screen, a number sets the exit length in frames. |
| motion? | `MotionPersonality` | — | Override the theme's motion personality. |
| poster? | `boolean` | — | Renders fully entered, with no exit: for a still frame or thumbnail. Defaults to `false`. |
| holdFrames? | `number` | — | Delays the start of the exit window by this many frames, for a minimum on-screen hold. Defaults to `0`. |
| items | `{ src: string; }[]` | — |  |
| layouts | `{ at: number; layout: NamedLayout; }[]` | — | `at` in seconds. The layout holds at the first entry's arrangement until the next `at`. |
| style? | `CSSProperties` | — |  |
| className? | `string` | — |  |