Apps Part of Proofline

Mandelbrot & Julia Deep Zoom Renderer

Render the Mandelbrot or a Julia set anywhere, down to zoom 10²⁵⁰ with perturbation theory.

A decimal number; deep zooms need as many digits as the zoom has zeros. For a Julia set, 0 centres the picture.

More options

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).

Deep zooms need more: roughly 2,000 at 1e-10, 20,000 at 1e-22.

Try an example: · · ·

More about this tool

How it works

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.

  • 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.

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.

Sources

Part of Proofline

Related tools

Render the Mandelbrot and Julia sets with deep zoom

Draw the Mandelbrot set or a Julia set at any zoom down to a view width of 1e-250, using perturbation theory for deep zooms, and download the picture as a PNG.

What it is for

The Mandelbrot set is the set of complex numbers c for which z ← z² + c, starting at z = 0, stays bounded. Its edge has detail at every scale, but ordinary double-precision numbers run out of digits at a zoom of about 10¹⁴. This tool renders the set, or the Julia set of a fixed c, at any zoom down to a view width of 1e-250, and saves the image as a PNG.

You give the centre as decimal text with as many digits as you need, the View width in the complex plane and the Maximum iterations. Down to a width of 1e-10 every pixel is iterated directly in doubles. Below that, the tool switches to the perturbation method: it computes the orbit of the centre once with exact big-integer arithmetic and then iterates each pixel's small offset from that orbit in ordinary doubles. Rebasing restarts a pixel on the reference orbit when its offset grows, which avoids the glitches of older deep-zoom programs.

The same engine runs in a background worker in the Sim Gallery of Proofline, where you zoom by clicking, and produces byte-identical images.

Worked example

The default view, centre −0.75 + 0i and width 3.5 at 640 × 480 pixels, shows the whole set. 16.45 % of the pixels are inside, and the escaping pixels need 6.22 iterations on average, with a slowest escape after 982.

Now zoom into Seahorse Valley: centre -0.743643887037158704752191506114774 and 0.131825904205311970493132056385139, width 1e-22, 20,000 iterations, 240 × 180 pixels. The tool reports the perturbation method with a 129-bit reference orbit. Every escaping pixel needs between 10,026 and 19,064 iterations, 10,314.5 on average, and only 0.02315 % of the pixels stay inside. Spot checks of single pixels in this view against an exact 200-bit iteration give the same escape counts.

For a Julia set, choose Fractal Julia set, centre 0, width 3.2 and c = −0.8 + 0.156i. Almost the whole picture escapes (0.0463 % inside) and leaves a thin, dust-like spiral.

How to read the result

Black pixels did not escape within the iteration limit. The colours encode the smooth escape count, so bands show how quickly points fly away; the palette is an artistic choice and carries no extra meaning. Zoom factor is 3.5 divided by the width (3.2 for Julia sets). The view table lists the pixel size, the escape-count range and, for deep zooms, the reference precision and the number of rebases.

Tips and common mistakes

  • Give the centre at least as many digits as the zoom has zeros, or you zoom into a slightly different place.
  • Raise Maximum iterations as you zoom. Roughly 2,000 suit 1e-10 and 20,000 suit 1e-22. The tool warns when many pixels escape only late and some remain inside.
  • A picture that is completely black lies inside the set, like a view centred on a mini Mandelbrot copy with too small a width.
  • Larger images take longer in proportion to the pixel count; deep zooms with high iteration limits take the longest.

FAQ

Can I go deeper than 1e-250?

No. Pixel offsets below about 1e-300 no longer fit into a double, so the tool stops at 1e-250.

Why does the default method say automatic?

It chooses direct iteration down to width 1e-10 and perturbation below. You can force either one with Method.

Where are the mini Mandelbrots?

One sits on the real axis at about −1.7548776662. With width 0.04 it fills 40.75 % of the view.

Is the image anti-aliased?

No. Each pixel shows the escape time of its centre point, so fine filaments can look grainy.

Guide last updated:

For scripts and AI agents

  • JSON API: POST https://prooflinefractal.usefulweb.app/api/v1/calculate (same calculation as this page)
  • Interface description: OpenAPI 3.1 · AI guide: llms.txt
  • MCP server (Streamable HTTP): https://prooflinefractal.usefulweb.app/mcp · tool name proofline_fractal
Example request
curl -s -X POST https://prooflinefractal.usefulweb.app/api/v1/calculate \
  -H 'content-type: application/json' \
  -d '{}'
Feedback · ideas & bug reports welcome