Site icon Craig Andrews

3D Printing High Quality Keycaps

My Dactyl Manuform keyboard came without keycaps so I needed to acquire some. I could have bought keycaps, but 1) I’m indecisive and don’t know what profile or color/style I want and 2) what fun would buying be when I could make them? Armed with a Bambu Lab P1S with an AMS, lots of filament, and a sense of determination, I set out to produce some nice keycaps.

Printing usable, high-quality keycaps on an FDM/FFF 3D printer is very much possible. Despite what you may have heard, a resin printer is not required. However, there are some challenges and practicalities to keep in mind. Here’s what I learned about 3d printing keycaps.

BLUF: 0.2mm nozzle-printed keycaps oriented at a 45-degree rotation produce an outstanding result, but they’re also the most trouble to print. I published models on Printables (High Quality Keycap Printed at a 45 Degree Angle) and Makerworld (“High Quality Keycap Printed at a 45 Degree Angle) to get you started printing great keycaps quickly.

Background on Types of Keycap Profiles

There are many different profiles with many different defining features. I’m not going to get too deep into the weeds as others have already done a great job covering keycap types. However, I need to touch on a bit of the basics with a focus on printability: sculpted vs unsculpted, shape, and height.

Sculpted vs Unsculpted

Sculpted keycaps have a different shape depending on where they are on the keyboard whereas unsculpted ones do not. For example, sculpted keycaps usually have taller keys for the “F” row. For “normal” keyboards, using sculpted keycaps results in a “well” that makes the keys more reachable and therefore more comfortable. However, the Dactyl Manuform is already concave and therefore has an inherent well, making the sculpted vs unsculpted decision much less clear.

A sculpted keycap profile can be used as if it were unsculpted by using the same row for all keys. Usually, that row is row 3. For example, you could use SA profile row 3 keycaps for all keys on the keyboard. That practice is called using a uniform profile.

When buying keycaps, using unsculpted or uniform keycaps makes buying keycaps much easier and less expensive as you don’t need to buy and combine multiple sets to cover the whole keyboard. Of course, that’s not a concern when the keycaps are being printed.

Shape

The sides of a keycap can be rounded, flat, or anything else. Since the sides aren’t touched while typing, that’s more or less an aesthetic concern. However, the keycap top is a very functional as well as aesthetic feature. Keep in mind that there’s a great deal of personal preference throughout the area of keycaps and there’s incredibly little objective science available on which to base any of these statements.

Flat

Flat keycaps are… flat. The flat top doesn’t cup the fingertips, though, which can cause mistyping due to it being easier than other shapes to easily hit multiple keys by accident.

The flat top of this shape of keycap facilitates printing because they can be printed face down on the print bed. That print orientation makes the keycap top smooth and the stem easier to print (due to eliminating concerns such as elephant foot).

Angled

Angled keycaps are similar to flat but with the top tilted. The angle makes it harder to accidentally press multiple keys in different rows but doesn’t address that problem for adjacent keys within the same row.

This shape can also be printed face down making them easy to print.

Concave

Concave keycaps are indented, most commonly with a spherical shape. The concave shape grabs the fingertip guiding it to the correct placement reducing the likelihood of pressing multiple keys by accident concurrently.

Concave keycaps can be challenging to print well. They cannot be printed face down as the concave shape would “flatten.” When printed face up, the layer lines become prominent; using a smaller nozzle (such as a 0.2 mm instead of the more common 0.4 mm) can at least partially mitigate that issue. Another orientation to consider is printing on the side, but that will result in the flattening of that side and loss of nice-looking curvature on it.

Convex

Convex keycaps bulge upward oftentimes with a spherical shape. Keycaps of this shape wouldn’t be used for all keys on a keyboard; instead, usually only the spacebar is convex if there are any convex keys at all.

The same concerns and solutions apply to the concave shape as the convex shape.

Height

Keycaps are roughly grouped into three heights: low, medium, and high. The benefit of lower height is that the key top is lower down closer to the desktop making it easier to correctly and ergonomically adjust the height of the keyboard to mitigate the potential for wrist trouble. On the other hand, the benefit of higher keycaps is that they can be more sculpted generating a deeper well resulting in less finger movement and therefore a more pleasant feel.

Height doesn’t have much impact on printability.

Generating Keycaps using KeyV2

I chose to use the KeyV2 library to render the keycaps as it can generate keycaps in several profiles, is open-source free software allowing me to study the code for understanding and modify it if necessary, and is fairly widely used (although unfortunately it is apparent no longer maintained).

I did many test prints before printing a whole keyboard’s worth of keys. I’m glad I did as I gathered several important takeaways from these experiments.

Tools Used

Printing in the Stem Down Orientation

Printing stem down has many advantages, including being relatively easy to print, allowing for a curved surface on the top of the keycap, and requiring relatively few filament changes to print colored legends.

Keycap oriented stem down

Stem Down Orientation Key Takeaways

box_cherry stem
Comparing MT3 row 1 keys: left is 0.2mm nozzle printed, right is 0.4mm nozzle printed

0.2mm Nozzle Specific Takeaways

0.2mm nozzle printed MT3 row 1 key

0.4mm Nozzle Specific Takeaways

0.4mm nozzle printed MT3 row 1 key

My Keyboard with 0.4mm Nozzle Printed DSA Keycaps with Legends

I chose DSA as it’s an unsculpted profile (meaning I could move keys around, especially handy while testing different settings and colors) and it’s popular for Dactyl keyboards. I couldn’t decide which colors I wanted to use, so I experimented by printing a variety of colors but used black on white for the alphanumeric keys. I used the 0.4mm nozzle to reduce print time.

I like how this effort came out. The keys have a bit of a rough texture which I’ve started to like. Aesthetically, I think it’s a bit chaotic (due to my indecisiveness for colors) but quite interesting too – you can tell this isn’t a typical, off-the-shelf boring setup!

I printed these keys in batches; here’s the OpenSCAD code I used to generate one batch:

include <./includes.scad>

legends = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];

for (x = [0:1:3]) {
  for (y = [0:1:3]) {
    bar_support() rounded_cherry(0.45) tined_stem_support() translate_u(x,y) legend(legends[y*4+x])   dsa_row() {
      // swap the debug()s to render     opposite part
      debug() key(true);
      /* debug() */ dished() {
        legends($inset_legend_depth);
      }
    }
  }
}

By swapping the debug comments (a process documented in KeyV2’s examples), I did two renders (one for the legends and one for the keycaps) and exported each as an STL. I then imported the STLs together into Bambu Studio, which allows for a different color to be used for the legend object as for the keycaps object.

My Keyboard with 0.2mm Nozzle Printed MT3 Keycaps without Legends

I next wanted to try a sculpted profile which I hope would create a very comfortable, deep well. The SA profile is popular amongst the Dactyl community for this reason, so I considered that profile. However, I also heard some really good things about the MT3 profile so I decided to give it a try.

Again, I couldn’t decide on a color scheme, so rainbow it is!

With the more pronounced curvature of MT3 compared to DSA, I decided to use the 0.2mm nozzle. Therefore, these keys took days to print.

OpenSCAD code to generate one column of keycaps:

include <./includes.scad>

// use slop if not using a 0.2mm nozzle!
bar_support() rounded_cherry() row_profile("mt3") tined_stem_support() {
    key(true);
}

MT3 homing keys have a deep dish:

include <./includes.scad>

// use slop if not using a 0.2mm nozzle!
bar_support() rounded_cherry() mt3_row(row=3, deep_dish=true) tined_stem_support() {
    key(true);
}

My Keyboard with 0.2mm Nozzle Printed MT3 Keycaps with Legends

I wanted something a bit less crazy so I tried a copper-on-black look – I like how it came out.

MT3 profile, Bambu Labs PLA Silk Copper on Bambu Labs PLA Metal Iron. Can you spot the typo in one of the labels?

Printing in the 45 Degree Angle Orientation

The 45-degree rotated orientation is harder to print (as there’s only a tiny bit of the keycap touching the built plate), requires support (it produces waste and the support can be annoying to remove), and requires a lot more filament changes to print colored legends. So why use this orientation?

The 45-degree angle orientation produces a much higher quality keycap top surface. With this orientation, the concave keycap top is smooth without visible (well, only visible with a bright light and very close look) or feelable layer lines, especially when using a 0.2mm nozzle. If you can reliably print keycaps in this orientation, are okay with the extra effort to remove supports, and are fine with wasting a lot more filament if printing legends, this orientation provides a much more professional-looking, high-quality finish.

45 Degree Angle Orientation Key Takeaways

Many of the same takeaways from the stem-down orientation still apply:

I uploaded the model to Printables (High Quality Keycap Printed at a 45 Degree Angle) and Makerworld (“High Quality Keycap Printed at a 45 Degree Angle) to help others reproduce my results and create high-quality keycaps of their own.

OpenSCAD to produce a 45-degree rotated key:

include <./includes.scad>

$stem_inner_slop = 0.0;
$cherry_bevel = false;
 
bar_support() rounded_cherry() row_profile("mt3") no_stem_support() rotate([0,45,0]) {
    key(true);
}
OpenSCAD showing the key in the 45-degree orientation
0.4mm nozzle printed MT3 row 3 key stem. There is a small amount of support material stuck in there that I haven’t been able to remove, but it doesn’t impact anything.
0.4mm nozzle printed MT3 row 3 key

What’s Next?

I may try another profile (DES looks interesting). Or, maybe I’ll print another whole keyboard of 45-degree printed keycaps with legends in a new color scheme…

Another idea is to try printing the keycaps rotated at 45 degrees. This orientation requires support, brim, and a lot of luck due to the very small contact surface the keycap would have the build plate, but the advantage would be that the keycap’s top should have a smooth curve without layer lines.

Any suggestions?

If you’ve printed keycaps, please share your experience and learnings! I’m eager to continuously improve as I iterate on keycaps.

3D Printing High Quality Keycaps by Craig Andrews is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Exit mobile version