Fractorium is a piece of software that allows you to edit fractal ‘flames’, based on flam3. I’m not going to go into it too much as I’m going to assume that you’ve somehow found this website off of a deep search or something and get straight to the point. I’m also assuming you already have CUDA/OpenCL working (see your distro’s guides, the Arch Linux “GPGPU” article is enlightening for all distros as usual as well).
Running this on NixOS was a bit of a self-induced pain, but it did teach me a little bit about appimages and OpenCL while I tried to run it with various hardware in various janky ways.
All of Fractorium’s provided packages for Linux are appimages in disguise. By the time this actually goes up on my website, the dev may have released the appimage (I asked ;]) but if not, you’ll need to grab one of the packages and extract the appimage out of it, then do some finagling with environment variables.
Here’s the process:
- Grab the .rpm or .deb, and some tool to extract the .rpm or .deb, as well as appimage-run, extract the package
- Go into the folder you extracted the package into, then usr/bin - you will find an appimage and four symlinks to it. The symlinks used for some multi-call binary stuff, I think - you can ignore them or even delete them.
- Run
appimage-run Fractorium-x86_64.AppImage
. It will not run (it will error out, trying to execute a directory), but it will extract the appimage into your .cache. - Open ~/.cache/appimage-run/[hash]/AppRun in an editor. Find the line that says “BINARY_NAME=$(basename “$ARGV0”)” - this is why it is erroring out. Something about this AppRun and how it handles arguments is clashing with being run via appimage-run. (I barely know bash, don’t expect real answers from me :P)
- The hacky fix: Comment out the mentioned line. Define the BINARY_NAME environment variable at runtime (ex.
BINARY\_NAME=fractorium appimage-run Fractorium-x86_64.AppImage
). I’d like a better solution for this but as I alluded to I am an absolute monkey with bash. - To get OpenCL working, since NixOS (seemingly) uses a nonstandard path for the .icd files, also tack on:
OCL_ICD_VENDORS=/run/opengl-driver/etc/OpenCL/vendors/
if you haven’t already defined this environment variable elsewhere and it doesn’t work out-of-box. No idea whyclinfo
works without this.
I have not had much luck getting less conventional implementations of OpenCL (ie. clover, rusticl, clvk, other such translation layers) to work with Fractorium, which seems to be due to missing features in these implementations, at least in some of the cases - definitely clover, not sure of others. Either outright failing with compiler errors, or silent ass crashing. I think I have to wait and let mesa’s OpenCL implementations cook for a while, basically.
Suggestions are welcome - I don’t like this, it’s very fucking ugly, and I know for a fact that this can be done better. But it functions, and all I wanted was to make the funny fractals, and that’s what I’m doing. Just shoved it in a little shell script. Would also appreciate someone getting in touch if they are able to run Fractorium using GPU acceleration from an Intel integrated GPU or from a non-ROCM supported AMD GPU on Linux (GFX7 and under, I think).
>> Home