OpenFL: an API for the Form 1 / 1+


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!'