hello @KevinKarney, welcome to DrawBot! 1. I need the option to build compound objects (with unions, differences, intersections). Is it possible to make (e.g) a torus by differencing 2 circles. Or do I have to create two bezier paths and then do the difference. both methods are possible: you can do it with a single BezierPath by drawing two circles in opposing directions: x, y = 500, 500 r1 = 400 r2 = 300 B = BezierPath() B.oval(x-r1, y-r1, r1*2, r1*2) B.reverse() B.oval(x-r2, y-r2, r2*2, r2*2) fill(0, 1, 0) stroke(1, 0, 0) strokeWidth(10) drawPath(B) or you can draw two separate circles, and get the difference between them: B1 = BezierPath() B1.oval(x-r1, y-r1, r1*2, r1*2) B2 = BezierPath() B2.oval(x-r2, y-r2, r2*2, r2*2) B3 = B1.difference(B2) drawPath(B3) 2. with primitives such as oval or rect, can I incorporate the fill, stroke, strokewidth, etc into the call. In Nodebox 1, I can say (e.g) a = rect(0,0,20,20,stroke=Red,strokewidth=3,fill=Grey, draw=False) This creates an object call a, but does not draw it.... grouping colors and geometry can be done with functions: def a(): stroke(1, 0, 0) strokeWidth(3) fill(0.5) rect(0, 0, 20, 20) a() hope this helps… have fun with the movies, and let us know if you have any other questions.