mathr / blog / #

kf-2.15.3 released

After almost 2 months of work I'm happy to announce a new release of Kalles Fraktaler 2 +, fast deep zooming Free Software for fractal graphics (Mandelbrot, Burning Ship, etc). Most of the focus has been on speed improvements, with rescaled iterations ala Pauldelbrot providing a big speedup for most deep zoom locations. Full change log:

kf-2.15.3 (2021-05-26)

  • new: updated progress reporting in status bar to include more information
  • new: texture resize control in colouring dialog (disable to get actual image pixels in OpenGL GLSL shaders)
  • new: texture browse dialog allows selecting BMP and PNG images as well as JPEG
  • new: Newton-Raphson zooming dialog changes
    • user interface redesigned from scratch
    • new absolute zooming modes (previous mode is called relative)
    • new atom domain mode (for Mandelbrot set power 2 and hybrids only)
    • new size factor control
    • can auto-capture zoom depth after Newton zoom
    • auto skew (escape) moved to transformation dialog
  • new: transformation dialog changes
    • new zoom adjustment control (with rotation on left mouse button)
    • now shows the difference between the original transformation and the new transformation, instead of the total transformation
    • stretch amount now displayed in cents for a more friendly range
    • spin buttons added so scroll wheel and arrows can adjust values, which live-update the transformed image
    • auto skew (escape) moved from Newton-Raphson zooming dialog
  • new: single precision floating point support for shallow zooms (until zoom e20) (disabled by default due to some locations having undetected glitches)
  • new: single precision floatexp extended floating point for arbitrarily deep zooms (disabled by default due to some locations having undetected glitches)
  • new: OpenCL can work in single precision mode, for example on devices that don’t support double precision
  • new: rescaled perturbation calculations for arbitrarily deep zooms (usually faster than old long double and floatexp implementations; with or without derivatives; with or without OpenCL; single or double precision, single precision disabled by default due to some locations having undetected glitches); supported formulas:
    • Mandelbrot power 2
    • Mandelbrot power 3
    • Burning Ship power 2
    • hybrid formula editor
  • new: rescaled series approximation calculations for Mandelbrot power 2 (about 30% faster than the all-floatexp implementation, can be disabled if necessary in the perturbation and series approximation tuning dialog)
  • new: number type selection dialog (advanced menu) allows fine-tuning allowed implementations
  • new: “reuse reference” (advanced menu) can be used together with “auto solve glitches” (this uses additional memory for the primary reference)
  • fix: “reuse reference” re-calculates reference when the used number type changes (fixes some issues with bad images and/or crashes)
  • new: “reference strict zero” control in perturbation and series approximation tuning dialog (advanced menu, experimental); affects rescaled iterations only
  • new: lower level implementation of reference calculations for hybrids is over 7x faster (now only 10% slower than built in versions)
  • new: OpenCL can run threaded to improve user interface responsiveness (enabled by default; can be disabled in OpenCL device selection dialog)
  • new: “‘Open’ resets default parameters” setting can be disabled to load minimal KFR/KFP without resetting missing parameters to defaults (this setting is enabled by default for backwards compatibility)
  • new: “glitch low tolerance” can be a fraction between 0 and 1
  • new: “approx low tolerance” can be a fraction between 0 and 1
  • new: crash recovery offers to restore settings as well as parameters
  • fix: correct power calculation for multiplied hybrid operators (symptom: seams between iteration bands with numeric DE)
  • fix: documentation uses subsections instead of lists for improved navigation and table of contents
  • known issue: some locations (especially Burning Ship “deep needle”) are much slower and need much more memory; workaround:
    • disable “rescaled single” in number type selection dialog; and if still slow:
    • disable “rescaled double” in number type selection dialog
  • known issue: some locations have undetected glitches in single precision; workaround:
    • disable “single”, “rescaled single” and “floatexp single” in number type selection dialog; or
    • enable “glitch low tolerance” in perturbation and series approximation tuning dialog

Get it from

Now I'll probably take a break from coding KF until after the summer, apart from bugfixes, as I don't have a big exciting idea to inspire and motivate me. Some ideas for when I come back include:

  • stripe average colouring via a ring buffer of last few iterations
  • auto skew method based on directional DE distribution in an image
  • OpenCL/OpenGL sharing
  • use multiple OpenCL platforms and devices at the same time
  • GLSL file watcher so you can use your favourite text editor when writing colouring algorithms
  • plain iterations (without perturbation) for very shallow zooms
  • port/embed mandelbrot-perturbator engine for glitch correction of power 2 Mandelbrot by "rebasing and carrying on"
  • store starting zoom in Newton-Raphson progress updates and add resume functionality
  • rip out 75% of the built-in formulas and replace with hybrid formula designer versions
  • refactor the build system for faster incremental development

If anyone out there wants to work on any of these or other ideas, I'll be more than happy to help you get started navigating the code to know where the changes should be made.