gizmobench

Mandelbrot Explorer

Render a Mandelbrot or Julia set from editable complex-plane bounds, choose a contour palette and an iteration cap, and inspect the orbit of a point. Pan and zoom with the image or use labelled controls. Each completed frame records its sample dimensions and settings, with PNG and JSON exports that stay tied to that frame.

zₙ₊₁ = zₙ² + c
No completed frameRender when ready
zₙ₊₁ = zₙ² + cChoose the bounds and render a complex plane.

No pixels have been computed yet. The first completed render will show its bounds, sample grid, palette and matching point orbit here.

Use the selected image action on a current frame. Tap to zoom keeps the chosen point fixed; hold Shift to zoom out. Focus the image and use arrow keys to pan, + or − to zoom, and Escape to cancel. Pan and zoom render the changed bounds.

Current Float64 precision floor
Minimum real span ≈ 2.4868996e-12.
Minimum imaginary span ≈ 6.8780537e-13.
Current steps: 0.00625 real, 0.00625 imaginary per pixel.

At most 1,048,576 samples, 2048 per axis and 2000 iterations. Tiles use at most 128 KiB; an RGBA frame uses at most 4 MiB. A render stops after 60 seconds.

Inspect c

Render a frame to inspect its orbit. Worked example: Mandelbrot c = 2 gives z₀ = 0, z₁ = 2 and z₂ = 6, crossing the strict cutoff at iteration 2.

The strict cutoff is |z| > R. Mandelbrot uses R = 2. Julia uses the conservative radius R = max(2, 2√|c| × (1 + 8ε)), where ε is Float64 machine epsilon. The starting value z₀ is checked, then each update is numbered 1 through the cap. Pixels and orbit traces use the same kernel.

Radius for the current controls: R = 2. Mandelbrot c = 2 reaches the radius at update 1 and crosses it at update 2.

Load exported settings JSON

Loading controls does not render an image. Review the loaded values, then choose Render.

Mode
Mandelbrot
Sample grid
560 × 352
Iteration cap
80
Cutoff
|z| > 2

Worked examples

  • Bounded fixtureMandelbrot c = 0; z₀ = 0
    All sampled z = 0 through the cap
  • Escape fixtureMandelbrot c = 2; z₀ = 0
    z₁ = 2; z₂ = 6; crosses at 2
  • Julia fixtureJulia c = 0; z₀ = 2
    z₁ = 4; crosses at 1

Accuracy. Finite precision and an iteration cap do not prove membership near a boundary. Mandelbrot uses escape radius 2; Julia uses a conservative radius derived from its fixed c, and the current radius and Float64 zoom floor are shown.

Common questions

What is the difference between Mandelbrot and Julia mode?
Mandelbrot mode starts every orbit at z0 = 0 and varies the complex parameter c across the image. Julia mode varies the starting value z0 across the image while keeping the editable c constant. Both apply z(n+1) = z(n)^2 + c and use the same numerical kernel for pixels and inspected orbits.
What is the cutoff, and how are iterations numbered?
Escape means magnitude strictly greater than the displayed radius R. Mandelbrot uses R = 2. Julia uses the conservative radius R = max(2, 2*sqrt(|c|)*(1+8*Number.EPSILON)), computed with scaling so every finite complex c has a finite radius. The starting value is z0 and is checked first; updates are numbered 1 through the cap. Mandelbrot c = 2 reaches z1 = 2 and crosses at z2 = 6. Julia c = 0 with z0 = 2 crosses at z1 = 4. Julia c = -6 with z0 = 3 stays fixed at 3. Points still inside the radius at the cap are dark and are not proven members. If a computed coordinate exceeds the Float64 range, escape is recorded at that update and the orbit table stops at the last finite sample.
How far can I zoom into the fractal?
The explorer uses Float64 arithmetic. It shows a conservative minimum span for each axis at the chosen bounds and sample dimensions, based on eight epsilon-scaled units per pixel. It also verifies that adjacent sampled coordinates remain distinct. A zoom beyond this floor is refused instead of showing repeated coordinates as additional detail.
Can I pan and zoom without dragging?
Yes. The pan buttons and arrow keys move by one quarter of the viewport span. Zoom in and Zoom out work around the center, while pointer zoom is anchored at the chosen position. Numeric minimum and maximum fields set exact bounds. Render applies edited controls; changing them keeps the previous completed image labelled as stale until a new render finishes.
What do PNG and settings JSON exports contain?
PNG contains only the completed fractal image at its recorded sample dimensions. Version 1 settings JSON records the mode, numeric bounds, Julia parameter, palette, dimensions, iteration cap, inspected point and derived escape radius and policy. Paste exported JSON into the settings loader to reproduce the configuration, then render it. The radius is recomputed from the loaded settings. Partial, cancelled or stale images cannot be exported as the current frame.
What are the rendering limits, and is anything uploaded?
Calculations run locally in a cancellable worker. The iteration cap is 1 to 2000; each dimension is 2 to 2048, with at most 1,048,576 samples in a frame. That bounds the RGBA pixel buffer to 4 MiB, and worker tiles to 128 KiB. Renders that exceed 60 seconds stop with the previous image preserved. Only settings are remembered in this browser; pixels are not stored or uploaded by the renderer.

Finite precision and an iteration cap do not prove membership near a boundary. Mandelbrot uses escape radius 2; Julia uses a conservative radius derived from its fixed c, and the current radius and Float64 zoom floor are shown.