OctoPrint is the snappy web interface for your 3D printer!

Overview

OctoPrint's logo

OctoPrint

GitHub release PyPI Build status Community Forum Discord Twitter Follow Contributor Covenant Code style: black Code style: prettier Imports: isort pre-commit

OctoPrint provides a snappy web interface for controlling consumer 3D printers. It is Free Software and released under the GNU Affero General Public License V3.

Its website can be found at octoprint.org.

The community forum is available at community.octoprint.org. It also serves as central knowledge base.

An invite to the Discord server can be found at discord.octoprint.org.

The FAQ can be accessed by following faq.octoprint.org.

The documentation is located at docs.octoprint.org.

The official plugin repository can be reached at plugins.octoprint.org.

OctoPrint's development wouldn't be possible without the financial support by its community. If you enjoy OctoPrint, please consider becoming a regular supporter!

Screenshot

You are currently looking at the source code repository of OctoPrint. If you already installed it (e.g. by using the Raspberry Pi targeted distribution OctoPi) and only want to find out how to use it, the documentation might be of more interest for you. You might also want to subscribe to join the community forum at community.octoprint.org where there are other active users who might be able to help you with any questions you might have.

Contributing

Contributions of all kinds are welcome, not only in the form of code but also with regards to the official documentation, debugging help in the bug tracker, support of other users on the community forum at community.octoprint.org or the official discord at discord.octoprint.org and also financially.

If you think something is bad about OctoPrint or its documentation the way it is, please help in any way to make it better instead of just complaining about it -- this is an Open Source Project after all :)

For information about how to go about submitting bug reports or pull requests, please see the project's Contribution Guidelines.

Installation

Installation instructions for installing from source for different operating systems can be found on the forum.

If you want to run OctoPrint on a Raspberry Pi, you really should take a look at OctoPi which is a custom SD card image that includes OctoPrint plus dependencies.

The generic steps that should basically be done regardless of operating system and runtime environment are the following (as regular user, please keep your hands off of the sudo command here!) - this assumes you already have Python 2.7, 3.6 or 3.7, pip and virtualenv and their dependencies set up on your system:

  1. Create a user-owned virtual environment therein: virtualenv venv. If you want to specify a specific python to use instead of whatever version your system defaults to, you can also explicitly require that via the --python parameter, e.g. virtualenv --python=python3 venv.
  2. Install OctoPrint into that virtual environment: ./venv/bin/pip install OctoPrint

You may then start the OctoPrint server via /path/to/OctoPrint/venv/bin/octoprint, see Usage for details.

After installation, please make sure you follow the first-run wizard and set up access control as necessary.

Dependencies

OctoPrint depends on a few python modules to do its job. Those are automatically installed when installing OctoPrint via pip.

OctoPrint currently supports Python 2.7, 3.6 and 3.7.

Usage

Running the pip install via

pip install OctoPrint

installs the octoprint script in your Python installation's scripts folder (which, depending on whether you installed OctoPrint globally or into a virtual env, will be in your PATH or not). The following usage examples assume that the octoprint script is on your PATH.

You can start the server via

octoprint serve

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

octoprint serve --host=127.0.0.1 --port=8080

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

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

octoprint daemon {start|stop|restart} [--pid PIDFILE]

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

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

octoprint serve --config /path/to/another/config.yaml --basedir /path/to/my/basedir

To start OctoPrint in safe mode - which disables all third party plugins that do not come bundled with OctoPrint - use the --safe flag:

octoprint serve --safe

See octoprint --help for more information on the available command line parameters.

OctoPrint also ships with a run script in its source directory. You can invoke it to start the server. It takes the same command line arguments as the octoprint script.

Configuration

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

A comprehensive overview of all available configuration settings can be found in the docs. Please note that the most commonly used configuration settings can also easily be edited from OctoPrint's settings dialog.

Special Thanks

Cross-browser testing services are kindly provided by BrowserStack.

Profiling is done with the help of PyVmMonitor.

Error tracking is powered and sponsored by Sentry.

Comments
  • Print failing when resend is requested

    Print failing when resend is requested

    I just updated to the latest master code, and my prints are now failing as soon as my printer (Prusa i3 with Marlin) requests a resend. It looks like maybe https://github.com/foosel/OctoPrint/commit/bbad030a9227db6ca2df42d393c38fb4db6817a4 is the reason for the failure. I will try rolling back those changes and see if that fixes anything.

    My terminal log: (I missed the first error, but this keeps repeating forever)

    Recv: ok Send: N4976G1 X108.029 Y99.790 E9.34505_76 Recv: Error:No Line Number with checksum, Last Line: 4974 Recv: Error:Line Number is not Last Line Number+1, Last Line: 4974 Recv: Resend: 4975 Send: N4975G1 X107.734 Y100.022 E9.33912_121 Recv: ok Send: N4976G1 X108.029 Y99.790 E9.34505_76 Recv: Error:No Line Number with checksum, Last Line: 4974 Recv: Error:Line Number is not Last Line Number+1, Last Line: 4974 Recv: Resend: 4975 Send: N4975G1 X107.734 Y100.022 E9.33912_121 Recv: ok Send: N4976G1 X108.029 Y99.790 E9.34505_76 Recv: Error:No Line Number with checksum, Last Line: 4974 Recv: Error:Line Number is not Last Line Number+1, Last Line: 4974 Recv: Resend: 4975 Send: N4975G1 X107.734 Y100.022 E9.33912_121 Recv: ok Send: N4976G1 X108.029 Y99.790 E9.34505_76 Recv: Error:No Line Number with checksum, Last Line: 4974 Recv: Error:Line Number is not Last Line Number+1, Last Line: 4974 Recv: Resend: 4975 Send: N4975G1 X107.734 Y100.022 E9.33912_121 Recv: ok Send: N4976G1 X108.029 Y99.790 E9.34505_76 Recv: Error:Line Number is not Last Line Number+1, Last Line: 4974 Recv: Resend: 4975 Send: N4975G1 X107.734 Y100.022 E9.33912_121 Recv: ok Send: N4976G1 X108.029 Y99.790 E9.34505_76 Recv: Error:Line Number is not Last Line Number+1, Last Line: 4974 Recv: Resend: 4975 Send: N4975G1 X107.734 Y100.022 E9.33912_121 Recv: ok Send: N4976G1 X108.029 Y99.790 E9.34505_76 Recv: Error:Line Number is not Last Line Number+1, Last Line: 4974 Recv: Resend: 4975 Send: N4975G1 X107.734 Y100.022 E9.33912_121 Recv: ok Send: N4976G1 X108.029 Y99.790 E9.34505_76 Recv: Error:Line Number is not Last Line Number+1, Last Line: 4974 Recv: Resend: 4975 Send: N4975G1 X107.734 Y100.022 E9.33912_121 Recv: ok Send: N4976G1 X108.029 Y99.790 E9.34505_76 Recv: Error:No Line Number with checksum, Last Line: 4974 Recv: Error:Line Number is not Last Line Number+1, Last Line: 4974 Recv: Resend: 4975 Send: N4975G1 X107.734 Y100.022 E9.33912_121 Recv: ok Send: N4976G1 X108.029 Y99.790 E9.34505_76 Recv: Error:Line Number is not Last Line Number+1, Last Line: 4974 Recv: Resend: 4975 Send: N4975G1 X107.734 Y100.022 E9.33912_121 Recv: ok

    needs information 
    opened by jgoldshlag 164
  •  shredded moving while printing circle

    shredded moving while printing circle

    What were you doing?

    I want to print this: https://www.thingiverse.com/thing:2105393 It works with 1.3.8 but not with 1.3.9

    What did you expect to happen?

    A good and smooth print.

    What happened instead?

    Always when printing circles or round lines it makes shreded moves

    Did the same happen when running OctoPrint in safe mode?

    yes

    Version of OctoPrint

    1.3.9

    Operating System running OctoPrint

    Octopi 0.15.1

    Printer model & used firmware incl. version

    Anycubic Kossel Linear Plus Marlin 1.1.9

    Browser and version of browser, operating system running browser

    firefox and chromium on ubuntu 18.04

    Link to octoprint.log

    https://gist.github.com/eivilo/22fcd19018bfd20be230461a432eee32

    Link to contents of terminal tab or serial.log

    Link to contents of Javascript console in the browser

    Screenshot(s)/video(s) showing the problem:

    I have read the FAQ.

    needs information triage bug 
    opened by eivilo 144
  • [Brainstorming]Adding support for Dremel Idea Builder (i.e. FlashForge Dreamer)

    [Brainstorming]Adding support for Dremel Idea Builder (i.e. FlashForge Dreamer)

    I own a Dremel Idea Builder. I'd really like to get OctoPrint to work with it. I am a software developer, but not much Python experience, and the OctoPrint codebase is entirely new to me...so I could use some guidance.

    Dremel has provided me with a snippet of C++ code that demonstrates how to push a file to the SD card over USB and initiate printing.

    A few things I am noticing at first glance:

    • It looks like the Dremel is expecting a tilde (~) as a start character for each command.
    • It looks like the Dremel is expecting a \r\n instead of just a \n
    • It looks like the M28 command (load file to SD) expects a file size in addition to destination path (the M28 I see in util/comm.py is only sending a filename).
    • It looks like the Dremel is expecting an "M601 S0" be sent prior to every command.

    I am thinking that as a first step, I'll just pull the latest code and modify util/comm.py to do the above, and see if I get anywhere. If that goes poorly, I'll probably fall back to writing a proof of concept app in C# (the language I am most useful in).

    Here is a Dropbox link to the C++ snippet I was given.

    Here are some conversations I've found online that add some additional information:

    Google Groups thread where some folks sniffed the commands being sent to do various things, including upgrading the firmware.

    Simplify3D Forum thread where a user explains how they set up a firmware profile for the Dreamer, and mentions the requirement for M601 S0 and the tilde start delimiter. Though they mention the end delimiter being a single LF (and not the CR/LF I saw in the C++ snippet).

    brainstorming 
    opened by bbatchelder 125
  • Interested in adding MakerBot support

    Interested in adding MakerBot support

    I own a MakerBot Replicator, and I'm interested in getting OctoPrint to work with it. Since the MakerBot firmwares (both MBI and Sailfish) are open source, as is all of the software required to translate gcode files into x3g files and send them to the printer to print, I think that it's doable. But I don't know the OctoPrint software. Where should I start reading? Is anyone else working on this already?

    brainstorming 
    opened by laird 102
  • [Brainstorming] Get octoprint running on python3

    [Brainstorming] Get octoprint running on python3

    Maybe it's not right place for that, feel free to move/delete this I manage to get octoprint running on python 3.6 For sure, it's far from running completly, but the core is loading, connection with printer ok, flask pages and sockjs push ok, base plugins ok, wizard ok. It's mainly type conversion hacks, import changes and fighting with unmaintained sockjs-tornado that seems to be the main migration issue here. Nevertheless socket is partialy running too, with my own hacks in the module. I just have issues with crashs in the asyncio loop without any log at all, as I have with other asyncio projects. It's mainly a game for me and a way to learn things about consequent basecode migration, but maybe my work can help here. Feel free to request all my changes via a fork or a pull request, keeping in mind that the merge will be a mess Cheers

    brainstorming done 
    opened by razerraz 88
  • AnyCubic i3 Mega - non standard responses

    AnyCubic i3 Mega - non standard responses

    What were you doing?

    I've recently received custom firmware from AnyCubic with ability to connect it with Octoprint. There was some baudrate and serial driver issue with original one. See: https://github.com/guysoft/OctoPi/issues/452

    I tried to print something.

    What did you expect to happen?

    Since I've notice different comunication protocol, I knew it won't work.

    I have tested it on computer using Simplify3d and got this communication. Note: Printer started printing normally. https://pastebin.com/JUNCAVVB

    What happened instead?

    When trying to print I've faced another issue: non standard responses to M190 and "OK" confirmations. That caused OctoPrint to send new requests even if last one was still not finnished. At the end that meant printer started to print without heating the extruder and going to home position - those was skipped. Printer was sending wait responses but Octoprint kept sending new requests.

    Octoprint kept sending new requests even though printer replied "wait" and sent "OK" for other requests.

    The issue is that printer sends wait responses during heating up and also sends OK responds with line number, meaning they can be confirming some past line and not neccesarely the previos one. When it is heating the extruder, it is just sending "wait" respond and doesn't send the temperature.

    Example (Octoprint - Anycubic i3 Mega):

    https://pastebin.com/tu6328uy

    Here is an example of connecting printer:

    https://pastebin.com/9KKZ0VxJ

    Did the same happen when running OctoPrint in safe mode?

    Version of OctoPrint

    OctoPrint 1.3.6 running on OctoPi 0.14.0 
    

    Operating System running OctoPrint

    OctoPi 0.14.0

    Printer model & used firmware incl. version

    Anycubic i3 Mega (Ultrabase varsion) - customized by Anycubic to work with 115.2kbps

    Browser and Version of Browser, Operating System running Browser

    Firefix/Chrom, Windows 10

    Link to octoprint.log

    https://pastebin.com/9VMjpt64

    Link to contents of terminal tab or serial.log

    https://pastebin.com/tu6328uy https://pastebin.com/9KKZ0VxJ

    done not octoprint 
    opened by gregopti 82
  • Cancel/Abort much slower in 1.3.4

    Cancel/Abort much slower in 1.3.4

    What were you doing?

    Canceling prints via Cura/Octoprint Web

    If you encountered a problem with specific files of any sorts, make sure to also include a link to a file with which to reproduce the problem.]

    What did you expect to happen?

    Cancel within 1 second

    What happened instead?

    Cancels within 4-5+ seconds. In 1.34 cancel was nearly instant.

    Did the same happen when running OctoPrint in safe mode?

    Have not tried

    Branch & Commit or Version of OctoPrint

    OctoPrint 1.3.4 (master branch)

    Operating System running OctoPrint

    Octopi

    Printer model & used firmware incl. version

    Anet A8

    Browser and Version of Browser, Operating System running Browser

    Google Chrome, Windows 10 Pro x64

    Link to octoprint.log

    N/A

    Link to contents of terminal tab or serial.log

    N/A

    Link to contents of Javascript console in the browser

    N/A

    Screenshot(s)/video(s) showing the problem:

    N/A

    I have read the FAQ.

    bug done 
    opened by Givemeyourgits 76
  • [Support] Still getting pauses on commRefactoring branch

    [Support] Still getting pauses on commRefactoring branch

    1. What were you doing? Printing.
    2. What did you expect to happen? Smooth continuos printing.
    3. What happened instead? Lots of pausing mid print
    4. Branch & Commit or Version: HEAD on commRefactoring
    5. Printer model & used firmware incl. version Raspberry Pi to a Printrbot (Plus v2 with a rev D board) original 2013 firmware
    6. Link to octoprint.log on gist.github.com or pastebin.com:
    7. Link to contents of terminal tab on gist.github.com or pastebin.com: https://gist.github.com/BJClark/47740fdaf14f6fdca775

    Is this maybe another issue not fixed in the commRefactoring branch? Is there anyway to verify in the UI that I'm actually running on the commRefactoring branch? I followed the steps to change branches, but I'm not 100% sure the install worked.

    Here is the output (partial, in the middle of a print) with what I'm seeing:

    Communication timeout during printing, forcing a line Send: M105 Communication timeout during printing, forcing a line Send: M105 Recv: ok T:199.52 B:49.98 @:92 Send: N49513 G1 X58.827 Y169.757 E11.05820*108 Communication timeout during printing, forcing a line Send: M105 Recv: ok T:199.97 B:49.46 @:84 Send: N49514 G1 X57.929 Y170.031 E11.10783*102 Recv: Error:Line Number is not Last Line Number+1, Last Line:49511

    opened by BJClark 74
  • [RC Feedback] Feedback on the 1.3.10rc1 Release Candidate

    [RC Feedback] Feedback on the 1.3.10rc1 Release Candidate

    Please provide general feedback on your experience with the 1.3.10rc1 Release Candidate here. An "All is working fine" is valuable feedback as well, because it tells me that people in fact are testing the RC and just not finding any problems. Thanks :)

    If you run into any obvious bugs not yet listed below the following line, please open a new ticket and follow "How to file a bug report".


    Currently known bugs

    Unreproduced issues

    rc feedback 
    opened by foosel 67
  • Octoprint just stop mid print

    Octoprint just stop mid print

    What were you doing?

    Note : I've looked at similar issues first and found #2647 but the difference with my problem is that Octoprint server was still up (didn't try to log on SSH but forced refresh worked) Maybe it's a different issue, maybe it's a variant, I don't know, feel free to close if needed

    1. printing something (thru USB, not SD Card)
    2. wait for it
    3. kaboom ! print stopped

    It's a really random stop, I just run into that problem once as long as I remember, and maybe I'll never face it again...

    Just in case, here is the GCode where the problem occured (I have sucessfully printed these objects before, but not this particular file) 20180607-154849-PhoneSupport_Base_0.2-15%.gcode.zip

    What did you expect to happen?

    Print to complete without problem

    What happened instead?

    Printer stopped

    Also, temperature graph was showing "Off" in both the "actual" and the "target" column but the bed and the hotend was still heating As far as I know, the only state when this is shown is when Octoprint is disconnected from the printer

    Did the same happen when running OctoPrint in safe mode?

    Not tried

    Version of OctoPrint

     OctoPrint 1.4.0.dev1274+gf8e6e4e3 
    

    Operating System running OctoPrint

    raspbian strech 9.4 on rpi3

    Printer model & used firmware incl. version

    prusa mendel with marlin 1.1.8

    Browser and version of browser, operating system running browser

    firefox 60 on windows 10

    Link to octoprint.log

    octoprint.log

    Link to contents of terminal tab or serial.log

    Terminal tab

    Serial logging wasn't enabled :-(

    Link to contents of Javascript console in the browser

    Unfortunatly I unexpectedly closed the browser before copying, but there was only an error about the connection to websocket, I don't know if it's related to the issue

    I have read the FAQ.

    bug done 
    opened by gege2b 64
  • [1.3.11rc3] Server freezes when cancelling a print from SD

    [1.3.11rc3] Server freezes when cancelling a print from SD

    Hello,

    I create this problem because it is 2 times that I encounter the problem with the RC2 and RC3 I can not produce it easily, it's pretty random :(

    here is the problem : when I cancel the impression from the interface, it happens that the print continues, at this time the octoprint does not answer anymore, I am forced to restart from the command line because it becomes unreachable.

    in the logs I see this:

    2019-04-16 16:51:32,796 - octoprint.util.comm - INFO - Changing monitoring state from "Printing from SD" to "Cancelling"
    2019-04-16 16:51:32,802 - octoprint.plugins.XXX- INFO - Print cancelling because : nothing
    2019-04-16 16:51:32,804 - octoprint.printer.standard.job - INFO - Print job cancelled - origin: sdcard, path: xyzcal~1.gco, owner: _api, user: devildant
    2019-04-16 16:51:32,819 - octoprint.plugins.shutdownprinter - INFO - Print cancelled
    2019-04-16 16:51:32,905 - octoprint.util.comm - INFO - Pausing print job due to command M25
    

    after this log nothing is logged, and octoprint does not work anymore

    (i use SD printing)

    unreproduced needs testing bug done 
    opened by devildant 59
  • Dependency Install Failure During Plugin Install Doesn't Fail The Plugin Install

    Dependency Install Failure During Plugin Install Doesn't Fail The Plugin Install

    The problem

    I had a community member reachout to me and say my plugin wasn't working after being installed. He sent his OctoPrint logs and it looked like one of the dependency libs OctoEverywehre uses wasn't installed on his system. I asked him to resinstall the plugin and send the install window output, and this is what he got:

    Installing plugin from uploaded file...
    /home/pi/oprint/bin/python -m pip --disable-pip-version-check install file:///tmp/tmprvq8z421.zip --no-cache-dir
    Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
    Processing /tmp/tmprvq8z421.zip
    Preparing metadata (setup.py): started
    Preparing metadata (setup.py): finished with status 'done'
    Requirement already satisfied: OctoPrint in /home/pi/oprint/lib/python3.9/site-packages (from OctoEverywhere==1.11.2) (1.8.6)
    Requirement already satisfied: certifi in /home/pi/oprint/lib/python3.9/site-packages (from OctoEverywhere==1.11.2) (2022.9.24)
    WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x75453a30>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/dnspython/
    WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x754a4a18>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/dnspython/
    WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x754a4568>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/dnspython/
    WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x754a4028>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/dnspython/
    WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x754a4be0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/dnspython/
    WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x75453c40>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/dnspython/
    WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x75453d90>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/dnspython/
    WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x75453e80>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/dnspython/
    WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x75453f70>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/dnspython/
    WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x75453fe8>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/dnspython/
    ERROR: Could not find a version that satisfies the requirement dnspython (from octoeverywhere) (from versions: none)
    ERROR: No matching distribution found for dnspython
    Looks like the plugin was already installed. Forcing a reinstall.
    /home/pi/oprint/bin/python -m pip --disable-pip-version-check install file:///tmp/tmprvq8z421.zip --no-cache-dir --ignore-installed --force-reinstall --no-deps
    Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
    Processing /tmp/tmprvq8z421.zip
    Preparing metadata (setup.py): started
    Preparing metadata (setup.py): finished with status 'done'
    Building wheels for collected packages: OctoEverywhere
    Building wheel for OctoEverywhere (setup.py): started
    Building wheel for OctoEverywhere (setup.py): finished with status 'done'
    Created wheel for OctoEverywhere: filename=OctoEverywhere-1.11.2-py3-none-any.whl size=136125 sha256=f38b07f0105b122b3e56b11dfa9d1475d267cbdee5b5c65bdaaacae2d54639dc
    Stored in directory: /tmp/pip-ephem-wheel-cache-sf50_750/wheels/33/35/04/9d47d6cd7ec4a71de807900a1ee213fe0a807b1eb00be1b057
    Successfully built OctoEverywhere
    Installing collected packages: OctoEverywhere
    Successfully installed OctoEverywhere-1.11.2
    Done!
    

    What it looks like is, for some reason, the dnspython package failed to install from PyPi due to a domain lookup failure (ironic). But when it failed to install, the system didn't stop the plugin install or tell the user of the failure. Upon restart, my plugin fails to load due to the missing import.

    Ideally, I think if this happens, the plugin should not be installed since it won't be in a good state, with the missing dependency.

    Did the issue persist even in safe mode?

    Yes, it did persist

    If you could not test in safe mode, please state why

    No response

    Version of OctoPrint

    Latest

    Operating system running OctoPrint

    OctoPi

    Printer model & used firmware incl. version

    No response

    Browser and version of browser, operating system running browser

    No response

    Checklist of files to include below

    • [X] Systeminfo Bundle (always include!)
    • [ ] Contents of the JavaScript browser console (always include in cases of issues with the user interface)
    • [ ] Screenshots and/or videos showing the problem (always include in case of issues with the user interface)
    • [ ] GCODE file with which to reproduce (always include in case of issues with GCODE analysis or printing behaviour)

    Additional information & file uploads

    No response

    bug 
    opened by QuinnDamerell 4
  • Use block scalars in YAML dumps

    Use block scalars in YAML dumps

    • [x] Your changes are not possible to do through a plugin and relevant to a large audience (ideally all users of OctoPrint)
    • [x] If your changes are large or otherwise disruptive: You have made sure your changes don't interfere with current development by talking it through with the maintainers, e.g. through a Brainstorming ticket
    • [x] Your PR targets OctoPrint's devel branch if it's a completely new feature, or maintenance if it's a bug fix or improvement of existing functionality for the current stable version (no PRs against master or anything else please)
    • [x] Your PR was opened from a custom branch on your repository (no PRs from your version of master, maintenance, or devel please), e.g. dev/my_new_feature or fix/my_bugfix
    • [x] Your PR only contains relevant changes: no unrelated files, no dead code, ideally only one commit - rebase and squash your PR if necessary!
    • [x] Your changes follow the existing coding style
    • [x] If your changes include style sheets: You have modified the .less source files, not the .css files (those are generated with lessc)
    • [x] You have tested your changes (please state how!) - ideally you have added unit tests
    • [x] You have run the existing unit tests against your changes and nothing broke
    • [x] You have added yourself to the AUTHORS.md file :)

    What does this PR do and why is it necessary?

    This is a minor tweak that improves the look of multiline string values that are dumped as YAML. Most often, it makes GCODE scripts stored inline in the config.yaml file look much easier to read and to hand parse.

    Before:

      bedlevelvisualizer:
        _config_version: 1
        command: M420 T0 V
        commands:
        - command: 'M190 R%(bedtemp)s
    
            G34
    
            G29'
          confirmation: true
          enabled_while_graphing: false
          enabled_while_printing: false
    

    After:

      bedlevelvisualizer:
        _config_version: 1
        command: M420 T0 V
        commands:
        - command: |-
            M190 R%(bedtemp)s
            G34
            G29
          confirmation: true
          enabled_while_graphing: false
          enabled_while_printing: false
    

    Both statements parse equivalently so it should not have any effect on functionality. This change is only intended to make it easier for humans to read and modify.

    How was it tested? How can it be tested by the reviewer?

    • Ran pytest (Passed with no errors).
    • Ran against a copy of my personal config.yaml file. (No errors found).

    Any background context you want to provide?

    N/A

    What are the relevant tickets if any?

    No open issues could be found regarding this.

    Screenshots (if appropriate)

    N/A

    Further notes

    approved targets maintenance 
    opened by sgsunder 0
  • [Request] Improve integration with Edge's tab sleeping

    [Request] Improve integration with Edge's tab sleeping

    Is your feature request related to a problem? Please describe.

    Currently, when a tab is not being used for a little while (5 mins on my laptop), Edge puts the tab to 'sleep' which means it stops it doing background things.

    The websocket seems to stay connected but messages/UI updates are not processed by OctoPrint until the tab wakes up.

    This leads to a period of time where the UI is trying to 'catch up' and processes all the messages, and it can take a while to do that if the tab has been sleeping for a little while - it's always easier/quicker to reload the page.

    I would like to investigate if there is anything OctoPrint can do to effectively skip to the newest websocket messages, or disconnect & reconnect the socket when it is sleeping so the messages do not build up in the backlog. Perhaps there is a browser event OctoPrint could listen to. I know it is quite browser specific, so if the solution is complex then we could leave it. But if it is only a couple of additional lines, I would like to see how we could make it work.

    Describe the solution you'd like

    already done

    Describe alternatives you've considered

    Leaving it alone

    Additional context

    Might try and record a video demonstrating the problem at some point.

    https://wicg.github.io/page-lifecycle/spec.html

    request 
    opened by cp2004 0
  • :bug: Support the R parameter in temperature offsets

    :bug: Support the R parameter in temperature offsets

    What does this PR do and why is it necessary?

    Makes temperature offsets support the R parameter. This parameter waits for cooling as well as heating and so it makes sense to be supported. It's been in Marlin for as long as I know, but can't say about wide usage.

    How was it tested? How can it be tested by the reviewer?

    Using the gcode provided in #4695

    What are the relevant tickets if any?

    Closes #4695

    approved targets maintenance 
    opened by cp2004 0
  • The temperature offset does not work

    The temperature offset does not work

    The problem

    In my code, for the first layer, the temperature of the nozzle is 185°C and for the bed 10°C. For the following layers, the temperature of the nozzle is 180°C and for the bed 5°C. I put the offset at 40 to obtain 225/50° C for the first layer and 220/45° C for the other layers.

    The preheating phase goes well and the temperatures are respected. 01

    During the printing of the first layer, the temperature of the nozzle goes down to that of the gcode, 185° C and goes up again to 220° C starting from the second layer. 02 03 04

    The temperature of the bed is not impacted by this "bug". 05

    I tested on two installations of Octopi and the screenshots are made with the virtual printer

    Did the issue persist even in safe mode?

    Yes, it did persist

    If you could not test in safe mode, please state why

    No response

    Version of OctoPrint

    OctoPrint 1.8.6

    Operating system running OctoPrint

    OctoPi 1.0.0

    Printer model & used firmware incl. version

    Tevo Tornado 1.1.19 and VIRTUAL Printer of OctoPrint

    Browser and version of browser, operating system running browser

    No response

    Checklist of files to include below

    • [X] Systeminfo Bundle (always include!)
    • [ ] Contents of the JavaScript browser console (always include in cases of issues with the user interface)
    • [ ] Screenshots and/or videos showing the problem (always include in case of issues with the user interface)
    • [X] GCODE file with which to reproduce (always include in case of issues with GCODE analysis or printing behaviour)

    Additional information & file uploads

    octoprint-systeminfo-20221217175659.zip ForChoiceFilament-OS185_10-gcode.zip

    bug done 
    opened by MarshMalloW0007 2
  • :lipstick: File/Folder move UI improvements

    :lipstick: File/Folder move UI improvements

    What does this PR do and why is it necessary?

    Noticed a couple of small QoL things that I thought I would address with the file/folder moving & renaming.

    1. Missing styling on the name box image fixed

    2. Not obvious you can rename files until after you click the 'scissors' icon. The icon & tooltip don't imply this (see #4693) to the average user perhaps? Made it more obvious.

    3. No distinction between moving files or folders. The title says 'Move file or folder', the name just says 'filename' (but applies to folder names as well) & text at the bottom says 'file/folder will be moved to'. Just got on my nerves when I looked at it 😆 Made it show the correct name

    4. Text at the bottom 'File/Folder will be moved to' is visible even when there is no action to be performed. Made it disappear when nothing will happen

    5. Button says 'Move', while file moving & renaming are the same in the code, I thought it made more sense for this to be 'confirm'. Up for debate on that one I guess, just sounded better to me personally. Made it confirm

    How was it tested? How can it be tested by the reviewer?

    Locally on my development install by moving a folder or file.

    Any background context you want to provide?

    Inspired by #4693 being opened

    approved targets maintenance 
    opened by cp2004 1
Releases(1.8.6)
  • 1.8.6(Oct 18, 2022)

    ✋ Heads-ups

    The heads-ups from 1.8.0 still apply, please read this release's release notes as well for a full picture of what you should be aware of and what changed!

    The heads-up from 1.8.3 also still apply, please read this release's release notes as well.

    ⛈ Issues while updating?

    On every new OctoPrint release we see some people run into the same issues with outdated or broken environments all over again. If you encounter a problem during update, please check this collection of the most common issues encountered over the past couple of release cycles first, and test if the included fixes solve your problem.

    ♻ Changes

    🐛 Bug fixes

    • #4659 - Fix the sanity check on the backup download endpoint to check against full paths.

    🎉 Special thanks to all the contributors!

    Special thanks to everyone who contributed to this bugfix release!

    🔗 More information

    • Commits
    • As this is a bugfix release, there were no release candidates
    Source code(tar.gz)
    Source code(zip)
  • 1.8.5(Oct 17, 2022)

    ✋ Heads-ups

    The heads-ups from 1.8.0 still apply, please read this release's release notes as well for a full picture of what you should be aware of and what changed!

    The heads-up from 1.8.3 also still apply, please read this release's release notes as well.

    ⛈ Issues while updating?

    On every new OctoPrint release we see some people run into the same issues with outdated or broken environments all over again. If you encounter a problem during update, please check this collection of the most common issues encountered over the past couple of release cycles first, and test if the included fixes solve your problem.

    ♻ Changes

    ✨ Improvements

    • Explicitly declare in-memory storage for rate limiter. Gets rid of warnings under latest flask-limiter versions.

    🐛 Bug fixes

    • #4656 - Fix cookie suffix creation on the frontend to properly work with multi-level subpaths. The wrong suffix caused OctoPrint's core UI not to be able to extract the CSRF token when running behind a reverse proxy with a multi-level prefix path, rendering the UI non functional.
    • #4659 - Fix the sanity check on the backup download API so that backups created through the CLI or third party plugins named arbitrarily will be downloadable by admins.

    🎉 Special thanks to all the contributors!

    Special thanks to everyone who contributed to this bugfix release!

    🔗 More information

    • Commits
    • As this is a bugfix release, there were no release candidates
    Source code(tar.gz)
    Source code(zip)
  • 1.8.4(Sep 27, 2022)

    ✋ Heads-ups

    The heads-ups from 1.8.0 still apply, please read this release's release notes as well for a full picture of what you should be aware of and what changed!

    The heads-up from 1.8.3 also still apply, please read this release's release notes as well.

    ⛈ Issues while updating?

    On every new OctoPrint release we see some people run into the same issues with outdated or broken environments all over again. If you encounter a problem during update, please check this collection of the most common issues encountered over the past couple of release cycles first, and test if the included fixes solve your problem.

    ♻ Changes

    ✨ Improvements

    • Added a new reverse proxy test page under /reverse_proxy_test. This can be used to determine whether you have configured any reverse proxies that are between you and OctoPrint correctly, and if not where the error might lie. This should help in debugging issues caused by misconfigured reverse proxies and the CSRF protection introduced in 1.8.3.
    • Switched the SameSite setting on cookies to Lax. Strict was causing issues for users who navigate to their OctoPrint instance using a custom start page, since SameSite=Strict would suppress all cookies in that case, forcing you to login again. Please note that you can switch it to Strict yourself via the server.cookies.samesite configuration option, if you so desire for slightly increased security, and don't need the ability to access your OctoPrint instance from a link on another page while still staying logged in.

    🐛 Bug fixes

    • #4648 - Fix passive login with global API key. The _api user could not be looked up for cookie signatures, this has been rectified.
    • #4648 - Invalid API keys now correctly report that they are invalid instead of being treated like a guest user.
    • #4648 - Guest users on the API (no browser context, no API key) are now properly handled and no longer assumed to be a browser session, thus triggering CSRF protection.
    • #4650 - Fix setting CSRF cookie on cached responses. This bug could prevent the UI from working if it was served from the browser's cache in combination with a 304 Not Modified response from the server, instead of being freshly generated.
    • #4653 - Fix handling of reauth requests on the websocket with reason stale, also send a stale reauth request in case of attempting to auth with an unknown user/session combo.
    • Fixed fallback to pbkdf2_sha256 if argon2 backend is missing for password hashing. The argon2_cffi dependency is still required and should be automatically installed on installation of OctoPrint 1.8.3+, but if for whatever reason that (partially) fails, OctoPrint will now gracefully fallback to a different password hashing algorithm while logging a warning about that, instead of just spewing errors.

    🎉 Special thanks to all the contributors!

    Special thanks to everyone who contributed to this bugfix release!

    🔗 More information

    • Commits
    • As this is a bugfix release, there were no release candidates
    Source code(tar.gz)
    Source code(zip)
  • 1.8.3(Sep 20, 2022)

    ✋ Heads-ups

    The heads-ups from 1.8.0 still apply, please read this release's release notes as well for a full picture of what you should be aware of and what changed!

    Important notice about downgrading from this version

    With OctoPrint 1.8.3, the password hashing has been changed to use the Argon2 hashing algorithm. Any existing accounts will be migrated to the new hashing format on their first login under 1.8.3 or later, and the accessControl.salt value will be stripped from the config once all accounts have been migrated as it is no longer needed. This however means that downgrading to an earlier version will result in no longer being able to login, since earlier versions of OctoPrint 1.8.3 have no idea what to do about the Argon2 hashes and require accessControl.salt as well.

    However, OctoPrint 1.8.3 and later come prepared for this scenario and will create a backup of both your users.yaml and config.yaml files, to make sure you can manually roll those back should for whatever reason you need to downgrade to a version prior 1.8.3. Find out more in the FAQ.

    Plugin authors: Check out the changes due to OctoPrint's new CSRF protection

    To protect OctoPrint against CSRF attacks against the non CORS affected upload endpoints, in case of browser session based authorization the API is protected using the Double Submit Cookie mitigation strategy. You can read more about how this is implemented and how it might affect your frontend code in the docs.

    If your plugin happens to implemented the BlueprintPlugin mixin, please also read up on the changes on that that relate to CSRF protection and what steps you must take to get rid of warnings you will now see in the logs otherwise. You can find the updated docs on the BlueprintPlugin mixin here.

    ⛈ Issues while updating?

    On every new OctoPrint release we see some people run into the same issues with outdated or broken environments all over again. If you encounter a problem during update, please check this collection of the most common issues encountered over the past couple of release cycles first, and test if the included fixes solve your problem.

    ♻ Changes

    ?? Security fixes

    • Severity High (8.3): It was possible to use Cross-Site Request Forgery combined with phishing to trick an admin user into visiting a malicious site that then could install a malicious plugin on the OctoPrint server using the logged-in admin user's browser credentials. This attack vector has now been closed. The API will now require to be sent a CSRF cookie provided by the server on initial page load as well as a CSRF header containing the same value with every API request that is not GET, HEAD or OPTIONS. Please read more about this in the docs.
    • Severity Medium (6.1): The "Settings Manage" permission allowed user management. This has historic reasons as it was used as the original "Admin" permission, however its description does not include this kind of access and thus it could have caused unintentional access in the field, allowing a "Settings Admin" user to elevate their own permissions or change those of others. All kinds of user management now require the "Admin" permission. A future version of OctoPrint will also drop the confusing Settings Admin permission, see #4641 for the roadmap for this.
    • Severity Medium (6): A malicious admin user could upload a specially crafted language pack containing one or more symlinks to files on the OctoPrint server, which would then be contained in created backups and could thus be extracted that way. This could be used by a malicious admin user to extract files from the OctoPrint server readable by the system user the OctoPrint server is running under, including OS files outside the scope of OctoPrint. This has been fixed.
    • Severity Medium (5.3): Improved security of the password change dialog in as that it now requires you to enter your current password before allowing you to set a new one. Admins are still able to change the passwords of users without this requirement. See also CVE-2022-2930.
    • Severity Medium (5.3): Fixed a buggy permission role that assigned the ability to enable/disable/uninstall plugins to users with the List Plugins permission. Note that installing plugins was not also included in this. This could have been used by read-only or operator users to enable, disable or uninstall already installed plugins, without the need for an administrator. See also CVE-2022-3068.
    • Severity Medium (4.4): OctoPrint's login sessions will now expire after a short time (15min), unless kept alive by keeping a tab open. The remember me cookie will expire after 90 days. Sessions and the remember me cookie will also become invalid on password change. This prevents the reuse of old session credentials or remember me cookies somehow obtained by an attacker (e.g. through a compromised browser or a forgotten on a shared system). See also CVE-2022-2888
    • Severity Medium (4.2): The password hashing has been switched to Argon2. Existing password hashes will be migrated transparently to this new hashing approach on login of the individual accounts, a backup of the old file will be made (and automatically removed again in a future version). Important: That means that you can not downgrade easily from 1.8.3 to a version prior. If you need to downgrade, please see this FAQ entry.
    • Severity Low (3.7): A rate limit on the login dialog has been introduced to thwart attempts at bruteforcing a working username/password combo. After a number of failed attempts to login (3/minute, 5/10 minutes, 10/hour), you are denied further attempts until the hit rate limit expires. It will extend on each further failed attempt. The rate limit is tracked per client IP and will reset on server restart. See also CVE-2022-2822.
    • Severity Low (3.7): Fixed a bug that allowed someone to upload a .gcode file but then rename it to .html or similar through OctoPrint's move file functionality. This could have been used to launch a phishing or scripting attack on an unsuspecting user of the same OctoPrint instance. This has now been fixed as in that the move file feature only supports moving/renaming to file extensions that are supported for upload as well. See also CVE-2022-2872.
    • Severity Low (3.5): A user with the "Files Upload" permission but without the "Files Delete" permission was able to overwrite and thus effectively delete files. OctoPrint will now require the "Files Delete" permission to perform an overwrite.
    • Severity Low (3.5): While logs where not displayed on the terminal tab without the "Monitor Terminal" permission, they were still sent on the web socket. This has been rectified.
    • Severity Informational (0.0): It was possible to download files from the backup download endpoint (accessible only by admins) that weren't backups. This could possibly have been abused by a malicious admin user that first got something there somehow that wasn't a backup and then extracting it this way. While the question as to why that would be a preferable approach to extract data from a server you have full admin access to remains unanswered, this no longer is possible now regardless.
    • Severity Informational (0.0): Limited folder config in UI to uploads, timelapses and watched folder. Everything else needs to be configured through config.yaml.

    🐛 Bug fixes

    • Fixed a bug that prevented user creation without any attached groups. If no group was attached, OctoPrint so far forced the default user group "Operator" to be attached to the user. This has been solved.
    • Fixed a styling issue in the appearance settings.

    🎉 Special thanks to all the contributors!

    Special thanks to everyone who contributed to this bugfix release!

    🔗 More information

    • Commits
    • As this is a bugfix release, there were no release candidates
    Source code(tar.gz)
    Source code(zip)
  • 1.8.2(Aug 9, 2022)

    ✋ Heads-ups

    The heads-ups from 1.8.0 still apply, please read this release's release notes as well for a full picture of what you should be aware of and what changed!

    ⛈ Issues while updating?

    On every new OctoPrint release we see some people run into the same issues with outdated or broken environments all over again. If you encounter a problem during update, please check this collection of the most common issues encountered over the past couple of release cycles first, and test if the included fixes solve your problem.

    ♻ Changes

    🔒 Security fixes

    • Fixed an open redirect vulnerability in the login dialog. An attacker could send a login URL with a specially crafted redirect parameter pointing to an external page under their control to an instance admin that if used to login would redirect this URL, allowing the attacker to start a phishing attack. This is not directly exploitable by the attacker, but after a successful phishing attack and thus obtained credentials could be used to gain access to the OctoPrint instance if somehow reachable by the attacker (e.g. if you have exposed your OctoPrint instance on the public internet or another hostile network contrary to the project's recommendations). Thanks to "Mizu" for reporting and disclosing this responsibly.

    🐛 Bug fixes

    • Pinned the Flask dependency to 2.1. The latest release requires a version of werkzeug that we currently cannot upgrade to due to yet another dependency, and there seem to have been cases in the field where users managed to update Flask regardless of the werkzeug version pin in OctoPrint, which caused runtime errors. This has not been successfully reproduced in the development environment, but a version pin here is a sensible precaution.

    🎉 Special thanks to all the contributors!

    Special thanks to everyone who contributed to this bugfix release!

    Also a big thank you to Mizu for responsibly disclosing the security vulnerability that was fixed in this release.

    🔗 More information

    • Commits
    • As this is a bugfix release, there were no release candidates
    Source code(tar.gz)
    Source code(zip)
  • 1.8.1(May 24, 2022)

    ✋ Heads-ups

    The heads-ups from 1.8.0 still apply, please read this release's release notes as well for a full picture of what you should be aware of and what changed!

    ⛈ Issues while updating?

    On every new OctoPrint release we see some people run into the same issues with outdated or broken environments all over again. If you encounter a problem during update, please check this collection of the most common issues encountered over the past couple of release cycles first, and test if the included fixes solve your problem.

    ♻ Changes

    🔒 Security fixes

    • Fixed a cross-site scripting vulnerability in the user and group managers. An attacker could talk an admin into creating a user or group with a specially crafted name containing executable HTML/JS, and then into deleting those again, triggering the cross-site scripting issue in the deletion confirmation dialog. A stealing of credentials through this should not have been possible under 1.8.0, however in versions before 1.8.0 the stealing of the "remember me" token would have been possible through this attack vector. This could have then been used to gain access to the OctoPrint instance if somehow reachable by the attacker (e.g. if you have exposed your OctoPrint instance on the public internet or another hostile network contrary to the project's recommendations). Thanks to Akshay Ravi for reporting and disclosing this reponsibly.

    🐛 Bug fixes

    • #4516 - Fix a redirect loop on the login dialog if the Guests group was assigned the Read-Only group as a subgroup.
    • Gracefully handle errors scanning /dev for serial ports. Solves an issue with Octo4a on some Android devices.

    🎉 Special thanks to all the contributors!

    Special thanks to everyone who contributed to this bugfix release!

    Also a big thank you to User avatar Akshay Ravi for responsibly disclosing the security vulnerability that was fixed in this release.

    🔗 More information

    • Commits
    • As this is a bugfix release, there were no release candidates
    Source code(tar.gz)
    Source code(zip)
  • 1.8.0(May 17, 2022)

    ✋ Heads-ups

    💥 OctoPrint 1.8.0 drops Python 2 support!

    As previously announced on the OctoBlog and in OctoPrint On Air #43, OctoPrint 1.8.0 drops Python 2 support. In order to be able to install/update to it, you need to be running OctoPrint under Python 3 already, e.g. as shipped on OctoPi 0.18.0. Installing on Python 2 will fail. The Software Updater will also be redirected to a new OctoPrint Legacy repository for checking for OctoPrint updates if it detects that you are still running Python 2. As outlined in the blog post and the vlog, there are no more updates for OctoPrint 1.7/Python 2 planned. Update now or you will be left behind, including for most security fixes!

    If you are unsure what version of Python your OctoPrint instance is running under, open the web interface and look into the lower left corner where it will tell you:

    image

    This is also covered in the FAQ.

    🔒 OctoPrint 1.8.0 fixes some reported security issues, update ASAP!

    While OctoPrint 1.8.0rc5 was undergoing testing, three security vulnerabilities were disclosed to me. These issues are fixed in the stable release of 1.8.0. Since these vulnerabilities are of low concern for instances that are not publicly exposed on the internet or other hostile networks, as strongly recommended, the fixes will not be backported to OctoPrint 1.7.x and thus instances still under Python 2.

    Please update your OctoPrint instance to the latest stable version of OctoPrint 1.8.0 as soon as possible.

    🧩 Heads-ups for plugin authors

    Click to expand.

    🧩 Importing Jinja2 templates from another plugin without an explicit prefix is now deprecated!

    OctoPrint so far allowed (erroneously) to replace plugin templates of the same name in another plugin, depending on loading order. Fixing this required to create prefixes for templates of plugins. Relative imports (think {% include "snippets/my_snippet.jinja2" %}) will now attempt to resolve against the current plugin. If that isn't possible, for now it will also be attempted to resolve globally against all registered templates and if a match is found, a deprecation will be logged. The latter behaviour will be removed in a future version of OctoPrint and if your plugin includes templates from other plugins you should now change it to using plugin prefixes if running on OctoPrint 1.8.0 or higher. Plugin prefixes are plugin_<plugin identifier>/, so for example, to include the settings pane of the bundled software update plugin, you'd now need to use plugin_softwareupdate/plugin_softwareupdate_settings.jinja2.

    🧩 octoprint.util.bom_aware_open is now deprecated and will be removed in 2.0.0

    If your code uses bom_aware_open, you should replace its use with the regular open with utf-8-sig encoding instead (or io.open in py2/3 compatibility mode).

    🧩 octoprint.util.commandline.clean_ansi will no longer accept bytes in 2.0.0

    If your code uses clean_ansi somewhere, make sure you supply it with str (formerly known as unicode) instead of bytes objects.

    🧩 Settings._config is read-only!

    If your plugin code has been using Settings._config to modify what gets stored in config.yaml, this will no longer work. It never was a supported method, however it did work due to how things were implemented internally. Implementation has changed now so that any code doing this will no longer work - the nested dictionary returned by the Settings._config is only a copy of the internal data structure and thus any modifications will be dropped silently. A deprecation warning has been added just in case. Use the provided set and remove methods on the settings object instead please.

    ♻ Changes

    🔒 Security fixes

    • CVE-2022-1430 - Fixed a Cross Site Scripting vulnerability in the login dialog. An attacker could send a login URL with a specially crafted redirect parameter to an instance admin that if used to login would allow the attacker to steal the "remember me" cookie. This could have then be used to gain access to the OctoPrint instance with the victim's credentials, if somehow reachable by the attacker (e.g. if you have exposed your OctoPrint instance on the public internet or another hostile network contrary to the project's recommendations). Thanks to "rajbabai8" for reporting and disclosing this reponsibly.
    • CVE-2022-1432 - Fixed a Cross Site Scripting vulnerability in the webcam stream URL test. An attacker could talk an instance administrator into inserting a specially crafted HTML/JS snippet into the webcam settings and then ask them to click "test", making the JS code run and potentially steal the remember me token. This could have then been used to gain access to the OctoPrint instance if somehow reachable by the attacker (e.g. if you have exposed your OctoPrint instance on the public internet or another hostile network contrary to the project's recommendations). Thanks to "rajbabai8" for reporting and disclosing this reponsibly.
    • Fixed an open redirect vulnerability in the login dialog. An attacker could send a login URL with a redirect parameter pointing to an external page under their control to an instance admin that if used to login would redirect this URL, allowing the attacker to start a phishing attack. This is not directly exploitable by the attacker, but after a successful phishing attack and thus obtained credentials could be used to gain access to the OctoPrint instance if somehow reachable by the attacker (e.g. if you have exposed your OctoPrint instance on the public internet or another hostile network contrary to the project's recommendations). Thanks to "rajbabai8" for reporting and disclosing this reponsibly.
    • Fixed a Cross Site Scripting vulnerability in the login dialog regarding the userId parameter. It is currently unconfirmed if this could have been used for an attack.
    • Set the "remember me" cookie to http only. This prevents an attacker from accessing the cookie via JavaScript, e.g. in the context of Cross Site Scripting attacks.

    ✨ Features & improvements

    • #3261 - The temperature tab now has (optional) event markers for when a print gets started, paused, resumed, cancelled or finishes. (PR #4382)
    • #3491 - Added new events FileMoved and FolderMoved, see the documentation for details on payload. (PR #4405)
    • #3589 - Software Update: You may now enqueue software updates while a print is ongoing. They will then be started (after a short countdown) after successful completion of the print, or manually if you cancelled the print. You can manage the queue during the print to remove items you don't want enqueued after all, or add additional items to it as well. (PR #4364)
    • #3868 - Optionally remember (and restore) the last opened folder in the files list in the browser if enabled in the features. (PR #4291)
    • #4179 - Gcode Viewer: Every fifth grid line (= every 5cm) will now be drawn slightly thicker to allow for easier counting and mapping of physical location. (PR #4287)
    • #4186 (PR) - Added support for changing order in which plugin hooks & implementation callbacks are called by OctoPrint.
    • #4218 - Gcode Viewer: Prevent mouse wheel from scrolling entire page and panning the canvas. (PR #4274)
    • #4221 (PR) - Improved performance of serial device lookup.
    • #4222 (PR) - Improved performance of all yaml operations by using the C based loader when possible.
    • #4223 (PR) - Added a ripgrep ignore file.
    • #4225 (PR) - Added a first version for embedding WebRTC based webcams. Please note that this should be considered beta and is still subject to change while further work and research is being done on the backend side of things.
    • #4227 - Added a help message that reminds users that username and password are case sensitive. (PR #4246).
    • #4228 - Switch the code to use utf-8-sig encoding instead of bom_aware_open and deprecated bom_aware_open. It will be removed in 2.0.0.
    • #4230 (PR) - Improved settings processing performance by optimizing deep_dict and using pickle for deep-copying.
    • #4235 (PR) - Added a Server-Timing response header to the API responses to allow for better profiling.
    • #4236 (PR) - Improved settings processing performance by reimplementing the underlying data structure as a flattened instead of a nested chainmap.
    • #4237 - Added a heads-up for when no serial port could be found in the system, with a link to the corresponding FAQ entry with additional steps. Also added a notification for port auto detection failure, linking to the same FAQ entry. This behaviour can be disabled by setting serial.ignoreEmptyPorts to true in config.yaml.
    • #4241 (PR) - Added tracebacks to TypeErrors caught in Plugin Settings.
    • #4244 (PR) - Return to depend on frozendict under Python 3 instead of immutabledict, as it's now maintained again.
    • #4280 (PR) - Websocket clients can now selectively subscribe to messages on the socket. See the docs for the new subscribe message on the push socket.
    • #4289 (PR) - Add Python 3.10 to automatic tests and package classifiers.
    • #4314 - Plugin Manager: It's now possible to bulk enable/disable plugins. This makes it easier for the user to locate plugins that are causing problems in the system.
    • #4317 - Non-Gcode commands can now also be defined as long running, as long as they do not have any parameters.
    • #4320 (PR) - Change some references links to https.
    • #4322 (PR) - Drastically reduced bandwidth used by the web socket by enabling the permessage-deflate extension of the websocket protocol.
    • #4324 (PR) - Virtual printer: Support for printer locking (Marlin's PASSWORD_FEATURE).
    • #4332 - Software Update: Improved logging in case of failures in running update checks, e.g. GitHub release fetching with an outdated PAT. Failing requests of any kind now generate a log entry and are also reflected in the frontend, similar to rate limiting situations.
    • #4337 (PR) - Plugin Manager: Added a new endpoint /plugin/pluginmanager/plugins/versions and associated PLUGIN_PLUGINMANAGER_LIST permission that allows to list installed plugins and their versions in a machine readable JSON format. Useful for 3rd party plugin to determine plugins available on the connected OctoPrint instance.
    • #4339 (PR) - Announcements: Improve performance by using a new encoding/decoding strategy for the cache and caching the parsed feed instead of the raw xml.
    • #4340 (PR) - Plugin Manager: Improve performance of plugin notification retrieval by caching parsed version structures.
    • #4352 - Event Manager: Added a note that event handlers are async.
    • #4353 - Expose configuration of default extrusions length on the UI (again) and also move it into the printer profile. (PR #4416)
    • #4356 - Added <noscript> to login page to give a heads-up if JS is disabled which is required for OctoPrint and its login page to function.
    • #4357 - Support for the "Host Shutdown" Action command can now be enabled so you can shut down the whole server via your printer's menu if supported by your firmware. Note that this disabled by default and has to be enabled via Settings > Serial Connection > Firmware & Protocol > Action Commands. (PR #4358)
    • #4363 - Software Update: New option force_reinstall for the pip updater. If set to true it will have the updater run a double install, once normal, once with --force-reinstall and --no-deps (to force a reinstall of the package but not all its dependencies).
    • #4363 - Plugin Manager & Software Update: Refactor pip error handling to be shared between Software Update, Plugin Manager and whatever else might need it.
    • #4368 - The Gcode command used to cancel an SD card print is now configurable and defaults to M25. (PR #4408)
    • #4370 (PR) - Timelapse: Recordings will now get a preview thumbnail rendered and displayed. A command line command has been added as well to generate thumbnails for already existing recordings via octoprint timelapse create_thumbnails, see octoprint timelapse create_thumbnails --help for usage information.
    • #4375 - Implement rotate & mirror functionality for HLS (& the new WebRTC) camera embeds. (PR #4378)
    • #4385 (PR) - Improve error reporting on failure to open serial port.
    • #4387 (PR) - Disable spell check on various search fields.
    • #4388 (PR) - Automatically parse additional temperature fields from M105 report/temperature autoreport and provide them on the internal and REST APIs.
    • #4390 (PR) - The encoding to use for the serial connection can now be configured via serial.encoding in config.yaml. It defaults to ascii but any other encoding recognized by Python can be used here if the printer requires it. Probably only relevant for now for very specific builds.
    • #4396 - Support --no-color command line argument and also NO_COLOR environment variable standard to disable coloring of standard (logging) output on command line. (PR #4402)
    • #4399 (PR) - Streamed ZIP downloads (e.g. the systeminfo bundle or bundled timelapses) now come with a Content-Length. Backport of PR #4313.
    • #4403 (PR) - New development related CLI command octoprint dev css:build. Can be used to run lessc against all relevant files. Note that you'll first need to install lessc via npm i -g less. For usage details see octoprint dev css:build --help.
    • #4423 - Expose serial.unknownCommandsNeedAck and serial.sendChecksumWithUnknownCommands in UI and assume them to be true if Prusa Firmware is detected to combat issues that might otherwise arise with MMU usage due to non-standard Tc and Tx commands. See also discussion in prusa3d/Prusa-Firmware#3411.
    • #4427 (PR) - Increase web socket connect timeout to reduce likelihood of less performant transport fallback in case of slow initial connection.
    • #4430 (PR) - Gcode Viewer: Improved overall memory utilization by switching underlying data structure from an AVL tree to a binary tree. As a welcome side effect, this also fixed #2243.
    • #4432 (PR) - Gcode Viewer: Further memory usage improvement by switching the line split of the loader from using a regex to using a simple string split.
    • #4437 (PR) - Support two digit flavors of G0 through G3 in Gcode Viewer and Gcode analysis (so, G00 through G03). Relevant for CNC applications.
    • #4443 (PR) - Software Update: Allow setting the GitHub Personal Access Token (to work around rate limiting issues) via the UI.
    • #4460 - Expose new config flag serial.ignoreEmptyPorts to ignore empty serial ports and maintain pre 1.8.0 default behaviour regarding the handling of the situation on the UI as well (see Serial Connection > General > Connection > Advanced Options > Ignore empty ports).
    • OctoPrint now requires Python 3.7 or newer. Starting with this release OctoPrint is Python 3 only. See also the heads-up above. Correspondingly also switched all links in the docs and the UI to the Python docs to refer to Python 3 docs instead of Python 2.
    • Added last safe mode date & reason to the system info bundle. This will allow to determine if safe mode was recently launched, and also allow to determine why it was launched.
    • Rephrased system info bundle sharing instructions and removed copy button for short system info text to discourage sharing that instead of the full bundle, which we've sadly seen a ton over the past few months.
    • Removed the webassets cache as it only makes a difference during development, and removing it closes a potential abuse vector.
    • Improved performance of CLI command listings.
    • Instead of silently ignoring a select/print on file upload if the necessary preconditions aren't met, include the effective select/print flags on the upload API and int he triggered UPLOAD event.
    • Update version requirement for PiSupport plugin to latest release
    • Harden against wonky firmware temperature responses that might lead to hotend or bed temperature values to be overwritten with something else by only ever using the first value for a sensor key seen in the response.
    • Application Keys: The plugin now supports a stand-alone authentication dialog which can be accessed via the auth_dialog property returned in response to an app token request. Third party clients can use this lightweight alternative to request an API key on behalf of a user without having to display/load the whole OctoPrint UI.
    • Application Keys: Add docs for new auth dialog work flow.
    • Discovery: Add new config options to ignore interfaces (plugins.discovery.ignoredInterfaces) and limit zeroconf to configured/not ignored interfaces only.
    • Gcode Viewer: Added more progress info during loading process.
    • Plugin Manager: Support .whl uploads as well.
    • Software Update: Improved the update & check buttons. "Update all" will now only update enabled items, "Update all available" (in the new dropdown) will updated enabled and muted items, "Check for updates" does what it always did, "Force check for updates" (dropdown) bypasses the cache, and notification muting and underlying logic is now explained in a footer.
    • Software Update: Put a stronger warning about automatic updates of pip in place.
    • Tracking: Include octopiuptodate_build from PiSupport Plugin, if set. This gives us a better overview on what specific environments to test and develop against.
    • Virtual Printer: Added ability to simulate broken Klipper MCU connection.
    • Translation improvements (PR #4290, PR #4385, PR #4386)
    • Cleaned up code here and there.

    🐛 Bug fixes

    • #2243 (PR) - GCode Viewer: Properly display sequentially printed files. Welcome side effect of #4430.
    • #4153 - Fix default ffmpeg commandline (-framerate instead of -r) to ensure ffmpeg generates correct progress reports while rendering a timelapse (PR #4344)
    • #4212 - Fix file selection not properly updating when selecting a file to print from the printer controller.
    • #4238 - Software Update: Fix handling of plugin downgrades on release channel switch.
    • #4240 (PR) - Improve memory footprint of client side terminal by fixing a wrong use of _.map.
    • #4242 - Refocus username input field in the login form on authentication failure (PR #4249)
    • #4260 - Fixed the wrong behaviour that plugins could overwrite plugin templates of other plugins by giving them the same name by making plugin template includes relative and requiring prefixes to address templates of other plugins. See also the associated heads-up for plugin authors above (PR #4281)
    • #4299 - Don't try to enter cancelling state again if already in it.
    • #4316 - Fix timelapse temp folder configuration, which wasn't possible via the UI since 1.5.0.
    • #4321 (PR) - Fixed the offline indicator icon.
    • #4336 (PR) - Don't treat paused state as "ready to print" on APIs.
    • #4349 (PR) - Fix some issues where the timelapse documentation didn't match the implementation (by fixing the docs).
    • #4362 - Fix parsing of version numbers, no longer truncates version after first -.
    • #4363 - Plugin Manager & Software Update: Fix "already installed" detection for newer versions of pip.
    • #4365 - Fix failing timelapse snapshots if the printed file contains a %. (PR #4366)
    • #4367 - Fix error message displayed when attempting to upload a file that is already printed, now properly reflects the issue at hand.
    • #4380 - Fix connectivity check against IPV6 targets. OctoPrint will now first try to reach the host via IPV6 (if enabled), if that fails, fall back to IPV4, and only if that fails too report a connection failure.
    • #4392 - Fix an encoding bug in the clean_ansi helper used for cleaning pip output. Issue caused plugin installation/deinstallation/updates, OctoPrint updates and backups to fail against pip 22+ due to an introduction of a UTF-8 separator line in that.
    • #4396 - Fix colors of standard (logging) output on command line to be better suited for light backgrounds. (PR #4402)
    • #4404 (PR) - Fix less build under less v4
    • #4417 - Fix a faulty regex that caused custom events with uppercase identifiers to generated events names with a double _.
    • #4433 (PR) - Don't load Font Awesome twice.
    • #4439 (PR) - Software Update: Use the correct ignore_throttled setting.
    • #4449 (PR) - Gcode Viewer: Only clear state on event when idle.
    • #4453 (regression) - Improve resilience against broken plugin template configs.
    • #4454 (regression) - Fix a fatal error in the refactored settings hierarchy upon encountering an int key.
    • #4456 (regression) - Fix a serial loop crash when encountering a custom temperature entry (or garbage that looks like one) that matches the too broadly defined reserved identifier regex.
    • #4458 (regression) - Fix retrieval of full dict structures from the settings for which an empty default exists.
    • #4459 (regression) - GCode Viewer: Fix transmission of parsed layer data structure from the worker to the main thread.
    • #4463 (regression) - GCode Viewer: Fix viewer not showing the last layer.
    • #4479 (regression) - Further harden new settings structure against invalid data structures from third party plugins.
    • #4486 (regression) - Fix changing of folder paths via the settings.
    • Fix parsing of firmware capability lines containing the string NAME: getting matched by the M115 response parser instead of the capability parser, by moving the capability parser before the M115 response parser.
    • Fix firmware info inclusion in systeminfo.txt of system info bundle.
    • Improved error resilience in hook processing. Hooks running into errors could prevent commands to be sent to the printer altogether, which has now been rectified.
    • Got rid of a deprecation warning in the plugin sub system by refactoring some code.
    • Clear position recording flag in communication layer on cancel/pause preparation timeout.
    • Reset position data in communication layer on cancel/pause preparation.
    • Add some missing less 4 compatibility fixes
    • Work around a compatibility issue between latest werkzeug and flask-login releases by pinning werkzeug to 2.0.x.
    • (regression) Fix version requirement of PiSupport plugin
    • (regression) Fixed a potential race condition that could cause an Internal Server Error on initial page load (self-fixing on the next reload though). Likely a regression caused by the changes to the webassets cache handling.

    🎉 Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release, especially to @adamwolf, @ademuri, @cp2004, @crysxd, @DShenkle, @flaviut, @gdombiak, @GonzoDMX, @jneilliii, @johnboiles, @JoveToo, @kantlivelong, @kohend, @LazeMSS, @MartijnBraam, @NilsRo, @OllisGit, @pR0Ps, @QuinnDamerell, @rooterkyberian@Rotzbua, @surdu, @synman, @The-EG, @thelastWallE, @TylonHH and @vector76 for their PRs!

    Also a big thank you to rajbabai8 for responsibly disclosing the security vulnerabilities that were fixed in this release.

    🔗 More information

    Source code(tar.gz)
    Source code(zip)
  • 1.8.0rc5(Apr 12, 2022)

    ⚠️ Important note on release candidates

    This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

    You should be comfortable with and capable of possibly having to do this before installing an RC.

    🔁 Feedback on this RC

    Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

    If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.

    Thanks!

    ✋ Heads-up

    All of the heads-ups of 1.8.0rc1 apply.

    Heads-up for plugin authors: Settings._config is read-only!

    If your plugin code has been using Settings._config to modify what gets stored in config.yaml, this will no longer work. It never was a supported method, however it did work due to how things were implemented internally. Implementation has changed now so that any code doing this will no longer work - the nested dictionary returned by the Settings._config is only a copy of the internal data structure and thus any modifications will be dropped silently. A deprecation warning has been added just in case. Use the provided set and remove methods on the settings object instead please.

    ✨ Improvements

    • Harden against wonky firmware temperature responses that might lead to hotend or bed temperature values to be overwritten with something else by only ever using the first value for a sensor key seen in the response.

    🐛 Bug fixes

    • #4486 (regression) - Fix changing of folder paths via the settings.

    🎉 Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release candidate and provided full, analyzable bug reports!

    🔗 More information

    Source code(tar.gz)
    Source code(zip)
  • 1.8.0rc4(Apr 5, 2022)

    ⚠️ Important note on release candidates

    This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

    You should be comfortable with and capable of possibly having to do this before installing an RC.

    🔁 Feedback on this RC

    Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

    If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.

    Thanks!

    ✋ Heads-up

    All of the heads-ups of 1.8.0rc1 apply.

    🐛 Bug fixes

    • #4479 (regression) - Further harden new settings structure against invalid data structures from third party plugins.

    🎉 Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release candidate and provided full, analyzable bug reports!

    🔗 More information

    Source code(tar.gz)
    Source code(zip)
  • 1.8.0rc3(Mar 29, 2022)

    ⚠️ Important note on release candidates

    This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

    You should be comfortable with and capable of possibly having to do this before installing an RC.

    🔁 Feedback on this RC

    Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

    If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.

    Thanks!

    ✋ Heads-up

    All of the heads-ups of 1.8.0rc1 apply.

    ✨ Improvements

    • Update version requirement for PiSupport plugin to latest release

    🐛 Bug fixes

    • #4463 (regression) - GCode Viewer: Fix viewer not showing the last layer.
    • Fixed a potential race condition that could cause an Internal Server Error on initial page load (self-fixing on the next reload though). Likely a regression caused by the changes to the webassets cache handling.
    • Work around a compatibility issue between latest werkzeug and flask-login releases by pinning werkzeug to 2.0.x.

    🎉 Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release candidate and provided full, analyzable bug reports!

    🔗 More information

    Source code(tar.gz)
    Source code(zip)
  • 1.8.0rc2(Mar 16, 2022)

    ⚠️ Important note on release candidates

    This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

    You should be comfortable with and capable of possibly having to do this before installing an RC.

    🔁 Feedback on this RC

    Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

    If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.

    Thanks!

    ✋ Heads-up

    All of the heads-ups of 1.8.0rc1 apply.

    ✨ Improvements

    • #4460 - Expose new config flag serial.ignoreEmptyPorts to ignore empty serial ports and maintain pre 1.8.0 default behaviour regarding the handling of the situation on the UI as well (see Serial Connection > General > Connection > Advanced Options > Ignore empty ports).
    • Application Keys: Add docs for new auth dialog work flow.

    🐛 Bug fixes

    • #4453 (regression) - Improve resilience against broken plugin template configs.
    • #4454 (regression) - Fix a fatal error in the refactored settings hierarchy upon encountering an int key.
    • #4456 (regression) - Fix a serial loop crash when encountering a custom temperature entry (or garbage that looks like one) that matches the too broadly defined reserved identifier regex.
    • #4458 (regression) - Fix retrieval of full dict structures from the settings for which an empty default exists.
    • #4459 (regression) - GCode Viewer: Fix transmission of parsed layer data structure from the worker to the main thread.
    • Add some missing less 4 compatibility fixes
    • Fix version requirement of PiSupport plugin

    🎉 Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release candidate and provided full, analyzable bug reports!

    🔗 More information

    Source code(tar.gz)
    Source code(zip)
  • 1.8.0rc1(Mar 14, 2022)

    ⚠️ Important note on release candidates

    This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

    You should be comfortable with and capable of possibly having to do this before installing an RC.

    🔁 Feedback on this RC

    Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

    If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.

    Thanks!

    ✋💥 Heads-up: OctoPrint 1.8.0 drops Python 2 support!

    As previously announced on the OctoBlog and in OctoPrint On Air #43, OctoPrint 1.8.0 drops Python 2 support. In order to be able to install/update to it, you need to be running OctoPrint under Python 3 already, e.g. as shipped on OctoPi 0.18.0. Installing on Python 2 will fail. The Software Updater will also be redirected to a new OctoPrint Legacy repository for checking for OctoPrint updates if it detects that you are still running Python 2. As outlined in the blog post and the vlog, there are no more updates for OctoPrint 1.7/Python 2 planned. Update now or you will be left behind.

    If you are unsure what version of Python your OctoPrint instance is running under, open the web interface and look into the lower left corner where it will tell you:

    image

    This is also covered in the FAQ.

    ✋🧩 Heads-up for plugin authors: Importing Jinja2 templates from another plugin without an explicit prefix is now deprecated!

    OctoPrint so far allowed (erroneously) to replace plugin templates of the same name in another plugin, depending on loading order. Fixing this required to create prefixes for templates of plugins. Relative imports (think {% include "snippets/my_snippet.jinja2" %}) will now attempt to resolve against the current plugin. If that isn't possible, for now it will also be attempted to resolve globally against all registered templates and if a match is found, a deprecation will be logged. The latter behaviour will be removed in a future version of OctoPrint and if your plugin includes templates from other plugins you should now change it to using plugin prefixes if running on OctoPrint 1.8.0 or higher. Plugin prefixes are plugin_<plugin identifier>/, so for example, to include the settings pane of the bundled software update plugin, you'd now need to use plugin_softwareupdate/plugin_softwareupdate_settings.jinja2.

    ✋🧩 Heads-up for plugin authors: octoprint.util.bom_aware_open is now deprecated and will be removed in 2.0.0

    If your code uses bom_aware_open, you should replace its use with the regular open with utf-8-sig encoding instead (or io.open in py2/3 compatibility mode).

    ✋🧩 Heads-up for plugin authors: octoprint.util.commandline.clean_ansi will no longer accept bytes in 2.0.0

    If your code uses clean_ansi somewhere, make sure you supply it with str (formerly known as unicode) instead of bytes objects.

    ✨ Features & improvements

    • #3261 - The temperature tab now has (optional) event markers for when a print gets started, paused, resumed, cancelled or finishes. (PR #4382)
    • #3491 - Added new events FileMoved and FolderMoved, see the documentation for details on payload. (PR #4405)
    • #3589 - Software Update: You may now enqueue software updates while a print is ongoing. They will then be started (after a short countdown) after successful completion of the print, or manually if you cancelled the print. You can manage the queue during the print to remove items you don't want enqueued after all, or add additional items to it as well. (PR #4364)
    • #3868 - Optionally remember (and restore) the last opened folder in the files list in the browser if enabled in the features. (PR #4291)
    • #4179 - Gcode Viewer: Every fifth grid line (= every 5cm) will now be drawn slightly thicker to allow for easier counting and mapping of physical location. (PR #4287)
    • #4186 (PR) - Added support for changing order in which plugin hooks & implementation callbacks are called by OctoPrint.
    • #4218 - Gcode Viewer: Prevent mouse wheel from scrolling entire page and panning the canvas. (PR #4274)
    • #4221 (PR) - Improved performance of serial device lookup.
    • #4222 (PR) - Improved performance of all yaml operations by using the C based loader when possible.
    • #4223 (PR) - Added a ripgrep ignore file.
    • #4225 (PR) - Added a first version for embedding WebRTC based webcams. Please note that this should be considered beta and is still subject to change while further work and research is being done on the backend side of things.
    • #4227 - Added a help message that reminds users that username and password are case sensitive. (PR #4246).
    • #4228 - Switch the code to use utf-8-sig encoding instead of bom_aware_open and deprecated bom_aware_open. It will be removed in 2.0.0.
    • #4230 (PR) - Improved settings processing performance by optimizing deep_dict and using pickle for deep-copying.
    • #4235 (PR) - Added a Server-Timing response header to the API responses to allow for better profiling.
    • #4236 (PR) - Improved settings processing performance by reimplementing the underlying data structure as a flattened instead of a nested chainmap.
    • #4237 - Added a heads-up for when no serial port could be found in the system, with a link to the corresponding FAQ entry with additional steps. Also added a notification for port auto detection failure, linking to the same FAQ entry. This behaviour can be disabled by setting serial.ignoreEmptyPorts to true in config.yaml.
    • #4241 (PR) - Added tracebacks to TypeErrors caught in Plugin Settings.
    • #4244 (PR) - Return to depend on frozendict under Python 3 instead of immutabledict, as it's now maintained again.
    • #4280 (PR) - Websocket clients can now selectively subscribe to messages on the socket. See the docs for the new subscribe message on the push socket.
    • #4289 (PR) - Add Python 3.10 to automatic tests and package classifiers.
    • #4314 - Plugin Manager: It's now possible to bulk enable/disable plugins. This makes it easier for the user to locate plugins that are causing problems in the system.
    • #4317 - Non-Gcode commands can now also be defined as long running, as long as they do not have any parameters.
    • #4320 (PR) - Change some references links to https.
    • #4322 (PR) - Drastically reduced bandwidth used by the web socket by enabling the permessage-deflate extension of the websocket protocol.
    • #4324 (PR) - Virtual printer: Support for printer locking (Marlin's PASSWORD_FEATURE).
    • #4332 - Software Update: Improved logging in case of failures in running update checks, e.g. GitHub release fetching with an outdated PAT. Failing requests of any kind now generate a log entry and are also reflected in the frontend, similar to rate limiting situations.
    • #4337 (PR) - Plugin Manager: Added a new endpoint /plugin/pluginmanager/plugins/versions and associated PLUGIN_PLUGINMANAGER_LIST permission that allows to list installed plugins and their versions in a machine readable JSON format. Useful for 3rd party plugin to determine plugins available on the connected OctoPrint instance.
    • #4339 (PR) - Announcements: Improve performance by using a new encoding/decoding strategy for the cache and caching the parsed feed instead of the raw xml.
    • #4340 (PR) - Plugin Manager: Improve performance of plugin notification retrieval by caching parsed version structures.
    • #4352 - Event Manager: Added a note that event handlers are async.
    • #4353 - Expose configuration of default extrusions length on the UI (again) and also move it into the printer profile. (PR #4416)
    • #4356 - Added <noscript> to login page to give a heads-up if JS is disabled which is required for OctoPrint and its login page to function.
    • #4357 - Support for the "Host Shutdown" Action command can now be enabled so you can shut down the whole server via your printer's menu if supported by your firmware. Note that this disabled by default and has to be enabled via Settings > Serial Connection > Firmware & Protocol > Action Commands. (PR #4358)
    • #4363 - Software Update: New option force_reinstall for the pip updater. If set to true it will have the updater run a double install, once normal, once with --force-reinstall and --no-deps (to force a reinstall of the package but not all its dependencies).
    • #4363 - Plugin Manager & Software Update: Refactor pip error handling to be shared between Software Update, Plugin Manager and whatever else might need it.
    • #4368 - The Gcode command used to cancel an SD card print is now configurable and defaults to M25. (PR #4408)
    • #4370 (PR) - Timelapse: Recordings will now get a preview thumbnail rendered and displayed. A command line command has been added as well to generate thumbnails for already existing recordings via octoprint timelapse create_thumbnails, see octoprint timelapse create_thumbnails --help for usage information.
    • #4375 - Implement rotate & mirror functionality for HLS (& the new WebRTC) camera embeds. (PR #4378)
    • #4385 (PR) - Improve error reporting on failure to open serial port.
    • #4387 (PR) - Disable spell check on various search fields.
    • #4388 (PR) - Automatically parse additional temperature fields from M105 report/temperature autoreport and provide them on the internal and REST APIs.
    • #4390 (PR) - The encoding to use for the serial connection can now be configured via serial.encoding in config.yaml. It defaults to ascii but any other encoding recognized by Python can be used here if the printer requires it. Probably only relevant for now for very specific builds.
    • #4396 - Support --no-color command line argument and also NO_COLOR environment variable standard to disable coloring of standard (logging) output on command line. (PR #4402)
    • #4399 (PR) - Streamed ZIP downloads (e.g. the systeminfo bundle or bundled timelapses) now come with a Content-Length. Backport of PR #4313.
    • #4403 (PR) - New development related CLI command octoprint dev css:build. Can be used to run lessc against all relevant files. Note that you'll first need to install lessc via npm i -g less. For usage details see octoprint dev css:build --help.
    • #4423 - Expose serial.unknownCommandsNeedAck and serial.sendChecksumWithUnknownCommands in UI and assume them to be true if Prusa Firmware is detected to combat issues that might otherwise arise with MMU usage due to non-standard Tc and Tx commands. See also discussion in prusa3d/Prusa-Firmware#3411.
    • #4427 (PR) - Increase web socket connect timeout to reduce likelihood of less performant transport fallback in case of slow initial connection.
    • #4430 (PR) - Gcode Viewer: Improved overall memory utilization by switching underlying data structure from an AVL tree to a binary tree. As a welcome side effect, this also fixed #2243.
    • #4432 (PR) - Gcode Viewer: Further memory usage improvement by switching the line split of the loader from using a regex to using a simple string split.
    • #4437 (PR) - Support two digit flavors of G0 through G3 in Gcode Viewer and Gcode analysis (so, G00 through G03). Relevant for CNC applications.
    • #4443 (PR) - Software Update: Allow setting the GitHub Personal Access Token (to work around rate limiting issues) via the UI.
    • OctoPrint now requires Python 3.7 or newer. Starting with this release OctoPrint is Python 3 only. See also the heads-up above. Correspondingly also switched all links in the docs and the UI to the Python docs to refer to Python 3 docs instead of Python 2.
    • Added last safe mode date & reason to the system info bundle. This will allow to determine if safe mode was recently launched, and also allow to determine why it was launched.
    • Rephrased system info bundle sharing instructions and removed copy button for short system info text to discourage sharing that instead of the full bundle, which we've sadly seen a ton over the past few months.
    • Removed the webassets cache as it only makes a difference during development, and removing it closes a potential abuse vector.
    • Improved performance of CLI command listings.
    • Instead of silently ignoring a select/print on file upload if the necessary preconditions aren't met, include the effective select/print flags on the upload API and int he triggered UPLOAD event.
    • Application Keys: The plugin now supports a stand-alone authentication dialog which can be accessed via the auth_dialog property returned in response to an app token request. Third party clients can use this lightweight alternative to request an API key on behalf of a user without having to display/load the whole OctoPrint UI.
    • Discovery: Add new config options to ignore interfaces (plugins.discovery.ignoredInterfaces) and limit zeroconf to configured/not ignored interfaces only.
    • Gcode Viewer: Added more progress info during loading process.
    • Plugin Manager: Support .whl uploads as well.
    • Software Update: Improved the update & check buttons. "Update all" will now only update enabled items, "Update all available" (in the new dropdown) will updated enabled and muted items, "Check for updates" does what it always did, "Force check for updates" (dropdown) bypasses the cache, and notification muting and underlying logic is now explained in a footer.
    • Software Update: Put a stronger warning about automatic updates of pip in place.
    • Tracking: Include octopiuptodate_build from PiSupport Plugin, if set. This gives us a better overview on what specific environments to test and develop against.
    • Virtual Printer: Added ability to simulate broken Klipper MCU connection.
    • Translation improvements (PR #4290, PR #4385, PR #4386)
    • Cleaned up code here and there.

    🐛 Bug fixes

    • #2243 (PR) - GCode Viewer: Properly display sequentially printed files. Welcome side effect of #4430.
    • #4153 - Fix default ffmpeg commandline (-framerate instead of -r) to ensure ffmpeg generates correct progress reports while rendering a timelapse (PR #4344)
    • #4212 - Fix file selection not properly updating when selecting a file to print from the printer controller.
    • #4238 - Software Update: Fix handling of plugin downgrades on release channel switch.
    • #4240 (PR) - Improve memory footprint of client side terminal by fixing a wrong use of _.map.
    • #4242 - Refocus username input field in the login form on authentication failure (PR #4249)
    • #4260 - Fixed the wrong behaviour that plugins could overwrite plugin templates of other plugins by giving them the same name by making plugin template includes relative and requiring prefixes to address templates of other plugins. See also the associated heads-up for plugin authors above (PR #4281)
    • #4299 - Don't try to enter cancelling state again if already in it.
    • #4316 - Fix timelapse temp folder configuration, which wasn't possible via the UI since 1.5.0.
    • #4321 (PR) - Fixed the offline indicator icon.
    • #4336 (PR) - Don't treat paused state as "ready to print" on APIs.
    • #4349 (PR) - Fix some issues where the timelapse documentation didn't match the implementation (by fixing the docs).
    • #4362 - Fix parsing of version numbers, no longer truncates version after first -.
    • #4363 - Plugin Manager & Software Update: Fix "already installed" detection for newer versions of pip.
    • #4365 - Fix failing timelapse snapshots if the printed file contains a %. (PR #4366)
    • #4367 - Fix error message displayed when attempting to upload a file that is already printed, now properly reflects the issue at hand.
    • #4380 - Fix connectivity check against IPV6 targets. OctoPrint will now first try to reach the host via IPV6 (if enabled), if that fails, fall back to IPV4, and only if that fails too report a connection failure.
    • #4392 - Fix an encoding bug in the clean_ansi helper used for cleaning pip output. Issue caused plugin installation/deinstallation/updates, OctoPrint updates and backups to fail against pip 22+ due to an introduction of a UTF-8 separator line in that.
    • #4396 - Fix colors of standard (logging) output on command line to be better suited for light backgrounds. (PR #4402)
    • #4404 (PR) - Fix less build under less v4
    • #4417 - Fix a faulty regex that caused custom events with uppercase identifiers to generated events names with a double _.
    • #4433 (PR) - Don't load Font Awesome twice.
    • #4439 (PR) - Software Update: Use the correct ignore_throttled setting.
    • #4449 (PR) - Gcode Viewer: Only clear state on event when idle.
    • Fix parsing of firmware capability lines containing the string NAME: getting matched by the M115 response parser instead of the capability parser, by moving the capability parser before the M115 response parser.
    • Fix firmware info inclusion in systeminfo.txt of system info bundle.
    • Improved error resilience in hook processing. Hooks running into errors could prevent commands to be sent to the printer altogether, which has now been rectified.
    • Got rid of a deprecation warning in the plugin sub system by refactoring some code.
    • Clear position recording flag in communication layer on cancel/pause preparation timeout.
    • Reset position data in communication layer on cancel/pause preparation.

    🎉 Special thanks to all the contributors!

    Special thanks to everyone who contributed to this RC, especially to @adamwolf, @ademuri, @cp2004, @crysxd, @DShenkle, @flaviut, @gdombiak, @GonzoDMX, @jneilliii, @johnboiles, @JoveToo, @kantlivelong, @kohend, @LazeMSS, @MartijnBraam, @NilsRo, @OllisGit, @pR0Ps, @QuinnDamerell, @rooterkyberian@Rotzbua, @surdu, @synman, @The-EG, @thelastWallE, @TylonHH and @vector76 for their PRs!

    🔗 More information

    Source code(tar.gz)
    Source code(zip)
  • 1.7.3(Jan 20, 2022)

    This is a bugfix release for 1.7.x.

    The heads-ups from 1.7.0 still apply, please read this release's release notes as well for a full picture of what you should be aware of and what changed!

    Issues while updating?

    On every new OctoPrint release we see some people run into the same issues with outdated or broken environments all over again. If you encounter a problem during update, please check this collection of the most common issues encountered over the past couple of release cycles first, and test if the included fixes solve your problem.

    Bug fixes

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this bugfix release, especially @kantlivelong for his PR!

    More information

    • Commits
    • As this is a bugfix release, there were no release candidates
    Source code(tar.gz)
    Source code(zip)
  • 1.7.2(Nov 2, 2021)

    This is a bugfix release for 1.7.x.

    The heads-ups from 1.7.0 still apply, please read this release's release notes as well for a full picture of what you should be aware of and what changed!

    Issues while updating?

    On every new OctoPrint release we see some people run into the same issues with outdated or broken environments all over again. If you encounter a problem during update, please check this collection of the most common issues encountered over the past couple of release cycles first, and test if the included fixes solve your problem.

    Bug fixes

    • #4293 - Fix double quoting of the resource ref on the files API. This was causing issues with the Cura plugin and other third party API clients.

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this bugfix release!

    More information

    • Commits
    • As this is a bugfix release, there were no release candidates
    Source code(tar.gz)
    Source code(zip)
  • 1.7.1(Nov 1, 2021)

    This is a bugfix release for 1.7.x.

    The heads-ups from 1.7.0 still apply, please read this release's release notes as well for a full picture of what you should be aware of and what changed!

    Issues while updating?

    On every new OctoPrint release we see some people run into the same issues with outdated or broken environments all over again. If you encounter a problem during update, please check this collection of the most common issues encountered over the past couple of release cycles first, and test if the included fixes solve your problem.

    Bug fixes

    • #4267 - Properly escape names of uploaded files and timelapses containing a #. Not doing so would make such files unmanageable through the core UI.
    • #4273 (PR) - Plugin Manager: Fix a wrong sorting selected in the list of installed plugins and the list of plugins on the repository.
    • #4292 - Set requesting of low latency mode on the serial connection to disabled by default, as there's a small number of users for which this causes issues in connecting.

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this bugfix release, especially @QuinnDamerell for their PR!

    More information

    • Commits
    • As this is a bugfix release, there were no release candidates
    Source code(tar.gz)
    Source code(zip)
  • 1.7.0(Oct 11, 2021)

    Issues while updating?

    On every new OctoPrint release we see some people run into the same issues with outdated or broken environments all over again. If you encounter a problem during update, please check this collection of the most common issues encountered over the past couple of release cycles first, and test if the included fixes solve your problem.

    Heads-up for anyone still on OctoPi 0.15.0 or 0.15.1

    OctoPrint 1.7.0 is the final release that will allow updating through the built in Software Update plugin. The Python environment on OctoPi 0.15.* has now become so ancient that the overhead of keeping on supporting it is no longer sustainable, and the likelihood of spontaneous breakage has increased significantly.

    If you are one of the ~5% of users still on OctoPi 0.15, create a backup of your OctoPrint data, flash the latest OctoPi 0.18 to ideally a fresh SD card (they age too...) and restore from backup. That should get you up and running under a current OctoPi release in no time and additionally migrate you to Python 3.

    Heads-up for anyone still on Python 2

    I'll do my very best to keep OctoPrint functional under Python 2 until the release of OctoPrint 2.0.0, however Python 2.7 has been EOL now for almost two years, a lot of third party libraries are releasing updates for Python 3 only at this point, and many plugin authors for OctoPrint do so as well.

    It is time to upgrade, and so OctoPrint 1.7.0 will now show you a pop-up about that fact when you open the UI. You do not have to act, but it is strongly recommended you do if you don't want to be left behind, and the pop-up will also tell you how to update:

    image

    Please do, the less Python 2 users are out there I still have to support, the more time I have for moving towards 2.0.

    Heads-up for plugin authors: octoprint.util.get_free_bytes has been removed

    The utility function octoprint.util.get_free_bytes, now deprecated since version 1.2.5 in favor of psutil.disk_usage, has finally been removed. If for any reason you've been using this in your third party plugin, ignoring the deprecation warning OctoPrint has been printing out to the log since 2015, now is the time to finally fix things.

    Features & improvements

    • #2888 - New event FilamentChange triggered when commands M600, M701 or M702 are sent to the printer. (PR #4187)
    • #3936 - Software Update: The Software Update plugin will now prompt for an update as the first step during the first run setup wizard, if there's an update available.
    • #4059 - Timelapse: Switched to using -b:v instead of just -b for FFMPEG bitrate specification. Also improved sanity checking of timelapse rendering parameters.
    • #4065 - Software Update: Added an update log with link to the release notes. You will now be able to see the update events of the past 30d right from within the Software Update settings in case you need to debug something. The update log will also be shared into the system info bundle.
    • #4069 - Plugin Manager & Software Update: Added a link to the FAQ if actions are blocked due to undervoltage.
    • #4085 - Improved animation performance across all modals in the UI. (PR #4103, PR #4164)
    • #4098 (PR) - Use G0 for jogging instead of G1.
    • #4099 - Attempt to set low latency mode on the serial port on POSIX systems (e.g. Linux) to improve serial performance. If unsupported should gracefully fall back to former behaviour.
    • #4101 - Mark "G90 influences extruder" as relevant for Marlin 2. (PR #4116)
    • #4105 (PR) - Improved UI performance by getting rid of ResizeSensor and copywidth.
    • #4107 - Added an option to disable the cache busting on the webcam stream URL. (PR #4124)
    • #4111 (PR) - Added an unselect command on the files API.
    • #4114 (PR) - Added the ability to rename files and folders via the move dialog.
    • #4128 (PR) - Added ignored commands. They behave identical to blocked commands in that they are not sent to the printer by OctoPrint, but other than those they do not generate a blocked command event with severity warn but rather just info. The list by default ships as empty.
    • #4131 - Plugin Manager: Improve performance of settings dialog by making better use of caching headers on the plugin repository endpoint. (PR #4132)
    • #4143 - A new hook octoprint.system.additional_commands allows plugin authors to add new entries to the system command menu from their plugins.
    • #4145 (PR) - Backup: Clarified what the various "exclude" options do precisely.
    • #4149 - Removed the artifical upper limit of 10 extruders in the UI.
    • #4157 - Added arc calculation to GCODE analysis. (PR #4159)
    • #4166 - Plugin Manager: OctoPrint will now detect if a plugin install fails due to a Python version mismatch and show a special message with link to an FAQ entry on the matter.
    • #4166 - If still running under Python 2, OctoPrint will now show a notification linking to update instructions to Python 3 on page reload/connection to the backend.
    • #4173 (PR) - Upgraded Tornado to 6.x under Python 3
    • #4193 (PR) - Added a new bundled plugin "Event Manager" for managing event subscriptions via the UI.
    • #4204 - Make the new event manager use the new (faster) CSS only modal fade in animation.
    • Tracking: Added tracking of user agent string via new tracking event webui_load. Slightly different reimplementation of (unmerged) PR #4148.
    • The third party plugin blacklist now supports plugin and python version ranges.
    • Added support for the EXTENDED_M20 firmware capability. If detected, OctoPrint will now send M20 L instead of plain M20 requests to firmwares, to allow immediate fetch of long names. Quoted long names, as apparently sent by some firmwares even though there was never a mention of that during the initial feature discussions, are also supported now.
    • Added support for the AUTOREPORT_POS firmware capability. If detected, OctoPrint will enable position auto reporting on connection.
    • Improved logging of folder configuration issues during startup. That should help in debugging any kind of related problems.
    • Made the system info bundle more visible. Many users are still copy/pasting the textual system info dump and forget to share the bundle. So the request was rephrased to target the bundle and the textual info dump was hidden behind a "More" area. Also, the bundle viewer has been linked.
    • Added a new frontend callback onBeforePrintStart. That can be used to hook into and prevent the start of a print job via click on "Start" in the print state or click on select & print in the file list. Will be used by a new version of the bundled PiSupport plugin to show an additional confirmation when starting a new job while the system is throttled due to undervoltage or overheating.
    • OctoPrint's console output will now be colored based on log severity.
    • Added a new, bundled plugins only, hook octoprint.systeminfo.additional_bundle_files that allows bundled plugins to declare additional files to include in system info bundles. Why only bundled plugins? The goal is to keep bundles small and easy to process, and if every third party plugin can add files to it that would probably change fast.

    Bug fixes

    • #4073 - Fixed non deterministic sorting of empty folders in the file list by upload date in Chrome browsers.
    • #4074 - Invalid GCODE analysis results will no longer cause HTTP errors on the files API.
    • #4075 (PR) - Fixed centering of icons in the control tab buttons.
    • #4078 - When running under Python 3, OctoPrint will do its best to keep names of uploaded files as is, without slugification. A config option to enforce the old behaviour (feature.enforceReallyUniversalFilenames) has been added for compatibility reasons. This should solve issues with name collisions due to slugification.
    • #4084 - Enforcing printTimeLeft on the print job information from the API is an int.
    • #4092 - Fixed inaccessible tool dropdown.
    • #4117 - GCODE Viewer: Worked around a Chrome-only rounding issue with short arcs with large radii causing rendering artifacts. If Chrome is detected, the viewer will now fall back on an approximation of the 2D context's arc command, implemented via bezier curves, that doesn't suffer from the same browser bug. This fallback implemented can also be intentionally toggled or untoggled via a new advanced renderer option. See also this blog post.
    • #4122 (PR) - Removed a debug span.
    • #4129 (PR) - Software Update: Fixed a button size inconsistency.
    • #4136 (PR) - Fixed the SameSite=None cookie behaviour.
    • #4135 (PR) - Fixed bedZ setting not being set as a float like it should, leading to wrong config.
    • #4162 - Fixed GCODE files without any extrusion being analysed on each server start.
    • #4175 (PR) - Fixed a bunch of documentation build issues.
    • #4194 - Improved error handling of lacking resend history to further investigate this issue.
    • #4202 (regression) - Fix None handling error in print time estimation during print start.
    • #4203 (regression) - Only try to set low latency mode to True, never to False. Just don't do anything if low latency mode isn't requested.
    • #4207 - Software Update: Fix "Update log" content being visible on the wrong settings tab
    • #4210 (regression) - Fix label placement in progress dialog, as e.g. used by the timelapse bulk delete feature.
    • #4216 (regression) - Announcements: Fix announcements dialog sizing (PR #4217)
    • #4226 (regression) - Set autocapitalize="none" on login fields again. Longer standing regression, fixed in this RC due to minimal impact and side effect potential.
    • #4231 - Plugin Manager: Make sure plugin list export URL is prefixed with the correct base URL.
    • Some wording & typo fixes. (PR #4089, PR #4125, PR #4137)
    • Fixed TEMPLATES_AUTO_RELOAD not being honored and thus templates not auto reloading during development without server restart.
    • Fixed a bug in the calculation of wizards to display.
    • Fixed the ko invisible binding not updating properly.

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this RC, especially to @apbarratt, @cp2004, @eltonlaw, @eyal0, @ianwiltdotcom, @jneilliii, @jugmac00, @kantlivelong, @LazeMSS, @ldursw, @oliof, @sparxooo, @StevilKnevil and @TwoRedCells for their PRs!

    More information

    Source code(tar.gz)
    Source code(zip)
  • 1.7.0rc3(Sep 13, 2021)

    ⚠️ Important note on release candidates

    This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

    You should be comfortable with and capable of possibly having to do this before installing an RC.

    Feedback on this RC

    Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

    If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.

    Thanks!

    Bug fixes

    • #4207 - Software Update: Fix "Update log" content being visible on the wrong settings tab
    • #4210 (regression) - Fix label placement in progress dialog, as e.g. used by the timelapse bulk delete feature.
    • #4216 (regression) - Announcements: Fix announcements dialog sizing (PR #4217)
    • #4226 (regression) - Set autocapitalize="none" on login fields again. Longer standing regression, fixed in this RC due to minimal impact and side effect potential.
    • #4231 - Plugin Manager: Make sure plugin list export URL is prefixed with the correct base URL.

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release candidate and provided full, analyzable bug reports, especially to @cp2004 for his PR!

    More information

    Source code(tar.gz)
    Source code(zip)
  • 1.7.0rc2(Aug 11, 2021)

    ⚠️ Important note on release candidates

    This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

    You should be comfortable with and capable of possibly having to do this before installing an RC.

    Feedback on this RC

    Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

    If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.

    Thanks!

    Improvements

    • #4204 - Make the new event manager use the new (faster) CSS only modal fade in animation.

    Bug fixes

    • #4202 (regression) - Fix None handling error in print time estimation during print start.
    • #4203 (regression) - Only try to set low latency mode to True, never to False. Just don't do anything if low latency mode isn't requested.

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release candidate and provided full, analyzable bug reports!

    More information

    Source code(tar.gz)
    Source code(zip)
  • 1.7.0rc1(Aug 4, 2021)

    ⚠️ Important note on release candidates

    This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

    You should be comfortable with and capable of possibly having to do this before installing an RC.

    Feedback on this RC

    Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

    If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.

    Thanks!

    Heads-up for plugin authors: octoprint.util.get_free_bytes has been removed

    The utility function octoprint.util.get_free_bytes, now deprecated since version 1.2.5 in favor of psutil.disk_usage, has finally been removed. If for any reason you've been using this in your third party plugin, ignoring the deprecation warning OctoPrint has been printing out to the log since 2015, now is the time to finally fix things.

    Features & improvements

    • #2888 - New event FilamentChange triggered when commands M600, M701 or M702 are sent to the printer. (PR #4187)
    • #3936 - Software Update: The Software Update plugin will now prompt for an update as the first step during the first run setup wizard, if there's an update available.
    • #4059 - Timelapse: Switched to using -b:v instead of just -b for FFMPEG bitrate specification. Also improved sanity checking of timelapse rendering parameters.
    • #4065 - Software Update: Added an update log with link to the release notes. You will now be able to see the update events of the past 30d right from within the Software Update settings in case you need to debug something. The update log will also be shared into the system info bundle.
    • #4069 - Plugin Manager & Software Update: Added a link to the FAQ if actions are blocked due to undervoltage.
    • #4085 - Improved animation performance across all modals in the UI. (PR #4103, PR #4164)
    • #4098 (PR) - Use G0 for jogging instead of G1.
    • #4099 - Attempt to set low latency mode on the serial port on POSIX systems (e.g. Linux) to improve serial performance. If unsupported should gracefully fall back to former behaviour.
    • #4101 - Mark "G90 influences extruder" as relevant for Marlin 2. (PR #4116)
    • #4105 (PR) - Improved UI performance by getting rid of ResizeSensor and copywidth.
    • #4107 - Added an option to disable the cache busting on the webcam stream URL. (PR #4124)
    • #4111 (PR) - Added an unselect command on the files API.
    • #4114 (PR) - Added the ability to rename files and folders via the move dialog.
    • #4128 (PR) - Added ignored commands. They behave identical to blocked commands in that they are not sent to the printer by OctoPrint, but other than those they do not generate a blocked command event with severity warn but rather just info. The list by default ships as empty.
    • #4131 - Plugin Manager: Improve performance of settings dialog by making better use of caching headers on the plugin repository endpoint. (PR #4132)
    • #4143 - A new hook octoprint.system.additional_commands allows plugin authors to add new entries to the system command menu from their plugins.
    • #4145 (PR) - Backup: Clarified what the various "exclude" options do precisely.
    • #4149 - Removed the artifical upper limit of 10 extruders in the UI.
    • #4157 - Added arc calculation to GCODE analysis. (PR #4159)
    • #4166 - Plugin Manager: OctoPrint will now detect if a plugin install fails due to a Python version mismatch and show a special message with link to an FAQ entry on the matter.
    • #4166 - If still running under Python 2, OctoPrint will now show a notification linking to update instructions to Python 3 on page reload/connection to the backend.
    • #4173 (PR) - Upgraded Tornado to 6.x under Python 3
    • #4193 (PR) - Added a new bundled plugin "Event Manager" for managing event subscriptions via the UI.
    • Tracking: Added tracking of user agent string via new tracking event webui_load. Slightly different reimplementation of (unmerged) PR #4148.
    • The third party plugin blacklist now supports plugin and python version ranges.
    • Added support for the EXTENDED_M20 firmware capability. If detected, OctoPrint will now send M20 L instead of plain M20 requests to firmwares, to allow immediate fetch of long names. Quoted long names, as apparently sent by some firmwares even though there was never a mention of that during the initial feature discussions, are also supported now.
    • Added support for the AUTOREPORT_POS firmware capability. If detected, OctoPrint will enable position auto reporting on connection.
    • Improved logging of folder configuration issues during startup. That should help in debugging any kind of related problems.
    • Made the system info bundle more visible. Many users are still copy/pasting the textual system info dump and forget to share the bundle. So the request was rephrased to target the bundle and the textual info dump was hidden behind a "More" area. Also, the bundle viewer has been linked.
    • Added a new frontend callback onBeforePrintStart. That can be used to hook into and prevent the start of a print job via click on "Start" in the print state or click on select & print in the file list. Will be used by a new version of the bundled PiSupport plugin to show an additional confirmation when starting a new job while the system is throttled due to undervoltage or overheating.
    • OctoPrint's console output will now be colored based on log severity.
    • Added a new, bundled plugins only, hook octoprint.systeminfo.additional_bundle_files that allows bundled plugins to declare additional files to include in system info bundles. Why only bundled plugins? The goal is to keep bundles small and easy to process, and if every third party plugin can add files to it that would probably change fast.

    Bug fixes

    • #4073 - Fixed non deterministic sorting of empty folders in the file list by upload date in Chrome browsers.
    • #4074 - Invalid GCODE analysis results will no longer cause HTTP errors on the files API.
    • #4075 (PR) - Fixed centering of icons in the control tab buttons.
    • #4078 - When running under Python 3, OctoPrint will do its best to keep names of uploaded files as is, without slugification. A config option to enforce the old behaviour (feature.enforceReallyUniversalFilenames) has been added for compatibility reasons. This should solve issues with name collisions due to slugification.
    • #4084 - Enforcing printTimeLeft on the print job information from the API is an int.
    • #4092 - Fixed inaccessible tool dropdown.
    • #4117 - GCODE Viewer: Worked around a Chrome-only rounding issue with short arcs with large radii causing rendering artifacts. If Chrome is detected, the viewer will now fall back on an approximation of the 2D context's arc command, implemented via bezier curves, that doesn't suffer from the same browser bug. This fallback implemented can also be intentionally toggled or untoggled via a new advanced renderer option. See also this blog post.
    • #4122 (PR) - Removed a debug span.
    • #4129 (PR) - Software Update: Fixed a button size inconsistency.
    • #4136 (PR) - Fixed the SameSite=None cookie behaviour.
    • #4135 (PR) - Fixed bedZ setting not being set as a float like it should, leading to wrong config.
    • #4162 - Fixed GCODE files without any extrusion being analysed on each server start.
    • #4175 (PR) - Fixed a bunch of documentation build issues.
    • #4194 - Improved error handling of lacking resend history to further investigate this issue.
    • Some wording & typo fixes. (PR #4089, PR #4125, PR #4137)
    • Fixed TEMPLATES_AUTO_RELOAD not being honored and thus templates not auto reloading during development without server restart.
    • Fixed a bug in the calculation of wizards to display.
    • Fixed the ko invisible binding not updating properly.

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this RC, especially to @apbarratt, @cp2004, @eltonlaw, @eyal0, @iawiltdotcom, @jneilliii, @jugmac00, @kantlivelong, @LazeMSS, @ldursw, @oliof, @sparxooo, @StevilKnevil and @TwoRedCells for their PRs!

    More information

    Source code(tar.gz)
    Source code(zip)
  • 1.6.1(May 10, 2021)

    This is a bugfix release to fix two bugs in 1.6.x.

    The heads-ups from 1.6.0 still apply, please read this release's release notes as well for a full picture of what you should be aware of and what changed!

    Bug fixes

    • #4115 - GCode viewer: Fix dragging when a printer profile with center origin is selected. As a welcome side effect, this now also means the GCode viewer will finally update the bed dimensions properly on printer profile change.
    • #4119 - Fix blocking timeout when requesting an SD file list while printing & prevent an SD list refresh while printing.

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this bugfix release!

    More information

    • Commits
    • As this is a bugfix release, there were no release candidates
    Source code(tar.gz)
    Source code(zip)
  • 1.6.0(Apr 27, 2021)

    Heads-up for plugin authors: Support for the plugin control properties __plugin_init__ and __plugin_implementations__ (plural!) has been removed

    The two plugin control properties __plugin_init__ and __plugin_implementations__ (note the plural!) have been deprecated ever since OctoPrint 1.2.0 and have finally been removed.

    It is highly unlikely that your plugin has ever used them given that they were already marked as deprecated for the very first version of OctoPrint to ever even support plugins. Still, just in the case of anyone out there making use of them regardless, here's a heads-up that they will no longer be utilized in OctoPrint 1.6+.

    Features & improvements

    • #3544 - Timelapse: Bulk downloads of multiple timelapses in one zip archive. See also #3856.
    • #3595 - GCode Viewer: "Center viewport on model" and "Zoom in on model" now take the current layer's bounding box into account, instead of the whole model's. See also #3880.
    • #3711 - Plugin Manager: Button to export the list of installed plugins to a machine readable JSON file. See also #3833.
    • #3746 - Logging: Bulk downloads of multiple logs in one zip archive.
    • #3801 - Get rid of double scrollbars in Plugin Manager and Software Update settings dialogs. See also #3835 and #3836.
    • #3818 - Backup: Base the backup name on the configured instance name.
    • #3819 - File search now searches through both internal and displayed file name.
    • #3828 - Separate error messages from connection state on Printer Status and Job API by introducing a new error field next to state.
    • #3830 - Reword the warning about using the global API key.
    • #3835 - PMGR: Improve UX by moving notices to a collapsible "info" section at the top of the window, moving the Get More button to the top bar, fixing the top bar when scrolled and highlighting available notices with red icon & text and an auto-show if needed.
    • #3836 - SWU: Improve UX by moving check for updates & update all buttons to the top of the interface & moving advanced options to a collapsed section at the top of the interface.
    • #3840 - Add an indicator to the frontend if OctoPrint detects it can't connect to the internet.
    • #3866 - Backup: Add plugin helpers create_backup and delete_backup.
    • #3873 - A new file name collision dialog is now triggered on upload if the uploaded file is detected as already existing on the server. The dialog allows to cancel the upload, rename the file or forcefully overwrite the file already on disk. This confirmation dialog can be disabled via Settings > Features to restore the old behaviour (overwrite without asking).
    • #3882 - For determining pip behaviour and Python environment, capture testballoon output from the pip call's stdout/stderr instead of a temporary file.
    • #3885 - Support permission objects as keys to SettingsPlugin.get_settings_restricted_paths, instead of just user, admin, never. This allows plugin authors to more granular control on which settings get presented to what user types.
    • #3895 - Ensure connectivity check wizard comes before usage tracking wizard. See also #3918.
    • #3903 - Add two new events GcodeScript${ScriptName}Running and GcodeScript${ScriptName}Finished that will be triggered when gcode scripts are run.
    • #3919 - systemd: Change service type in bundled unit file to exec
    • #3920 - Add an ES5 polyfill to improve compatibility of third party plugins on really old browsers.
    • #3924 - Tracking: Allow to change your decision made in the wizard before submitting it.
    • #3925 - Announcement: Set default state to avoid pop-in
    • #3925 - Action Command Prompt: Fix icon
    • #3942 - Blacklist: Allow to change your decision made in the wizard before submitting it.
    • #3943 - Connectivity check: Allow to change your decision made in the wizard before submitting it.
    • #3944 - Add frontend callback onUserSettingsBeforeSave that gets called on core components and registered plugin view models when user settings are saved.
    • #3946 - Ensure validity of IP address ranges configured for autologin and refuse to use invalid ones.
    • #3947 - Logging: Automatically add logger on selection. See also #3957.
    • #3950 - Logging: Start new config with empty logger. See also #3951.
    • #3952 - Logging: Save logging settings only when there actually were changes. See also #3953 and #3949.
    • #3958 - Include slicing.defaultSlicer on the settings API.
    • #3963 - Improve error message during server startup if a Python bug with non-ASCII host names gets encountered.
    • #3966 - Add IDs and classes to terminal panels and buttons, to allow easier targeting from third party plugins.
    • #3972 - Timelapse: the used ffmpeg command line can now be configured in detail
    • #3978 - Remove redundant Python 2 float conversion relics.
    • #3984 - Add a hook octoprint.printer.handle_connect for plugins to prevent a connect from going through.
    • #3987 - Enforce scrollbars to be visible on Safari
    • #3993 - Backup: Add warning for backups that are too big to restore via upload.
    • #4017 - GCode Viewer: New option to make the viewer ignore all commands until a certain line in the file is found. This can be used to ignore priming lines.
    • #4024 - SWU: Improve error reporting in case of detected undervoltage/overheating.
    • #4031 - PMGR: Change default sorting of repository view from "name" to "popularity".
    • #4035 - PMGR: The API endpoint api/plugin/pluginmanager has been deprecated and split into plugin/pluginmanager/plugins, plugin/pluginmanager/orphans and plugin/pluginmanager/repository. There's also now plugin/pluginmanager/<key> to retrieve information for a specific plugin by its identifier.
    • #4049 - Improve consistency in the settings headers.
    • #4050 - Default temperature regex of terminal filters now also recognizes C, P, R and L values as support by Marlin, as well as negative values.
    • #4050 - Docs: pip install command should use quoted source for maximum compatibility with people's dev environments.
    • #4080 (regression) - Fix horizontal scrollbar size in Safari and get rid of horizontal scrolling in notifications altogether.
    • #4082 (regression) - Fix SD card printing
    • #4102 - Add option to revert back to former behaviour of always lower casing SD Card file names reported by the firmware to work around a bug in Prusa Firmware (prusa3d/Prusa-Firmware#3115). Auto detect Prusa Firmware and automatically enable this option if firmware autodetection is enabled. See also #3994 for reference.
    • New --overlay command line flag to defined additional config overlays to apply to OctoPrint's defaults before loading config.yaml. This will allow preconfiguration by distributions without the risk to bundle environment specific presets in backups that might then no longer fit presets required on later versions (as seen in #3821).
    • OctoPrint now provides a downloadable SystemInfo bundle that contains system information, octoprint.log, serial.log, plugin_pluginmanager_console.log and plugin_softwareupdate_console.log. A bundle viewer allows easy viewing of bundles. SystemBundles are going to become mandatory for bug reports and you can also expect them to be requested from you when seeking support on the forums or the Discord server. It can be acquired through OctoPrint's About dialog, the recovery page and the command line (via octoprint systeminfo <directory>).
    • New action commands supported: sd_inserted, sd_ejected, sd_updated. May be used by firmware to explicitly inform OctoPrint about SD card changes.
    • Only import plugins if their metadata contains any control property. This is to protect against loading things from the plugin folders that aren't even plugins, like errant setup.py files.
    • Remove deprecated plugin control properties __plugin_init__ and __plugin_implementations__ (plural!)
    • Remove support for plugins only provided as pyc files, as that would not work with our pre-load validation and never was officially supported anyhow.
    • Add min/max properties to octoprint.util.CountedEvent.
    • Make size of last line buffer in comm layer configurable via serial.lastLineBufferSize.
    • Protect against null scripts sent by clients.
    • Connectivity check: Default to 1.1.1.1 for online check. Less controversial than 8.8.8.8.
    • Make the tornado.access log less verbose for /api/printer. 409 returns on this endpoint are common if the printer is not currently connected. Reduce log spam by rewriting such requests to INFO level, which by default won't get logged.
    • Clarify in the UI that OctoPrint does not control the webcam.
    • All JSON and YAML will now be dumped with 2 space indentation.
    • Don't return input params in error messages on the API as that might open up clients that don't escape errors to XSS.
    • Fail fast on invalid file names requested on the files API.
    • Use flask.abort where it makes sense.
    • Default to JSON errors on all API endpoints including blueprints.
    • octoprint.util.time_this decorator can now also log on entering the decorated function.
    • Performance improvements on the files API.
    • Ignore SD card messages from the firmware if SD support is disabled in OctoPrint.
    • Backup: Allow restore of backups from newer patch versions. E.g. it will now be possible to restore a backup from 1.6.1 under 1.6.0, but still not possible to restore a backup from 1.7.x under 1.6.x.
    • GCode Viewer: Improve identifiers in settings dialog.
    • Logging: Don't manage anything but *.log files.
    • PiSupport: Extracted into its own project at OctoPrint/OctoPrint-PiSupport on its own release cycle. Required by OctoPrint and still considered bundled.
    • Tracking: Add printer state to ping event. That will allow us to get a general idea of actively used vs idle instances. A huge number of instances in an error state could also be an indicator of problems with a release.
    • SWU: Additional check overlay for Python 2 instances. This will allow to disable software update for future Py3 plugins, or redefine update URLs and the like for plugins to allow for security updates or similar from an alternative repository. See this post on the community forums for details.
    • Update the bundled modernizr.
    • Update the FirmwareCheck dependency to 2021.2.4
    • Remove unused rsa dependency (was slated for removal with 1.4.0 already and just got forgotten).
    • Add ESLint and pyupgrade to pre-commit checks.
    • Some refactoring here and there

    Bug fixes

    • #3808 - Fix wrong CSS class on footer. See also #3848.
    • #3829 - Virtual printer: Fix whitespace issue reporting M145 material heatup on M501/M503.
    • #3845 - Fix default regex supplied when adding a new terminal filter. See also #3913.
    • #3865 - Make sure resend ratio setting is an integer.
    • #3869 - Fix config CLI, specifically for setting plugins.softwareupdate.credentials.github.
    • #3875 - Validate JSON with additional state data from plugins, to protect against broken plugins causing a disruption on the push socket due to invalid data. See also #3878.
    • #3883 - Backup: Fix plugin installation when restoring from the CLI
    • #3887 - Fix caching for custom UIPlugins. See also #3888.
    • #3892 - SWU: Fix localPipCommand usage
    • #3905 - Fix recovery from fancy terminal disabling due to slow processing.
    • #3916 - Fix firmware info splitting for firmware which includes datetimes in its report.
    • #3920 - Remove some ES5 incompatible code parts to improve compatibility with really old browsers.
    • #3930 - Fix lines like M150 W40 R20 G20 B20 to be interpreted wrong by the GCODE analysis and lead to invalid analysis results.
    • #3938 - Login UI: Ignore (expected) disconnect on page reload to get rid of scary "server is offline" message.
    • #3941 - Tracking: Fix a typo in the wizard
    • #3948 - Logging: Reload logging settings from the backend on Settings open. That way we will no longer show outdated/cancelled modifications. See also #3949.
    • #3954 - Logging: Prevent adding the same logging config twice. See also #3956.
    • #3994 - Fix lower casing of file names on the printer's SD. Apparently at least some firmware variants are case-sensitive, so err on the side of caution.
    • #3997 - Fix invalid HTML for video embed.
    • #4007 - Don't minify already minified files via webassets.
    • #4014 - Fix a small CSS bug that causes havoc with reskinning.
    • #4015 - GCode Viewer: Fix a typo causing the centerViewport setting to not be persisted properly.
    • #4030 - Fix a deprecation warning on reloading non-conflicting changes in the UI.
    • #4034 - Virtual Printer: Fix handling of parameterless M117
    • #4036 - Assume a start z of 0 in analysis and GCODE viewer to calculate a correct model height even for GCODE that foregoes homing.
    • #4043 - Make sure to import ABC from collections.abc for Python 3.10 compatibility.
    • #4051 - Fix caching behaviour on files API for SD card files. A force refresh will now also trigger a refresh of the SD card file list from the printer.
    • #4080 (regression) - Fix horizontal scrollbar size in Safari and get rid of horizontal scrolling in notifications altogether.
    • #4082 (regression) - Fix SD card printing
    • #4086 (regression) - GCode viewer: Fix visualization of models containing arcs, with "Center viewport on model" and "Zoom in on model" selected.
    • Use immutabledict instead of frozendict on Python 3 as the former is no longer maintained and incompatible to Python 3.10.
    • Action Command Notification: Fix local storage identifier.
    • PMGR: Make upload install async and fix conflict handling.
    • Some fixed typos here and there

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this RC, especially to @costas-basdekis, @cp2004, @drifkind, @eumiro, @eyal0, @j7126, @jasonbcox, @jneilliii, @kantlivelong, @LazeMSS, @martellaj, @Master92, @MichaIng, @shadycuz, @Sophist-UK, @thinkyhead and @tirkarthi for their PRs!

    More information

    Source code(tar.gz)
    Source code(zip)
  • 1.6.0rc3(Apr 21, 2021)

    ⚠️ Important note on release candidates

    This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

    You should be comfortable with and capable of possibly having to do this before installing an RC.

    Feedback on this RC

    Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

    If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.

    Thanks!

    Improvements

    • #4102 - Add option to revert back to former behaviour of always lower casing SD Card file names reported by the firmware to work around a bug in Prusa Firmware (prusa3d/Prusa-Firmware#3115). Auto detect Prusa Firmware and automatically enable this option if firmware autodetection is enabled. See also #3994 for reference.

    Bug fixes

    • #4086 (regression) - GCode viewer: Fix visualization of models containing arcs, with "Center viewport on model" and "Zoom in on model" selected.

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release candidate and provided full, analyzable bug reports!

    More information

    Source code(tar.gz)
    Source code(zip)
  • 1.6.0rc2(Apr 14, 2021)

    ⚠️ Important note on release candidates

    This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

    You should be comfortable with and capable of possibly having to do this before installing an RC.

    Feedback on this RC

    Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

    If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.

    Thanks!

    Improvements

    • #4071 - Better change of plugin manager styling that has better compatibility with some third party plugins.
    • GCODE viewer: Option to render a layer specific bounding box, to help with further analysis of #4086.
    • GCODE viewer: Option to render line segment starts, to help with further analysis of #4086.
    • GCODE Analysis: New command line option --layers will also calculate and output layer stats. Recognizes zhop. To help with further analysis of #4086.

    Bug fixes

    • #4080 (regression) - Fix horizontal scrollbar size in Safari and get rid of horizontal scrolling in notifications altogether.
    • #4082 (regression) - Fix SD card printing

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release candidate and provided full, analyzable bug reports, and especially to @cp2004 and @LazeMSS for their joint PR!

    More information

    Source code(tar.gz)
    Source code(zip)
  • 1.6.0rc1(Mar 30, 2021)

    ⚠️ Important note on release candidates

    This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

    You should be comfortable with and capable of possibly having to do this before installing an RC.

    Feedback on this RC

    Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

    If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.

    Thanks!

    Heads-up for plugin authors: Support for the plugin control properties __plugin_init__ and __plugin_implementations__ (plural!) has been removed

    The two plugin control properties __plugin_init__ and __plugin_implementations__ (note the plural!) have been deprecated ever since OctoPrint 1.2.0 and have finally been removed.

    It is highly unlikely that your plugin has ever used them given that they were already marked as deprecated for the very first version of OctoPrint to ever even support plugins. Still, just in the case of anyone out there making use of them regardless, here's a heads-up that they will no longer be utilized in OctoPrint 1.6+.

    Features & improvements

    • #3544 - Timelapse: Bulk downloads of multiple timelapses in one zip archive. See also #3856.
    • #3595 - GCode Viewer: "Center viewport on model" and "Zoom in on model" now take the current layer's bounding box into account, instead of the whole model's. See also #3880.
    • #3711 - Plugin Manager: Button to export the list of installed plugins to a machine readable JSON file. See also #3833.
    • #3746 - Logging: Bulk downloads of multiple logs in one zip archive.
    • #3801 - Get rid of double scrollbars in Plugin Manager and Software Update settings dialogs. See also #3835 and #3836.
    • #3818 - Backup: Base the backup name on the configured instance name.
    • #3819 - File search now searches through both internal and displayed file name.
    • #3828 - Separate error messages from connection state on Printer Status and Job API by introducing a new error field next to state.
    • #3830 - Reword the warning about using the global API key.
    • #3835 - PMGR: Improve UX by moving notices to a collapsible "info" section at the top of the window, moving the Get More button to the top bar, fixing the top bar when scrolled and highlighting available notices with red icon & text and an auto-show if needed.
    • #3836 - SWU: Improve UX by moving check for updates & update all buttons to the top of the interface & moving advanced options to a collapsed section at the top of the interface.
    • #3840 - Add an indicator to the frontend if OctoPrint detects it can't connect to the internet.
    • #3866 - Backup: Add plugin helpers create_backup and delete_backup.
    • #3873 - A new file name collision dialog is now triggered on upload if the uploaded file is detected as already existing on the server. The dialog allows to cancel the upload, rename the file or forcefully overwrite the file already on disk. This confirmation dialog can be disabled via Settings > Features to restore the old behaviour (overwrite without asking).
    • #3882 - For determining pip behaviour and Python environment, capture testballoon output from the pip call's stdout/stderr instead of a temporary file.
    • #3885 - Support permission objects as keys to SettingsPlugin.get_settings_restricted_paths, instead of just user, admin, never. This allows plugin authors to more granular control on which settings get presented to what user types.
    • #3895 - Ensure connectivity check wizard comes before usage tracking wizard. See also #3918.
    • #3903 - Add two new events GcodeScript${ScriptName}Running and GcodeScript${ScriptName}Finished that will be triggered when gcode scripts are run.
    • #3919 - systemd: Change service type in bundled unit file to exec
    • #3920 - Add an ES5 polyfill to improve compatibility of third party plugins on really old browsers.
    • #3924 - Tracking: Allow to change your decision made in the wizard before submitting it.
    • #3925 - Announcement: Set default state to avoid pop-in
    • #3925 - Action Command Prompt: Fix icon
    • #3942 - Blacklist: Allow to change your decision made in the wizard before submitting it.
    • #3943 - Connectivity check: Allow to change your decision made in the wizard before submitting it.
    • #3944 - Add frontend callback onUserSettingsBeforeSave that gets called on core components and registered plugin view models when user settings are saved.
    • #3946 - Ensure validity of IP address ranges configured for autologin and refuse to use invalid ones.
    • #3947 - Logging: Automatically add logger on selection. See also #3957.
    • #3950 - Logging: Start new config with empty logger. See also #3951.
    • #3952 - Logging: Save logging settings only when there actually were changes. See also #3953 and #3949.
    • #3958 - Include slicing.defaultSlicer on the settings API.
    • #3963 - Improve error message during server startup if a Python bug with non-ASCII host names gets encountered.
    • #3966 - Add IDs and classes to terminal panels and buttons, to allow easier targeting from third party plugins.
    • #3972 - Timelapse: the used ffmpeg command line can now be configured in detail
    • #3978 - Remove redundant Python 2 float conversion relics.
    • #3984 - Add a hook octoprint.printer.handle_connect for plugins to prevent a connect from going through.
    • #3987 - Enforce scrollbars to be visible on Safari
    • #3993 - Backup: Add warning for backups that are too big to restore via upload.
    • #4017 - GCode Viewer: New option to make the viewer ignore all commands until a certain line in the file is found. This can be used to ignore priming lines.
    • #4024 - SWU: Improve error reporting in case of detected undervoltage/overheating.
    • #4031 - PMGR: Change default sorting of repository view from "name" to "popularity".
    • #4035 - PMGR: The API endpoint api/plugin/pluginmanager has been deprecated and split into plugin/pluginmanager/plugins, plugin/pluginmanager/orphans and plugin/pluginmanager/repository. There's also now plugin/pluginmanager/<key> to retrieve information for a specific plugin by its identifier.
    • #4049 - Improve consistency in the settings headers.
    • #4050 - Default temperature regex of terminal filters now also recognizes C, P, R and L values as support by Marlin, as well as negative values.
    • #4050 - Docs: pip install command should use quoted source for maximum compatibility with people's dev environments.
    • New --overlay command line flag to defined additional config overlays to apply to OctoPrint's defaults before loading config.yaml. This will allow preconfiguration by distributions without the risk to bundle environment specific presets in backups that might then no longer fit presets required on later versions (as seen in #3821).
    • OctoPrint now provides a downloadable SystemInfo bundle that contains system information, octoprint.log, serial.log, plugin_pluginmanager_console.log and plugin_softwareupdate_console.log. A bundle viewer allows easy viewing of bundles. SystemBundles are going to become mandatory for bug reports and you can also expect them to be requested from you when seeking support on the forums or the Discord server. It can be acquired through OctoPrint's About dialog, the recovery page and the command line (via octoprint systeminfo <directory>).
    • New action commands supported: sd_inserted, sd_ejected, sd_updated. May be used by firmware to explicitly inform OctoPrint about SD card changes.
    • Only import plugins if their metadata contains any control property. This is to protect against loading things from the plugin folders that aren't even plugins, like errant setup.py files.
    • Remove deprecated plugin control properties __plugin_init__ and __plugin_implementations__ (plural!)
    • Remove support for plugins only provided as pyc files, as that would not work with our pre-load validation and never was officially supported anyhow.
    • Add min/max properties to octoprint.util.CountedEvent.
    • Make size of last line buffer in comm layer configurable via serial.lastLineBufferSize.
    • Protect against null scripts sent by clients.
    • Connectivity check: Default to 1.1.1.1 for online check. Less controversial than 8.8.8.8.
    • Make the tornado.access log less verbose for /api/printer. 409 returns on this endpoint are common if the printer is not currently connected. Reduce log spam by rewriting such requests to INFO level, which by default won't get logged.
    • Clarify in the UI that OctoPrint does not control the webcam.
    • All JSON and YAML will now be dumped with 2 space indentation.
    • Don't return input params in error messages on the API as that might open up clients that don't escape errors to XSS.
    • Fail fast on invalid file names requested on the files API.
    • Use flask.abort where it makes sense.
    • Default to JSON errors on all API endpoints including blueprints.
    • octoprint.util.time_this decorator can now also log on entering the decorated function.
    • Performance improvements on the files API.
    • Ignore SD card messages from the firmware if SD support is disabled in OctoPrint.
    • Backup: Allow restore of backups from newer patch versions. E.g. it will now be possible to restore a backup from 1.6.1 under 1.6.0, but still not possible to restore a backup from 1.7.x under 1.6.x.
    • GCode Viewer: Improve identifiers in settings dialog.
    • Logging: Don't manage anything but *.log files.
    • PiSupport: Extracted into its own project at OctoPrint/OctoPrint-PiSupport on its own release cycle. Required by OctoPrint and still considered bundled.
    • Tracking: Add printer state to ping event. That will allow us to get a general idea of actively used vs idle instances. A huge number of instances in an error state could also be an indicator of problems with a release.
    • SWU: Additional check overlay for Python 2 instances. This will allow to disable software update for future Py3 plugins, or redefine update URLs and the like for plugins to allow for security updates or similar from an alternative repository. See this post on the community forums for details.
    • Update the bundled modernizr.
    • Update the FirmwareCheck dependency to 2021.2.4
    • Remove unused rsa dependency (was slated for removal with 1.4.0 already and just got forgotten).
    • Add ESLint and pyupgrade to pre-commit checks.
    • Some refactoring here and there

    Bug fixes

    • #3808 - Fix wrong CSS class on footer. See also #3848.
    • #3829 - Virtual printer: Fix whitespace issue reporting M145 material heatup on M501/M503.
    • #3845 - Fix default regex supplied when adding a new terminal filter. See also #3913.
    • #3865 - Make sure resend ratio setting is an integer.
    • #3869 - Fix config CLI, specifically for setting plugins.softwareupdate.credentials.github.
    • #3875 - Validate JSON with additional state data from plugins, to protect against broken plugins causing a disruption on the push socket due to invalid data. See also #3878.
    • #3883 - Backup: Fix plugin installation when restoring from the CLI
    • #3887 - Fix caching for custom UIPlugins. See also #3888.
    • #3892 - SWU: Fix localPipCommand usage
    • #3905 - Fix recovery from fancy terminal disabling due to slow processing.
    • #3916 - Fix firmware info splitting for firmware which includes datetimes in its report.
    • #3920 - Remove some ES5 incompatible code parts to improve compatibility with really old browsers.
    • #3930 - Fix lines like M150 W40 R20 G20 B20 to be interpreted wrong by the GCODE analysis and lead to invalid analysis results.
    • #3938 - Login UI: Ignore (expected) disconnect on page reload to get rid of scary "server is offline" message.
    • #3941 - Tracking: Fix a typo in the wizard
    • #3948 - Logging: Reload logging settings from the backend on Settings open. That way we will no longer show outdated/cancelled modifications. See also #3949.
    • #3954 - Logging: Prevent adding the same logging config twice. See also #3956.
    • #3994 - Fix lower casing of file names on the printer's SD. Apparently at least some firmware variants are case-sensitive, so err on the side of caution.
    • #3997 - Fix invalid HTML for video embed.
    • #4007 - Don't minify already minified files via webassets.
    • #4014 - Fix a small CSS bug that causes havoc with reskinning.
    • #4015 - GCode Viewer: Fix a typo causing the centerViewport setting to not be persisted properly.
    • #4030 - Fix a deprecation warning on reloading non-conflicting changes in the UI.
    • #4034 - Virtual Printer: Fix handling of parameterless M117
    • #4036 - Assume a start z of 0 in analysis and GCODE viewer to calculate a correct model height even for GCODE that foregoes homing.
    • #4043 - Make sure to import ABC from collections.abc for Python 3.10 compatibility.
    • #4051 - Fix caching behaviour on files API for SD card files. A force refresh will now also trigger a refresh of the SD card file list from the printer.
    • Use immutabledict instead of frozendict on Python 3 as the former is no longer maintained and incompatible to Python 3.10.
    • Action Command Notification: Fix local storage identifier.
    • PMGR: Make upload install async and fix conflict handling.
    • Some fixed typos here and there

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this RC, especially to @costas-basdekis, @cp2004, @drifkind, @eumiro, @eyal0, @j7126, @jasonbcox, @jneilliii, @kantlivelong, @LazeMSS, @martellaj, @Master92, @MichaIng, @shadycuz, @Sophist-UK, @thinkyhead and @tirkarthi for their PRs!

    More information

    Source code(tar.gz)
    Source code(zip)
  • 1.5.3(Jan 19, 2021)

    This is a bugfix release to fix two bugs in 1.5.x which seem to cause a noticeable amount of support overhead.

    The heads-ups from 1.5.0 still apply, please read this release's release notes as well for a full picture of what you should be aware of and what changed!

    Bug fixes

    • #3849 - Fix plugin install errors (e.g. due to undervoltage) not being properly reported to the client.
    • #3886 - Fix handling of 404 errors upon plugin install

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this bugfix release, especially @cp2004 and @kantlivelong for their PRs!

    More information

    • Commits
    • As this is a bugfix release, there were no release candidates
    Source code(tar.gz)
    Source code(zip)
  • 1.5.2(Dec 10, 2020)

    This is a hotfix release to fix a bug in 1.5.x that sadly only was reported after release of 1.5.1, and to work around a backwards incompatible update of a third party dependency.

    The heads-ups from 1.5.0 still apply, please read this release's release notes as well for a full picture of what you should be aware of and what changed!

    Bug fixes

    • #3855 & #3867 - Fix settings merging on the frontend causing issues with array values.
    • Pin watchdog dependency to 0.10.4 to work around backwards incompatibility with the just release 0.10.5 under Python 3.

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this hotfix release!

    More information

    • Commits
    • As this is a hotfix release, there were no release candidates
    Source code(tar.gz)
    Source code(zip)
  • 1.5.1(Dec 4, 2020)

    This is a hotfix release to fix two bugs in 1.5.0 that sadly only were reported after the release candidate phase for 1.5.0.

    The heads-ups from 1.5.0 still apply, please read this release's release notes as well for a full picture of what you should be aware of and what changed!

    Bug fixes

    • #3844 - Fix api/files/<origin>/<path> not returning children for folders
    • #3852 - Fix service discovery messing with hostname resolution. Still unclear on how that even happens and unable to reproduce, but at least simply completely ignoring loopback devices seems to do the trick.

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this hotfix release, especially to @Spybyte for helping to debug!

    More information

    • Commits
    • As this is a hotfix release, there were no release candidates
    Source code(tar.gz)
    Source code(zip)
  • 1.5.0(Nov 30, 2020)

    Heads-up: Access Control is now mandatory and no longer can be disabled

    If you so far had Access Control disabled, upon upgrading to 1.5.0, OctoPrint will prompt you to create a user name and password for the (first) admin user. This step was sadly necessary as too many people still will happily expose their completely unsecured OctoPrint instance on the public internet, causing additional support overhead from both attacked users and security researchers. See this guide for a way to have OctoPrint log you in automatically when connecting from an internal IP.

    Heads-up: Known plugin incompatibilities

    The following plugins are confirmed to have issues with OctoPrint 1.5.0, as revealed during the RC phase. Their authors have been informed of this but no fixed version was available at the time of release:

    Features & improvements

    • #1600 - Support reading the long filename from M20 if included or adding it from a plugin (e.g. one that utilizes a storm of M33 to fetch all long names). Please note: That's the only way M33 will ever be supported in OctoPrint, as it is utterly the wrong way to go about fetching long names for a list of files of unknown size, so stop asking about it.
    • #2051 - Add a media player for MP4 timelapses. See also #3625.
    • #3502 - Set default timeout for websocket connection to 30s to work around loading time issues observed by some users.
    • #3636 - Option to turn off internal filename display (see also #3783).
    • #3646 - A new recovery page is available now under /recovery, that allows accessing system commands, basic printer control and backup functionality even if the main interface is no longer functional, e.g. due to an errant plugin.
    • #3647 - Support for HLS webcams.
    • #3659 - Enable checksums when manually streaming to the printer as some firmware variants apparently require this.
    • #3664 - Discovery: Remove dependency on the unmaintained and not Python 3 compatible pybonjour for zeroconf support in favor of python-zeroconf. For Python 2, this library has been vendor bundled and patched with some bug fixes only available in later, Python 3 only, releases.
    • #3672 - Warn users if there's a certain amount of resend requests detected, indicating a lot of noise on the line.
    • #3696 - Clarify in Settings dialog that most of the serial settings require a reconnect to the printer to become effective. See also #3703.
    • #3700 - Support non standard pip executable locations in Plugin Manager, Software Update and Backup.
    • #3718 - Printer Notifications: Set a maximum height for the list of notifications.
    • #3719 - Hint mkstemp used in atomic_write to create temporary files in the destination directory. This ensures that the final move operation upon write completion and thus file overwriting stays atomic even if the system wide temporary directory and the destination directory of an atomic_write operation are on different partitions and thus avoids potential race conditions causing file corruption.
    • #3720 - Backup: Allow plugins to flag data managed by them to exclude from backups through a new hook octoprint.plugin.backup.additional_excludes.
    • #3726 - Better resilience against broken analysis queues in third party plugins.
    • #3727 - Add terminal filter for busy protocol. If you have modified your stock terminal filters, you'll have to add this manually, using name "Suppress processing responses" and regex Recv: (echo:\s*)?busy:\s*processing.
    • #3728 - Backup: Added a new event plugin_backup_backup_created that will be triggered on backup creation. Allows third party plugins to perform certain actions on backup creation, e.g. saving them to a cloud provider like GDrive as displayed by the Google Drive Backup plugin.
    • #3733 - Allow to permanently ignore update notifications from individual update checks.
    • #3738 - Clarify currently selected tool cannot be displayed and only show tool selector if the current printer profile has more than one tool configured.
    • #3744 - Discovery: Add unique ID TXT record to zeroconf service.
    • #3745 - Add pyenv local version to .gitignore.
    • #3754 - Detect duplicate configured folder paths, warn the user, refuse to safe them, and as a final line of defense refuse startup if such an invalid configuration is detected.
    • #3756 - Add support for authentication via Authorization: Bearer <apikey> header.
    • #3760 - Make octoprint.util.ResettableTimer set daemon=True by default.
    • #3762 - The whole code base now uses black, prettier, isort, pre-commit and a bunch of custom pre-commit hooks to ensure consistent formatting and enforcement thereof. For anyone doing development, a file containing revs to ignore by git blame is included so this should hopefully not nuke the usefulness of that as long as a current git version is used, set it up via git config blame.ignoreRevsFile .git-blame-ignore-revs.
    • #3766 - Include user name or plugin identifier of who/what started/paused/resumed/cancelled a print job.
    • #3768 - Printer Notifications: Add additional "clear notifications" button to panel header and allow to change sorting order.
    • #3772 - Virtual Printer: Add EEPROM support.
    • #3777 - Software Update: Warning message if a rate limit is preventing a version check to succeed. Also support configuring a GitHub Personal Access Token to be configured via plugins.softwareupdate.credentials.github in config.yaml to increase rate limit restrictions.
    • #3782 - Update FontAwesome to 5.15.1. A compatibility option for backwards compatibility to the former bundled version 4.7.0 is active so that this should not cause issues for third party plugins.
    • #3785 - Update KnockoutJS to 3.5.1
    • #3791 - Discovery: Allow to restrict network interfaces and addresses network discovery will be enabled for.
    • #3804 - Improve handling of corrupt users.yaml file and refuse server start if broken and default file based UserManager is configured.
    • #3811 - Only start tracking resend ratio after a set amount of lines has been transmitted.
    • #3822 - Prevent circumvention of access control through admin subgroups/permissions
    • Don't try to send beforeDisconnect script when not properly connected yet.
    • Default to libx264/mp4 for timelapses.
    • Try up to three times to check for network connectivity before declaring offline state.
    • Add support for the start action command to allow triggering of the active print job from the printer LCD.
    • Add support for removing settings overlays.
    • Add support for settings overlays added by plugins.
    • New hook: octoprint.printer.additional_state_data (see also OctoPrint/plugins.octoprint.org#553).
    • Add socket authentication to the bundled client.
    • Add in_place option for octoprint.util.dict_merge and use where it makes sense to improve performance, idea by @amrsoll
    • Disable logout button in case of login via auth header or API key.
    • New plugin timings logging feature. If enabled (via Settings > Server > Debug options) this will write two new files to the logging dir, plugintimings.log and plugintimings.csv, which contain timing information for each and every hook or implementation call on plugins registered with OctoPrint. This should be helpful to debug any kind of performance issues caused by third party plugins. It should also be a valuable tool to debug performance issues with bundled plugins.
    • New API endpoint /server that returns version and safe mode status.
    • New upload state in the UI, "Refreshing list", the will hopefully allow to debug any further performance issues with file management.
    • Converted code base to use dict and set literals over constructors where applicable. See also #3762.
    • Make Access Control mandatory.
    • Use monospace font for GCODE Scripts editor in the settings.
    • New system information collection page & CLI. Will dump a whole lot of all that environmental data that is required for debugging/support, and can easily be copy/pasted. Once 1.5.0 has been out for a while, a copy of this will become mandatory for bug reports and support tickets on the forums.
    • Add 64bit flag to environmental data.
    • Announcements: Use feedparser >= 6.0.2 under Python 3.
    • Backup: Add config flag restore_unsupported/env var OCTOPRINT_BACKUP_RESTORE_UNSUPPORTED to mark restore as unsupported.
    • Pi Support: The plugin will now prominently display a warning message if OctoPrint is detected as running on a Raspberry Pi Zero/Zero W. This hardware has never been recommended due to severe performance issues that are not just caused by low powered CPU and RAM, contrary to what some sources on the internet might have claimed otherwise.
    • Pi Support: Include throttle state in environmental data.
    • Pi Support: Add support for file flag to enable local debug.
    • Plugin Manager: Support version ranges for plugin notices from plugins.octoprint.org.
    • Software Update: Support release channels for third party plugins.
    • Software Update: Support update check overlay from plugins.octoprint.org.
    • Software Update: Improve pip caller caching behaviour, speed up startup.
    • Tracking: Include 32/64bit info in ping and pong tracking events.
    • Virtual Printer: Implemented M600 with busy wait & prompt.
    • Virtual Printer: Format strings for temperature report to simulate broken temperature formats.
    • Virtual Printer: Support noise simulation on the line.
    • Docs: Added version added info to hooks and API.
    • Docs: More docs for octoprint.plugin.core.*.
    • Various dependency updates.
    • Various refactorings.

    Bug fixes

    • #3571 - Set sensible permissions on file uploads and work around restrictive permissions imposed by tempfile.
    • #3649 - Only ever send one line on continue_sending. Otherwise we might spam our send queue, leading to a bunch of lines piling up inside it, making cancelling/pausing take longer and longer.
    • #3658 - Application Keys: Fix typo in API documentation.
    • #3679 - Fix issue causing saving of settings to not work if the serial communication timeout has been modified.
    • #3668 - Plugin Manager: Turn plugin install asynchronous to not run into request timeouts during lengthy installation processes.
    • #3686 - Fix default extrusion length display on the Control tab.
    • #3687 - Fix matching of natively supported action commands to not take potential command parameters into account, like encountered on Marlin's filament runout detection.
    • #3689 - Fix server side handling of SockJS errors, leading to exception spam in Tornado due to unretrieved future exceptions.
    • #3698 - Plugin Manager: Fix plugins provided in gzip no longer being supported. See also #3707.
    • #3699 - Fix M876 not being force-sent while printing
    • #3701 - Plugin Manager: Fix file:// URL generation for plugin installs under Windows
    • #3702 - Application Keys: Fix manual key registration not showing when no keys are yet registered.
    • #3704 - Fix JS error handling to not work when error tracking is disabled. See also #3706.
    • #3705 - Fix watchdog not triggering on file renames in the watched folder, only on creation.
    • #3722 - Backup: Fix issue with restore on some Python 3 setups.
    • #3729 - Plugin Manager: Performance improvements and fixed memory leak in the frontend.
    • #3731 - Fix exception on log download upon file change by switching to chunked encoding.
    • #3740 - Remove default submit from settings forms.
    • #3742 - Fix link to language packs.
    • #3743 - GCODE viewer: Fix layer tooltip location.
    • #3769 - Fix detection of virtual environments on newer versions of virtualenv that do not set sys.real_prefix.
    • #3790 - Plugin Manager: Fix an uncaught TypeError when setting "Force the use of the --user flag with pip install".
    • #3796 - Fix handling of webcam permission, see also #3797.
    • #3805 (regression) - Fix an internal server error on GET /api/files/local/<filename>
    • #3812 (regression) - Backup: Fix an AttributeError on CLI usage
    • #3813 (regression) - Discovery: Fix zeroconf discovery under Python 2
    • #3814 - Fix an error on language pack upload under Python 3; not a regression, but still included due to being minimally invasive (see also #3815)
    • #3825 (regression) - Plugin installation broken under Windows and Python 2.7
    • Don't drop state messages on the socket, even if rate limiting is active. Otherwise we might drop a final switch to Offline and hence still displayed as connected when we are not.
    • Gracefully handle non existing Accept-Encoding header.
    • Treat wss/ws protocol as https/http in websocket origin check, see also this forum post.
    • Double check download folder in octoprint.util.net.download_file.
    • Fix settings overlays, they were not merging the defaults.
    • Make settings remove behave identical to get and set regarding defaults.
    • Protect against a potential deadlock in LocalFileStorage.
    • Prefer collections.abc over collections imports, as the latter will no longer be supported in Python 3.9.
    • Get rid of an unnecessary double load of plugins during server startup.
    • Discovery: Send three SSDP notify messages as defined in the spec, not just one.
    • Software Update: Fix CLI.
    • Various code fixes as pointed out by static analysis tools.

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release, especially to @chudsaviet, @coldtobi, @cp2004, @frenck, @j7126, @jneilliii, @ManuelMcLure, @mjrider, @OllisGit, @shaver, @Sophist-UK and @urish for their PRs!

    More information

    Source code(tar.gz)
    Source code(zip)
  • 1.5.0rc3(Nov 18, 2020)

    ⚠️ Important note on release candidates

    This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

    You should be comfortable with and capable of possibly having to do this before installing an RC.

    Feedback on this RC

    Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

    If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.

    Thanks!

    Heads-up: Access Control is now mandatory and no longer can be disabled

    If you so far had Access Control disabled, upon upgrading to 1.5.0, OctoPrint will prompt you to create a user name and password for the (first) admin user. This step was sadly necessary as too many people still will happily expose their completely unsecured OctoPrint instance on the public internet, causing additional support overhead from both attacked users and security researchers. See this guide for a way to have OctoPrint log you in automatically when connecting from an internal IP.

    Bug fixes

    • #3825 (regression) - Plugin installation broken under Windows and Python 2.7

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release candidate and provided full, analyzable bug reports!

    More information

    Source code(tar.gz)
    Source code(zip)
  • 1.5.0rc2(Nov 17, 2020)

    ⚠️ Important note on release candidates

    This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

    You should be comfortable with and capable of possibly having to do this before installing an RC.

    Feedback on this RC

    Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

    If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.

    Thanks!

    Heads-up: Access Control is now mandatory and no longer can be disabled

    If you so far had Access Control disabled, upon upgrading to 1.5.0, OctoPrint will prompt you to create a user name and password for the (first) admin user. This step was sadly necessary as too many people still will happily expose their completely unsecured OctoPrint instance on the public internet, causing additional support overhead from both attacked users and security researchers. See this guide for a way to have OctoPrint log you in automatically when connecting from an internal IP.

    Improvements

    • #3804 - Improve handling of corrupt users.yaml file and refuse server start if broken and default file based UserManager is configured.
    • #3811 - Only start tracking resend ratio after a set amount of lines has been transmitted.
    • #3822 - Prevent circumvention of access control through admin subgroups/permissions

    Bug fixes

    • #3805 (regression) - Fix an internal server error on GET /api/files/local/<filename>
    • #3812 (regression) - Backup: Fix an AttributeError on CLI usage
    • #3813 (regression) - Discovery: Fix zeroconf discovery under Python 2
    • #3814 - Fix an error on language pack upload under Python 3; not a regression, but still included due to being minimally invasive (see also #3815)

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release candidate and provided full, analyzable bug reports, and especially to @cp2004 for his PR!

    More information

    Source code(tar.gz)
    Source code(zip)
This Github Action automatically creates a GIF from a given web page to display on your project README

This Github Action automatically creates a GIF from a given web page to display on your project README

Pablo Lecolinet 28 Dec 15, 2022
This Web App lets you convert your Normal Image to a SKETCHED one within a minute

This Web App lets you convert your Normal Image to a SKETCHED one within a minute

Avinash M 25 Nov 10, 2022
A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for quickly creating new images from the one assigned to the field.

django-versatileimagefield A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for creat

Jonathan Ellenberger 490 Dec 13, 2022
TRREASURE_IMAGE is python lib by which you can hide anything in a .jpg image with Command-Line Interface[cli] feature

TRREASURE_IMAGE TRREASURE_IMAGE is a python third-party library with Command-Line Interface[cli] feature. Table of Contents General Info Python librar

Fatin Shadab 3 Jun 7, 2022
clesperanto is a graphical user interface for GPU-accelerated image processing.

clesperanto is a graphical user interface for a multi-platform multi-language framework for GPU-accelerated image processing. It is based on napari and the pyclesperanto-prototype.

null 1 Jan 2, 2022
Design custom QR codes with this web app!

My-QR.Art This web app lets users design their own QR codes to any domain. It can be acessed on my-qr.art. You can find some more background info abou

Marien Raat 406 Dec 20, 2022
Dynamic image server for web and print

Quru Image Server - dynamic imaging for web and print QIS is a high performance web server for creating and delivering dynamic images. It is ideal for

Quru 84 Jan 3, 2023
HTML2Image is a lightweight Python package that acts as a wrapper around the headless mode of existing web browsers to generate images from URLs and from HTML+CSS strings or files.

A package acting as a wrapper around the headless mode of existing web browsers to generate images from URLs and from HTML+CSS strings or files.

null 176 Jan 1, 2023
Simple Python image processing & automatization project for a simple web based game

What is this? Simple Python image processing & automatization project for a simple web based game Made using only Github Copilot (except the color and

SGeri 2 Aug 15, 2022
A Icon Maker GUI Made - Convert your image into icon ( .ico format ).

Icon-Maker-GUI A Icon Maker GUI Made Using Python 3.9.0 . It will take any image and convert it to ICO file, for web site favicon or Windows applicati

Insanecodes 12 Dec 15, 2021
Gallery written in Python to manage your photos

GalleryMan Gallery written in Python to manage your photos Installation

Asian Cat 24 Dec 18, 2022
Make your master artistic punk avatar through machine learning world famous paintings

Master-art-punk Make your master artistic punk avatar through machine learning world famous paintings. 通过机器学习世界名画制作属于你的大师级艺术朋克头像 Nowadays, NFT is beco

蒋虎成 23 Jan 4, 2022
Python pygame project that turns your images to matrix rain

Matrix-Rain-An-Image This project implements the classic Matrix digital rain effect in python with pygame to build up an image provided with multiple

null 7 Dec 11, 2022
A python based library to help you create unique generative images based on Rarity for your next NFT Project

Generative-NFT Generate Unique Images based on Rarity A python based library to help you create unique generative images based on Rarity for your next

Kartikay Bhutani 8 Sep 21, 2022
Python Program that lets you write in your handwriting!

Handwriting with Python Python Program that lets you write in your handwriting! Inspired by: thaisribeiro.in How to run? Install Unidecode and Pillow

Amanda Rodrigues Vieira 2 Oct 25, 2021
A tool to maintain an archive/mirror of your Google Photos library for backup purposes.

Google Photos Archiver Updated Instructions 8/9/2021 Version 2.0.6 Instructions: Download the script (exe or python script listed below) Follow the in

Nick Dawson 116 Jan 3, 2023
💯 Watermark your images with one line of command

Watermarker ?? Watermark your images with one line of command ?? $ pip3 install

Orhan Emre Dikicigil 3 May 1, 2022
Rotates your images in the spirit of rot13

Image Rotator (imrot10) Its like rot13 but for images. Calling the algorithm imrot10 for im = image, rot = rotation, 10 = default magnitude. Unfortuna

Sarah 2 Dec 10, 2021