I made this effect during a Genuary prompt, in shadertoy Link Each part is programmatically generated.
First starting by composing this image through code

And then producing this ripple interference effect, that is used to displace the UV sampling of the image above.