Back Original

Household Laser Cuts

After making my keyboard holders I did some other laser-cutting projets. Here’s a bit of that journey.

From Cuttle to OpenSCAD

I designed the gen1 holders using Cuttle. This was a great way to start with laser cutting and parametric CAD: being able to switch between “move control points around” and “write logic in the node tree” helped me build up intuitions about how the piece is made. I wound up getting a Pro subscription for a couple months, and was happy with the value I got.

But I wasn’t happy with the ownership I had when using Cuttle. Cuttle lets you export (as SVG or other formats) designs, but I didn’t find a way to export the parameterized design. If Cuttle-the-service goes away, I’d be stuck without a way to use new parameter sets. That also applies to “giving the design away”: if I want to give away the parameterized design, anyone who “takes” it has to go through Cuttle.

So one Sunday, I opened up the OpenSCAD tutorial and got to work. Why OpenSCAD? Mostly, I remembered its name before I haven’t used FreeCAD, so I can’t offer a comparison. (I’ve also used TinkerCAD for some basic designs, but TinkerCAD doesn’t seem to support parametric design.)

I’ve found OpenSCAD, especially the language, confusing to work with at times. But for my level of project and interest, it’s fine. And it’s libre and gratis, so, it’s hard to complain!

Project: cable box

My partner asked for a box to hide the tangle of cables on her desk. She gave me a small sketch: approximate width, approximate hole sizes, etc.

This was pretty easy to put together in OpenSCAD. Holes get constructed from overlapping circles and rectangles, finger joins are added or removed rectangles.

The box was functional, but pretty plain: the large front and rear faces, the most visible parts, were just plain wood. To add a little pizzazz, I constructed a cat’s head silhouette from an ellipse and two triangles, then randomly scattered them as cutouts across the front and rear faces.

3d rendering of the box as assembled. An elongated rectangular prisim, slightly taller than it is wide. The top face has two holes, straight along the long axis but with rounded caps; the end faces have cutouts like arch-topped doorways, extending to the ground plane. The front and back faces have many small cat's-head cutouts as decoration.
Photograph of the box as assembled. An elongated rectangular prisim, slightly taller than it is wide. The top face has two holes, straight along the long axis but with rounded caps; the end faces have cutouts like arch-topped doorways, extending to the ground plane. The front and back faces have many small cat's-head cutouts as decoration.
Materials and source code: make your own!

Materials

A lot of cutting facilities are careful about what materials may be run through the cutter. With good reason: not all finishes or glues are friendly to humans when lasered.

For this project, I used Glowforge Proofgrade Medium Maple Plywood.1 I figured “from a laser cutter company, sold for the purposes of laser cutting” would be safe.

Glowforge charges more than “random hardware store plywood”, though. If you can find a safe, cheaper alternative, that’s great! I got the materials for the next project during a holiday sale, so be on the lookout for those.

Sources

The sources are all here, along with a redo rule (script) to produce the SVG from the OpenSCAD file.

Note the export script requires a recent build of OpenSCAD to allow configuring the stroke width on the exported SVG. I have OpenSCAD version 2025.09.22 which works.

Project: napkin holder

My partner wanted a holder for paper napkins, but wasn’t finding any aesthetically pleasing ones at stores.

I took the same cat-head motif from the side of the cable box and scaled it up to create the front and back panels. To add depth, and to make it stand upright, I added “whiskers” connected to the faces with half-lap joints.

Line drawing of the two pieces: the face and the whiskers. The face has slots for each whisker. Each whisker has two slots as well, one for the front face and one for the back.

I wanted the bottom of the face and the ends of the lower whiskers to contact the table. The face would take most of the weight, but the whiskers would prevent the object from rolling. For simplicity, I modeled the whiskers as emanating from the center of the ellipse.

This created a trigonometry problem! To make the whisker-tips contact the table, given:

  1. The angle of the lowermost whisker
  2. The minor (vertical) radius axis of the ellipse

We solve for “how far away from center are the whisker tips”:

An illustration of the trigonometry problem. The vertical axis of the ellipse is marked R2, the horizontal marked R1, and the whisker (line from center to the corner) is marked L. The angle between the horizontal and whisker is theta. The equation to solve is given: R2 divided by L equals sine of theta.

The major (horizontal) axis, minor (vertical) axis, and the whisker form a right triangle. The relevant angle is the descent of the whisker from the vertical. Solve for L.

The whiskers themselves will are shorter–another parameter is “how far away from the center does the whisker start”– but we can start with the overall length, and subtract that offset, to get the shape of the whisker.

I used an unfinished wood for this, which I actually rather liked. I was able to choose a finish that drew out the natural (cherry) color of the wood. Adding a finish also made up for a mistake: I forgot to measure the kerf before cutting, so the unfinished fit was a little loose. The finish acts as a mild adhesive to hold the parts together.

The napkin holder resting on a stool. The faces are separated by four centimeters, with six 'whiskers' perpendicular, joining the faces. The tips of the bottom whiskers touch the stool, preventing tipping. The ears come to sharp points.

It probably needs another coat of finish, but it’ll do the job.

Materials and source code: make your own!

Materials

A lot of cutting facilities are careful about what materials may be run through the cutter. With good reason: not all finishes or glues are friendly to humans when lasered.

For this project, I used Glowforge Proofgrade Raw Thin Cherry Plywood.1 I figured “from a laser cutter company, sold for the purposes of laser cutting” would be safe.

Glowforge charges more than “random hardware store plywood”, though. If you can find a safe, cheaper alternative, that’s great! I got the materials for the this project during a holiday sale, so be on the lookout for those.

The “Proofgrade Raw” materials I used for this project are cheaper than the “proofgrade” material used in the previous project. The difference seems to be whether the wood is pre-finished or needs finishing. For this project, I did a little hand-sanding and a poly coat to get the results shown here.

Sources

The sources are all here, along with a redo rule (script) to produce the SVG from the OpenSCAD file.

Note the export script requires a recent build of OpenSCAD to allow configuring the stroke width on the exported SVG. I have OpenSCAD version 2025.09.22 which works.

Lessons: Laser cutting

I have not done a lot of reading/watching/other research in this part of the “making” scene, so perhaps these things are already well-known. If so, here’s more support; if not, well, here’s news!

Leave the masking tape on. I had a lot of burning around the edges of my gen1 keyboard holders. Leaving the tape on reduces the cutting power some, but makes the cuts a lot cleaner.

Plywood is better than draftboard. I’ve tried working with particleboard, but it takes more power to cut and doesn’t look as nice. Just go with the plywood; raw if you want to finish it yourself, pre-finished otherwise.

I still don’t understand how to handle kerf properly. As I cut another project2 along with the napkin holder, I kept getting the kerf corrections backwards for a finger join; confusingly, the “tab” and “slot” portions kept having asymmetric results. Please do send me your favorite guides/lessons/etc for how to handle kerf corrections!

Lessons: OpenSCAD

I’m still somewhat confused by OpenSCAD, even after putting together these projects (among others). Some expressions have side effects (“add an object”), those side-effects can be suppressed or transformed (e.g. rotate)… but the expression doesn’t produce a value. For instance: I can’t construct a square and then find its bounding-box; once the square is made, that’s it, I can’t touch it again.

OpenSCAD is definitely more a “power user” tool than Cuttle is. I wouldn’t necessarily recommend OpenSCAD to start off with, but for those of us who are already into programming (or are ready to learn!) it’s quite nice.

I was excited to note the OpenSCAD WASM port, too, as a way of making OpenSCAD easier to use. Maybe someday I’ll update this article with an embedded editor, so you can tweak the parameters of each design and get your tuned SVG.

In the mean time, some things I’ve found to make OpenSCAD more useful:

Use your favorite editor.

You don’t have to use the OpenSCAD IDE for editing; it can automatically reload and re-render when the source changes on disk. I do my editing with Neovim on one side of the screen and OpenSCAD on the other.

Just be sure to edit parameters in only one place. The OpenSCAD has a handy “try out other parameters” panel, but the changes aren’t persisted.

Make 2d and 3d entry points.

For laser-cut projects, I define each tpartece o cut as a 2d OpenSCAD module. I use functions, additional modules, etc. to decompose the design, but each shape to be cut has a module for its entry point.

I then define two top-level modules:

I put both of these in the same file, so they receive the same parameters, and use comment/uncomment or a global boolean to switch between them. When I’m checking for fit, I activate the 3d view. When I do an SVG export, I activate the 2d view.

This is one place where OpenSCAD shines in comparison to Cuttle. A lot of my wasted prototypes in the gen1 keyboard holders were misalignments in three dimensions, which I couldn’t recognize in a 2d view. The 3d view isn’t perfect–it doesn’t help me correct kerf–but it does give me a chance to spot obvious mismatches.

Note that I don’t try to put the correct number of pieces in the 2d view–just one copy of each shape. I am often not cutting from a whole sheet of material, so I don’t know for sure how I’ll need to arrange the pieces to fit. I make copies of each shape and arrange them on the cutting surface when I’m at the cutter, working with an import of the SVG.

Try BOSL2.

The BOSL2 library is extremely useful. Some quality-of-life things like struct_set; some geometric things like Bezier curves; and some utility things, like tab computation, that I reinvented because I didn’t realize they were available. I’ll definitely look more closely at their docs before doing something “basic” next time!


If you decide to make your own, or if you have any sage advice for laser cutting, let me know!

A black cat with green eyes stares at the camera, her ears perked up and forward.

The model.