mathr / blog / #

zoomasm 2.1 released

Zoom videos are a genre of 2D fractal animation. The rendering of the final video can be accelerated by computing exponentially spaced rings around the zoom center, before reprojecting to a sequence of flat images.

Some fractal software supports rendering EXR keyframes in exponential map form, which zoomasm can assemble into a zoom video. zoomasm works from EXR, including raw iteration data, and colouring algorithms can be written in OpenGL shader source code fragments.

zoomasm 2.1 released today brings one new feature, and some bug fixes. Full change log:

  • New: timeline waypoint timestamps are now buttons that jump to time.
  • Fix: the Z of the XYZT colouring parameter is now per-pixel.
  • Fix: correct scaling of DE in 360 projection.
  • Fix: vanishing custom size widgets.
  • Fix: compiles with recent Dear ImGUI.
  • Fix: typo in make clean target.
  • Win: change dependency build directory to ~/win/64/posix.
  • Win: update openexr to 2.5.4
  • Win: update fftw to 3.3.9
  • Win: update imgui, ìmgui-filebrowser, miniaudio, and tomlplusplus to latest versions.

I forgot to publish here an announcement for zoomasm 2.0 released in early December last year, so here's a belated change log:

  • New: multiwave.glsl example colouring preset.
  • New: 360 equirectangular projection. Regular 2D projection is still available. Both have rotation controls (in 3D for 360 projection).
  • New: speculatively load next keyframe in async thread for smoother interactive playback.
  • New: advanced mode allows setting arbitrary FFmpeg encoder options.
  • New: two pass encoding (in advanced mode only).
  • Fix: use conservative latency profile for audio.
  • Fix: prefer JACK (if available) to PulseAudio.
  • Fix: be more robust when changing soundtracks.
  • Fix: try to detect death spiral and stop playback if keyframe loading can't keep up with real time.
  • Fix: recycle audio buffer memory instead of freeing and allocating so often.
  • Fix: disable broken MP3 support (no seeking with reverse play).
  • Fix: disable broken Ogg support (no duration detection).
  • Fix: only rerender frame if something changed (reduces GPU load when stopped).
  • Fix: use texelFetch() instead of texture() (prevents flickering boxes which might have been an amdgpu driver bug).
  • Fix: loading session from command line does not reset last waypoint.
  • Fix: allow manual control over number of keyframe layers at runtime (16 is ok for 2D, but 360 projection can need more, try 25 or so).
  • Fix: avoid OpenGL error clearing an incomplete framebuffer object.
  • Fix: remove unnecessary OpenGL sync objects.
  • Fix: don't use features newer than OpenGL 3.0 (but shaders still need OpenGL 3.3 with GLSL 330 core profile, or OpenGL 4.0 with GLSL 400 core profile).
  • Fix: enable OpenEXR multithreading.
  • Fix: combined single-file build system.
  • Win: rewrite subprocess module to use _spawnv().
  • Win: build both 64bit and 32bit Windows EXEs.

Get it at