Yeah, colours to elevation.
Since I am mostly using Python as a math engine, and python isn't a very good math engine (even with numpy), performance isn't great. The map above is about 15 minutes to generate. I could spend hours answering the why π
But basically I'm just storing elevations in a 2D array. Then applying various filters to it to make things more geologically reasonable. Start with noise, add mountains in places that make sense, fjords, floodplains! Etc. I think I have about 18 processing phases now. But each step requires a lot of math -- math that GPUs are very good at.
I also haven't tried to optimize things too much.
I start with perlin with several scales, mixed together. But then I do a lot of extra stuff.
For example, a filter of my own creation I call "swiggle" helps create curved linear features. Sample of what it does to a checkerboard.
I like to find things like steep gradients and erode them to help form mountain ranges that have passes in them and such. So I'll do something like a Voronoi map, where the density of cells is related to the map gradient. Then calculate features per cell. That way great plains stay relatively flat.
I'm currently hung up in doing erosion and deposition properly. Not like a fake single pass version, but an iterative version that moves things over time. That has led me into some scientific computing rabbit holes where geoscientists do real simulations. But python cannot handle that well.