download
| source
| benchmarks
| gallery
As the orginal upstream author Karl Runmo says:
Want to create DEEP Mandelbrot fractals 100 times faster than the commercial programs, for FREE? One hour or one minute? Three months or one day? Try Kalles Fraktaler!
I (Claude Heiland-Allen) forked the code and swapped out the custom arbitrary precision floating point code for highly optimized libraries, making it even faster.
Note on versions:
- kf-2.14
- experimental branch, features series approximation for more formulas and user interface improvements
- kf-2.13
- stable branch, features Newton-Raphson zooming for all formulas and analytic distance estimation
- kf-2.12
- older stable branch, recommended for final rendering (it is significantly faster than kf-2.13)
- kf-2.11
- legacy releases, still provided for bisecting bugs etc
Legal note: these binaries are released
under AGPLv3+ license. If you redistribute the
binaries (or provide access to the binaries as a service)
you must also be prepared to distribute the source corresponding to
those binaries to anyone you distribute the binary to. To make this easier
for you, the more recent zips include the source too (though you'll also need
to get the library sources - check the about dialog ("?" menu) for details).
And of course insert here the usual legal disclaimers about
no warranty of any kind.
Binary downloads for Windows (both 64bit and 32bit now) (they also work in WINE on Linux, where I do my coding):
- kf-2.14.1.zip (9.8M) (sig) (2018-09-27)
-
new feature: series approximation for Burning Ship power 2, using
case analysis to know how it gets reflected at each iteration
-
two new formulas: General Quadratic Minus, General Quadratic Plus;
"RedShiftRider factor A" sets coefficients (suggested by gerrit)
-
new feature: "Fast" preset activated by default
-
new feature: GUI menus reorganized to make more sense and updated
the manual to reflect this
-
new feature: "check for updates" option in the file menu (requires
internet access)
-
new feature: 1/4 and 1/2 threads per CPU settings (minimum 1 thread)
-
new feature: optional use of d/dZ in autoskew escape (suggested by
gerrit)
- kf-2.13.9.zip (9.7M) (sig) (2018-09-06)
-
new feature: auto skew without miniset: new button in Newton-Raphson
zooming dialog, "Auto Skew (Escape)", that skews at the center pixels
(algorithm suggested by gerrit)
-
bugfix: set window title on parameter drag and drop (reported by gerrit)
-
bugfix: reading PNG metadata works even if it is moved after the image
data chunks and has a miscapitalized "Comment" keyword
-
bugfix: fix Mandelbar derivative calculations for ADE (reported by gerrit)
-
bugfix: fix 4th False Quasi formulas Newton-Raphson zooming
- kf-2.13.8.zip (9.0M) (sig) (2018-08-28)
-
new feature: auto skew (via Newton-Raphson zooming dialog)
-
new feature: show/hide crosshair window (suggested by gerrit and others)
-
new feature: quality presets ("fast" but inaccurate, "best" but slow)
-
new feature: page up / page down keyboard shortcuts to zoom in / out
-
new feature: drag-and-drop parameter files from the file manager to
the main window to open them
-
new feature: drag-and-drop palette files from the file manager to
the color dialog window to open them
-
new feature: CLI prints total remaining pixels (suggested by gerrit)
-
bugfix: suppress error dialogs when loading metadata from TIFF
-
bugfix: remove obsolete .ini stuff that was overriding default settings
-
bugfix: enabled "no reuse center" by default
(without it zoom out sequence sometimes glitches)
-
major documentation improvements
-
new dependency: GLM 0.9.9.0
- kf-2.13.7.zip (8.9M) (sig) (2018-08-14)
-
export to uncompressed TIFF images (faster than PNG, but larger)
(suggested by gerrit)
-
nicer default palette
-
upgrade to Boost 1.68.0
-
upgrade to MPFR 4.0.1-p13
- kf-2.12.14.zip (4.9M) (sig) (2018-08-14)
-
fix for "a single dot appears in the middle of a mini"
(reported by gerrit)
- possible fix for "iterations reset low when zooming fast"
- upgrade to GSL 2.5
- update documentation
- kf-2.13.6.zip (8.9M) (sig) (2018-08-02)
-
fix for "a single dot appears in the middle of a mini"
(reported by gerrit)
-
fix for "zooming out saves Zoom 0 in KFR parameter file"
(reported by CFJH)
-
"open map" function (file menu)
workflow: open KFR, ESC to abort, open KFB, adjust colours, save image
(ignoring the warning about a KFB map existing with the same name)
- kf-2.13.5.zip (8.9M) (sig) (2018-06-26)
- colouring is parallelized for speedup when multiple cores are available
- only sort pixel indices in interactive mode (speeds up batch mode)
- palette loading fixed to load all colouring data
- interior colour can be set now, defaults to black
- upgrade to GSL 2.5
- kf-2.13.4.zip (8.7M) (sig) (2018-06-21)
-
allow derivative computations to be turned off for speed (breaks analytic DE)
-
merged changes from the 2.12 branch (bugfixes and library upgrades)
- kf-2.12.13.1.zip (4.9M) (sig) (2018-06-04)
-
fix severe performance regression in previous version
-
upgrade to Boost 1.67.0
-
upgrade to MPFR 4.0.1-p6
- kf-2.12.13.zip (4.9M) (sig) (2018-05-15)
-
fix crasher bug relating to series approximation memory allocation (reported by gerrit)
- kf-2.13.3.zip (8.5M) (sig) (2018-05-08)
-
Newton-Raphson zooming precision loss bug fix (reported by gerrit)
-
Newton-Raphson zooming for Mandelbrot powers 6 7 8 9 10 (reported by gerrit)
-
Newton-Raphson zooming size estimate fixed for more formulas (now correctly uses smallest power instead of largest, for renormalization behaviour near zero)
-
Mandelbrot power 6 7 8 9 10 analytic distance estimation bug fixes (reported by gerrit)
- kf-2.13.2.zip (8.8M) (sig) (2018-05-01)
-
Newton-Raphson zooming for all formulas (using code generated by 'et')
(no progress reporting yet, nor convergence detection for early exit)
-
R^2 matrix derivatives for all formulas (fixes analytic DE with skew)
-
fix image corruption when enabling guessing with analytic DE
-
fix assertion failed popup (race condition between parameter changes and
colouring during rendering) (reported by gerrit)
- kf-2.13.1.zip (5.7M) (sig) (2018-03-30)
-
added derivative calculations
-
known bug: calculated even if not needed for colouring
-
known bug: some derivatives are C approximations instead of R^2 matrix
-
analytic DE colouring mode
-
known bug: DE data not saved to KFB map files
-
interior is white instead of black
-
known bug: interior colour should be customizable
-
series approximation uses Horner's rule to evaluate polynomials
(minor optimisation)
-
default settings are best-quality by default
- kf-2.12.12.zip (5.6M) (sig) (2018-03-30)
-
Free Software under GNU Affero General Public License, version 3 or greater
-
least squares numerical differences (experimental; subject to change)
-
Laplacian numerical differences (suggested by gerrit)
-
(possibly stratified) tiled settings/parameters generator program
-
stratified tiling reassembler GNU Octave script
- kf-2.12.11.zip (4.4M) (sig) (2018-03-12)
-
uniform jitter by default (suggested by gerrit)
-
Gaussian jitter available as an option
-
jitter scale factor setting (suggested by gerrit)
-
log verbosity flag for command line rendering
-
upgrade to libjpeg6b2
-
fix bug where Ctrl-S would overwrite the wrong file (reported by gerrit)
-
fix bug where lines would appear aligned with references (reported by
gerrit and CFJH)
-
fix "color method and infinite waves are immediately applied" even when
colouring is disabled (reported by gerrit)
- kf-2.12.10.zip (4.4M) (sig) (2018-02-22)
-
upgrade to MPFR 4.0.1
-
removed some build instructions from README (see the prepare.sh script)
(it was too annoying to have to keep updating everything in two places)
-
command line non-interactive mode works without opening a window
(suggested by gerrit)
-
pixel jitter (dithering of position): set non-zero seed in iterations
dialog to enable it, different seeds give slightly different images which
can be stacked later for anti-aliasing as an alternative to rendering
large and downscaling later; helps reduce Moiré grid artifacts at the
cost of noise
-
"Enable" toggle in colouring dialog: colouring takes long for large
images, disable the toggle if you want to make many changes at once, then
click "Apply" or re-enable to see the results (discussed with gerrit)
- kf-2.12.9.1.zip (4.3M) (sig) (2018-01-24)
-
fixed broken "approx low tolerance" checkbox (thanks to Dinkydau)
-
fixed NR-zoom dialog to remember custom zoom factor between reopenings
(reported by gerrit)
-
fixed initialization of some menu item state on load
-
upgrade to Boost 1.66.0
- kf-2.12.9.zip (4.3M) (sig) (2018-01-24)
-
improved Newton-Raphson zooming dialog, now zooms to a factor between
current zoom and minibrot size (suggested by Dinkydau)
-
implemented "scaled long double" iterations for Mandelbrot power 2 and 3,
which might speed up some zooms between e4900 and e9800
-
fixed "the maxiterations suddenly resets to some very low value"
(reported by gerrit)
-
fixed "Newton iterates 100 times before failing", now fails fast if
the C goes outside the target (reported by gerrit and Dinkydau, fix
suggested by knighty)
-
fixed "Newton zooms to blank image", reported by gerrit, fix was to
remove a check on the derivative being huge that was falsely reporting
success
-
fixed "manual ApproxTerms gets reset to AutoApproxTerms value"
(reported by gerrit)
-
barrier implementation yields if there are fewer CPUs than threads
(fixes very slow Newton-Raphson zooming and reference calculations
on dual-core laptop) (this is the behaviour of 2.12.5 and earlier, but
conditional on number of cores)
-
upgrade to libpng 1.6.34
-
added shell script containing some of the build instructions from
the documentation
- kf-2.12.8.zip (4.0M) (sig) (2017-12-22)
-
restore ignoring isolated glitches
-
added logic to prevent too-huge image size being entered via the GUI
(settings files are still not checked...)
-
clarified store zoom count user interface (reported by CFJH)
-
fixed the fix for hang in normalisation (was generating bad images)
(reported by gerrit with bug7.png)
-
fixed DE spots bug (somehow the reference was being reset to the center
of the screen sometimes without its pixel position being updated)
(reported by gerrit)
-
fixed bugs with guessing and glitch status (only interpolate when the
glitch status of both neighbours is the same) (caused lines when dragging
the view, probably other badness too)
-
fixed store zoom out for deep zooms (bug reported by gerrit) (the issue
was exceptions thrown by std::stod(), remember to catch them)
-
refactor auto iterations (issue reported by gerrit remains unresolved)
-
fixed hardcoded count in glitch correction
-
use Taylor intervals in ball-period method (code copied from knighty)
- kf-2.12.7.zip (4.0M) (sig) (2017-12-07)
-
renabled guessing conditional on menu option (was disabled in 2.12.4 as enabling it made some random speckles, possibly due to a race condition) (requested by Kalles Fraktaler and Fractal universe)
-
added "threads per cpu core" setting
-
compiles clean with -Wwrite-strings
-
even lower resolution preview for more intensive locations (suggested by Foxxie) (implemented with Adam7-style interlacing with circular sorting)
-
copy (Ctrl-X) and paste (Ctrl-V) parameters from the system clipboard
-
fixed hang crash bug when normalizing smooth iteration values
-
use interval arithmetic ball-period method instead of box-period (speeds up Newton-Raphson zooming a bit) (idea from knighty and gerrit)
- kf-2.12.6.zip (4.0M) (sig) (2017-11-24)
-
fix central differences (reported by gerrit)
-
fix insufficient precision in Zoom: saved in .kfr (reported by CFJH)
-
option to render zoom out sequence without saving KFB maps (suggested by
CFJH)
-
option to stop rendering zoom out sequence after a certain number of
frames (suggested by CFJH)
-
resume zoom sequence works without KFB maps saved every frame (still needs
a "last.kfb", this is saved automatically when needed)
-
barrier no longer yields (fixes priority inversion on heavily loaded
systems) (reported by gerrit)
-
switch from GMP mpf_t to MPFR (fixes some blank images on load, also some
Newton-Raphson zoom failures - possibly a library bug?) (reported
by Kalles Fraktaler and gerrit)
- kf-2.12.5.zip (3.7M) (sig) (2017-11-02)
-
preferences (rendering settings not related to location) save and load
(.kfs files and PNG/JPEG comments too)
-
command line arguments to load settings and/or location
-
command line arguments to render and save PNG/JPEG/KFB Map before quiting
-
auto-added new references recalculate only all glitched pixels (in earlier
versions it would recalculate all pixels with same integer iteration
count, which may or may not have been glitched, and may have missed some
glitches)
-
glitch correction now uses glitch flag instead of just iteration count
(this ensures the reference is added in a really glitched pixel, so at
least one pixel will be fixed by each reference, ensuring termination
with a finite number of references)
-
fix bugs with references when calculating their own pixels
-
fix off-by-one when references fix their own pixels (reported by gerrit)
-
single pixel glitches are no longer fixed by copying neighbour
-
fixed glitch at image boundary correction
-
fixed memory leak in glitch correction
-
fixed horizontal line corruption in examine zoom sequence glitch
correction (reported by Fractal universe)
-
fixed "Mandelbar Celtic" formula (reported by Kalles Fraktaler)
-
fixed "Mandelbar" formula (reported by Foxxie)
-
fixed "Burning Ship Power 4" formula (reported by Foxxie)
-
fixed complex formulas reference precision problems (reported by Foxxie)
-
fix for auto-iterations (now respects GUI) (reported by Foxxie)
-
fix for crash selecting invalid power (reported by Foxxie)
-
fix for gigantic zoom value bug in Newton zooming (reported by Foxxie and
gerrit)
-
added "no reuse center" option to prevent rectangle pasting (suggested by
quaz0r and gerrit)
-
fix for signed integer overflow reports negative percentage in status bar
when the number of iterations is large (reported by Foxxie and another)
- fix for confusing PNG save options dialog called "JPEG properties"
- major code refactoring into multiple files for ease of maintenance
- delete no-longer-used single-threaded Newton-Raphson zooming code
- kf-2.12.4.zip (3.2M) (sig) (2017-10-06)
- "glitch low tolerance" checkbox that can be enabled to detect glitches
more aggressively (enabling it allows "Olbaid-ST-023.kfr" to render
correctly, but taking 16x longer than with it disabled) (incorrect
render reported by Kalles Fraktaler)
- updated program icon with transparent background and large version,
and use it for child windows too
- long double off-by-one bug fixed (incorrect render reported by CFJH)
- floatexp implementation bug fixes (0.0 was implemented incorrectly)
(caused a series approximation underskipping failure that was reported
by Kalles Fraktaler)
- fix distance colouring grid artifacts with small zoom size by disabling
"reuse center" when zoom size is not an integer (reported by gerrit)
- fix some iteration band edge artifacts (with external postprocessing of
kfb map files) by increasing the smooth bailout radius from 100 to 10000
(reported by gerrit)
- ensure added references fix their corresponding pixel (suggested by
Pauldelbrot) (prevents loop in auto solve glitches whereby a reference
was repeatedly being added at the same location without progress being
made)
- disabled "guessing" (was causing occasional randomly bright single pixels
at low zoom levels, possibly a race condition?)
- build against an installed libjpeg instead of each time after clean
- fix broken complex formula reference calculations
- fix compilation warnings (now almost clean with -Wall -Wextra)
- compile as C++17 (should also still work as C++11 and C++14)
- delete bitrotten code paths for SetEvent()-based multithreading
- delete unused thread affinity setting code
- parameter data is saved as comment in image files (both PNG and JPEG)
- can load parameters from image file comments (both PNG and JPEG)
- delete obsolete VS build system
- fix "infinite waves" colouring (reported by gerrit)
- kf-2.12.3.zip (2.9M) (sig) (2017-09-25)
- multiple finite difference methods for distance colouring (suggested by gerrit)
- fix bug in examine zoom sequence auto solve glitches (first frame only) (reported by Dinkydau and Fractal universe)
- raise limit for maximum number of references from 199 to 10000 (default still 69, you can change it in iterations dialog)
- settable number of references per pass for examine zoom sequence auto solve glitches (default still 10)
- kf-2.12.2.zip (2.9M) (sig) (2017-09-20)
- PNG image saving support using libpng and zlib;
- JPEG default quality to 100 (was 99);
- colouring uses floating point internally to reduce quantisation steps;
- dithering at end of colouring to improve perceptual quality;
- formula.cpp included in source zip so GHC is not needed unless changing formula code;
- optimized diffabs() code: one test Burning Ship location is 7.5% faster;
- preprocessor optimizes reference calculations by floating temporary variable (re)allocations out of the inner loops: one test Burning Ship location is 30% faster;
- kf-2.12.1.zip (2.7M) (sig) (2017-09-19)
- simplified version numbering;
- built for 64bit (as before) and 32bit (new);
- documentation improvements;
- fix division by zero assertion failure in File -> Examine zoom sequence;
- fix crash in File -> Examine zoom sequence with only 1 image file;
- adjust distance colour modes for backwards compatibility;
- kf-2.11.1+gmp.20170913.zip (1.3M) (sig)
- revert incompatible de log vs sqrt colouring change, instead add a new Distance (Logarithm) colouring method #7; documentation improvements; limit maximum series approximation terms to 60 to try to fix overskipping with large images
- kf-2.11.1+gmp.20170822.zip (1.3M) (sig)
- bugfix preprocessor for abs() formulas, de colouring with log instead of sqrt
- kf-2.11.1+gmp.20170820.zip (1.3M) (sig)
- bugfix preprocessor for diffabs() formulas
- kf-2.11.1+gmp.20170714.zip (1.3M) (sig)
- disabled OpenCL (be more compatible)
- kf-2.11.1+gmp.20170713.zip (1.3M) (sig)
- optimized Newton-Raphson zooming (3x faster in one test)
- kf-2.11.1+gmp.20170711.zip (1.3M) (sig)
- workaround for WINE issue artificially limiting image size (now bitmaps up to 2GiB can be created on all platforms)
- kf-2.11.1+gmp.20170710.zip (1.3M) (sig)
- optimized formulas (reference calculation for quadratic Mandlebrot is much faster due to lower-level calls to gmp, very experimental opencl support (mostly broken)); bugfixes (fix hang loading deep zoom locations, fix newton size in new view radius calculation, more complete library credits in documentation); prune dead code (incomplete jpeg library deleted from source, complete version downloaded at build time as needed, delete rudimentary openmp support, delete non-performant barrier variant, delete slower-than-gmp mpfr support, delete custom floating point support)
- kf-2.11.1+gmp.20170703.zip (1.7M) (sig)
- formulas now generated at compile time from formula definition XML using XSL stylesheet; used fixed format floats instead of scientific; try to hide command prompt window on Windows
- kf-2.11.1+gmp.20170508.zip (1.7M) (sig)
- restored threaded reference calculations (reimplemented with barrier() semantics to avoid single-threaded WINE SetEvent() rendezvous)
- kf-2.11.1+gmp.20170504.zip (1.6M) (sig)
- removed threaded reference calculations (too much overhead), miscellaneous code cleanups (no need for -fpermissive, const fixes, delete[] fixes, 64bit compatibility paranoia)
- kf-2.11.1+gmp.20170406.zip (1.6M) (sig)
- fixed precision bugs (easy deep zoom, interactive failure), fixed performance bug with inflections, fixed cross-hair resource bug, added WINDRES argument to build system, added more info to about dialog, include source code with release
- kf-2.11.1+gmp.20170330.1.zip (1.1M) (sig)
- fixes a crasher bug in the previous version
- kf-2.11.1+gmp.20170330.zip (1.1M) (sig)
- unlimited precision, separate compilation
- kf-2.11.1+gmp.20170313.zip (1.1M) (sig)
- long double compiled into exe (no dll)
- kf-2.11.1+gmp.20170307.zip (1.1M) (sig)
- kf-2.9.3+gmp.20170307.zip (824K) (sig)
The source code is available from my git repository:
git clone https://code.mathr.co.uk/kalles-fraktaler-2.git
cd kalles-fraktaler-2
git checkout master # for Karl's original upstream
git checkout kf-2.12 # for stable branch
git checkout kf-2.13 # for experimental branch
git tag -l # list available release tags
Build instructions are in the README.md that accompanies the source code.
I benchmarked with 6 Mandelbrot power 2 locations at various depths,
testing each of double, scaled double, long double. Still looking for
locations to benchmark scaled long double (deeper than 1e4900 or so) and
floatexp (deeper than 1e9800 or so), and formulae other than power 2
Mandelbrot. Please send me locations that you are happy for me to put
into the repository for benchmarking.
These results are with a smaller version of the benchmark suite found
in my git repository: I only tested 'fast' settings (with both settings
for the Derivatives field for kf-2.13 branch, see D0 and D1 tags), and
only with an image size of '512x512'. I tested on two machines,
one laptop 'latte' (Intel Core 2 Duo P7550) and
one desktop 'eiskaffee' (AMD Ryzen 7 2700X).
If you want to contribute results for your machine, let me know and I can
guide you through the process.
I don't have Windows, so these benchmarks were run in WINE (the
performance of kf-2.11.1 is abysmal in WINE because of a single threaded
wineserver or something along those lines).
These are all with the 64bit versions. The timings are real/user/sys, which
means the elapsed wall-clock time, the total CPU time for all threads, and
then kernel time for the process.
| version | machine |
| latte | eiskaffee |
| 2.11.1 | 36m46 / 24m47 / 11m03 | (not tested yet) |
| 2.12.13.1 | 6m42 / 9m52 / 0m49 | 1m35 / 5m44 / 0m04 |
| 2.13.4 D0 | 6m55 / 10m17 / 0m47 | 1m38 / 6m30 / 0m05 |
| 2.13.4 D1 | 10m25 / 19m22 / 0m15 | 1m09 / 12m51 / 0m01 |
TODO. As I don't have Windows, you sending me benchmark results would be
especially appreciated. Also if anyone is using WINE on Mac OS X, if that is
a thing.
Here are images of all the formulas available:
(back to top)