Skip to content
Native Animation
Psychedelic Splash animation preview
Skia

Psychedelic Splash

React Native Psychedelic Splash Screen with Glitches

A full-bleed portrait splash that cuts between liquid neon, moving mirrors, clean frames, and RGB glitches.

$9 for this animation

Checkout opens soon. Leave your email and we will tell you the moment you can buy it.

One email when checkout opens. No spam.

Add to your project

Copy the component and its assets into your app with the Native Animation CLI, or paste the agent prompt into Claude Code, Codex or Cursor once the MCP server is connected.

npx nativeanimation add psychedelic-splash

About this animation

A React Native psychedelic splash screen can transform one portrait into a sequence of liquid neon, moving mirrors, and RGB glitches. This component uses one Skia runtime effect with selectable modes, alternating each treatment with a clean-photo interval. A Reanimated frame clock runs the sequence on the UI thread, while layered wordmark text adds deterministic channel jumps without per-frame React renders. Native overlays keep the tagline and page dots above the image canvas. Use it for a video-effects introduction, a creative app entry, an expressive portrait showcase, or a visual onboarding page. Supply the image, choose effect order and timing, and configure intensity, neon colors, wordmark, tagline, fonts, and page indicators. Listen for effect changes or pause and resume through the ref.

When to use it

  • Introduce a video-effects interface.
  • Show a portrait with neon and mirrors.
  • Create an expressive onboarding page.
  • Alternate photo effects with clean frames.

A full-bleed portrait splash that cuts between liquid neon, moving mirrors, clean frames, and RGB glitches.

How it works

  1. The component measures its own container and asks an ImageShader to cover that exact rectangle, so the portrait remains centered without depending on the window size.
  2. One Skia runtime effect contains all three looks. A mode uniform selects liquid warping with a luminance-driven neon map, six moving mirrored strips, or blocky RGB channel separation.
  3. A useFrameCallback clock runs on the UI thread. Each effect ramps in and out over 120 ms, then yields to a short clean-photo interval before the next mode.
  4. The wordmark is drawn in white, red, and cyan layers. Deterministic 60 ms jumps, plus a clipped text band, create the entrance glitch without React renders per frame.
  5. The lower gradient, tagline, page dots, and home indicator remain native view layers above the image canvas for crisp layout and readable contrast.

Install

npx expo install @shopify/react-native-skia expo-linear-gradient react-native-reanimated react-native-worklets

On web, copy CanvasKit into the public directory and load it before mounting the component:

npx setup-skia-web public
import { LoadSkiaWeb } from '@shopify/react-native-skia/lib/module/web';

await LoadSkiaWeb({ locateFile: () => '/canvaskit.wasm' });

Usage

import PsychedelicSplash from './PsychedelicSplash';

export function SplashScreen() {
  return <PsychedelicSplash image={require('./portrait.jpg')} />;
}

Customize the sequence and pause it from a parent:

import { useRef } from 'react';
import PsychedelicSplash, {
  type PsychedelicSplashRef,
} from './PsychedelicSplash';

export function SplashScreen() {
  const splashRef = useRef<PsychedelicSplashRef>(null);

  return (
    <PsychedelicSplash
      ref={splashRef}
      image={require('./portrait.jpg')}
      effects={['liquid', 'mirror', 'rgbSplit']}
      effectSeconds={1.1}
      cleanSeconds={0.2}
      intensity={0.85}
      neon={['#FF375F', '#FFD60A', '#32D74B', '#64D2FF']}
      wordmark="Studio"
      tagline="Make every frame yours"
      pageCount={4}
      activePage={1}
      onEffectChange={(effect) => trackEffect(effect)}
    />
  );
}

The forwarded ref exposes pause() and resume().

Props

PropTypeDefaultDescription
imageDataSourceParamRequiredFull-bleed photo processed by the shader.
effectsSplashEffect[]['rgbSplit', 'liquid', 'mirror', 'liquid']Ordered effect sequence; loops continuously.
effectSecondsnumber1.2Seconds allotted to each effect.
cleanSecondsnumber0.25Clean-photo pause between effects.
neon[string, string, string, string]Pink, yellow, green, blueFour-color liquid-effect palette.
wordmarkstring'Prism'Large wordmark near the bottom.
taglinestring'Video effects studio'Supporting line under the wordmark.
wordmarkFontDataSourceParamSystem fontOptional font source for the Skia wordmark.
fontFamilystringSystem fontFont family for the native tagline.
pageCountnumber3Number of page dots; zero hides them.
activePagenumber0Zero-based active page dot.
intensitynumber1Shader strength, clamped from 0 to 1.
onEffectChange(effect: SplashEffect | 'clean') => void—Called when an effect or clean interval becomes visible.
styleStyleProp<ViewStyle>—Outer-container style.
testIDstring—Outer-container test identifier.

Compatibility

  • Expo SDK 57
  • React Native 0.86
  • Reanimated 4.5
  • React Native Skia 2.6
  • iOS: supported, not yet verified on a device
  • Android: supported, not yet verified on a device
  • Web: verified
  • Works in Expo Go because Skia, Reanimated, Worklets, and Linear Gradient are included in the SDK

Accessibility

The complete splash is exposed as one image with a label made from the wordmark and tagline. When reduced motion is enabled, the shader stays on the clean portrait and the wordmark renders once in white without channel jumps.

FAQ

Which image effects does the splash screen support?
effects accepts liquid, mirror, and rgbSplit in your chosen order. effectSeconds controls each effect, cleanSeconds sets the clean-photo interval, and intensity sets shader strength.
Can I replace the portrait, wordmark, and page indicators?
Yes. Supply image, wordmark, tagline, wordmarkFont, and fontFamily. Set pageCount and activePage for the dots, or use pageCount of 0 to hide them.
Does the psychedelic splash support Reduce Motion?
Yes. The shader stays on the clean portrait and the wordmark renders once in white without channel jumps. The complete screen is exposed as one labeled image.