Printer Calibration



I am trying to calibrate my printer in order to get the maximum dimensional accuracy using the image scale factor as explained [here].

I printed a 0.5 in^3 box and my issue is that the dimensions are not the same in the X,Y, and Z directions, so I do not have only one specific value that I can import into the image scale factor. Two of my sides are 279 microns shorter than they need to be, and the other one is 127 longer. I have printed with a 10 micron resolution and also 10 micron layer thickness. I have not looked at some of the more advanced settings - there are so many and I wanted to start simple. Maybe I should start playing with those? Otherwise I’m not sure if with my dimensional inconsistencies I could tune in my printer at all or not. I’d appreciate some advice from the more experienced folks!



For some reason the hyperlink didn’t link –


Depending on your expectations for dimensional accuracy, there are several steps to take. Each one is progressively more advanced. I personally have not gone through them all. What I have done may be of some use however.

One of my earliest cripes for accuracy was the Z axis. It still remains the most difficult to control.
I’ll address this issue first.

What I found to be the biggest culprit (IMO) is deflection of the tray. This is related to how the ember is designed and the resin viscosity. It also is the most apparent in the first few layers.

Before getting into the meat of my message, I find the following calibration routine is an important step for Z height accuracy: (first layer Separation Speed set to 1 RPM)

  1. Remove most resin from the tray
  2. Squeegee all resin off the PDMS window.
  3. Put a few SMALL drops or lines of resin on the window, enough that the build head will press flat easily with no excessive resin squishing out.
  4. Start the calibration routine.
  5. When the head stops, lossen the lock screen to drop the head.
  6. Press the head down a little and feel it jam in place.
  7. Tighten the lock screen and close the door.
  8. Press done on the front panel. The tray may jam, but should unstick itself.
  9. Open the door to stop the cycle before it returns for the next layer.
  10. Fill the resin tray and close the door.

This gives you the thinnest possible first layer. Without this process I find the first layer is always 2x to 4x thicker than desired.

Now for the rest…

What is happening is the each time the build head comes down into position it is basically a hydraulic ram. With the tray being supported by a catalievered aluminum plate, each time the head comes down and presses into the resin, the whole thing deflects down. It will slowly return to equilibrium as the resin is squeezed out through the sides.

You may notice there is a relationship between surface area and resin viscosity. The closer you are too the build head (first few layer) or the larger the cross sectional area of the slice being exposed is, the longer it will take to squeeze the excess resin out.

For the burn in layers, I increase the ApproachWait times to over 20 seconds usually. I do the same to the Model Layers if the model has large cross sections. Obviously this makes the print take alot longer. The more thick slices in your model, the longer it will take.

I did write a bit of code in Processing that looks at each layer, calculates the amount of white area, and applies a dwell factor for each slice. It’s not perfect, and I haven’t been back to it in a while to fine tune the value. Optimally​ I would input the viscosity value and have it adjust the dwell based on that. Maybe when I have nothing better to do…

However there is one thing I did recently that has helped tremendously, but it requires a new tray mounting plate. What I did was design a new plate to add a couple of set screws on the outside edge. These bear and slide against the main plate during g the separation routine. By adjusting the height of the set screws I can remove nearly all slop and prevent the plate from deflecting when the build head come down for each layer. This puts a lot more pressure on the PDMS window but I’ve had no failures there to date. The big benefit is I don’t have to wait as long, usually 5 seconds or less for slices with large surface areas. I’ll add a link to the solidworks file when I’m back in the office next.

With these steps, my Z accuracy is greatly improved and usually slightly undersized whereas before all my prints were too thick.

Hope this helps!!


Wonderful!! This will definitely help a lot. Thank you SO MUCH for all this info. I plan to work on this for a while (I am doing research in engineering and my tolerances are critical), so I will keep you updated on how this works and if I find new stuff that works well. Also, just out of curiosity, what accuracy are you typically obtaining. I still haven’t been able to arrive to the 50 microns - which is supposedly the machine precision. I would benefit from some reference values to ensure that I am carrying out my process well.


getting to 50um will take some extra work. You will definitely need to use pattern mode, and likely need to get into pixel greyscale manipulation. Keep in mind that you will need to change the image scale when you switch between pattern mode and Video mode. I don’t recall the specific scale factor and couldn’t find it in old post.

@OwenSmithyman - what is the scale factor difference between video and pattern mode again?

I would be interested in know how close you get. Keep us posted!

Read these:

Pattern Mode
Pattern Mode Instructable
How a Voxel Graows
Sub-Pixel Resolution


@scott_chabineau The scale factor difference is 1.0076. Here’s the info from your support ticket about that, as far as getting super-accurate features and dimensions:

Option 1: Set PatternModeImageScaleFactor to 1/1.0076. Note that this will introduce gray values along the edges and you will no longer have an exact 1:1 mapping of image pixels to micro-mirrors, which may or may not be acceptable.

Option 2: If you’re slicing a model to generate the images, you can scale the model by 1/1.0076 before slicing. But if you’re not using antialiasing, while that may get the overall size of the part closer, it won’t help with single-pixel features that are supposed to be 50 µm in size when printed.

Option 3: Adjust the projector position or lens to get it to provide a 50 µm projected image for each pixel. If you try that, the overall image size should not be exactly 64 mm by 40 mm (which works in video mode for 50 µm pixels at 1280 x 800), but rather 912 * sqrt(2) * 50 µm by 570 * sqrt(2) * 50 µm, or 64.488 mm by 40.305 mm. If you divide the pattern mode image size by the video mode image size, you get 64.488/64 = 40.305/40 = 1.0076.

Adjusting the projector position can occasionally be done easily, but it usually requires taking the machine apart. If the factory didn’t tighten the focus locking screw all the way, sometimes you can adjust the projector position simply by rotating the focus screw above the Ethernet port on the back of the machine. If not, you’ll need to take your Ember apart and loosen the locking screw first.


Great, thanks for the info.

I have read a bit the pattern mode and that is what I am going to use. I still have one question. It seems like the “pattern mode” is recommended for straight shapes while the “video mode” is recommended for smooth, curved objects. However, the pattern mode provides you with a finer gray scale, which in turn I think would mean a less coarse curved surface, giving you a more accurate shape for say, a circle. Why is the video mode recommended for curved objects then?

I am trying to make a piston-cylinder assembly where there is a very delicate compromise between friction and leaks, so I am trying to estimate which is the best print configuration for this type of part.


Pattern Mode works for round geometry just fine. I am currently printing a part that is 0.110mm in diameter using a Pattern Mode.

Using Aint-alias in PS generates the greyscale and it translates well into Pattern Mode.


In another post you mentioned that pattern mode is not very useful for parts with curved surfaces normally printed with Anti Aliasing. Could you expand on this? I am concerned about the dimensional accuracy of a cylindrical surface so I’m trying to figure out which is the best option.


As you dig deeper (than my first foray) into Pmode you will discover it’s really powerful if you are willing to put the time into it. My earlier statement refers to an effort vs. result tradeoff. Most times the AA is accurate enough for the given effort.

What I have come to realize is that while the Video mode does create smooth curves, this is only because the image and the micro-mirrors aren’t actually aligning to the image file, forcing the firmware of the projector to ‘average’ the actual location between pixels and compensating with a greyscale adjustment that ends up blending the edges. This can be done in Pmode too, it just takes a bit more care Pattern Mode.

If your part takes up most of the build head and you’re just trying to control tolerances, it would be easier to tweak the exposure values and play with scaling compensations.

When you want to control a very fine level of detail or dimensional tolerances of really small parts by playing with sub-pixel manipulation, that’s when Pattern Mode comes into play.

As an example:
If your part is .5mm in diameter and you need to control cylindricity, then playing with the pixel greyscale values in an image editor and printing in pattern mode would be the way to go.

If your part is 30mm in diameter, then use Video Mode. The pixel/feature size relationship is greatly reduced and likely not going to be an issue.


Thank you for the detailed answer. It is very clear now. I will let you know about my findings.


@OwenSmithyman : From what I understand about pattern mode, it provides a more accurate resolution than video mode by mapping 1:1 the pixels to the micro mirrors in the DMD (unlike in video mode, where you need to filter the data). If that’s the case, why do we need a pattern mode image scale factor? Isn’t that precisely what we are trying to avoid by using pattern mode?


I am in the process of writing a manual outlining all the calibration techniques to get maximum accuracy. I have found that one can tweak many different parameters in order to get to sub-pixel accuracy. However, all these information is a little scattered, and I was doing this manual for the rest of future Ember users in my lab. I figured I would share it here too.

I still do not have a lot of data to contrast the theory I am outlining. What I am looking for is numbers or pictures based on actual prints that exemplify how each parameter or printing mode affects the final resolution. I was wondering if other users here do have some data that they are willing to share. Maybe @scott_chabineau or @OwenSmithyman can help!


Cool idea!
I don’t have photos that illustrate my calibration techniques, but I do have a couple of different things I do.

  1. Easy - Set “FirstApproachRPM” to 1.0 RPM in the Advanced Settings before slicing. When the “build head” is in the calibration position and the tray is full of resin, I loosen the lock screw, drop the head down, press on the top of the ‘handle’ with my thumb - using about the dead weight of my hand (highly scientific :wink:), holding it down for about 30 seconds. Release the pressure, wait about 5 to 10 seconds more, then lock the screw in place.
  2. Intermediate - Follow the procedure above, but modify the Advanced Settings to eliminate the first layer exposure. I dial back First Layer > Exposure Time to 0.01 sec to effectively not expose the first layer. I turn up Burn-In Layer > Exposure Time at least 1.0 sec over normal (for any given resin this value can change) and increase Burn-In Layer > Wait (Before Exposure) to 30~60 and set Burn-In Layer > Separation slice velocity to 1.0 RPM. This process may need a couple of attempts to ensure adhesion but the logic is this: The first layer is always the thickest since you can never remove all the resin from under the “build head”. By not curing the first layer, and waiting a long time, you make the first burn in layer height more accurate by allowing more room under the ‘build head’ for full resin evacuation.
  3. Advanced - Calibrate with no resin in the tray at all. This requires you to SSH into the printer. Follow the procedure here. Use the method above to turn off the first layer exposure, increase Burn-In Layer > Wait (before exposure) to at least 60. Change Frist Layer > Separation slice velocity to 0.5 RPM.
    1. SSH into the printer, Set “RHomingAngleMilliDegrees” to 0, save and exit, and refresh the CommandPipe.
    2. With no resin in the tray (or at least very little so you can keep the PDMS dry during this procedure), start the calibration routine.
    3. Once at the bottom position, loosen the nut to drop the head, make sure it’s flat against the PDMS, lock the nut, then CANCEL the print. The build head should lift straight up.
    4. SSH pack into the printer, set “RHomingAngleMilliDegrees” back to -60000, save, exit, refresh.
    5. Place a pool of resin about the size of a quarter or slightly larger on the PDMS window.
    6. Press ‘Reprint File’ on the front panel. Let it move to the calibration position but do not unlock the ‘build head’. Open the door and watch the resin squish out. Wait until the resin stops flowing.
    7. Close the door and press done.
    8. When the tray begins to rotate it may stick. As long as ‘Detect Jams’ has not been disabled, it should correct itself.
    9. Before the tray returns for the first Burn-in layer, open the door and add resin. I like to add just a little bit more, watch for any signs of adhesion issues. Once the printer has reached the Model layers, it’s usually safe to add all the resin.

Searching for accurate Z-dimension prints

That’s great, thank you for sharing! I am also including other parameters that maybe do not belong to the printer calibration category but also result in a more advanced resolution (pattern mode, gray scales, image factors, optical proximity correction, antialiasing, etc.) I am putting together a spread sheet where I show the different dimensions of a 0.5 in cube (like a parametric study). I will publish those soon and whoever is interested can make a collaborative effort and see how far we get!



I get an error when I include the PatternModeImageScaleFactor. What is the variable type that I should be using? Maybe I am just entering the wrong decimal points.


What error are you getting? PatternModeImageScaleFactor’s default is 1.0, but it’s a double, so you can have up to 15 significant digits.


I’m entering PatternModeImageScaleFactor as the result of 1/1.0076 in order to obtain gray values…You mentioned this ratio earlier in this post for resolution enhancement. That is where all the decimals are coming from.

I’m getting the error “Error 57-2. Can’t read settings text”


Hmm, assuming you’re entering 0.9924573243, that should work. And PatternModeImageScaleFactor is a printer setting, so did you put it into /var/smith/config/settings, not the printsettings file in your zip file?


There you go. I had put it in the printsettings file. My bad!