JSFiddle - React, Tailwind, and code Playground

by HDL52

HTML

<div id="bg"></div>

<svg>
  <filter id='noise'>
    <feTurbulence type='fractalNoise' baseFrequency='0.03' numOctaves='1' seed='1'>
      <!--
<animate attributeName="seed" dur="0.5s" values="1;5" repeatCount="indefinite" />

      <animate attributeName="baseFrequency" dur="5s" values="-0.01;0.01;-0.01" repeatCount="indefinite" />
-->
    </feTurbulence>
    <feDisplacementMap xChannelSelector="B" yChannelSelector="G" scale="150" in="SourceGraphic">
      <animate attributeName="scale" dur="10s" values="150;0;-150;0;150" repeatCount="indefinite" />
    </feDisplacementMap>
  </filter>
</svg>

CSS

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

*::before,
*::after {
  box-sizing: border-box;
}

html,
body {
  overscroll-behavior-x: none;
  overscroll-behavior-y: none;
  scroll-behavior: smooth;
}

body {
  position: relative;
  width: 100vw;
  min-height: 100vh;
  text-align: center;
  overflow-x: hidden;
  background: black;
}

:root {
  --angle: 0deg;
}

@property --angle {
  syntax: "<angle>";
  initial-value: 0deg;
  inherits: false;
}

#bg {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background-image: url(https://upload.wikimedia.org/wikipedia/commons/8/86/Edvard_Munch_-_The_Scream_-_Google_Art_Project.jpg);
  background-size: cover;
  --origin: top 60% left 40%;
  background-position: var(--origin);
  transform-origin: center;
  transform: scale3d(1.3, 1.3, 1);
  filter: hue-rotate(var(--angle)) url(#noise);
  /*
  animation: anim 20s linear infinite;
*/
}

@keyframes anim {
  0% {
    --angle: 0deg;
  }

  100% {
    --angle: 360deg;
  }
}

svg {
  position: fixed;
  top: 0;
  left: 0;
  width: 0;
  height: 0;
  z-index: -1;
}