Here's a teaser. I have most of Scott Burns' Spectral method working. The screenshot below is a smudge color hard-coded to 0.7,0.7,0.0-- which is a somewhat dark yellow. edit Actually I hard-coded the Smudge State color and the Get color to this value, which was then multiplied together to get an even darker yellow. The brush color is 100% saturated colors and I just went around the color wheel and smudged around with the deevad watercolor brush. The smudge is hard coded as I'm having problems with it getting dark...
The problem now is the whole idea of plucking a color off the canvas (get_color) and mixing it with the smudge_state (and then mixing that with the brush color). More generally, if you mix yellow paint with the same yellow paint, you expect the SAME yellow paint as a result, right? That doesn't happen when you multiply them together. It is like you took a yellow-colored transparent filter and stacked another yellow-colored filter on top, and then another, and then another until you've reached black. edit Apparently the weighted geometric mean should work differently and this shouldn't be happening, maybe I have an error. Will check some more and hopefully make a commit soon. I need to distribute a 12GB text file though. . . :-/ edit, this darkening might be happening because I'm applying the alpha to the rgb before the mix. I'll try moving that to post-mix. edit moving the alpha definitely helped avoid darkening until you start mixing with other colors that create darker colors; it seems like a feedback loop. I've moved the Subtractive mode to its own branch, "Burns": https://github.com/briend/libmypaint/tree/Burns
To test it you'll need to generate the rgb.txt data file with the included script in the RGB folder (using gnu Octave). Expect it to take more than a day to generate :-(. It will be 12GB on disk and use 2.3GB of RAM.
I think I will try to use the stroke_state to basically halt the feedback loop as soon as the stroke is started. The downside is that it will only mix with the color you first started the stroke on. The positive side is that it might actually work