OctoPrint (available on github here) is an alternative “host” program (the program that controls the 3d printer, typically a desktop application running on a desktop or laptop computer) which is controlled entirely via a web interface.
This means that instead of having to be physically nearby the printer to start and monitor print jobs, you can submit them from anywhere* and keep an eye on the progress of the print from any device with an internet connection and a web browser.
I’ve been looking for something like this ever since I started using my Reprap, as the machine is located in the laboratory and I’m not always able to hang out for hours to keep an eye on things.
In addition to basic host features like loading files, monitoring print progress and manually operating the various axis of the printer, OctoPrint includes a few additional features to address the fact that you’re not in the same room with the printer to keep an eye on it.
The first is the ability to display a live video feed inside the OctoPrint web interface. Essentially this passes-through a feed from an external program that operates the web cam, but having it right in the same page makes it very convenient to monitor all of the critical elements of the print job while it’s running and intervene immediately if you see something going wrong. OctoPrint uses an http request (just a web link) to get the images from the camera, which has the added benefit of working with dedicated stand-alone web cameras as well as cameras connected to other computers.
In addition to displaying a live video feed, OctoPrint has a timelapse feature which captures still images from the camera feed at regular intervals (time-based or triggered when the printer begins a new layer). OctoPrint then collects these stills and assembles them into a video file automatically.
Aside from being cool to watch, these videos can be extremely valuable when tuning and troubleshooting the printer (or seeing what went wrong with a failed print in the middle of the night).
OctoPrint also keeps a copy of each file it’s printed so you can easily re-print something without having to upload the file again (important since devices like the iPad can’t upload local files via web page), and since the design of the web interface is “responsive”, it works well on any browser regardless of screen size (at least every one I could test).
Another nice thing about OctoPrint is that it was designed from the beginning to work well on the Raspberry Pi, which can be easily attached to the printer and make the whole setup self-contained. In my case I’m using WiFi on the Raspberry Pi as well, so my entire printer can be operated with nothing but a power cable (and perhaps in the future, on batteries alone).
I’ve been using OctoPrint in its various incarnations since I first heard about the project in a post to the Google+ 3D Printing Group by it’s author Gina Häußge around Christmas 2012. I’ve been using it as my exclusive printer host for the last week or so without incident. I’ve used it for prints lasting more than 7 hours, and I’d say at this point it’s stable enough to be used as a replacement for my old standby Pronterface.
As with anything, there are room for improvements, and while I can do things like load filament by entering the extruder commands directly into the app’s terminal, it would be nicer if these functions were exposed via buttons on the control tab.
I’d also like to see the ajax hooks documented (so I could have other devices interact with OctoPrint via http) and have the ability to have “callbacks” in the form of URL’s that are called when certain interesting events occur like the completion of a file parsing, target temperature reached, end of print, etc. The good news here is that the developer has been extremely responsive to both bug and feature requests while maintaining the discipline to keep the program focused on its key objectives (i.e., avoiding “bloat”).
OctoPrint is a great example of the advantages of Open Source software development and in a later post I plan to outline some of the non-technical aspects of its development to illustrate why I think OctoPrint could have only existed in an Open Source environment and why it’s important that we keep the future of 3d printing (and all other technology) open.
*to access OctoPrint outside of the network your printer is attached to you’ll have to open up your firewall/router to let those requests in. Currently OctoPrint doesn’t provide a means to authenticate requests, so until it does, this would probably be a “bad idea”.