OpenFL: an API for the Form 1 / 1+


Does the API work for the Form 2?


No, this is only for Form 1/1+.



I’m not sure to understand the difference between the motor speed and the laser speed. Can somebody explain this difference please?


When the laser is drawing, it moves at some speed, typically on the order of a meter per second. That’s the laser speed. When the motors are moving, they move at some speed, typically on the order of millimeters per second. That’s the motor speed. Does that answer your question?


Does anyone know if it is possible to set the raise height in openFL ? i have a rubber material and i designed a custom flex fep vat and build plate that works great but i cant raise the platform enough for a good separation.


I think you need to create a custom build platform for that. There is a guy that is making FEP tank and maybe his build platform will save you the trouble:


I have been asking for this since the questionnaire sent out to Kickstarter backers of the original Form 1 before it even started shipping and on the Kickstarter forums. I have also if you look through my history had terrible luck getting machines with some real problems, but I’ve stuck by you guys believing that most of the machines you make where better than the ones I ended up getting and upgrading as time went on hoping you had fixed some problems and a new machine would be in better working order. The last round of this was me selling a freshly recalibrated and repaired Form 1+ and cashing in the Kickstarter backer coupon to get a shiny new Form 2. This resulted in me, for the first time since I received my Kickstarter Form 1, having a dependable Formlabs printer without any major flaws, even though it’s still not aligned as well as I would like. Now my request has started to be met but the only correctly working Formlabs printer I’ve owned out of the many I’ve been through is excluded :(. Well it’s good to hear it’s out there and hopefully you guys will extend some of the features to include the Form 2’s as they are awesome machines and more flexibility would be awesome.


Hi All!
Is there anybody who tried this OpenFL with Detax or Dreve reisins?
In our company we have Form2 printer and we’re using it for audio solutions with Detax reisins…with quite nice results. Although it could be better.

If I’m right getting longer exposition time with less power from LED should give us better resolution and thinner layers? Do you think this would give better results (we have “steps” in the sound-tubes)?
If so I think we can buy Form1+ and play a bit with the setting :slight_smile:
Do you plna to create OpenFL API for Form2 as well? Ther is open mode in Form2 but you have to use pre-set setting which can create some issue with the outcome.


I’m afraid at the moment we do not have plans to provide OpenFL for Form 2.


What about Detax materials? Do you have any results/information?


Still no plans for Open FL for Form 2? I would be very happy to have it.


Hello. What is the safe laser power limit for Form 1 (not +)?


One would think by now that this would be a simple process already incorporated into the form 2. I would wager that more people would purchase the form 2. Especially when carbon fiber filaments are available for standard 3d printers


Hi. Thanks for creating this forum. I have Form1+. I liked the idea of controlling the curing setings so I did firmware upgrade using the preform 2.3.3 oOpenFL software. The minute I pressed the firmware update icon the printer froze and shot down. It is now a dead rock, not seen nither by the computer nor the software. What should i do. Please help. Thanks.


HI, great stuff here.
Is it possible to read in an FLP without a printer?
I want to download them from the SD and alter the commands.
After that I want to put them back on the printer and print them.

Thanks in advance


You have to print the FLPs from Preform to a Form 1/1+, then read them back with the API; there’s not a way to go from Preform to FLPs on your local machine.


Hi. sorry for the misunderstanding.
I want to get the .flp files that were formerly send to the printer from my SD card in the printer on my hdd and the into python using the API. Is that possible?

Anyway. Is ist possible to alter the XYMove commands like the ZMove command.
I have in layer 21 these points:

[LaserPoint(x=34858, y=34845, dt=4), LaserPoint(x=34858, y=34792, dt=3), LaserPoint(x=34728, y=34886, dt=8)]

I user this command to change them:

layer[21].points = 32000,32000,5

this should give me a Laserpoint with x=32000 y=32000 and a dt of 5

layer[21] gives me

File “”, line 1, in
File “/home/pi/OpenFL-master/OpenFL/”, line 125, in repr
File “/home/pi/OpenFL-master/OpenFL/”, line 167, in _reprContents
def _reprContents(self):
File “/home/pi/OpenFL-master/OpenFL/”, line 171, in points
def points(self):
TypeError: ‘int’ object is not iterable

I also tried numerous commands with rackets but nothing works.

layer[21].points = (32000,32000,5)

then layer[21] gives
Traceback (most recent call last):
File “”, line 1, in
File “/home/pi/OpenFL-master/OpenFL/”, line 171, in points
def points(self):
TypeError: ‘int’ object is not iterable

Thanks for the reply.


Okay, it sounds like you have two different questions.

You can list files on the printer with list_blocks, and read FLPs off the printer using read_block_flp (for historical reasons, a layer is called a “block”).

You’re having trouble modifying the file because you’re trying to replace a list of tuples with a single tuple. You should instead try something
layer[21].points = [(32000, 32000, 5)]
Note the nested brackets, which make a list of (one) tuple containing three items (for x, y, and laser power).


Thank you Matt,
That worked and makes sense.


Hi there. I have an odd problem.

The API works great and does normally what I intend to do. However. Now I have a simple calibration print that i want to print with some of mine changes. However if I try to send Layer(Block) 32 back to the printer I get this error:

Layer  32 done
Traceback (most recent call last):
  File "/home/pi/OpenFL-master/", line 16, in <module>
    p.write_block(i, layer)
  File "/home/pi/OpenFL-master/OpenFL/", line 327, in write_block
    return self.write_block_flp(block, data)
  File "/home/pi/OpenFL-master/OpenFL/", line 351, in write_block_flp
    self.write_block(block, bytearray(flp.tostring()), skip_audit=True)
  File "/home/pi/OpenFL-master/OpenFL/", line 340, in write_block
  File "/home/pi/OpenFL-master/OpenFL/", line 180, in _command
    r = self._wait_for_packet(wait, verbose=verbose)
  File "/home/pi/OpenFL-master/OpenFL/", line 195, in _wait_for_packet
    p = self.poll()
  File "/home/pi/OpenFL-master/OpenFL/", line 220, in poll
  File "/home/pi/OpenFL-master/OpenFL/", line 145, in _process_raw
    while self.packet[0] != self.SOF:
IndexError: bytearray index out of range

So it fails during the p.write_block(i, layer) in my code. I am stuck and do not know where to start, hence in my test code down below I do not do something with this Layer, I just want to write it back to the printer.

ohh and here my code

from OpenFL import Printer, FLP

assert 0 in p.list_blocks() # I0 this fails, then there are no layers on the printer

for i in xrange(31,40):
	layer = p.read_block_flp(block=i)
	assert isinstance(layer, FLP.Packets)
	assert isinstance(layer, list)
	for l in xrange(0,len(layer)):
		print 'Something'
	print 'Layer ',i, 'done'
	p.write_block(i, layer)
	print 'Layer ',i, 'send to printer'
print 'Upload complete!'