Kll’s suggestion works, yet I’m still curious why the grey strokes are showing up. It seems pg.ellipse is causing it, since the strokes aren’t there when you swap it with pg.rect
Possibly your blendmode? You are antialiasing / smoothing an ellipse against a null background. Then you are copying the result onto a white background, but it looks like you are getting pixels that are pre-blended onto the null-as-black, resulting in gray. Just a quick guess.
Possibly the difference is that pg.rect doesn’t antialias when aligned to pixel units.