mathr / blog / #

mightymandel v15

Not the usual pretty pictures, but I want to explain the bugs I fixed in v15 of mightymandel released today.

The top row was the killer bug, from left to right

  1. image is being calculated (unfinished areas in blue)
  2. suddenly the whole top quarter of the image is corrupted, including areas that weren't even being calculated
  3. this is what it should have looked like (and what it looked like when I fixed the bugs)
  4. finished! only a few little glitches visible
  5. not to worry, mightymandel can mask small glitches by blending neighbour pixel colours

The second row has more visualisation of glitch detection, correction by adding new reference points, and masking. The last image (big yellow splat) is what happens when you set the sharpness threshold too far away from sensible values - it thinks the yellow area will never escape, so it must be interior. The third row shows the effect of some different sharpness settings, from high threshold at the left to low threshold (high quality, takes much longer) at the right. Setting sharpness is a new feature in v15 (before it was a hardcoded value).

The last row illustrates two more bugs and solutions. The first two pictures were generated with the --tile option to make images bigger than can be handled comfortably in one go. The left has a big yellow square, which was caused by the computed reference point being NaN (not a number, oh the joys of floating point arithmetic) which corrupted everything. Checking for NaN and using an alternative reference point fixed that issue.

The final three pictures show a particularly tough location to render (it's "other-worlds-frightening-digital-2.kfr" from the Kalles Fraktaler gallery zip, but I don't know who found those coordinates). The really tight spirals make the iteration count go up very quickly, which defeats the completion checker (the part of the code that decides when to give up - mightymandel doesn't have a fixed iteration limit, it just keeps going until it seems reasonable to stop). Setting the --max-glitch and --sharpness flags both to 0 for best quality still doesn't fix it (second image of the three). Eventually I tried some stuff (but I forgot exactly what - oops) and got the final image, which took far too long to render for comfort's sake (10s of minutes - which is nothing really, without the perturbation techniques it would take days).

See the CHANGES file in the git repository for full details, but here's the highlights:

  • random image corruption bugs fixed, reference finding bugs fixed
  • combine --tile and --zoom for high res zoom sequences
  • much more documentation (both for users and developers)
  • many more example parameters from around the web
  • a vastly improved test suite script (and test suite pass rate is getting good too)

Get mightymandel v15 here:

git clone
git checkout v15

And you can also browse the source code at mightymandel on gitorious mightmandel on PS: here's a pretty picture after all, just for you.