Nicely done; this seems to work for me. In my own attempt, I got stock Stable Diffusion 2.0 "working" on M1 using the GPU but it's producing some of the most cursed (and low-res) images I've ever seen, so I've definitely got it wrong somewhere. The reader can infer the usual rant about dynamic typing causing runtime misconfiguration in Python.
How much of this is stable diffusion 2, and how much is something else? For instance, the text based masks, the syntax like AND and OR, the face up scaling — are these all part of stable diffusion 2 (and can be used via other stable diffusion apis)?
The figure isn't static. Some models require as little as 3.5gb of free memory, others demand 8-16 gigs. MacOS is weird with memory management and everyone's Mac is different; I'd really only recommend running the model on 32-gig machines to avoid writing into swap, but technically it's possible with 8 and 16 gig machines.
2.0 is a mixed bag. It's set making pixel art back entirely. I'm pretty sure this is down to the aesthetic filter - it has a very biased idea of what good images are. It's silly to do that at the training stage, that should be something you do in the prompt.
Fine tuning is out of reach for me, so I'm sticking to 1.5.