Skip to content

Examples ​

Live Vue mounts of the same renderer. The docs stage is sized by this page, not by a library default. Expo and NativeScript host that same CSS in a WebView. Images are Unsplash URLs, never blobs. Open the studio to change canvas size and copy settings. App mounts fill the available box and size the mosaic to 20rem by 20rem. See API.

Vertical, no tilt ​

Straight vertical lanes. No inclination.

Vertical columns, 0°.
js
mountImagesInMotion(el, {
  images,
  speedRange: [8, 18],
  angle: 0,
  motionAxis: 'vertical',
  imageOrder: 'sequential',
  tileFit: 'fixed',
})

Horizontal, no tilt ​

Straight horizontal rows. No inclination.

Horizontal rows, 0°.
js
mountImagesInMotion(el, {
  images,
  speedRange: [8, 18],
  angle: 0,
  motionAxis: 'horizontal',
  imageOrder: 'sequential',
  tileFit: 'fixed',
})

Columns ​

Default study: independent vertical lanes, 12°, sequential cycle.

Vertical columns, 12°, sequential.
js
mountImagesInMotion(el, {
  images,
  speedRange: [8, 18],
  angle: 12,
  motionAxis: 'vertical',
  imageOrder: 'sequential',
  tileFit: 'fixed',
})

Film strip ​

Horizontal rows, shallow tilt, wide frame. Neighbours still run opposite ways.

Rows, 6°, wider tiles.
js
mountImagesInMotion(el, {
  images,
  speedRange: [14, 28],
  angle: 6,
  motionAxis: 'horizontal',
  tileWidth: 220,
  tileAspectRatio: 1.5,
})

Gold wash ​

Steeper sheet, random order, studio gold over the tiles.

24°, random order, gold overlay.
js
mountImagesInMotion(el, {
  images,
  angle: 24,
  speedRange: [6, 14],
  overlayOpacity: 0.42,
  overlayColor: '#A59050',
  imageOrder: 'random',
  gap: 8,
  gapColor: '#141313',
})

Paper gutters ​

Cream gap on a paper stage. The sheet is still dark; the joints are not.

Gap color matches the paper.
js
mountImagesInMotion(el, {
  images,
  angle: 10,
  gap: 10,
  gapColor: '#F3EFE8',
  gapOpacity: 1,
})

Dynamic height ​

Every tile is stretched to the tallest fitted height. Mixed Unsplash crops stay one row tall.

Dynamic fit: max height, others stretch.
js
mountImagesInMotion(el, {
  images,
  tileFit: 'dynamic',
  tileWidth: 132,
  angle: 14,
  speedRange: [10, 20],
})

Dense drift ​

Small tiles, tight gap, faster lanes. Auto fit keeps each photo's aspect.

Auto fit, negative tilt, higher speed.
js
mountImagesInMotion(el, {
  images,
  tileFit: 'auto',
  tileWidth: 96,
  gap: 2,
  angle: -8,
  speedRange: [18, 36],
  imageOrder: 'random',
})

Slow monument ​

Large cover boxes, almost still, deep ink overlay.

Large fixed tiles, slow, ink wash.
js
mountImagesInMotion(el, {
  images,
  tileWidth: 260,
  tileAspectRatio: 0.72,
  gap: 12,
  angle: 16,
  speedRange: [3, 7],
  overlayOpacity: 0.28,
  overlayColor: '#141313',
})

Designed by Samuel Burlon, implemented by Massimo De Luisa