It might not be configured correctly or require authentication. To have this fixed, get in touch with an administrator of this OctoPrint instance.

It might not be configured correctly or require authentication. You can change the URL of the stream under "Settings" > "Webcam & Timelapse" > "Stream URL". If you don't have a webcam just set the URL to an empty value.

Currently configured stream URL:

Keyboard controls active

→ / ←: X Axis +/-↑ / ↓: Y Axis +/-W, Page↑ / S, Page↓: Z Axis +/-

Home: Home X/YEnd: Home Z1, 2, 3, 4: Stepsize 0.1, 1, 10, 100mm

Hint: If you move your mouse over the picture, you enter keyboard control mode.

Note that the time and usage values in this tab are estimated by the GCODE viewer in your
browser and might differ from the values estimated by the server that are displayed in the
"State" and "Files" panels in the sidebar due to slightly different implementations. Also note that these
estimated values may be inaccurate since they can also take information present in the
GCODE file into account.

Warning

You've selected for printing which has a size of
. Depending on your machine this
might be too large for rendering and cause your browser to become unresponsive or crash.

If acknowledgements ("ok"s) sent by the firmware get lost due to issues with the serial communication to your printer, OctoPrint's communication with it can become stuck. If that happens, this can help. Please be advised that such occurrences hint at general communication issues with your printer which will probably negatively influence your printing results and which you should therefore try to resolve!

Some functionality of the terminal will be disabled if OctoPrint detects that your browser is too slow for that. You may force it back on here, but be aware that this might make your browser unresponsive.

Take note that timelapse configuration is disabled while your printer is printing.

Timelapse Configuration

Timelapse Mode

Note Does not work when printing from the printer's SD Card (no way to detect the change in Z reliably). Use "Timed" mode for those prints instead.

Minimum interval

sec

OctoPrint will rate limit snapshots to this minimum interval. This it to prevent against performance issues with vase mode/continous z prints.

Snapshot interval

sec

Timelapse frame rate

fps

Timelapse post roll

sec

OctoPrint will take additional pictures to add this many seconds to the end of your rendered timelapse.

Capture post roll images
If this is unchecked, OctoPrint will simply repeat the last frame for the post roll instead of continuing to capture new frames.

Retraction Z-Hop

mm

Enter the retraction z-hop used in the firmware or the gcode file to trigger snapshots for the timelapse only if a real layer change happens. For this to work properly your retraction z-hop has to be different from your layerheight!

Save as default
Check this to make your selected timelapse mode and options persist across restarts.

Log position on cancel WarningIf you disabled this, the cancel_position placeholders in your cancel GCODE script and the corresponding data in the print recovery data will stay unpopulated! However, cancelling speed might improve slightly.

If your printer's print head may move slightly outside the print volume (e.g. for nozzle cleaning routines)
you can define a custom safe bounding box for its movements below.

Custom bounding box

X Coordinates

Min

Max

Y Coordinates

Min

Max

Z Coordinates

Min

Max

This information is used for the temperature tab, the bounding box check, the GCODE Viewer and/or when slicing from OctoPrint. It does NOT influence already sliced files that you upload to OctoPrint!

Please define the maximum speed/feedrate of the individual axes and whether their control should be inverted or not.

X

mm/min

Invert control

Y

mm/min

Invert control

Z

mm/min

Invert control

E

mm/min

This information is used for manual control via the "Control" tab. It does NOT influence already sliced files that you upload to OctoPrint!

Nozzle Diameter

mm

Number of Extruders

Shared nozzle

Check this if your printer has a single nozzle and heater shared among its extruders instead of one nozzle and heater per extruder

Please specify the nozzle offsets of the extruders relative to the first nozzle T0 if you haven't already done so in your firmware. Otherwise leave them at (0,0).

Offset T

X

mm

Y

mm

This information is used for the graph and controls available in the "Temperature" tab, the GCODE viewer and when slicing from within OctoPrint. It does NOT influence already sliced files that you upload to OctoPrint!

Graph

Graph cutoff

min

Needs a restart of OctoPrint to become active.

Fine adjustments

Send temperature fine adjustments automatically
Enable this to have temperature fine adjustments you do via the + or - button be sent to the printer automatically.

Sending delay

sec

OctoPrint will use this delay to limit the number of sent temperature commands should you perform multiple fine adjustments in a short time.

This will only be executed when closing the connection actively. If the connection to the printer is suddenly lost nothing will be sent.

Enable legacy plugin asset bundling Compatibility
Enable this, save and restart your server if you are running into issues with plugins with OctoPrint
1.3.6 or later that used to work with OctoPrint up to version 1.3.5. See here
for details on why this is happening. Note that this legacy flag will be removed in a future
OctoPrint version (currently planned for 1.3.8), so urge the authors of affected plugins to push
an update with a fix.

Enable Temperature Graph

Enable model size detection and warn if model exceeds print bed Beta

Confirm before cancelling a print

Enable SD support

Enable Keyboard Control

Wait for start on connect

G90/G91 overrides relative extruder mode Smoothieware

Enable automatic firmware detection
If enabled, OctoPrint will try to figure out your printer's firmware automatically and adjust some communication parameters based on that.
If that doesn't work out, or you want more granular control, uncheck this and the parameters in question will become visible for you to adjust.

Select SD files by relative path RepRap Firmware

Always assume SD card is present Repetier

Ignore consecutive resend requests for the same line Repetier

Support TargetExtr%n/TargetBed target temperature format Repetier

Disable detection of external heatups Repetier

Actively pause communication during G4 dwell command Repetier

Send a checksum with the command

When printing
Always Repetier
Never

Webcam

Stream URL

Needs to be reachable from the browser displaying the OctoPrint UI, used to embed the webcam stream into the page.

Stream aspect ratio

If the stream has a different aspect ratio than configured here it will be letterboxed.

Please note that changes to the API key are applied immediately, without having to "Save" first.

QR Code

Commands

Restart OctoPrint

Restart system

Shutdown system

Connectivity check

If the connectivity check is enabled, OctoPrint will regularly check if it's connected to the internet.
This is useful to prevent resource intensive operations (such as checking for updates) if it's already
clear that they won't succeed anyhow.

Enable regular connectivity check

Define a check interval, a host and a port to check against. If you don't know what to set here, the
default values (using Google's DNS server) should work. If you have concerns about using
that, define the IP and port of a different online server that you trust and that has a high
availability.

Check interval

min

Host IP

Port

Plugin blacklist processing

To protect against known severe issues with certain versions of third party plugins, OctoPrint supports
the use of a centralized plugin version blacklist to automatically disable such plugins before they can interfere
with normal operation.

By default, OctoPrint will use the blacklist hosted at plugins.octoprint.org/blacklist.json which you
can also take a look at in a more human readable format here.

Enable plugin blacklist processing on startup
Any changes take effect only on the next server start.

Manage Language Packs...

There is currently no central repository for language packs like there is for plugins - any help to change that is appreciated!

Until a repository is available, please see the wiki for language packs provided by the community.

Available Language Packs

Last update:

No additional Language Packs are installed at the moment.

Upload additional Language Packs

Browse...

This does not look like a valid language pack. Valid language packs should be either zip files or tarballs and have the extension ".zip", ".tar.gz", ".tgz" or ".tar"Please note that you will have to reload the page in order for any newly added language packs to become available.

Logs

Take note that all plugin management functionality is disabled while your printer is printing.

The pip command could not be found or does not work correctly
for this installation of OctoPrint - please consult the log file for details
and if necessary configure it manually. No installation and uninstallation of plugin
packages is possible while pip is unavailable.

Safe mode is currently active. All third party plugins are disabled and cannot be
enabled. Installation of plugin packages is disabled.

Installed Plugins

Install new Plugins...

Take note that all plugin management functionality is disabled while your printer is printing.

The pip command could not be found or does not work correctly
for this installation of OctoPrint - please consult the log file for details
and if necessary configure it manually. No installation and uninstallation of plugin
packages is possible while pip is unavailable.

Safe mode is currently active. All third party plugins are disabled and cannot be
enabled. Installation of plugin packages is disabled.

It looks like OctoPrint has currently no connection to the internet. Due to that it's not possible
to install new plugins from the plugin repository or archive URLs.

Plugin Configuration

You should normally not have to change any of the following settings, they are purely provided for convenience here.

Plugin repository configuration

Repository URL

Repository cache TTL

min

Notices configuration

Notices URL

Notices cache TTL

min

pip configuration

Additional arguments

Force the use of the --user flag with pip install

Please configure the checkout folder of OctoPrint, otherwise
this plugin won't be able to update it. Click on the button
to do this. Also refer to the Documentation.

You are running a non-release version of OctoPrint but are tracking OctoPrint
releases.

You probably want OctoPrint to track the matching development version instead.
If you have a local OctoPrint checkout folder switched to another branch,
simply switching over to "Commit" tracking will already
take care of that. Otherwise please take a look at the
Documentation.

Profiles

Import Existing Cura Profile

Profile ini file

Browse...

Identifier

Name

Description

Make default profile

Overwrite existing file

You can import your existing profile .ini files from Cura 15.04.x or older
here. Anything but those are not supported. That especiallymeans that .json
profiles from Cura 15.06.x and .curaprofile profiles from Cura 2.x will not work, and neither
will custom Cura profile formats that third party tools like e.g. Repetier create.

Temperature Sensor

Enable Temperature Reading

Sensor Type

Attention You need to install and configure the necessary
libraries for the temperature sensor, check the documentation on github page

Sensor Pin

GPIO pin for temperature sensor, recommended to use 4 as DS18B20 only works on pin 4

Sensor address in HEX value, you can find it by runing i2cdetect -y 1 on your Raspberry Pi

Sensor Pin

GPIO pin for temperature sensor, recommended to use 4 as DS18B20 only works on pin 4

Use Fahrenheit Unit
Choose if you want to work with Celsius or Fahrenheit

Temperature Control

Enable Temperature Control

Temp Control Pin

GPIO pin used to control Heater.

Active Low
Active low means that the heater will turn on when receive a low signal (ground) from Raspbery PI

Temp Control Type

Heater

Cooler

Auto Startup
Choose if you want to automatically startup temperature control when the print starts

Default Temperature

Default temperature that temperature control will be set

Raspberry Pi Outputs

IO Label

Name displayed on Enclosure Tab

IO 1 Number

GPIO number that will be controlled.Attention Neopixel requires a microcontroler (ex: arduino) connected to I2C bus.
This is the pin on the microcontroler that is connected to the Neopixel.

Auto Startup
Choose if GPIO should turn on automatomatically when print starts

Startup Delay (Seconds)

Time delay to turn on GPIO when print starts

Auto Shutdown
Choose if GPIO should turn off automatomatically when print finishes

Shutdown Delay (Seconds)

Time delay to turn off GPIO when print finishes

Output Type

Regular

PWM

NeoPixel

Active Low
Active low means that the GPIO will turn on when receive a low signal (ground) from Raspbery PI

Frequency

Value is in Hz

Default Duty Cycle

Value is in percentage, between 0 and 100

Microcontroller Address

Microcontroller address in HEX value, you can find it by runing i2cdetect -y 1 on your Raspberry Pi

Number of LEDS

Number of led's on strip

Brightness

Value between 0 and 255

Default Color

Value needs to follow the format rgb(value_red,value_green,value_blue) where values should be between
0 and 255

Raspberry Pi Inputs

IO Label

Name of Input

Event Type

Temperature

Printer

GPIO Control

Info: Events will run actions when a certain temperature of the sensor is hit.
You can control a OUTPUT pin and set that to a LOW or HIGH value when that happens.
You can use this as a safety measure and trigger alarm lights for example. Warning
You should always have proper smoke detector on your house. DO NOT use this as your only safety device.Info: Events will run PRINTER actions when a condition is met, that can be a filament sensor, button, etc.
Actions can be Pause \ Resume \ Cancel a printer job, change the filament or disable Temperature Control. You can use the "change filament" action and set up the input
GPIO acording to your sensor, for example, if your filament sensor conects to ground when detects the end of the filament,
you should choose PULL UP resistors and detect the event on the falling edge.Info: Events will control GPIO outputs when a condition is met, for example detect a press of a button.
You can use this to control any previous configured OUTPUTS, basically beeing able to control your lights / fan / pritner
using mechanical buttons buttons instead of the octoprint interface. You can only control REGULAR outputs.

Input IO Number

Input GPIO that will detect the event that should trigger the action. For example if you have a filament
sensor you put the GPIO pin that the sensor is connected. This can also be a press of a button or any other signal that you want to detect.
You can not use GPIO 4 here if you are using temeprature sensor DS18B20

Input Pull Resistor

Choose what type of pull resistors that you want on the output. If you signal is active low,
that means it should run the action when receive a low signal (ground), you should choose PULL UP resistors.

Event Trigger

Do you want thrigger the event on the rise or falling edge? If you signal is active low,
that means it should run the action when receive a low signal (ground), you should choose FALLING EDGE.

Controlled IO

When the event happen, you want control which IO?

Set Controlled IO Value

When the event happen, you want to turn the controlled IO HIGH or LOW?

Set Temperature

Set temperature that will trigger the event

Controlled IO

When the event happen, you want control which IO?

Set Controlled IO Value

When the event happen, you want to turn the controlled IO HIGH or LOW?

Event Trigger

Do you want thrigger the event on the rise or falling edge? If you signal is active low,
that means it should run the action when receive a low signal (ground), you should choose FALLING EDGE.

Printer Action

You can use filament change on your filament detectors and add buttons to resume and pause the print job.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.

For a copy of the GNU Affero General Public License, see OctoPrint License
to the left.

OctoPrint also utilizes various dependencies under terms of their
respective licenses, which can be found under Third Party Licenses to
the left. Copyright of those dependencies lies with their respective authors

"OctoPrint" is a registered trademark.

About OctoPi

The ready-to-go Raspberry Pi image with OctoPrint

OctoPi is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

OctoPi is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

OctoPrint started off as a fork of Cura by
Daid Braam. Parts of its communication layer and
the server side GCODE interpreter are still based on Cura's code base from
December 2012 and hence on the work of its authors up until then.

OctoPrint Changelog

1.3.6 (2017-12-12)

Note for upgraders and plugin authors: Change in the bundling of JS assets can lead to issues in plugins

A change to solve issues with plugins bundling JS assets that cause interference with other plugins (e.g. through the declaration of "use strict") and in general to add better isolation and error handling might cause errors for some plugins that go beyond your run-off-the-mill view model and also implicitly declare new globals.

If you happen to run into any such issues, you can switch back to the old way of bundling JS assets via the newly introduced "Settings > Feature > Enable legacy plugin asset bundling" toggle (check it, save the settings, restart the server). This is provided to allow for a minimally invasive adjustment period until affected plugins have been updated.

You can find out more about the change, how to know if a plugin is even affected and what do about it on the OctoBlog.

Improvements

#203 - Allow selecting the current tab via URL hashs. Also update URL hash when switching tabs, thus adding this to the browser history and allowing quicker back and forth navigation through the browser's back and forward buttons.

#1026 - Automatically upper case parameters in GCODE commands sent from the Terminal tab. A black list is in place that prevent upper casing of parameters for GCODE commands where it doesn't make sense (default: M117). See also #2177.

#2056 - Added a Copy button to the API key field in the settings and user settings.

#2094 - Allow UTF-8 display names for uploaded files. The files will still get an ASCII only name on disk, but the UTF-8 name used during upload will also be persisted and shown in the file list. This also allows using emojis in your file and folder names now.

#2131 - Added warning to restart, shutdown, reboot and update confirmations that that may disrupt ongoing prints, even those run from the printer's internal storage/SD. See also #2146 and #2152.

#2138 - Slightly longer timeout when attempting to read from serial during auto detection via programming mode. Might help with detection of some slower printer controllers under certain circumstances.

#2200 - Wrap all JS assets of plugins into one anonymous function per plugin. That way plugins using "use strict"; won't cause hard to debug and weird issues with other plugins bundled after them. The down side is that plugins currently relying on implicit declaration of global helper functions or variables (function convert(value) { ... }) to be available outside of their own plugin's JS assets will now run into errors. To compensate for that while affected plugins are adjusted to declare globals explicitly (window.convert = function(value) { ... }), a temporary feature flag was added as "Settings > Features > Enable legacy plugin asset bundling" that switches back to the old form of bundling until plugins you rely on are updated. This flag will be removed again in a later version (currently planned for 1.3.8). See also the note above and #2246.

#2229 - Added note to printer profile dialog that the nozzle offsets for multi extruder setups are only to be configured if they are not already set in the printer's firmware.

#2232 - Disable movement distance buttons when not connected to the printer or when printing, since they don't have any use then.

New centralized plugin blacklist (opt-in). Allows to prevent plugins/certain versions of plugins known to cause crippling issues with the normal operation of OctoPrint to be disabled from loading, if the user has opted to do so in the settings/wizard.

Log how to enable serial.log to serial.log if it's disabled. That will hopefully put at least a small dent in the amount of "It's empty!" responses in tickets ;)

Force new Pypi index URL in requirements.txt as an additional work around against old tooling.

Prefer plain pip over git for updating OctoPrint.

Added environment detection and logging on startup. That should give us more information about the environment to produce a reported bug in.

Added OctoPi support plugin that provides information about the detected OctoPi version. Will only load if OctoPi is detected.

More dynamic plugin mixin detection. Now using a base class instead of having to list all types manually. Should greatly reduce overhead of adding new mixin types.

Support leaf merging for file extension tree, allowing to add new file extensions to types registered by default.

Allow non GCODE SD file transfers if registered as machinecode through e.g. a plugin's file extension hook. Caution: This doesn't make streaming arbitrary files to the printer via serial work magically. It merely allows that, it's up to the firmware to actually be able to handle that. Also, the regular GCODE streaming protocol is used, so if the streamed file contains control characters from that (e.g. M29 to signal the end of the streaming process), stuff will break!

Bug fixes

#2077 - Fix an issue with shared nozzles and the temperature graph, causing temperature to not be reported properly when another tool but the first one is selected. See also #2077

#2108 - Added no-op default action to login form so that username + password aren't sent as GET parameters if for some reason the user tries to log in before the view models are properly bound and thus the AJAX POST submission method is attached.

#1679 - Support temperature autoreporting by the firmware instead of polling if the firmware reports to support it. For this to work with Marlin 1.1.0 to 1.1.3 you'll need to explicitly enable EXTENDED_CAPABILITIES_REPORTandAUTO_REPORT_TEMPERATURES in your firmware configuration, otherwise your firmware won't report that it actually supports this feature.

#1737 - Auto-detect Anet A8 firmware and treat as Repetier Firmware (which it actually appears to be, just renamed - thanks Anet for making this even harder).

#1941 - Enable "block while dwelling" flag when Malyan firmware is detected since that firmware seems to handle G4 identically to Repetier Firmware instead of Marlin (like it claims to). See also #1762.

#1946 - Add option to disable position logging on cancel/pause. See "Log position on cancel" and "Log position on pause" under Settings > Serial > Advanced options.

#1971 - Refactored temperature inputs. They now sport some fancy +/- buttons to increment/decrement the current temperature (which also auto submit after a couple of seconds) and easier editing by keyboard. The temperature offset was also slightly redesigned to make room for that.

#2010 - Slight refactoring in the terminal tab: Full width input field, auto focus of input field when just clicking on terminal output.

#2011 - Centralized online connectivity check (with opt-in of course). None of the bundled plugins will attempt to fetch data from the net when the connectivity check indicates that would fail anyhow. This should improve server startup times and various requests when running isolated.

Corewizard: Disable injection of JS files into UI when it's not actually required.

GCODE analysis: Moved into its own subprocess. That should improve performance on multi core systems.

GCODE viewer: Ignore coordinates outside bed when zooming/centering on model. Those usually are nozzle priming routines.

JS Client Lib: Add centralized browser detection as OctoPrint.coreui.browser. Available properties: chrome, firefox, safari, ie, edge, opera as well as mobile and desktop, all of which are boolean values.

Plugin Manager plugin: Detect if a plugin requires a reconnect to the printer to become fully active/inactive.

#2017 - Fix issue in GCODE viewer with files that contain a visit to the first layer twice (e.g. brim, then nose dive from higher z for actual model), causing all but the last layer segment to not be rendered.

#2033 (regression) - Temperature tab: Fix for legend in graph not updating with current values on mouse over.

#2033 (regression) - Temperature tab: Fix for new temperature inputs not fitting on one line in Firefox.

#2035 (regression) - Fix an issue of the server not starting up if there's a file in the analysis backlog. The reason for this is that spawning a new process while the intermediary server is active causes the server port to be blocked (this is due to how subprocessing works by default), in turn leading to an error on startup since the port cannot be bound by the actual server. Since the GCODE analysis takes now place in its own subprocess and hence triggers this problem, it had to be moved until after the actual server has already started up to avoid this problem.

#2059 (regression) - Fix an issue causing the new temperature controls to wrap on touch enabled devices when the temperature dropdown is opened.

#2090 (regression) - Fix an issue causing an aborted server startup under Windows if the timing is just right.

Fix potential division by zero in progress reporting if the timing was just right.

Fix sorting order for multiple tools in the "State" panel.

Fix file position vs. line ending handling in GCODE viewer. Could lead to slightly off file position calculation and hence possibly to the wrong move being plotted when synchronizing with print progress.

Corewizard plugin: Fix firstrunonly wizards (e.g. for printer profile configuration) being displayed again if any of the sub wizards (e.g. for the online check opt-in and configuration) is active. (regression)

Fix an issue causing rollover of serial.log to fail under Windows. (regression)

1.3.4 (2017-06-01)

Note for owners of Malyan M200/Monoprice Select Mini

OctoPrint's firmware autodetection is now able to detect this printer. Currently when this printer is detected, the following firmware specific features will be enabled automatically:

Always assume SD card is present (feature.sdAlwaysAvailable)

Send a checksum with the command: Always (feature.alwaysSendChecksum)

Since the firmware is a very special kind of beast and its sources are so far unavailable, only tests with a real printer will show if those are sufficient settings for communication with this printer to fully function correctly. Thus, if you run into any issues with enabled firmware autodetection on this printer model, please add a comment in #1762 and explain what kind of communication problem you are seeing. Also make sure to include a serial.log!

Bug fixes

#1942 - Fixed crash on startup in case of an invalid default printer profile combined with "auto-connect on startup" being selected and the printer available to connect to.

More information

None since this constitutes a hotfix release to fix an apparently very rare bug introduced with 1.3.3 that seems to be affecting a small number of users.

1.3.3 (2017-05-31)

Note for owners of Malyan M200/Monoprice Select Mini

OctoPrint's firmware autodetection is now able to detect this printer. Currently when this printer is detected, the following firmware specific features will be enabled automatically:

Always assume SD card is present (feature.sdAlwaysAvailable)

Send a checksum with the command: Always (feature.alwaysSendChecksum)

Since the firmware is a very special kind of beast and its sources are so far unavailable, only tests with a real printer will show if those are sufficient settings for communication with this printer to fully function correctly. Thus, if you run into any issues with enabled firmware autodetection on this printer model, please add a comment in #1762 and explain what kind of communication problem you are seeing. Also make sure to include a serial.log!

Improvements

#748 - Added delete confirmation and bulk delete for timelapses. See also the discussion in brainstorming ticket #1807.

#1092 - Added new events to the file manager: FileAdded, FileRemoved, FolderAdded, FolderRemoved. Contrary to the Upload event, FileAdded will always fire when a file was added to storage through the file manager, not only when added through the web interface. Extended documentation accordingly.

#1734 - Treat default/initial printer profile like all other printer profiles, persisting it to disk instead of config.yaml and allowing deletion. OctoPrint will migrate the existing default profile to the new location on first start.

#1734 - Better communication of what actions are available for printer profiles.

#1739 - Software update plugin: Added option to hide update notification from users without admin rights, added "ignore" button and note to get in touch with an admit to update notifications for non admin users.

#1811 - Slight rewording and rearrangement in timelapse configuration, better feedback if settings have been saved.

#1818 - Support both Marlin/Repetier and Smoothieware interpretations of G90 after an M83 in GCODE viewer and analysis. Select "G90/G91 overrides relative extruder mode" in Settings > Features for the Smoothieware interpretation.

#1875 - Marked the command input field in the Terminal tab as not supporting autocomplete to work around an issue in Safari. Note that this is probably only a temporary workaround due to browser vendors working on deprecating autocomplete="off" support and a different solution will need to be found in the future.

Announcement plugin: Subscribe to all registered feeds by default to ensure better communication flow (all subscriptions but the "Important" channel can however be unsubscribed easily, added corresponding note to the notifications and also a configuration button to the announcement reader).

Announcement plugin: Auto-hide announcements on logout.

Announcement plugin: Order channels server-side based on new order config setting.

Plugin manager: Show warning when disabling a bundled plugin that is not recommended to be disabled, including a reason why disabling it is not recommended. Applies to the bundled announcement, core wizard, discovery and software update plugins.

Plugin manager: Support for plugin notices for specific plugins from the plugin repository, e.g. to inform users of specific plugins about known issues with the plugin or instruct to update when the software update mechanism of the current plugin version turns out to be misconfigured. Supports matching installed plugin versions and OctoPrint versions to target only affected users.

Plugin manager: Better visualization of plugins disabled on the repository, no longer shown as "incompatible" but "disabled", with link to the plugin repository page that contains more information.

Plugin manager: Detect necessity to reinstall a plugin provided through archive URL or upload and immediately do that instead of reporting an "unknown error" without further information.

Plugin manager: Added freebsd for compatibility check.

Plugin manager: More general flexibility for OS compatibility check:

Support for arbitrary values to match against

Allow 1:1 check again sys.platform values (with startswith).

Support black listing (!windows) additionally to white listing. A detected OS must match all provided white list elements (if the white list is empty that is considered to be always the case) and none of the black list elements (if the black list is empty that is also considered to be always the case).

Docs: Now referring to dedicated Jinja 2.8 documentation as hosted at jinja.octoprint.org for all template needs, to avoid confusion when consulting current Jinja documentation as available on its project page (2.9+, which OctoPrint can't upgrade to due to backwards incompatible changes).

Docs: Better documentation of what kind of input the FileManager accepts for select_file.

Docs: Specified OctoPrint version required for plugin tutorial.

Bug fixes

#202 - Fixed an issue with the drag-n-drop area flickering if the mouse was moved too slow while dragging (see also #1867).

More information

1.3.2 (2017-03-16)

Note for plugin authors

If you maintain a plugin that extends OctoPrint's JavaScript Client Library like demonstrated in e.g. the bundled Software Update Plugin you'll need to update the way you register your plugin to depend on OctoPrintClient and registering your extension as shown here instead of directly writing to OctoPrint.plugins (like it was still done here). That way your extensions will be available on all instances of OctoPrintClient, not just the global instance OctoPrint that gets created on startup of the core web interface.

If all you plugin does with regards to JavaScript is registering a custom view model and you have no idea what I'm talking about regarding extending the client library, no action is necessary. This heads-up is really only relevant if you extended the JavaScript Client Library.

Improvements

#1506 - Better handle really long "dwell"/G4 commands on Repetier firmware (as for example apparently recommended to use with Wanhao D6 and similar printers for nozzle cooling) by actively stalling communication from OctoPrint's side as well. That way we no longer run into a communication timeout produced by a 5min dwell immediately happily acknowledged by the printer with an ok.

#1542 - Support for multi-extruder setups with a shared single nozzle and heater (e.g. E3D Cyclops, Diamond hotend, etc).

#1676 - Trigger line number reset when connected to printer and seeing start message. This should fix issues with printer communication when printer resets but reset goes otherwise undetected.

#1723 - Ignore leading v or V on plugin version numbers for version checks in plugin manager and software updater (see also #1724)

#1770 - Better resilience against null bytes received from the printer for whatever reason.

#1770 - Detect printer as connected even when only receiving a wait instead of ok. Should solve issues with initial connect where printer sends garbage over the line that eats/covers the ok if printer also sends regular wait messages when idle.

#1780 - Work around for Safari re-opening one copy of the webcam stream after the other and eating up bandwidth unnecessarily (see also #1786)

More solid parsing of request line number for resend requests. Should improve compatibility with Teacup firmwares. Based on issue reported via PR #300

Bug fixes

#733 - Fixed multiple event handler commands running concurrently. Now they run one after the other, as expected.

#1317 - Fixed a color distortion issue when rendering timelapses from higher resolution source snapshots that also need to be rotated by adjusting ffmpeg parameters to avoid an unexpected behaviour when a pixel format and a filter chain are required for processing.

#1631 - Disable "Slice" button in slice dialog if a print is ongoing and a slicer is selected that runs on the same device as OctoPrint. The server would already deny such requests (simply due to performance reasons), but the UI didn't properly reflect that yet.

#1792 - Don't tell Safari we are "web-app-capable" because that means it will throw away all cookies and the user will have to constantly log in again when using a desktop shortcut for the OctoPrint instance.

#1812 - Don't scroll up navigation in settings when switching between settings screens, very annoying on smaller resolutions (see also #1814)

Fix settings helper not allowing to delete values for keys that are present in the local config but not in the defaults.

Properly delete old restart/reboot commands that are now defined globally since config version 4. An issue with the settings helper prevented us from properly deleting them during migration to version 4.

Fixed update configs without a restart of any kind causing an issue due to an undefined variable.

Fixed broken doctests.

Upgrade LESS.min.js from 2.7.1 to 2.7.2 to fix the broken contrast function

Always create a new user session for requests with an API key

Fixed an error when reading all user settings via the API

Fixed a bunch of caching issues for the page, was not properly updated on change of snapshot URL presence, system menu entry presence, gcode viewer enabled/disabled, changes in access control availability.

Fix files in sub folders to not be processed by the initial analysis backlog check during startup of the server.

Various fixes in the file analysis queue:

High priority items are now really high priority

Abort analysis for items that are to be deleted/moved to get around an issue with file access under Windows systems.

Fix stock terminal filters for suppressing temperature messages and SD status messages to also be able to deal with line number prefixes. If you have added additional terminal filters, you will have to apply this fix manually:

More information

1.3.0 (2016-12-08)

Features

You can now create folders in the file list, upload files into said folders and thus better manage your projects' files.

New wizard dialog for system setups that can also be extended by plugins. Replaces the first run dialog for setting up access control and can also be triggered in other cases than only the first run, e.g. if plugins necessitate user input to function properly. Added wizards to help configuring the following components in OctoPrint on first run: access control, webcam URLs & ffmpeg path, server commands (restart, shutdown, reboot), printer profile. Also extended the bundled Cura plugin to add a wizard for its first setup to adjust path and import a slicing profile, and the bundled Software Update plugin to ask the user for details regarding the OctoPrint update configuration. Also see below.

New command line interface (CLI). Offers the same functionality as the old one plus:

Plugins may now give hints in which order various hooks or mixin methods should be called by optionally providing an integer value that will be used for sorting the callbacks prior to execution.

Plugins may now define configuration overlays to be applied on top of the default configuration but before config.yaml.

New mixin UiPlugin for plugins that want to provide an alternative web interface delivered by the server.

New mixin WizardPlugin for plugins that want to provide wizard components to OctoPrint's new wizard dialog.

New hook octoprint.cli.commands for registering a command with the new OctoPrint CLI

New hook octoprint.comm.protocol.gcode.received for receiving messages from the printer

New hook octoprint.printer.factory for providing a custom factory to contruct the global PrinterInterface implementation.

New TemplatePlugin template type: wizard

New Javascript client library for utilizing the server's API, can be reused by UiPlugins.

OctoPrint will now track the current print head position on pause and cancel and provide it as new template variables pause_position/cancel_position for the relevant GCODE scripts. This will allow more intelligent pause codes that park the print head at a rest position during pause and move it back to the exact position it was before the pause on resume (Example). Note that this is NOT enabled by default and for now will necessitate adjusting the pause and resume GCODE scripts yourself since position tracking with multiple extruders or when printing from SD is currently not fool proof thanks to firmware limitations regarding reliable tracking of the various E values and the currently selected tool T. In order to fully implement this feature, the following improvements were also done:

New PositionUpdated event when OctoPrint receives a response to an M114 position query.

Extended PrintPaused and PrintCancelled events with position data from M114 position query on print interruption/end.

Added (optional) firmware auto detection. If enabled (which it is by default), OctoPrint will now send an M115 to the printer on initial connection in order to try to figure out what kind of firmware it is. For FIRMWARE_NAME values containing "repetier" (case insensitive), all Repetier-specific flags will be set on the comm layer. For FIRMWARE_NAME values containing "reprapfirmware" (also case insensitive), all RepRapFirmware-specific flags will be set on the comm layer. For now no other handling will be performed.

Added safe mode flag --safe and config setting startOnceInSafeMode that disables all third party plugins when active. The config setting will automatically be removed from config.yaml after the server has started through successfully.

Improvements

#1422 - Added option for post roll for timed timelapse to duplicate last frame instead of capturing new frames. That makes for a faster render at the cost of a still frame at the end of the rendered video. See also #1553.

#1551 - Allow to define a custom bounding box for valid printer head movements in the printer profile, to make print dimension check more flexible.

#1593 - Automatically migrate old manual system commands for restarting OctoPrint and rebooting or shutting down the server to the new system wide configuration settings. Make a backup copy of the old config.yaml before doing so in case a manual rollback is required.

New central configuration option for commands to restart OctoPrint and to restart and shut down the system OctoPrint is running on. This allows plugins (like the Software Update Plugin or the Plugin Manager) and core functionality to perform these common administrative tasks without the user needing to define everything redundantly.

Introduced three new Events Connecting, Disconnecting and PrinterStateChanged.

Introduced new GCODE script beforePrinterDisconnected which will get sent before a (controlled) disconnect from the printer. This can be used to send some final commands to the printer before the connection goes down, e.g. M117 Bye from OctoPrint.

The communication layer will now wait for the send queue to be fully processed before disconnecting from the printer for good. This way it is ensured that the beforePrinterDisconnected script or any further GCODE injected into it will actually get sent.

Additional baud rates to allow for connecting can now be specified along side additional serial ports via the settings dialog and the configuration file.

Option to never send checksums (e.g. if the printer firmware doesn't support it), see #949.

Added secondary temperature polling interval to use when printer is not printing but a target temperature is set - this way the graph should be more responsive while monitoring a manual heatup.

Main page and asset files now carry proper ETag and Last-Modified headers to allow for sensible browser-side caching

API sets Etag and/or Last-Modified headers on responses to GET requests where possible and feasible to allow for sensible browser-side caching

Renamed GcodeFilesViewModel to FilesViewModel - plugin authors should accordingly update their dependencies from gcodeFilesViewModel to filesViewModel. Using the old name still works, but will log a warning and stop working with 1.4.x.

Make sure volume.depth for circular beds is forced to volume.width in printer profiles

Support for M116

Support M114 responses without whitespace between coordinates (protocol consistency - who needs it?).

M600 is now marked as a long running command by default.

Don't focus files in the file list after deleting a file - made the list too jumpy.

Cura plugin: "Test" button to check if path to cura engine is valid.

Cura plugin: Wizard component for configuring the path to the CuraEngine binary and for importing the first slicing profile

Timelapse: Better (& earlier) reporting to the user when something's up with the snapshot URL causing issues with capturing timelapse frames and hence making it impossible to render a timelapse movie on print completion.

Virtual printer: Usage screen for the !!DEBUG commands on !!DEBUG, !!DEBUG:help or !!DEBUG:?

Updated frontend dependencies (possibly relevant for plugin authors):

Bootstrap to 2.3.2

JQuery to 2.2.4

Lodash to 3.10.1

SockJS to 1.1.1

Better error resilience against errors in UI components.

Various improvements in the GCODE interpreter which performs the GCODE analysis

Various adjustments towards Python 3 compatibility (still a work in progress though, see also #1411, #1412, #1413, #1414)

Fix for system menu not getting properly reloaded after entries changed

Invalidate /api/settings cache on change of the currently enabled plugins (by including plugin names into ETag calculation) and/or on change of the current effective config.

Fix for /api/settings not being properly invalidated for plugin settings that do not have a representation in config.yaml but are only added at runtime (and hence are not captured by config.effective).

Invalidate /api/timelapse cache on change of the current timelapse configuration.

Fixed an issue causing the version number not to be properly extracted from sdist tarballs generated under Windows.

Get rid of double scroll bar in printer profile editor.

Fixed tracking of current byte position in file being streamed from disk. Turns out that self._handle.tell lied to us thanks to line buffering.

Fixed select & print not working anymore for SD files thanks to a timing issue.

Only insert divider in system menu after core commands if there are custom commands.

Fix update of webcam stream URL not being applied due to caching.

Fixed a rare race condition causing the new "The settings changed, reload?" popup to show up even when the settings change originated in the same client instance.

Fixed a bunch of missing translations.

Pinned Tornado version to 4.0.2. Former version requirement was able to pull in a beta version causing issues with websockets due to a bug in permessage-deflate handling. The Tornado requirement needs an update, but we'll leave it at 4.0.2 for 1.3.0 since we'll need to do some migration work for compatibility with anything newer. Potentially related to #1523.

Fix a rare race condition in the command line helper and the update script that could cause the code to hang due to waiting on an event that would never be set.

Fix issue with handling new settings substructures when they are compared to existing settings data in order to find the structural diff.

Fix for the temperature graph not displaying the data history on site reload.

More information

1.2.18 (2016-11-30)

Improvements

Allow arbitrary frame rates for creating timelapses. Before, the entered fps value was also directly used as frame rate for the actual video, which could cause problems with any frame rates not specified in the MPEG2 standard. Now OctoPrint will use a standard frame rate for the rendered video and render the timelapse stills into the finished movie with the configured frame rate.

More information

1.2.17 (2016-11-08)

Improvements

Files like config.yaml etc will now persist their permissions, with a lower and upper permission bounds for sanitization (e.g. removing executable flags on configuration files but keeping group read/write permissions if found).

Log full stack trace on socket connection errors when debug logging for octoprint.server.util.sockjs is enabled

SettingsPlugins may now mark configuration paths as restricted so that they are not returned on the REST API

Updated LESS.js version

Improved the serial.log logging handler to roll over serial log on new connections to the printer instead of continuously appending to the same file. Please note that serial.log is a debugging tool only and should not be left enabled unless you are trying to troubleshoot something in your printer communication.

Split JS/CSS/LESS asset bundles according into asset bundles for core + bundled plugins ("packed_core.{js|css|less}") and third party plugins ("packed_plugins.{js|css|less}"). That will allow the core UI to still function properly even if an installed third party plugin produces invalid JS and therefore causes a parser error for the whole plugin JS file. See #1544 for an example of such a situation.

Fixed issue causing remember_me cookie not to be deleted properly on logout

Fixed broken filter toggling on ItemListHelper class used for various lists throughout the web interface

Fixed an issue with the preliminary page never reporting that the server is now up if the page generated during preliminary caching had no cache headers set (e.g. because it contained the first run setup wizard)

Fixed a bug causing the update of OctoPrint to not work under certain circumstances: If 1.2.16 was installed and the settings were never saved via the "Settings" dialog's "Save", the update of OctoPrint would fail due to a KeyError in the updater. Reason is a renamed property, properly switched to when saving the settings.

Fixed the logging subsystem to properly clean up after itself.

Fixed a wrong order in loading JS files on the client introduced in 1.2.17rc2 to make the UI more resilient against broken plugin JS.

Properly handle empty JS file list from plugins. Solves a 500 on OctoPrint instances without any third party plugins installed generated during web asset bundling introduced in 1.2.17rc2.

More information

1.2.16 (2016-09-23)

Improvements

#1434: Make sure to sanitize any file names in the upload folder that do not match OctoPrint's file name "sanitization standard" automatically when creating a file listing. This should solve issues with UI functionality like selecting a file for printing or deleting a file to not work with files that were uploaded manually to the uploads folder. As a side note: Please don't do this, use the watched folder if you want to SCP/FTP/copy files directly to OctoPrint.

Improved fuzzy print time displays in the frontend. Rounding now takes overall duration into account - durations over a day will be rounded up/down to half days, durations over an hour will be rounded up/down to half hours, durations over 30min will be rounded to 10min segments, durations below 30min will be rounded up or down to the next minute depending on the seconds and finally if we are talking about less than a minute, durations over 30s will return "less than a minute", durations under 30s will return "a couple of seconds".

Improved intermediary loading page: Don't report server as ready and reload until preliminary caching has been done, IF preliminary caching will be done.

Added release channels to OctoPrint's bundled Software Update plugin. You will now be able to subscribe to OctoPrint's maintenance or devel release candidates in addition to stable versions. Read more about Release Channels on the wiki.

Return a "400 Bad Request" instead of a "500 Internal Server Error" if a multipart/form-data request (e.g. a file upload) is sent which lacks the boundary field.

Bug Fixes

#1448: Don't "eat" first line of the pause script after a pause triggering M0 but send it to the printer instead

#1477: Only report files enqueued for analysis which actually are (as in, don't claim to have queued STL files for GCODE analysis)

Make sure that all bytes of a line to send to the printer have actually been sent

"Tickle" printer when encountering a communication timeout while idle

Report CLOSED/CLOSED_WITH_ERROR states as "Offline" in frontend for more consistency with startup NONE state which already was reported as "Offline"

Another attempt at a saner print time estimation: Force linear (way less accurate) estimate if calculation of more accurate version takes too long, sanity check calculated estimate and use linear estimate if it looks wrong, improved threshold values for calculation. Read the second half of this post on the mailing list on why accurate print time estimation is so difficult to achieve.

Display print job progress percentage on progress bar.

Added an indicator for print time left prediction accuracy and explanation of its origin as tooltip.

Improved visual distinction of "State" sidebar panel info clusters.

Bug Fixes

#1388 - Track consecutive timeouts even when idle and disconnect from printer when it's not responding any longer.

#1391 - Only use the first value from the X-Scheme header for the reverse proxy setup. Otherwise there could be problems when multiple reverse proxies were configured chained together, each adding their own header to the mix.

#1407 - If a file is uploaded with the "print" flag set to true, make sure to clear that flag after the print job has been triggered so that now all following uploaded or selected files will start printing on their own.

#1409 - Don't report a communication timeout after a heatup triggered by a print from SD.

Fixed scrolling to freshly uploaded files, also now highlighting the file entry for better visibility.

Fixed overeager preemptive caching of invalid protocols.

Fix modal background of update confirmation not vanishing

Ensure log entries and messages from printer are sent to frontend already converted to utf-8. Otherwise even one line in the log that can't be converted automatically without error can cause updates from the backend to not arrive.

Report correct printer state including error strings even after disconnecting

While printing, be sure to read the next line from file and send that if the current line was filtered

1.2.13 (2016-06-16)

Bug Fixes

#1373: Don't parse B: as bed temperature when it shows up as part of a position report from M114.

#1374: Don't try to perform a passive login when the components we'd need to inform about a change in login state aren't yet available. Solves a bug that lead - among other things - to the Plugin Manager and the Software Update Plugin not showing anything but misleading errors until the user logged out and back in.

Fixed the temperature graph staying uninitialized until a connection to a printer was established.

Fixed an error causing issues during frontend startup if the browser doesn't support tracking browser visibility.

Fixed an error causing issues during frontend startup if the browser doesn't support the capabilities needed for the GCODE viewer.

Bug Fixes

#1324: Make daemonized OctoPrint properly clean up its pid file again (see also #1330).

#1326: Do not try to clean up an unrendered timelapse while it is already being deleted (and produce way too much logging output in the process).

#1343: Events are now processed in the order they are fired in, making e.g. the "timelapse rendering" message always appear before "timelapse failed" and hence not stay on forever in case of a failed timelapse.

1.2.11 (2016-05-04)

Important Announcement

Due to a recent change in the financial situation of the project, the funding of OctoPrint is at stake. If you love OctoPrint and want to see its development continue at the pace of the past two years, please read on about its current funding situation and how you can help: "I need your support".

Improvements

Added option to treat resend requests as ok for such firmwares that do not send an ok after requesting a resend. If you printer communication gets stalled after a resend request from the firmware, try checking this option.

Added an "About" dialog to properly inform about OctoPrint's license, contributors and supporters.

Added a announcement plugin that utilizes the RSS feeds of the OctoPrint Blog and the plugin repository to display news to the user. By default only the "important announcement" category is enabled. This category will only be used for very rare situations such as making you aware of critical updates or important news. You can enable further categories (with more announcements to be expected) in the plugin's settings dialog.

Bug Fixes

#1300 - Removed possibility to accidentally disabling local file list by first limiting view to files from SD and then disabling SD support.

1.2.10 (2016-03-16)

Improvements

Log small log excerpt to octoprint.log upon encountering a communication error.

Changed wording in "firmware error" notifications to better reflect that there was an error while communicating with the printer, since the error condition can also be triggered by serial errors while trying to establish a connection to the printer or when already connected.

1.2.9 (2016-02-10)

Improvements

#318 - Snapshots for timelapses are now named in a non-colliding, job-based way, allowing a new timelapse to start while the other is still being rendered (although printing with an active timelapse rendering job is not recommended and will be solved with a proper render job queue in a later version). Timelapses that were not successfully rendered are kept for 7 days (configurable, although not via the UI so far) and can be manually rendered or deleted through a new UI component within the timelapse tab that shows up if unrendered timelapses are detected.

#485 - "Timelapse rendering" notification is now persistent, even across reloads/client switches. That should make it easier to see that a rendering job is currently in progress.

#1204 - Display total print time as estimated by GCODE viewer on GCODE viewer tab. That will allow access to an estimate even if the server hadn't yet calculated that when a print started. Note that due to slightly different implementation server and client side the resulting estimate might differ.

OctoPrint now serves an intermediary page upon start that informs the user about the server still starting up. Once the server is detected as running, the page automatically switches to the standard interface.

OctoPrint now displays a link to the release notes of an updated component in the update notification, the update confirmation and the version overview in the settings dialog. Please always make sure to at least skim over the release notes for new OctoPrint releases, they might contain important information that you need to know before updating.

Improved initial page loading speeds by introducing a preemptive cache. OctoPrint will now record how you access it and on server start pre-render the page so it's ideally available in the server-side cache when you try to access it.

Initialize login user name and password with an empty string and clear both on successful login (see #1175).

Added a "Refresh" button to the file list for people who modify the stored files externally (doing this is not encouraged however due to reasons of book keeping, e.g. metadata tracking etc).

"Save" button on settings dialog is now disabled while background tasks (getting or receiving config data from the backend) are in progress.

Improved performance of terminal tab on lower powered clients. Adaptive rate limiting now ensures the server backs off with log updates if the client can't process them fast enough. If the client is really slow, log updates get disabled automatically during printing. This behaviour can be disabled with override buttons in the terminal tab's advanced options if necessary.

Added option to ignore any unhandled errors reported by the firmware and another option to only cancel ongoing prints on unhandled errors from the firmware (instead of instant disconnect that so far was the default).

Made version compatibility check PEP440 compliant (important for plugin authors).

1.2.8 (2015-12-07)

Notes for Upgraders

A bug in 1.2.7 prevents directly updating to 1.2.8, here's what to do

A bug in OctoPrint 1.2.7 (fixed in 1.2.8) prevents updating OctoPrint to version
1.2.8. If you try to perform the update, you will simply be told that "the update
was successful", but the update won't actually have taken place. To solve this
hen-egg-problem, a plugin has been made available that fixes said bug (through
monkey patching).

Before attempting to update your installation from version 1.2.7 to version 1.2.8,
please install the plugin via your plugin manager and restart your server. Note that
you will only see it in the Plugin Manager if you need it, since it's only compatible with
OctoPrint version 1.2.7. After you installed the plugin and restarted your server
you can update as usual. The plugin will self-uninstall once it detects that it's
running under OctoPrint 1.2.8. After the self-uninstall another restart of your server
will be triggered (if you have setup your server's restart command, defaults to
sudo service octoprint restart on OctoPi) in order to really get rid of any
left-overs, so don't be alarmed when that happens, it is intentional.

If you cannot or don't want to use the plugin, alternatively you can switch
OctoPrint to "Commit" based tracking via the settings of the Software Update plugin,
update, then switch back to "Release" based tracking (see this screenshot).

Bed temperatures are now only displayed if printer profile has a heated bed configured

This release fixes a bug
that caused bed temperature display and controls to be available even if the
selected printer profile didn't have a heated bed configured.

If your printer does have a heated bed but you are not seeing its temperature
in the "Temperature" tab after updating to 1.2.8, please make sure to check
the "Heated Bed" option in your printer profile (under Settings > Printer Profiles)
as shown in this short GIF.

Interpret M25 in a GCODE file that is being streamed from OctoPrint as
indication to pause, like M0 and M1.

Cache rendered page and translation files indefinitely. That should
significantly improve performance on reloads of the web interface.

Added the string "unknown command" to the list of ignored printer errors.
This should help with general firmware compatibility in case a firmware
lacks features.

Added the strings "cannot open" and "cannot enter" to the list of ignored
printer errors. Those are errors that Marlin may report if there is an issue
with the printer's SD card.

The "CuraEngine" plugin now makes it more obvious that it only targets
CuraEngine versions up to and including 15.04 and also links to the plugin's
homepage with more information right within the settings dialog.

Browser tab visibility is now tracked by the web interface, disabling the
webcam and the GCODE viewer if the tab containing OctoPrint is not active.
That should reduce the amount of resource utilized by the web interface on
the client when it is not actively monitored. Might also help to mitigate
#1065, the final verdict
on that one is still out though.

The printer log in the terminal tab will now be cut off after 3000 lines
even if autoscroll is disabled. If the limit is reached, no more log lines
will be added to the client's buffer. That ensures that the log will not
scroll and the current log excerpt will stay put while also not causing
the browser to run into memory errors due to trying to buffer an endless
amount of log lines.

Increased timeout of "waiting for restart" after an update from 20 to 60sec
(20sec turned out to be too little for OctoPi for whatever reason).

Added a couple of unit tests

Bug Fixes

#1120 - Made the watchdog
that monitors and handles the watched folder more resilient towards errors.

Only persist plugin settings that differ from the defaults. This way the
config.yaml won't be filled with lots of redundant data. It's the
responsibility of the plugin authors to responsibly handle changes in default
settings of their plugins and add data migration where necessary.

Fixed OctoPrint still sending SD card related commands to the printer even
if SD card support is disabled (e.g. M21).

Hidden files are no longer visible to the template engine, neither as (GCODE)
scripts nor as interface templates.

The hostname and URL prefix via which the OctoPrint web interface is accessed
is now part of the cache key. Without that being the case the cache could
be created referring to something like /octoprint/prefix/api/ for its API
endpoint (if accessed via http://somehost:someport/octoprint/prefix/ first
time), which would then cause the interface to not work if accessed later
via another route (e.g. http://someotherhost/).

1.2.6 (2015-09-02)

Improvements

Bug Fixes

Pinned requirement for psutil
dependency to version 3.1.1 of that library due to an issue when
installing version 3.2.0 of that library released on 2015-09-02 through
a python setup.py install on OctoPrint. Also pinned all other requirements
to definitive versions that definitely work while at it to keep that from
happening again.

1.2.5 (2015-08-31)

Improvements

New central configuration option for commands to restart OctoPrint and to
restart and shut down the system OctoPrint is running on. This allows plugins
(like the Software Update Plugin or the Plugin Manager) and core functionality
to perform these common administrative tasks without the user needing to define
everything redundantly.

Settings dialog now visualizes when settings are saving and when they being
retrieved. Also the Send/Cancel buttons are disabled while settings are saving
to prevent duplicated requests and concurrent retrieval of the settings by
multiple viewmodels is disabled as well.

Better protection against rendering errors from templates provided by third
party plugins.

Better protection against corrupting the configuration by using a temporary
file as intermediate buffer.

1.2.4 (2015-07-23)

Improvements

RepeatedTimer now defaults to daemon set to True. This makes sure
plugins using it don't have to remember to set that flag themselves in
order for the server to properly shut down when timers are still active.

Fixed a typo in the docs about logging.yaml (top level element is
loggers, not logger).

Support for plugins with external dependencies (dependency_links in
setuptools), interesting for plugin authors who need to depend on Python
libraries that are (not yet) available on PyPI.

Better resilience against errors within plugins.

Bug Fixes

Do not cache web page when running for the first time, to avoid caching
the first run dialog popup along side with it. This should solve issues
people were having when configuring OctoPrint for the first time, then
reloading the page without clearing the cache, being again prompted with
the dialog with no chance to clear it.

Fix/workaround for occasional white panes in settings dialog on Safari 8,
which appears to have an issue with fixed positioning.

Fixed form field truncation in upload requests that could lead to problems
when trying to import Cura profiles with names longer than 28 characters.

Fixed webcam rotation for timelapse rendering.

Fixed user settings not reaching the editor in the frontend.

Notifications that are in process of being closed don't open again on
mouse over (that was actually more of an unwanted feature).

1.2.3 (2015-07-09)

Improvements

New option to actively poll the watched folder. This should make it work also
if it is mounted on a filesystem that doesn't allow getting notifications
about added files through notification by the operating system (e.g.
network shares).

1.2.2 (2015-06-30)

Bug Fixes

1.2.1 (2015-06-30)

Improvements

More flexibility when interpreting compatibility data from plugin repository. If compatibility information is provided
only as a version number it's prefixed with >= for the check (so stating a compatibility of only
1.2.0 will now make the plugin compatible to OctoPrint 1.2.0+, not only 1.2.0). Alternatively the compatibility
information may now contain stuff like >=1.2,<1.3 in which case the plugin will only be shown as compatible
to OctoPrint versions 1.2.0 and up but not 1.3.0 or anything above that. See also
the requirement specification format of the pkg_resources package.

Only print the commands of configured event handlers to the log when a new debug flag is present in the config
(see the docs). Reduces risk of disclosing sensitive data when sharing log files.

Bug Fixes

#956 - Fixed server crash when trying to configure a default
slicing profile for a still unconfigured slicer.

1.2.0 (2015-06-25)

Note for Upgraders

The Cura integration has changed in such a way that OctoPrint now calls the
CuraEngine directly instead of depending on the full Cura installation. See
the wiki for instructions on how to change your setup to
accommodate the new integration.

New Features

OctoPrint now has a plugin system which allows extending its
core functionality.

Added internationalization of UI. Translations of OctoPrint are being crowd sourced via Transifex.
Language Packs for both the core application as well as installed plugins can be uploaded through a new management
dialog in Settings > Appearance > Language Packs. A translation into German is included, further language packs
will soon be made available.

Printer Profiles: Printer properties like print volume, extruder offsets etc are now managed via Printer Profiles. A
connection to a printer will always have a printer profile associated.

File management now supports STL files as first class citizens (including UI adjustments to allow management of
uploaded STL files including removal and reslicing) and also allows folders (not yet supported by UI). STL files
can be downloaded like GCODE files.

Slicing has been greatly improved:

It now allows for a definition of slicing profiles to use for slicing plus overrides which can be defined per slicing
job (defining overrides is not yet part of the UI but it's on the roadmap).

A new slicing dialog has been added which allows (re-)slicing uploaded STL files (which are now displayed in the file list
as well). The slicing profile and printer profile to use can be specified here as well as the file name to which to
slice to and the action to take after slicing has been completed (none, selecting the sliced GCODE for printing or
starting to print it directly)

The slicing API allows positioning the model to slice on the print bed (Note: this is not yet available in the UI).

Slicers themselves are integrated into the system via SlicingPlugins.

Bundled Cura Plugin allows slicing through CuraEngine up
to and including 15.04. Existing Cura slicing profiles can be imported through the web interface.

New file list: Pagination is gone, no more (mobile incompatible) pop overs, instead scrollable and with instant
search

You can now define a folder (default: ~/.octoprint/watched) to be watched for newly added GCODE (or -- if slicing
support is enabled -- STL) files to automatically add.

Username in login dialog is not automatically capitalized on mobile devices anymore (#639)

"Slicing Done" and "Streaming Done" notifications now have a green background (#558)

Files that are currently in use, be it for slicing, printing or whatever, are now tracked and can not be deleted as
long as they are in use

Settings in UI get refreshed when opening settings dialog

New event "SettingsUpdated"

"Print time left" is now not displayed until it becomes somewhat stable. Display in web interface now also happens
in a fuzzy way instead of the format hh:mm:ss, to not suggest a high accuracy anymore where the can't be one. Additionally
OctoPrint will use data from prior prints to enhance the initial print time estimation.

Added handler for uncaught exceptions to make sure those get logged, should make the logs even more useful for analysing
bug reports

The server now tracks the modification date of the configuration file and reloads it prior to saving the config if
it has been changed during runtime by external editing, hence no config settings added manually while the server
was running should be overwritten anymore.

Display a "Please Reload" overlay when a new server version or a change in installed plugins is detected after a
reconnect to the server.

Better handling of errors on the websocket - no more logging of the full stack trace to the log, only a warning
message for now.

Daemonized OctoPrint now cleans up its pidfile when receiving a TERM signal (#711)

Added an option to specify the amount of encoding threads for FFMPEG (#785)

"Disconnected" screen now is not shown directly after a close of the socket, instead the client first tries to
directly reconnect once, and only if that doesn't work displays the dialog. Should reduce short popups of the dialog
due to shaky network connections and/or weird browser behaviour when downloading things from the UI.

Development dependencies can now be installed with pip -e .[develop]

White and transparent colors ;) are supported for the navigation bar (#789)

Drag-n-drop overlay for file uploads now uses the full available screen space, improving usability on high resolution
displays (#187)

OctoPrint server should no longer hang when big changes in the system time happen, e.g. after first contact to an
NTP server on a Raspberry Pi image. Achieved through monkey patching Tornado with
this PR.

Serial ports matching /dev/ttyAMA* are not anymore listed by default (this was the reason for a lot of people
running into problems while attempting to connect to their printer on their Raspberry Pis, on which /dev/ttyAMA0
is the OS's serial console by default). Added configuration of additional ports to the Serial Connection section in
the Settings to make it easier for those people who do indeed have their printer connected to /dev/ttyAMA0.

Better behaviour of the settings dialog on low-width devices, navigation and content also now scroll independently
from each other (see also #823)

Renamed "Temperature Timeout" and "SD Status Timeout" in Settings to "Temperature Interval" and "SD Status Interval"
to better reflect what those values are actually used for.

Added support for rectangular printer beds with the origin in the center (#682
and #852). Printer profiles now contain a new settings volume.origin
which can either be lowerleft or center. For circular beds only center is supported.

Made baudrate detection a bit more solid, still can't perform wonders.

Only show configuration options for additional extruders if more than one is available, and don't include offset
configuration for first nozzle which acts as reference for the other offsets (#677).

Cut off of the temperature graph is now not based on the number of data points any more but on the actual time of the
data points. Anything older than n minutes will be cut off, with n defaulting to 30min. This value can be
changed under "Temperatures" in the Settings (#343).

System commands now be set to a) run asynchronized by setting their async property to true and b) to ignore their
result by setting their ignore property to true.

Various improvements of newly introduced features over the course of development:

File management: The new implementation will migrate metadata from the old one upon first startup after upgrade from
version 1.1.x to 1.2.x. That should speed up initial startup.

File management: GCODE Analysis backlog processing has been throttled to not take up too many resources on system
startup. Freshly uploaded files should still be analyzed at full speed.

Plugins: SettingsPlugins may track versions of configuration format stored in config.yaml, including a custom
migration method getting called when a mismatch between the currently stored configuration format version and the one
reported by the plugin as current is detected.

Plugins: Plugins may now have a folder for plugin related data whose path can be retrieved from the plugin itself
via its new method get_plugin_data_folder.

#942 - Settings can now be saved again after installing a new
plugin. Plugins must not use super anymore to call parent implementation of SettingsPlugin.on_settings_save but
should instead switch to SettingsPlugin.on_settings_save(self, ...). Settings API will capture related
TypeErrors and log a big warning to the log file indicating which plugin caused the problem and needs to be
updated. Also updated all bundled plugins accordingly.

Software Update: Don't persist more check data than necessary in the configuration. Solves an issue where persisted
information overrode updated check configuration reported by plugins, leading to a "an update is available" loop.
An auto-migration function was added that should remove the redundant data.

Made initial connection to printer a bit more responsive: Having to wait for the first serial timeout before sending
the first M105 even when not waiting for seeing a "start" caused unnecessary wait times for reaching the
"Operational" state.

[unreported] & #698 - Generated URLs now take X-Forwarded-Host header
sent by proxies into account for included host and port, also fixed #698
introduced by this

[unreported] Fixed a bug causing gcodeInterpreter to hiccup on GCODES containing invalid coordinates such as Xnan or
Yinf (backported from devel)

Small fixes for timelapse creation:

#344 - Made timelapses capable of coping with missing captures in between by decrementing the image counter again if there
was an error fetching the latest image from the snapshot URL (backport of 1a7a468
and bf9d5ef)

Bug Fixes

1.1.0 (2014-09-03)

New Features

New REST API, including User API Keys additionally to the global API key. Please note that this will break existing
API clients as it replaces the old API (same endpoint). You can find the documentation of the new API at
docs.octoprint.org.

New Event structure allows more flexibility regarding payload data, configuration files will be migrated automatically.
You can find the documentation of the new event format and its usage at docs.octoprint.org.

Support for multi extruder setups. With this OctoPrint now in theory supports an unlimited amount of extruders, however
for now it's artificially limited to 9.

Log files can be accessed from within the browser via the Settings dialog (#361)

Timelapses can now have a post-roll duration configured which will be rendered into the video too to not let it
end so abruptly (#384)

Improvements

Webcam stream is disabled when control tab is not in focus, reduces bandwidth (#316)

M and G commands entered in Terminal tab are automatically converted to uppercase

GCODE viewer now only loads automatically if GCODE file size is beneath certain threshold (different ones for desktop
and mobile devices), only actually loads file if user acknowledges that this might be too much for his browser

The dimensions of the print bed can now be configured via the Settings (#396)

Target temperature reporting format of Repetier Firmware is now supported as well (360)

Version tracking now based on git tagging and versioneer. Version number,
git commit and branch get reported in the format <version tag>-<commits since then>-g<commit hash> (<branch> branch),
e.g. 1.2.0-dev-172-ga48b5de (devel branch).

Made "Center viewport on model" and "Zoom in on model" in the GCODE viewer automatically deselect and de-apply if
viewport gets manipulated by the user (#398)

Preamble

The GNU Affero General Public License is a free, copyleft license
for software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.

The licenses for most software and other practical works are
designed to take away your freedom to share and change the works. By
contrast, our General Public Licenses are intended to guarantee your
freedom to share and change all versions of a program--to make sure it
remains free software for all its users.

When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.

A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.

The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.

An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.

The precise terms and conditions for copying, distribution and
modification follow.

TERMS AND CONDITIONS

0. Definitions.

"This License" refers to version 3 of the GNU Affero General Public
License.

"Copyright" also means copyright-like laws that apply to other kinds
of works, such as semiconductor masks.

"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.

To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

A "covered work" means either the unmodified Program or a work based
on the Program.

To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

1. Source Code.

The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.

A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

The Corresponding Source for a work in source code form is that
same work.

2. Basic Permissions.

All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.

3. Protecting Users' Legal Rights From Anti-Circumvention Law.

No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

4. Conveying Verbatim Copies.

You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

5. Conveying Modified Source Versions.

You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.

b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".

c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.

d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.

A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

6. Conveying Non-Source Forms.

You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.

b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.

c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.

d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.

e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.

A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

7. Additional Terms.

"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or

b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or

c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or

d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or

e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or

f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.

All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further restriction,
you may remove that term. If a license document contains a further
restriction but permits relicensing or conveying under this License, you
may add to a covered work material governed by the terms of that license
document, provided that the further restriction does not survive such
relicensing or conveying.

If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

8. Termination.

You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

9. Acceptance Not Required for Having Copies.

You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

10. Automatic Licensing of Downstream Recipients.

Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.

An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

11. Patents.

A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".

A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

12. No Surrender of Others' Freedom.

If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

13. Remote Network Interaction; Use with the GNU General Public License.

Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.

Notwithstanding any other provision of this License, you have permission
to link or combine any covered work with a work licensed under version 3
of the GNU General Public License into a single combined work, and to
convey the resulting work. The terms of this License will continue to
apply to the part which is the covered work, but the work with which it is
combined will remain governed by version 3 of the GNU General Public
License.

14. Revised Versions of this License.

The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may differ
in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero
General Public License "or any later version" applies to it, you have
the option of following the terms and conditions either of that
numbered version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number
of the GNU Affero General Public License, you may choose any version
ever published by the Free Software Foundation.

If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that
proxy's public statement of acceptance of a version permanently
authorizes you to choose that version for the Program.

Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

15. Disclaimer of Warranty.

THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

16. Limitation of Liability.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

17. Interpretation of Sections 15 and 16.

If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.

You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<http://www.gnu.org/licenses/>.

Server is offline

Please reload

There is a new version of the server active now, a reload
of the user interface is needed. This will not interrupt
any print jobs you might have ongoing. Please reload the
web interface now by clicking the button below.