I have a tendency to jump into gory detail right away, even though most of the work that I have done in the last year has been an attempt to spare you, the user, from having to be aware of what is going on in Fred's Fractal bowels.

The short story goes like this:

- Fire up Fred's Fractal Factory and tell it to calculate some region of Mandelbrot space. Set the max zoom depth to 3 the first few times you calculate a fractal image.
- Eventually, set the max zoom depth to 6 and see how long it takes. The Factory gives continuous feedback while running and is designed to run unattended indefinitely.
- Open your new calculated .efractals in Fred's Fractal Viewer and import some palettes. Save some locales.
- Zoom in on something interesting in Fred's Fractal Viewer and then launch the Factory from the Viewer.
- Run the Factory to generate a new .efractal file for the interesting region.
- Load the newest .efractal into the Viewer and repeat.

Fred's Fractal Factory and Viewer grew out of a fairly simple, albeit preposterous idea: rather than attempt to render the Mandelbrot set 'on the fly' as we display it, why don't we render a region of the set in advance with multiple levels of zoom data?

Prerendering provides several advantages. The user can rapidly pan and zoom through the region of prerendered data. Special effects such as palette animation and antialiasing are easier to implement with low latency.

There are also obvious disadvantages to prerendering. It takes a long time to prerender the data, eg hours or even weeks depending on how deep the zoom calcs go. And the prerendered image data is voluminous. It takes a lot of disk space to store it.

Each successive zoom level doubles the number of pixels calculated per unit of fractal space length. Since the fractal space is two dimensional(eg with x and y coordinates), then each successive zoom level contains 4 times the number of pixels as the preceding zoom level.

Note that the first frame calculated (zoom level 0) is 1000 pixels wide and 1000 pixels high, so it contains 1000x1000 = 1 million pixels.

- zoom level 1 is 2x2 = 4 frames = 2000x2000 = 4000000 pixels.
- zoom level 2 is 4x4 = 16 frames = 4000x4000 = 16000000 pixels.
- zoom level 3 is 8x8 = 64 frames = 8000x8000 = 64000000 pixels.
- zoom level 10 is 1024x1024 = 1048576 frames = 1024000x1024000 = 1048576000000 pixels.

zoom level 10 contains over a trillion pixels!

Because of the calculation time and storage space issues associated with the higher zoom levels, Fred's Fractal Factory currently limits the max zoom level depth to 10.

We hope to see fast and cheap terabyte USB thumb drives in the near future. They would be perfect for Fred's Fractal Factory and Viewer. You can put a fairly big fractal on a 64 gigabyte thumb drive, which is currently(April 2016) available for about $20.00.

When the fractal images are displayed in the Viewer, the zooms presented to the user are not discrete factors of two. Stretch blitting combined with high resolution down sampling and antialiasing allow the user to see fairly smooth and continuous zooms.

In principle, Fred's Fractal Factory and Viewer can support many different kinds of fractal calculation. In fact, they only support Mandelbrot Escape Time calculation in the current release. Eventually, other fractals such as Julia sets will be supported.

The Mandelbrot Escape Time calculation assigns a integer value labelled MandelEscapeTime(x, y) to each point in the (x, y) plane, where x and y are real numbers.

A function f(x, y, n) is calculated iteratively for values of n = 1, 2, 3, .. MaxIterations:

- If on the q'th iteration we find that f(x, y, q) > RadiusConstant, then we assign q to MandelEscapeTime(x, y), which completes the calcuation of MandelEscapeTime(x, y) .
- If f(x, y, n) <= RadiusConstant for all n in the range 1..MaxIterations, then MandelEscapeTime(x, y) is assigned MaxIterations .

Small Values of MaxIterations speed up the calculations. However, in certain regions of the Mandelbrot Set, detail is lost if MaxIterations is too small. Inside the main cardioid of the set, MandelEscapeTime(x, y) = MaxIterations no matter how large you make MaxIterations. You can experiment with different values of MaxIterations to get a feeling for this. MaxIterations is a parameter that you can set in Fred's Fractal Factory. The Factory currently supports MaxIterations values ranging from 1 to 65000.

When the Viewer displays the Mandelbrot set, it maps the MandelEscapeTime value(aka Escape Count) to a color in a sequence of colors called a palette. If the Escape Count for a pixel is MaxIterations, then the Viewer displays that pixel with a background color. This is significant primarily because background pixels are unaffected when the Viewer 'animates' the palette. Pixels on the 'interior' of the Mandelbrot Set have Escape Counts = MaxIterations.

The black pixels in this image are in the interior of the Mandelbrot set.