# Mandelbrot & Julia Deep Zoom Renderer > Render the Mandelbrot or a Julia set anywhere, down to zoom 10²⁵⁰ with perturbation theory. Render the Mandelbrot set or a Julia set as a PNG image at any centre and zoom. Shallow views iterate in double precision; deep zooms beyond what doubles can resolve use perturbation theory with an exact BigInt reference orbit and rebasing, so a view of width 1e-22 or 1e-100 renders correctly. Centre coordinates may have hundreds of digits. The result lists the zoom factor, the method, the share of pixels inside the set and the escape-iteration statistics. Part of the Proofline math notebook. Part of usefulweb.app (https://usefulweb.app/). Part of [Proofline](https://proofline.usefulweb.app/) (ownerApp: proofline). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://prooflinefractal.usefulweb.app/ (interactive tool at https://prooflinefractal.usefulweb.app/tool) - JSON API: POST https://prooflinefractal.usefulweb.app/api/v1/calculate with a JSON object of inputs (schema: https://prooflinefractal.usefulweb.app/api/v1/tool) - OpenAPI: https://prooflinefractal.usefulweb.app/openapi.json - MCP (Streamable HTTP): https://prooflinefractal.usefulweb.app/mcp - tool `proofline_fractal` ## Inputs - set (select): Fractal - centerX (text): Centre x (real part) - A decimal number; deep zooms need as many digits as the zoom has zeros. For a Julia set, 0 centres the picture. - centerY (text): Centre y (imaginary part) - width (text): View width - Width of the view in the complex plane, e.g. 3.5 for the whole set or 1e-30 for a deep zoom (at least 1e-250). - juliaRe (text): Julia constant c, real part - juliaIm (text): Julia constant c, imaginary part - maxIterations (integer): Maximum iterations - Deep zooms need more: roughly 2,000 at 1e-10, 20,000 at 1e-22. - imageWidth (integer): Image width (pixels) - imageHeight (integer): Image height (pixels) - method (select): Method - palette (select): Colours - colorDensity (number): Colour density ## Method - Escape time: z ← z² + c from z = 0 (Mandelbrot, c = pixel) or z = pixel (Julia, c fixed) until |z| > 256 or the iteration limit; the smooth count n + 1 − log₂(log₂|z|) gives continuous colours; bounded pixels are black. - Deep zooms: the view centre’s orbit Zₙ is computed exactly in BigInt fixed point (precision about −log₂(pixel size) + 48 bits); each pixel iterates its offset δ in doubles, δₙ₊₁ = 2Zₙδₙ + δₙ² + δc. When |Zₙ + δₙ| < |δₙ| or the reference orbit ends, the pixel continues from the start of the reference orbit with δ = Zₙ + δₙ (rebasing), which removes perturbation glitches without extra reference points. - Verified: escape times of single points (c = 1 escapes after 3 iterations with radius 2; c = −1 never escapes); perturbation and direct iteration agree to within 1.5 iterations on more than 99.5 % of the pixels of a shallow view; at width 1e-22 the perturbation result equals an exact 200-bit BigInt iteration of the same pixels. ## Limits - Each pixel shows the escape time of its centre point (no anti-aliasing); pixels that would escape after more iterations than the limit appear inside the set. Colours are a free artistic choice.