Go to file
Gina Häußge 363f00775b New config options for daemonization, configfile location and basedir location
Using --daemon {start|stop|restart} OctoPrint can now be daemonized/controlled in daemon mode. Via --pidfile it's possible to set the pidfile to use, --configfile allows specification of the config.yaml to use, --basedir specifies the location of the basedir from which to base off the upload, timelapse and log folders. I also updated the README to include some config file settings which were previously undocumented.
2013-03-11 21:00:43 +01:00
octoprint New config options for daemonization, configfile location and basedir location 2013-03-11 21:00:43 +01:00
.gitignore Add ignores suggested by smorloc 2012-12-24 10:15:10 +01:00
.gitmodules Use Power as pip dependency, not git submodule. 2012-12-07 14:57:35 +07:00
LICENSE Moved LICENSE file to root directory to make it more visible. Added hint to README.md that OctoPrint is released under AGPL 2013-01-20 00:29:48 +01:00
README.md New config options for daemonization, configfile location and basedir location 2013-03-11 21:00:43 +01:00
requirements.txt Switched config format from ini to yaml to allow more complex configuration options (in this case for custom controls) 2013-01-22 21:32:14 +01:00
run New config options for daemonization, configfile location and basedir location 2013-03-11 21:00:43 +01:00

README.md

OctoPrint

OctoPrint provides a responsive web interface for controlling a 3D printer (RepRap, Ultimaker, ...). It currently allows

  • uploading .gcode files to the server and managing them via the UI
  • selecting a file for printing, getting the usual stats regarding filament length etc (stats can be disabled for faster initial processing)
  • starting, pausing and canceling a print job
  • while connected to the printer, gaining information regarding the current temperature of both head and bed (if available) in a nice shiny javascript-y temperature graph
  • while printing, gaining information regarding the current progress of the print job (height, percentage etc)
  • reading the communication log and send arbitrary codes to be executed by the printer
  • moving the X, Y and Z axis (jog controls), extruding, retracting and custom controls
  • optional: previewing the GCODE of the selected model to print (via gCodeVisualizer), including rendering of the progress during printing
  • optional: visual monitoring of the printer via webcam stream integrated into the UI (using e.g. MJPG-Streamer)
  • optional: creation of timelapse recordings of the printjob via webcam stream (using e.g. MJPG-Streamer) -- currently two timelaspe methods are implemented, triggering a shot on z-layer change or every "n" seconds

The intended usecase is to run OctoPrint on a single-board computer like the Raspberry Pi and a WiFi module, connect the printer to the server and therefore create a WiFi-enabled 3D printer. If you want to add a webcam for visual monitoring and timelapse support, you'll need a powered USB hub.

OctoPrint is Free Software and released under the GNU Affero General Public License V3.

Dependencies

OctoPrint depends on a couple of python modules to do its job. Those are listed in requirements.txt and can be installed using pip:

pip install -r requirements.txt

You should also do this after pulling from the repository, since the dependencies might have changed.

OctoPrint currently only supports Python 2.7.

Usage

Just start the server via

./run

By default it binds to all interfaces on port 5000 (so pointing your browser to http://127.0.0.1:5000 will do the trick). If you want to change that, use the additional command line parameters host and port, which accept the host ip to bind to and the numeric port number respectively. If for example you want the server to only listen on the local interface on port 8080, the command line would be

./run --host=127.0.0.1 --port=8080

Alternatively, the host and port on which to bind can be defined via the configuration.

If you want to run OctoPrint as a daemon (only supported on Linux), use

./run --daemon {start|stop|restart} [--pidfile PIDFILE]

If you do not supply a custom pidfile location via --pidfile PIDFILE, it will be created at /tmp/octoprint.pid.

You can also specify the configfile or the base directory (for basing off the uploads, timelapse and logs folders), e.g.:

./run --config /path/to/another/config.yaml --basedir /path/to/my/basedir

See run --help for further information.

Configuration

If not specified via the commandline, the configfile config.yaml for OctoPrint is expected in its settings folder, which is located at ~/.octoprint on Linux, at %APPDATA%/OctoPrint on Windows and at ~/Library/Application Support/OctoPrint on MacOS.

The following example config should explain the available options, most of which can also be configured via the settings dialog within OctoPrint:

# Use the following settings to configure the serial connection to the printer
serial:
  # Use the following option to define the default serial port, defaults to unset (= AUTO)
  port: /dev/ttyACM0

  # Use the following option to define the default baudrate, defaults to unset (= AUTO)
  baudrate: 115200

# Use the following settings to configure the web server
server:
  # Use this option to define the host to which to bind the server, defaults to "0.0.0.0" (= all interfaces)
  host: 0.0.0.0

  # Use this option to define the port to which to bind the server, defaults to 5000
  port: 5000

# Use the following settings to configure webcam support
webcam:
  # Use this option to enable display of a webcam stream in the UI, e.g. via MJPG-Streamer.
  # Webcam support will be disabled if not set
  stream: http://<stream host>:<stream port>/?action=stream

  # Use this option to enable timelapse support via snapshot, e.g. via MJPG-Streamer.
  # Timelapse support will be disabled if not set
  snapshot: http://<stream host>:<stream port>/?action=snapshot

  # Path to ffmpeg binary to use for creating timelapse recordings.
  # Timelapse support will be disabled if not set
  ffmpeg: /path/to/ffmpeg

  # The bitrate to use for rendering the timelapse video. This gets directly passed to ffmpeg.
  bitrate: 5000k

# Use the following settings to enable or disable OctoPrint features
feature:
  # Whether to enable the gcode viewer in the UI or not
  gCodeVisualizer: true

  # Specified whether OctoPrint should wait for the start response from the printer before trying to send commands
  # during connect
  waitForStartOnConnect: false

# Use the following settings to set custom paths for folders used by OctoPrint
folder:
  # Absolute path where to store gcode uploads. Defaults to the uploads folder in the OctoPrint settings folder
  uploads: /path/to/upload/folder

  # Absolute path where to store finished timelapse recordings. Defaults to the timelapse folder in the OctoPrint
  # settings dir
  timelapse: /path/to/timelapse/folder

  # Absolute path where to store temporary timelapse files. Defaults to the timelapse/tmp folder in the OctoPrint
  # settings dir
  timelapse_tmp: /path/to/timelapse/tmp/folder

  # Absolute path where to store log files. Defaults to the logs folder in the OctoPrint settings dir
  logs: /path/to/logs/folder

# Use the following settings to configure temperature profiles which will be displayed in the temperature tab.
temperature:
  profiles:
  - name: ABS
    extruder: 210
    bed: 100
  - name: PLA
    extruder: 180
    bed: 60

# Use the following settings to configure printer parameters
printerParameters:
  # Use this to define the movement speed on X, Y, Z and E to use for the controls on the controls tab
  movementSpeed:
    x: 6000
    y: 6000
    z: 200
    e: 300

# Use the following settings to tweak OctoPrint's appearance a bit to better distinguish multiple instances/printers
appearance:
  # Use this to give your printer a name. It will be displayed in the title bar (as "<Name> [OctoPrint]") and in the
  # navigation bar (as "OctoPrint: <Name>")
  name: My Printer Model

  # Use this to color the navigation bar. Supported colors are red, orange, yellow, green, blue, violet and default.
  color: blue

# Use the following settings to add custom controls to the "Controls" tab within OctoPrint
#
# Controls consist at least of a name, a type and type-specific further attributes. Currently recognized types are
# - section: Creates a visual section in the UI, you can use this to separate functional blocks
# - command: Creates a button that sends a defined GCODE command to the printer when clicked
# - commands: Creates a button that sends multiple defined GCODE commands to the printer when clicked
# - parametric_command: Creates a button that sends a parameterized GCODE command to the printer, parameters
#   needed for the command are added to the UI as input fields, are named and can such be referenced from the command
# - parametric_commands: Like parametric_command, but supports multiple commands
#
# The following example defines a control for enabling the cooling fan with a variable speed defined by the user
# (default 255) and a control for disabling the fan, all within a section named "Fan", and two example controls with
# multiple commands in a section "Example for multiple commands".
controls:
  - name: Fan
    type: section
    children:
      - name: Enable Fan
        type: parametric_command
        command: M106 S%(speed)s
        input:
          - name: Speed (0-255)
            parameter: speed
            default: 255
      - name: Disable Fan
        type: command
        command: M107
  - name: Example for multiple commands
    type: section
    children:
    - name: Move X (static)
      type: commands
      commands:
      - G91
      - G1 X10 F3000
      - G90
    - name: Move X (parametric)
      type: parametric_commands
      commands:
      - G91
      - G1 X%(distance)s F%(speed)s
      - G90
      input:
      - default: 10
        name: Distance
        parameter: distance
      - default: 3000
        name: Speed
        parameter: speed

# Use the following settings to add custom system commands to the "System" dropdown within OctoPrint's top bar
#
# Commands consist of a name, an action identifier, the commandline to execute and an optional confirmation message
# to display before actually executing the command (should be set to False if a confirmation dialog is not desired).
#
# The following example defines a command for shutting down the system under Linux. It assumes that the user under
# which OctoPrint is running is allowed to do this without password entry.
system:
  actions:
  - name: Shutdown
    action: shutdown
    command: sudo shutdown -h now
    confirm: You are about to shutdown the system.

Setup on a Raspberry Pi running Raspbian

I currently run the OctoPrint on a Raspberry Pi running Raspbian (http://www.raspbian.org/). I recommend to use a maximum baudrate of 115200 baud in your printer firmware, as the used Python serial module does not support 250000 baud in all Linux distributions yet (Raspbian being not one of them, at least according to my experience).

For the basic package you'll need Python 2.7 (should be installed by default), pip and a couple of dependencies listed in requirements.txt:

cd ~
sudo apt-get install python-pip git
git clone https://github.com/foosel/OctoPrint.git
cd OctoPrint
sudo pip install -r requirements.txt

You should then be able to start the OctoPrint server:

pi@raspberrypi ~/OctoPrint $ ./run
 * Running on http://0.0.0.0:5000/

If you also want webcam and timelapse support, you'll need to download and compile MJPG-Streamer:

cd ~
sudo apt-get install subversion libjpeg8-dev imagemagick libav-tools
wget -Omjpg-streamer.tar.gz http://mjpg-streamer.svn.sourceforge.net/viewvc/mjpg-streamer/mjpg-streamer/?view=tar
tar xfz mjpg-streamer.tar.gz
cd mjpg-streamer
make

This should hopefully run through without any compilation errors. You should then be able to start the webcam server:

pi@raspberrypi ~/mjpg-streamer $ ./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so"
MJPG Streamer Version: svn rev:
 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 640 x 480
 i: Frames Per Second.: 5
 i: Format............: MJPEG
[...]
 o: www-folder-path...: disabled
 o: HTTP TCP port.....: 8080
 o: username:password.: disabled
 o: commands..........: enabled

If you now point your browser to http://<your Raspi's IP>:8080/?action=stream, you should see a moving picture at 5fps. Open ~/.octoprint/config.yaml and add the following lines to it:

webcam:
  stream: http://<your Raspi's IP>:8080/?action=stream
  snapshot: http://127.0.0.1:8080/?action=snapshot
  ffmpeg: /usr/bin/avconv

Restart the OctoPrint server and reload its frontend. You should now see a "Webcam" tab with content.

If you want to be able to shutdown and restart your Pi via the webinterface, you'll first have to add a sudo rule for the system user OctoPrint is running under (for me that's the default user pi):

pi@raspberrypi ~ $ sudo -s
root@raspberrypi:/home/pi# cat > /etc/sudoers.d/octoprint-shutdown
pi ALL=NOPASSWD: /sbin/shutdown
^D
root@raspberrypi:/home/pi# exit

Then add the following lines to your ~/.octoprint/config.yaml:

system:
  actions:
  - name: Shutdown
    command: sudo shutdown -h now
    action: shutdown
    confirm: You are about to shutdown the system.
  - name: Reboot
    command: sudo shutdown -r now
    action: reboot
    confirm: You are about to reboot the system

After restarting and reloading OctoPrint, this should add a System menu to the top right where you'll find the two commands. Both are configured to show you a confirmation message before being executed (the confirm part) so that you'll hopefully not shutdown or reboot your Pi accidentally.

Once everything works, add the startup commands to /etc/rc.local.

Credits

OctoPrint started out as a fork of Cura (https://github.com/daid/Cura) for adding a web interface to its printing functionality and was originally named Printer WebUI. It still uses Cura's communication code for talking to the printer, but has been reorganized to only include those parts of Cura necessary for its targeted use case.

It also uses the following libraries and frameworks for backend and frontend:

The following software is recommended for Webcam support on the Raspberry Pi:

I also want to thank Janina Himmen for providing the kick-ass logo!

It so happens that I needed a favicon and also OctoPrint's first name -- Printer WebUI -- simply lacked a certain coolness to it. So I asked The Internet(tm) for advise. After some brainstorming, the idea of a cute Octopus watching his print job remotely through a crystal ball was born... or something like that.

What do I have to do after the rename from Printer WebUI to OctoPrint?

If you did checkout OctoPrint from its previous location at https://github.com/foosel/PrinterWebUI.git, you'll have to update your so-called remote references in git in order to make git pull use the new repository location as origin.

To do so you'll only need to execute the following command in your OctoPrint/PrinterWebUI folder:

git remote set-url origin https://github.com/foosel/OctoPrint.git

After that you might also want to rename your base directory (which probably still is called PrinterWebUI) to OctoPrint and delete the folder printer_webui in your base folder (which stays there thanks to Python's compiled bytecode files even after a rename of the Python package to octoprint).

After that you are set, the configuration files are migrated automatically.