Skip to content
Template Empire
Browse components

Tile Assemble

Assemble one supplied image from sixteen registered tiles while keeping its accessible image intact.

A pale speckled stoneware bowl and glaze samples on a ceramic artist's worktable.

Ceramic / process study

A warm landscape image keeps the craft surface and its small glaze details in view.

An open botanical field notebook with fern and seed studies on an archival work surface.

Archive / field folio 18

A portrait composition gives a collection overview the same bounded assembly.

Customise

Code

<MediaTileAssemble src="/images/atelier-process.jpg" alt="A ceramic artist's speckled bowl and glaze samples on a worktable" width={1536} height={1024} />

Tile Assemble is a free image assembly animation for React and Next.js. It reserves the supplied image ratio, then brings a fixed 4×4 set of decorative copies into exact registration over the original image.

The image and its alternative remain in the page before JavaScript, after a failed load, in print and for reduced-motion visitors. The one finite assembly starts only after the image is ready and its frame enters view; offscreen, hidden-tab and Activity cleanup removes every temporary tile.

Install

Add the @te registry to your components.json once:

{
  "registries": {
    "@te": "https://templateempire.io/r/{name}.json"
  }
}

Then install the component:

npx shadcn@latest add @te/media-tile-assemble

Usage

import { MediaTileAssemble } from "@/components/media-tile-assemble";

export function Example() {
  return (
    <MediaTileAssemble
      src="/images/atelier-process.jpg"
      alt="A ceramic artist glazing a handmade bowl beside cobalt test tiles"
      width={1536}
      height={1024}
    />
  );
}

Props

PropTypeDefaultDescription
srcstringrequiredConsumer-owned image URL passed to the native img element.
altstringrequiredMeaningful alternative text, or an empty string when the image is intentionally decorative.
widthnumberrequiredPositive intrinsic image width used with height to reserve the frame ratio.
heightnumberrequiredPositive intrinsic image height used with width to reserve the frame ratio.
classNamestringundefinedAdditional classes merged onto the image frame.

Customisation

The component has no density, replay or cropping controls. Its registered 4×4 grid keeps the image complete, and its className can set a radius, border or locally scoped surface. The frame reads tile-assemble-surface for its backing and tile-assemble-duration for the finite motion beat, which defaults to 640ms.

<MediaTileAssemble
  src="/images/archive-overview.jpg"
  alt="An open field notebook with botanical studies"
  width={1086}
  height={1448}
  className="rounded-2xl border border-border"
/>

Frequently asked questions

Does Tile Assemble replace or hide my image?
No. The intact native image remains in the document with its supplied alt text and dimensions. Temporary tile copies are decorative and hidden from assistive technology; they are removed when the one assembly finishes or is cancelled.
What happens when the image is not ready or motion is unavailable?
The intact image is shown without tiles until it has loaded and decoded. A failed request keeps the native image fallback. Invalid dimensions or an empty source show an unavailable-image note, while reduced motion, print, missing IntersectionObserver, hidden tabs and offscreen cancellation keep the static image.
Can I change the tile count or replay the effect?
No. Tile Assemble uses one fixed 4×4 grid and runs once when the image is ready and in view. It has no tile-density, replay, cropping or source-fetching API.

Related components

Want the full page this belongs to?Template Empire builds complete Next.js templates with polished product storytelling and this motion system throughout.Explore Template Empire templates