Category Archives: form files

Episode 2 : Form1 calibration strikes back

[March 11th edit : these calibrations issues were enough to convince me to sell my Form1 printer, for details see this post]

In a previous post I was showing my Form1 was not really well calibrated and circles were turned into ellipses. After filling a bug report to Formlabs, their answer was on the line of “thanks for your concern we are working on it…”

I’m confident they will find a solution, but I started to wonder how a user could calibrate his printer himself. This is important as the warranty on the printer is only valid for 3 months and as any mechanical machine, I’m expecting the printer will require some calibration from time to time. Last but not least, this will be only possible if Formalbs is actually giving us access to more parameters than the currently closed/dumb down version of PreForm we have (Hint! Hint!).

Laser+Galvo based printer calibration challenge

A normal user has limited resources and not access to complex measure instrument, so the procedure should match these requirements:

  • Simple steps: if possible it should be as simple as print test objects, measure them, compute the corrective factors (Excel Spreadsheet/integrated to PreForm), enter the new parameters and re-print the test objects to validate the calibration.
  • Not too long and costly: printed test object should be small, we don’t want to waste time and resin
  • No expensive measure instruments: I’ll be only using a digital caliper available for less than $50 on Ebay/Amazon

My main assumption for this exercise is that the calibration required is only affecting linear parameters. I will not go into galvanometer fine tuning. We will see at the end of the article that unfortunately non-linearity are present and will limit your end result quality.

The main challenge with laser base printer is that it’s difficult to measure precisely the position of a moving dot at the bottom of the vat (absolute measurements). So one solution is to do relative measurements of printed object features. We will use a digital caliper to get a good number of data points to build a robust average estimation of the calibration.

In the graph under, you can see that the laser spot is covering each each slices of the object using two kind of paths. The perimeter/skin-paths are tracing the outline of the object, they will be responsible for the smooth finish. The In-fill paths are straight and parallel paths to cure the inside of each slice. Using simple shapes like circles and square will let us measure independently the performances of both X and Y axis galvanometers.


The final dimension of the Slice is affected by both the axis amplification (deflection angle range) and the size/shape of the laser spot. When tracing the measures VS the theory graphs, the amplification correction is measured by the slope of the curve, while the shape of the laser spot is creating a constant offset.


As PreForm software is not open source, I cannot be sure how to use these correction factors. For the amplification, it will probably mean the angles transmitted to the printer will need to be multiplied by the correction alpha found (different on each axis) . The offset is a consequence of the spot size mismatch. PreForm must use a boundary offset to draw the perimeter/skin paths. A positive offset means that the diameter of the spot need to be reduced by half of the value. Also if the laser spot is not exactly round it might be trickier to program…

Calibration object and Procedure proposal

The shape I used for my calibration is a simple series of square and circle extrusions of various small size and one large for the base. Each instance of the object provides 20 points of measures:
– Circles: [1, 2, 3, 4, 23] mm diameters, X and Y axis
– Square: [3, 4, 5, 6, 25] mm side length, X and Y axis


To know where each object was printed on the platform, I’ve added a number engraved. That could be useful later if we are tracking non linearity issue depending on the location of the objects.

[STL & Inventor files for all squareCylinders Test] [5x .form file] [9x .form file]

I’ve used the 5 duplications file as it’s already providing 100 measure points. The base of the object is 3mm thick as I was hoping I could print it without supports to save time and resin. It turn out the Form1 is curing multiple times the slices in the first 2mm for the base. It creates an adhesion issue for the next layers, and I ended up with unusable objects with holes so I’m now generating support structures.


Here are my measures, with the 5x file, transparent 100micron material profile and default supports configuration. My first prints were done with the 0.8.1 software but reading that the 0.8.2 is supposed to have an improved laser tracking I decided to reprint everything. (Un?)fortunately the measures are consistent and the 0.8.2 didn’t improve the calibration…


The full spreadsheets with regression formulas are here [0.8.1] and [0.8.2].


From the regressions results we can see that the calibration required is consistent in both PreForm version. My printer has a 1.4% error in X axis and 0.35% error in Y. The laser spot diameter is also off by 0.2 mm.

For some reason the PreForm 0.8.2 is less consistent than the 0.8.1, the calibration is only reducing the overall error by a factor of 4 while it was reduced by 5 in the previous version…

Ain’t you doing anything about outliers?

When doing a root cause analysis on anything, you have to solve the first order issues that are dominating your calibration errors before looking at the rest. My Form1 is displaying non linearity on the X axis on geometries close to the back of the platform (2 = back-right and 5 = back-left).


When you look at the measures table, both objects are very different from the rest. I have no explanation yet for that phenomenon, but I hope that once I will be able to correct the offset and scale in PreForm I can build a new test to tackle this issue.

Until then, if you have a Form1 I would be glad to ear if your printer has the same calibration issue as mine. More reports will help Formlabs building a great printer!

[<<Prev. – Extract STL from PreForm Files]    [3D Printer articles]   [Preform & JewelCAD – Next>>]

Extract STL from Preform project files

The Form1 printer is supposed to be a click and print easy consumer solution. You get a sleek hardware (that still needs some tuning) and a polished software (Preform) that does not let you tweak a lot’s of options. So if for some reason the auto-generated supports are not working or you want to use a non-official polymer, then you are locked by the closed nature of the product.

When I’ve discussed with Formlabs during the SF Maker Fair, they confirmed they had no intention to release the USB protocol and the .FORM file format specification. The result is that if you want to use a Linux OS or another slicer, you are restricted (ex: generate internal supports function does not exist in Preform yet). These limitations do not exist with the B9 printer, as they decided to release everything as open source.

So what can be done? Well we are limited to reverse-engineer the FORM file or the USB protocol. It’s tedious and random: the end result is not guarantied but by doing so You can learn things about the Form1 and maybe fix some short-coming. A few stuff that open protocol/file could do:

  • enable other OS (no need to use visualization in Linux for ex)
  • custom slicer to fine control the supports, generated path, calibratio
  • Compatibility with different resin/polymer by adjusting the curing parameters
  • new cool features like the vat-fogging map

Anyway, with this post let’s start simple by extracting the STL meshes embedded in the .FORM files.

Extracting STL Mesh data from the .FORM

Using  something like Frhed free HEX editor let you peak at the file content, and a little bit a search gives this 80 characters string with “stl” inside… Yes this is, if you remember the STL file format the first field of a binary format file.


And when you duplicate the same object, or add another STL, you can see that each STL instance is stored in the .FORM file. More interesting is the fact that preform keeps the STL in its original dimension and orientation. So you can see that even if I scaled and rotated one of the pieces (from here), the extracted STL shows the supports scaled and with an angle.


This is telling us, that somewhere in the meta data of the .FORM file you have the position, rotation and scale information. This is stored in binary (not text) format and thus is more complex to extract. I might try to find where it is stored in a later version of my STL extraction program.

The Utility to extract STL mesh data from .FORM files is coded in plain C, so you should be able to recompile it on anything without much issues. The current EXE was compiled using Visual Studio Express 2010 x86, so you might need to install the VS 2010 redistribuable package before using it.

Utility usage is: extractSTL xxx.form
This will extract the STL meshes and save them in “xxx.form_meshN.stl”

The EXE, source code and VS project files are available here.

Happy forming!

[<<Prev. – Form1 might need calibration]    [3D Printer articles]   [Form1 Calibration Procedure – Next>>]