Asymptotic self-similarity
The Mandelbrot is asymptotically self-similar about pre-periodic Misiurewicz points. The derivative of the cycle (with respect to \(z\)) can be used as a multiplier for seamlessly looping zoom animations. Here are some examples:

const dvec2 c0 = dvec2(-0.22815549365396179LF, 1.1151425080399373LF); const int pre = 3; const int per = 1;

const dvec2 c0 = dvec2(-0.10109636384562216LF, 0.9562865108091415LF); const int pre = 4; const int per = 3;
(The above example's Misiurewicz point has period 1, but using 3 here avoids rapid spinning.)

const dvec2 c0 = dvec2(-0.77568377LF, 0.13646737LF); const int pre = 24; const int per = 2;
Here is the rest of the code that made the images, it's for Fragmentarium with
my (as yet unreleased, but coming soon) Complex.frag enhancements
for dual-numbers and double-precision:
#version 400 core
#include "Complex.frag"
#include "Progressive2D.frag"
uniform float time;
// insert snippets from above in here to choose image
const double r0 = 0.00001LF;
vec3 color(vec2 p)
{
// calculate multiplier for zoom
dvec4 z = cVar(0.0LF);
dvec4 c = cConst(c0);
for (int i = 0; i < pre; ++i) z = cSqr(z) + c;
z = cVar(cVar(z));
for (int i = 0; i < per; ++i) z = cSqr(z) + c;
dvec2 m = r0 * dvec2(cPow(vec2(cInverse(cDeriv(z))),
mod(time, float(per)) / float(per)));
const int maxiters = 1000;
const double er2 = 1000.0LF;
c = cVar(c0 + cMul(m, p));
z = cConst(0.0LF);
double pixelsize = cAbs(m) * double(length(vec4(dFdx(p), dFdy(p))));
int i;
for (i = 0; i < maxiters; ++i)
{
z = cSqr(z) + c;
if (cNorm(z) > er2)
{
break;
}
}
if (i == maxiters)
{
return vec3(1.0, 0.7, 0.0);
}
else
{
double de = 2.0 * cAbs(z) * double(log(float(cAbs(z)))) / cAbs(cDeriv(z));
float grey = tanh(clamp( float(de/pixelsize), 0.0, 8.0 ));
return vec3(grey);
}
}