pixlated

Colours swap behind a pixel mosaic.

The full recording — the example app on an Android emulator and an iOS simulator at once, with pixlated played several times over. Scrub or pause with the controls.

The screen breaks into a coarse mosaic, the colour swap rides it mid-transition, and the mosaic comes back down — so neither theme is ever seen sharp mid-flight. It needs a second snapshot of the already-painted new theme, which is why the JS side yields two animation frames before committing.

Options it takes

OptionTypeDefaultWhat it does here
durationMs number 650 Animation length. Clamped up to this kind’s floor; 0 means no animation and is never clamped.
settleFrames number 2 Display frames to hold the snapshot before revealing, so the theme swap has painted underneath.

Ignored by this kind: origin, direction, angleDeg, shape, blurStyle, bands. Passing them is harmless.

Minimum duration

A request below 520ms is clamped up to it, natively, so both platforms agree. Below that floor a full-screen copy coming apart has too few frames to read as motion — the eye gets the start and the end and nothing in between, which looks like a flicker rather than a fast transition. durationMs: 0 still means “no animation” and is never clamped.

Usage

withThemeTransition(applyTheme, {
  kind: 'pixlated',
  durationMs: 650,
});

How it is done

iOSdual mosaic + alpha crossfade
Androiddual mosaic + alpha crossfade