Fractals
Scroll to zoom, drag to move. Four sets, four ways to colour them, and a live preview of the Julia set under the pointer. It keeps going down to 1 part in 1026 and stays sharp the whole way, instead of going blocky at the end.
The budget climbs on its own as you go deeper. Raise it when the picture looks flooded with solid colour, drop it when a shallow view feels slow.
More
Zooming into the Mandelbrot set past about 1013 is not a matter of using bigger numbers, because the cost of arbitrary precision then lands on every pixel on screen, a few million times a frame. The way round it is perturbation theory: iterate a single point at high precision on the processor, then compute every pixel on the graphics card as a small offset from that one reference, in ordinary single precision. Small offsets do not need many digits. That is K. I. Martin's method from 2013. Its one weakness was that pixels whose paths wandered too far from the reference came out visibly wrong, and the fix used here is rebasing, found by Zhuoran and written up by Claude Heiland-Allen at mathr.co.uk: when a pixel passes nearer to the origin than its own offset does, start the reference again from the beginning. Four lines, and the whole class of error disappears. The maths is theirs and is published, and so are other people's versions of it: Heiland-Allen's own Fraktaler 3 compiles to WebAssembly, runs in a browser, and goes far deeper than this does, because it adds bivariate linear approximation and arbitrary precision on top. This is not the state of the art and does not claim to be. What none of them are is a library: they are whole applications with their own interface, so there was nothing to call from a page like this, and the code here is written from scratch against the descriptions.
Only the Mandelbrot set gets any of that. Rebasing depends on the reference orbit starting at zero, which is true of the Mandelbrot set and of nothing else here: a Julia set starts somewhere else, the Burning Ship takes absolute values, and the Tricorn flips the sign of the imaginary part, and each of those breaks the recurrence in its own way. So the other three iterate in a pair of 32-bit floats instead, which runs out at about 1012, and the zoom stops there rather than carrying on into mush. A power that is not a whole number stops sooner again, at about 106, because it has to go through an angle and that is a single-precision trip. Everything else is shared: the same tiles, the same progressive draw, and the same palettes applied after the fact, so changing one costs nothing.
Filaments and Trap are the two colourings that ask for more than the escape count. Filaments works out how far each point sits from the set and darkens what is within about a pixel of it, which is what keeps a hair a hair twenty decades down instead of letting it dissolve into the colour either side. Trap watches the whole path instead of only where it ends, and colours by the closest it ever came to a shape, which is the one thing on this page that has anything to say about the black middle. Both cost a redraw to turn on and nothing to turn off, and the first two colourings cost nothing either way, because they are read off numbers the picture already holds.