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.

Issues
  • 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
  • flask-login 0.5.x breaks with werkzeug 2.1.x, a solution beyond pinning werkzeug to 2.0.x is needed

    flask-login 0.5.x breaks with werkzeug 2.1.x, a solution beyond pinning werkzeug to 2.0.x is needed

    Problem

    Flask-Login 0.5 is no longer compatible to werkzeug 2.1.x+ (see also ccd5fa56a239d42830cb6825b779bc5aa141ee93, which was caused by this, as well as https://github.com/OctoPrint/OctoPrint/issues/4457#issuecomment-1081101141 and maxcountryman/flask-login#636). A newer version isn't released on pypi yet, even though the source repository contains fixes, including for the werkzeug situation. It is unclear if and if so when a version 0.6 of Flask-Login might see an official release (there hasn't been any release activity in close to two years now), and discussion around the topic seems to potentially not be desired by the maintainer(s?) as issues on it get locked.

    Possible solutions

    I currently only see two options here really that allow us to update werkzeug to versions beyond 2.0.x...

    1. Vendor bundle flask-login and merge in patches from here on as needed to no longer have to rely on the upstream release cycle. Might cause issues with third party plugins however that expect to be able to import from flask_login, if those exist. That needs to be checked.
    2. Monkey patch the problematic removed function that flask-login relies on back into werkzeug. It would be a minimally invasive monkey patch that would basically just set werkzeug.security.safe_str_cmp to hmac.compare_digest. The upside is that this would keep everything out there working as is, but at the cost of now sitting on yet another monkey patch and the next update of something in the whole flask framework potentially causing the next issue with flask-login. Still, I'm more leaning towards this option at the moment.

    Let me just once again voice my dislike for libraries that introduce breaking changes on minor releases. It's annoying AF, especially on third party dependencies of third party dependencies.

    bug not octoprint approved 
    opened by foosel 1
  • [RC Feedback] Feedback on the 1.8.0rc3 Release Candidate

    [RC Feedback] Feedback on the 1.8.0rc3 Release Candidate

    Please provide general feedback on your experience with the 1.8.0rc3 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 :)

    ❗👇 IMPORTANT 👇❗

    If you run into any obvious bugs not yet listed below, please open a new ticket and follow "How to file a bug report". I need full bug reports, not just a statement that something doesn't work!

    ❗👆 IMPORTANT 👆❗


    Update test matrix

    image

    ✔ = expected to work, ❌ = expected to fail, ☑ = successfully completed. Releases aren't rolled out unless all tests in the update test matrix succeed.


    Currently known issues

    Unreproduced issues

    Unreproduced and information for further analysis missing

    Third party issues

    Issues needing analysis

    rc feedback 
    opened by foosel 3
  • [Request] Add some kind of auto-refresh of the serial ports list to core OctoPrint

    [Request] Add some kind of auto-refresh of the serial ports list to core OctoPrint

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

    In 1.8.0 OctoPrint introduces a warning message if no serial ports are currently detected to connect to (see #4237), because we've seen a ton of issues by users using power-only USB cables or trying to connect to unsupported printers and needing guidance on detecting issues like this instead of having to wait for support on the forums or Discord.

    The way this warning was implemented in 1.8.0rc1 and 1.8.0rc2 it also caused the "Connect" button to become disable, to force people to realize, hey, something's amiss here, and actually read the warning instead of ignoring it and attempting to connect and then still seeking support when that fails. However, disabling the connect button causes issues with certain workflows where users have their printers powered off and thus unrecognized on serial, and only power them on right before attempting to connect. The auto connect in that cause would then take care of refreshing the ports list, detect the printer and connect just fine. In 1.8.0rc1 and 2 however this required an additional click on refresh before it worked, which means in 1.8.0rc3 the connect button will be re-enabled in these cases.

    However, long term it would be the better solution to disable it again if there really are no serial ports recognized by the system and instead have OctoPrint automatically detect new ports, kinda like the PortLister plugin does today, but natively built into core.

    Describe the solution you'd like

    OctoPrint being platform agnostic and the PortLister plugin only working on POSIX systems, the same approach like it takes (watchdog & monitoring of all of /dev for file additions) won't work. Instead, either a regular auto-refresh (e.g. 1/s) while no ports are detected should be done, or, probably cleaner, a watchdog on the configured serial port patterns under POSIX and a regular polling approach for Windows.

    Describe alternatives you've considered

    Renaming the connect button to "Refresh & Connect" if no port is detected, and actually having it run a refresh on click in such cases, but that also felt awkward in case of no change in available serial ports after.

    Additional context

    No response

    request 
    opened by foosel 0
  • GCode Viewer mis-representing non-extrusion G2/G3 moves

    GCode Viewer mis-representing non-extrusion G2/G3 moves

    The problem

    ArcWelder will convert travel moves to G2/G3 arcs (it even converts wipes to arc). GCode viewer ignores G3/G3 with no extrusion and generates chord rather than arc. Screenshot from 2022-03-21 17-15-15 TubeLevelerBase1.zip octoprint-systeminfo-20220321182011.zip

    Did the issue persist even in safe mode?

    I cannot test this issue in safe mode (state why below)

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

    Viewer is a plugin

    Version of OctoPrint

    1.8.0rc2

    Operating system running OctoPrint

    Raspberry Bullseye

    Printer model & used firmware incl. version

    N/A

    Browser and version of browser, operating system running browser

    Firefoc 98.01 64-bit

    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)
    • [X] 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

    No response

    bug done 
    opened by CmdrCody51 4
  • Documentation: Replace Speeds 'mm/s' with 'mm/min'

    Documentation: Replace Speeds 'mm/s' with 'mm/min'

    The User Casper#3607 in Discord found that there is a typo in the custom_controls.rst documentation about the speeds being stated as mm/s while they are mm/min (see https://marlinfw.org/docs/gcode/G000-G001.html for example) Since Casper did not have the time to do a fix i had a look, and also found the same typo in the comment section of profile.py (whereas printerprofiles.rst states it correctly as mm/min)

    Since this is a PR for a pure documentation fix, i don't see it fit to add me or Casper to the Authors file, i hope that's alright ;)

    greetings Lamensis

    docs approved targets maintenance 
    opened by tommywienert 0
  • Tiny documentation typo, timeouts -> timeout

    Tiny documentation typo, timeouts -> timeout

    Within the internal module documentation for settings https://docs.octoprint.org/en/master/modules/settings.html#octoprint.settings.Settings there is an inconsistency between the example definition and how it is referred to: image

    This documentation appears to be automatically generated from an autodoc string in the source code.

    This PR changes "timeouts" to "timeout" in the autodoc string to bring them into agreement. This also happens to match the actual configuration variable but that is somewhat beside the point.

    approved targets maintenance 
    opened by vector76 0
Releases(1.8.0rc3)
  • 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)
  • 1.5.0rc1(Nov 10, 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.

    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.
    • 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.
    • 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 RC, 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.4.2(Aug 6, 2020)

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

    The heads-ups from 1.4.1 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

    • #3674 - Fix a bug that prevents plugin installation via upload for plugins over 1MB in size.
    • #3676 - Work around an issue in a third party dependency causing server startup to fail if there are files in the watched folder and polling of the watched folder is enabled. Also further hardening against similar issues interfering with server startup.
    • #3678 - Fix a bug that prevents plugin installation via URL from servers that enclose the filename option in the Content-Disposition HTTP header in double quotes. Affected some plugins not hosted on Github.

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this hotfix release, especially to @osubuu for their PR!

    More information

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

    Heads-up for users of the Telegram plugin v1.5.0 or lower (and possibly other plugins that use long deprecated flask.ext imports)

    The Telegram plugin up until the currently latest version 1.5.0 from August 7th 2019 is incompatible to OctoPrint 1.4.1 and later (see this ticket). The reason for that is that OctoPrint had to update its third party Flask dependency for security reasons, and this plugin (and possibly others) still use an import syntax related to that dependency that has been deprecated and warned about for several years now and which finally has been removed in current versions of Flask.

    A fix has been provided to the Telegram plugin maintainers and has been merged, but so far no new release has been pushed out.

    If you notice the Telegram plugin or another third party plugin no longer loading under OctoPrint 1.4.1 with an error logged to octoprint.log that looks similar to

      File "/home/pi/oprint/local/lib/python2.7/site-packages/octoprint/plugin/core.py", line 972, in _import_plugin
        module = _load_module(module_name, spec)
      File "/home/pi/oprint/local/lib/python2.7/site-packages/octoprint/plugin/core.py", line 71, in _load_module
        return imp.load_module(name, f, filename, details)
      File "/home/pi/oprint/local/lib/python2.7/site-packages/octoprint_telegram/__init__.py", line 5, in <module>
        from flask.ext.babel import gettext
    ImportError: No module named ext.babel
    

    then this outdated import syntax is the reason. That is something that needs to be fixed by the plugin maintainers by pushing out a new release. Please do not open issues about this on the OctoPrint repository, I cannot do anything about this.

    Heads-up for users of the TouchUI plugin v0.3.14 or lower

    The TouchUI plugin up until the currently latest version 0.3.14 from March 11 2020 is incompatible to OctoPrint as it makes assumptions about the structure of the UI that are no longer true, leading to the plugin breaking the OctoPrint UI when active.

    A fix is ready but no release has been pushed out yet. Until a fixed version is released it is suggested to disable the plugin under 1.4.1.

    See also the ticket here.

    Heads-up for plugin authors: Jinja2 update has one backwards incompatibility, please read

    Current Jinja versions no longer allow modifying variables set outside of for loops inside them. So something like:

    {% set mark_active = True %}
    {% for item in items %}
        # do something
        {% if mark_active %}
            # do something more
            {% set mark_active = False %}
        {% endif %}
    {% endfor %}
    

    no longer works - mark_active will be reset on every iteration of the loop to its initial value False. The fix is to use namespaces to hold the modifiable values instead:

    {% set ns = namespace(mark_active = True) %}
    {% for item in items %}
        # do something
        {% if ns.mark_active %}
            # do something more
            {% set ns.mark_active = False %}
        {% endif %}
    {% endfor %}
    

    See also #1697 and https://jinja.palletsprojects.com/en/2.11.x/templates/#assignments

    The Jinja dependency upgrade thus introduces a breaking change for plugins as well. However, it was necessary for security reasons: older versions have a bug that could allow template authors to break out of the template sandbox. Not a huge risk in the context of OctoPrint (plugins already have a lot more power than Jinja would give them), but still overdue to fix.

    Heads-up for plugin authors: awesome-slugify is now bundled as octoprint.vendor.awesome_slugify, update your imports!

    Due to a necessary dependency update of a third party dependency pulling in a different slugify library ("python-slugify") that clashes with awesome-slugify, the latter has been bundled. If you use import slugify anywhere in your code, please be aware that that will now possibly pull in the aforementioned other library or possibly a partially overwritten awesome-slugify. Plugin authors are advised to update the imports of awesome-slugify like this:

    ### old
    
    # example 1
    import slugify
    
    # example 2
    from slugify import Slugify
    
    ### new
    
    # example 1
    try:
      # OctoPrint>=1.4.1
      import octoprint.vendor.awesome_slugify as slugify 
    except ImportError:
      # OctoPrint<=1.4.0
      import slugify
    
    # example 2
    try:
      # OctoPrint>=1.4.1
      from octoprint.vendor.awesome_slugify import Slugify
    except ImportError:
      # OctoPrint<=1.4.0
      from slugify import Slugify
    

    That will also guarantee backwards compatibility if installed under OctoPrint versions prior to 1.4.1. Alternatively switch fully to the 1.4.1 version and adjust your plugin listing to a minimum OctoPrint version of 1.4.1.

    Heads-up for developers: The included virtual printer has had its settings migrated to a different location in config.yaml

    The bundled Virtual Printer plugin has finally been turned fully isolated into a self contained plugin and thus its settings have been moved from devel.virtualPrinter to plugins.virtual_printer in config.yaml. An auto migration is in place that should take care of moving anything already configured on first start under 1.4.1+, however should you be somehow manipulating config.yaml through automation or something in order to change virtual printer settings, you'll have to update your workflows.

    Improvements

    • #216 - New control on Temperature tab to set all heaters to temperatures from a configured temperature profile with one click (see also #3617)
    • #2312 - Software Update: Refuse to update if there is insufficient disk scape to do so. Disk space threshold is configurable and defaults to at least 150MB of free space in the Python package installation folder, the internal plugin folder and the system's temporary files folder. This value might be revisited and increased if it proves to be too small still.
    • #2451 - Add support for sub folders on the watched folder (see also #3557)
    • #3344 - Don't invalidate server side cache on hard reload while printing. Should combat performance issues on low powered systems.
    • #3410 - Add bundled "File Check" plugin to sanity check uploaded files and warn about potential issues. Currently the plugin only detects {travel_speed} place holders left in GCODE. Read more in the plugin's README.
    • #3411 - GCode viewer: Show retracts, moves and head position only for the current layer to reduce visual noise.
    • #3415 - Backup: Allow to specify path to backup to create on CLI: octoprint plugins backup:backup --path /path/to/my/backup.zip
    • #3420 - Add manifest.json and link from web UI to allow styling of homepage shortcuts on mobile devices as UI-less browser window.
    • #3433 - Allow sorting of file list by last print date.
    • #3471 - Reword buttons on print cancel confirmation to avoid misunderstandings.
    • #3479 - Configuration option to disable SD print detection, to work around misbehaving firmware variants (e.g. Ultimaker 2/2+, for which that setting will also now get applied automatically)
    • #3482 - Configuration options to configure SameSite and SecureCookie headers. Might be needed for certain environments where OctoPrint gets embedded into a third party page, together with switching to https.
    • #3496 - Add option to restore from a backup right at the start of the first run setup wizard.
    • #3497 - Performance improvements for static assets: introduce gzip encoding, whitespace removal, assetpreloading, request count reduction & also update some frontend dependencies.
    • #3506 - Allow to inject custom temperature from plugins into the data collection in the backend. Note that this will not have custom temperature magically appear in the UI, this is only the first step towards that.
    • #3526 - Set LC_ALL and LANG environment variables in bundled startup files.
    • #3534 - Add optional request profiler. Can be enabled by starting the server with --debug and adding the perfprofile query parameter to any request.
    • #3567 - Clean up workaround for #2166 that is no longer needed
    • #3569 - Properly reflect on the UI that feed rate and flow rate modifiers are write-only ephemeral values that cannot be read back from the firmware by removing permanent display.
    • #3590 - Add M82 and M83 to extrude/retract commands to make sure the extruder really is switcher to relative and back to absolute in case of firmware that decouples the extruder from G90 & G91.
    • #3596 - Add move button to files and folders on file list in the sidebar so that moving around files and folders becomes natively supported by the UI (see also #3609)
    • #3604 - Add print, select and userdata as provided via the API to the Upload event.
    • #3606 - Plugin Manager: Include stats & github metadata for plugins in the repository, just like now available on plugins.octoprint.org.
    • #3640: Disable JS minification for third party plugins again, it can cause issues in one plugin that are non recoverable and cause the JS of all third party plugins to no longer load. Added devel.webassets.minify_plugins config setting to allow to turn it back on by plugin authors to test their plugins for minification compatibility (which should be a goal).
    • #3661 - Protect against invalid input data extracted from Github in plugin repository browser
    • Tracking: Send full environment with each daily pong for better stats regarding used Python & operating system versions
    • Keep load & print button active if the file is already loaded because otherwise some people get confused when they "can't reprint the same file again"
    • Printer Safety Check: Renamed to Firmware Check & extracted into still bundled but separately maintained plugin. Now also detects firmware with known broken communcation protocol implementations (like the infamous CBD make it and ZWLF make it variants) and links to related FAQ entries on detection.
    • Moved source code repository from foosel/OctoPrint to OctoPrint/OctoPrint and updated links where needed accordingly.
    • Include python version in footer of UI
    • Plugin Manager: Add python compatibility information for installed plugins to overview in settings
    • Not only check general connectivity to the internet, but also whether DNS name resolution works (per default against octoprint.org). This is to combat repeatedly observed issues by users who managed to somehow get their system connected to the internet but without a valid nameserver configuration.
    • Allow disabling sanity checking of tool commands Tn sent to the printer, in case of misbehaving firmware that reports tools as invalid that aren't invalid.
    • New bundled plugin "Printer notifications" that implements support for //action:notification messages from the printer
    • Action Command Prompt: Renamed to "Printer dialogs" in the settings
    • Add link to default cancel GCode script to GCode script editor. People tend to delete it and then are unable to find it again in the docs.
    • Persist file list styly in local storage just like sorting & filter options.
    • Appkeys: Allow to manually generate keys for users via the global settings as well.
    • Strongly recommend bundled Appkeys plugin over global API key for improved security.
    • Plugin Manager: Dedicated error message on general failure instead of unhelpful and misleading "pip not available" message.
    • Port patterns and individual baudrates can now be put on a blacklist so they don't get offered by OctoPrint to connect to and/or used in auto detection.
    • New hook octoprint.comm.transport.serial.additional_port_names to allow plugins to inject additional (custom) port names into OctoPrint to use for connecting to. Especially of interest in combination with octoprint.comm.transport.serial.factory.
    • Virtual Printer: Isolate fully into its own plugin, incl. migrating the settings from devel.virtualPrinter to plugins.virtual_printer.
    • Virtual Printer: Support baudrate and port properties on faked serial.
    • Plugin Manager: Support installing single file plugins from URL or from upload.
    • Improve performance of octoprint.filemanager.util.LineProcessorStream
    • Increase size of file metadata LRU cache to 100 entries
    • Refactored buffered readline wrapper around serial port and added logging of read \0 bytes. See also discussion in #2454.
    • Action Command Prompt aka Printer Dialogs: Default to emergency sending & signalling being enabled, if detected as supporte from the firmware's capability report.
    • Plugin Manager: Small styling changes on plugin list and repository browser
    • Logging: Added an UI indicator when serial.log is active that acts as a reminder to disable it again after debugging.
    • Some layout optimizations in the About dialog.
    • Add link to Discord server to footer and About dialog.
    • GCode Viewer: Isolate fully into its own plugin, incl. migrating the settings from gcodeViewer to plugins.gcodeviewer.
    • Slight changes in the HTML markup to improve E2E testability.
    • Update Tornado, Jinja2, Flask and related dependencies to last versions supporting both Python 2 and 3. See also #3551
    • Various documentation fixes (see also #3516, #3517, #3575, #3608)
    • Various translation fixes (see also #3514)

    Bug fixes

    • #3346 - Only compute ETag for HTML once per reload & optimize performance of config hashing
    • #3376 - Do not close and reopen connection on spammed connection requests but instead deny them.
    • #3378 - Drop file descriptors everywhere we can to avoid issues with processes inheriting them.
    • #3394 - Fix broken by design comm port auto detection through complete rewrite.
    • #3404 - Fix ordering of replacement tabs for core tabs declared by plugins.
    • #3416 - Backup: Preserve original file modification timestamp on backup restore
    • #3422 - Fix caching on /api/files
    • #3467 - Fix temperature reporting for shared nozzle setups where the firmware only ever reports T0
    • #3492 - Fix /api/version permission requirements
    • #3493 - Fix a NoneType comparison error (see also #3494)
    • #3502 - Possible fix for web interface not fully loading due to a not removed timeout trigger.
    • #3510 - Work around a bug in Tornado causing same origin checks to be run case sensitive which doesn't conform with RFC6454
    • #3525 - select command during an ongoing print should return 409 Conflict on the API
    • #3536 - Fix plugin data cleanup, it should not set deleted plugin settings to null but instead delete them from the config (see also #3566)
    • #3547 - Fix Read-only group behaviour so that it is actually possible to create read-only users. The User group is no longer enforced on users, though pre checked for new users (if kept default). This makes it also possible to create group less users, so keep that in mind.
    • #3553 - Virtual Printer: Fix issue where _simulateTemps may never reach target temp
    • #3554 - Fix persistence of default flag on group edit.
    • #3555 - Pin markupsafe Jinja2 dependency to >=1.1,<2.0. Newer versions are Python 3 only.
    • #3582 - Announcements: Fix navbar icon
    • #3627 (regression) - Fix auto detection scenario with port AUTO, set baudrate and one possible port
    • #3628 (regression) - Fix unclosed tags in German translation which messed up the settings
    • #3629 (regression?) - Fix logging error caused by tracking plugin during shutdown
    • #3630 (regression) - Fix single file plugin installs under Python 2.7
    • #3633 (regression) - Fix high CPU load while connected to a printer
    • #3642 (regression) - Fix styling on file list titles causing an issue with plugins like PrintTimeGenius that add on to the title, making the additional information toggle no longer work.
    • #3653 (regression) - Fixed disconnect during auto connect hanging indefinitely or not getting properly reported to frontend
    • #3655 (regression) - Fixed broken /api/files/local API
    • Fix progress reporting on files with CRLF EOLs
    • Only use supplied analysis data if it is actually complete, otherwise enrich with our own analysis
    • Fix session validation, remove side effects for login behaviour after server restart.
    • Software Update: Delete unnecessary check_providers from config for good.
    • Mark all bundled plugins as Python 3 compatible (cosmetic change only, they already were).
    • Plugin Manager: Fix styling of affected versions list in plugin notification popups.
    • Change instances of logger.warn to logger.warning
    • Change instances of warnings.warning to warnings.warn
    • Don't log warnings from plugin system initialization for CLI command invocations.
    • Fix some Py2vs3 bugs
    • Fix a bug that could cause custom translations to not properly load due to a missing path check.
    • Fix a possible race condition in the login dialog causing initial login to fail.
    • Fixed a duplicated ID in the generated HTML (regression)

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release, especially to @drifkind, @eyal0, @FedericoNembrini, @fieldOfView, @flaviut, @jneilliii, @joshfriend, @justfalter, @kerber, @lachyc, @osubuu and @tedder for their PRs!

    More information

    Source code(tar.gz)
    Source code(zip)
  • 1.4.1rc4(Jul 29, 2020)

    ⚠️ 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 a Release Candidate.

    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

    • #3661: Protect against invalid input data extracted from Github in plugin repository browser

    Bug fixes

    • #3653 (regression): Fixed disconnect during auto connect hanging indefinitely or not getting properly reported to frontend
    • #3655 (regression): Fixed broken /api/files/local API
    • Fixed a duplicated ID in the generated HTML (regression)

    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.4.1rc3(Jul 15, 2020)

    ⚠️ 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 a Release Candidate.

    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

    • #3640: Disable JS minification for third party plugins again, it can cause issues in one plugin that are non recoverable and cause the JS of all third party plugins to no longer load. Added devel.webassets.minify_plugins config setting to allow to turn it back on by plugin authors to test their plugins for minification compatibility (which should be a goal).
    • Slight changes in the HTML markup to improve E2E testability.

    Bug fixes

    • #3627: Fix another issue with auto detection failing for port AUTO and set baudrate.
    • #3642: Fix styling on file list titles causing an issue with plugins like PrintTimeGenius that add on to the title, making the additional information toggle no longer work.
    • Fix a possible race condition in the login dialog causing initial login to fail.

    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.4.1rc2(Jul 8, 2020)

    ⚠️ 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 a Release Candidate.

    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

    • #3627 (regression) - Fix auto detection scenario with port AUTO, set baudrate and one possible port
    • #3628 (regression) - Fix unclosed tags in German translation which messed up the settings
    • #3629 (regression?) - Fix logging error caused by tracking plugin during shutdown
    • #3630 (regression) - Fix single file plugin installs under Python 2.7
    • #3633 (regression) - Fix high CPU load while connected to a printer

    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.4.1rc1(Jul 6, 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 for plugin authors: Jinja2 update has one backwards incompatibility, please read

    Current Jinja versions no longer allow modifying variables set outside of for loops inside them. So something like:

    {% set mark_active = True %}
    {% for item in items %}
        # do something
        {% if mark_active %}
            # do something more
            {% set mark_active = False %}
        {% endif %}
    {% endfor %}
    

    no longer works - mark_active will be reset on every iteration of the loop to its initial value False. The fix is to use namespaces to hold the modifiable values instead:

    {% set ns = namespace(mark_active = True) %}
    {% for item in items %}
        # do something
        {% if ns.mark_active %}
            # do something more
            {% set ns.mark_active = False %}
        {% endif %}
    {% endfor %}
    

    See also #1697 and https://jinja.palletsprojects.com/en/2.11.x/templates/#assignments

    The Jinja dependency upgrade thus introduces a breaking change for plugins as well. However, it was necessary for security reasons: older versions have a bug that could allow template authors to break out of the template sandbox. Not a huge risk in the context of OctoPrint (plugins already have a lot more power than jinja would give them), but still overdue to fix.

    Heads-up for plugin authors: awesome-slugify is now bundled as octoprint.vendor.awesome_slugify, update your imports!

    Due to a necessary dependency update of a third party dependency pulling in a different slugify library ("python-slugify") that clashes with awesome-slugify, the latter has been bundled. If you use import slugify anywhere in your code, please be aware that that will now possibly pull in the aforementioned other library or possibly a partially overwritten awesome-slugify. Plugin authors are advised to update the imports of awesome-slugify like this:

    ### old
    
    # example 1
    import slugify
    
    # example 2
    from slugify import Slugify
    
    ### new
    
    # example 1
    try:
      # OctoPrint>=1.4.1
      import octoprint.vendor.awesome_slugify as slugify 
    except ImportError:
      # OctoPrint<=1.4.0
      import slugify
    
    # example 2
    try:
      # OctoPrint>=1.4.1
      from octoprint.vendor.awesome_slugify import Slugify
    except ImportError:
      # OctoPrint<=1.4.0
      from slugify import Slugify
    

    That will also guarantee backwards compatibility if installed under OctoPrint versions prior to 1.4.1. Alternatively switch fully to the 1.4.1 version and adjust your plugin listing to a minimum OctoPrint version of 1.4.1.

    Heads-up for developers: The included virtual printer has had its settings migrated to a different location in config.yaml

    The bundled Virtual Printer plugin has finally been turned fully isolated into a self contained plugin and thus its settings have been moved from devel.virtualPrinter to plugins.virtual_printer in config.yaml. An auto migration is in place that should take care of moving anything already configured on first start under 1.4.1+, however should you be somehow manipulating config.yaml through automation or something in order to change virtual printer settings, you'll have to update your workflows.

    Improvements

    • #216 - New control on Temperature tab to set all heaters to temperatures from a configured temperature profile with one click (see also #3617)
    • #2312 - Software Update: Refuse to update if there is insufficient disk scape to do so. Disk space threshold is configurable and defaults to at least 150MB of free space in the Python package installation folder, the internal plugin folder and the system's temporary files folder. This value might be revisited and increased if it proves to be too small still.
    • #2451 - Add support for sub folders on the watched folder (see also #3557)
    • #3344 - Don't invalidate server side cache on hard reload while printing. Should combat performance issues on low powered systems.
    • #3410 - Add bundled "File Check" plugin to sanity check uploaded files and warn about potential issues. Currently the plugin only detects {travel_speed} place holders left in GCODE. Read more in the plugin's README.
    • #3411 - GCode viewer: Show retracts, moves and head position only for the current layer to reduce visual noise.
    • #3415 - Backup: Allow to specify path to backup to create on CLI: octoprint plugins backup:backup --path /path/to/my/backup.zip
    • #3420 - Add manifest.json and link from web UI to allow styling of homepage shortcuts on mobile devices as UI-less browser window.
    • #3433 - Allow sorting of file list by last print date.
    • #3471 - Reword buttons on print cancel confirmation to avoid misunderstandings.
    • #3479 - Configuration option to disable SD print detection, to work around misbehaving firmware variants (e.g. Ultimaker 2/2+, for which that setting will also now get applied automatically)
    • #3482 - Configuration options to configure SameSite and SecureCookie headers. Might be needed for certain environments where OctoPrint gets embedded into a third party page, together with switching to https.
    • #3496 - Add option to restore from a backup right at the start of the first run setup wizard.
    • #3497 - Performance improvements for static assets: introduce gzip encoding, whitespace removal, assetpreloading, request count reduction & also update some frontend dependencies.
    • #3506 - Allow to inject custom temperature from plugins into the data collection in the backend. Note that this will not have custom temperature magically appear in the UI, this is only the first step towards that.
    • #3526 - Set LC_ALL and LANG environment variables in bundled startup files.
    • #3534 - Add optional request profiler. Can be enabled by starting the server with --debug and adding the perfprofile query parameter to any request.
    • #3567 - Clean up workaround for #2166 that is no longer needed
    • #3569 - Properly reflect on the UI that feed rate and flow rate modifiers are write-only ephemeral values that cannot be read back from the firmware by removing permanent display.
    • #3590 - Add M82 and M83 to extrude/retract commands to make sure the extruder really is switcher to relative and back to absolute in case of firmware that decouples the extruder from G90 & G91.
    • #3596 - Add move button to files and folders on file list in the sidebar so that moving around files and folders becomes natively supported by the UI (see also #3609)
    • #3604 - Add print, select and userdata as provided via the API to the Upload event.
    • #3606 - Plugin Manager: Include stats & github metadata for plugins in the repository, just like now available on plugins.octoprint.org.
    • Tracking: Send full environment with each daily pong for better stats regarding used Python & operating system versions
    • Keep load & print button active if the file is already loaded because otherwise some people get confused when they "can't reprint the same file again"
    • Printer Safety Check: Renamed to Firmware Check & extracted into still bundled but separately maintained plugin. Now also detects firmware with known broken communcation protocol implementations (like the infamous CBD make it and ZWLF make it variants) and links to related FAQ entries on detection.
    • Moved source code repository from foosel/OctoPrint to OctoPrint/OctoPrint and updated links where needed accordingly.
    • Include python version in footer of UI
    • Plugin Manager: Add python compatibility information for installed plugins to overview in settings
    • Not only check general connectivity to the internet, but also whether DNS name resolution works (per default against octoprint.org). This is to combat repeatedly observed issues by users who managed to somehow get their system connected to the internet but without a valid nameserver configuration.
    • Allow disabling sanity checking of tool commands Tn sent to the printer, in case of misbehaving firmware that reports tools as invalid that aren't invalid.
    • New bundled plugin "Printer notifications" that implements support for //action:notification messages from the printer
    • Action Command Prompt: Renamed to "Printer dialogs" in the settings
    • Add link to default cancel GCode script to GCode script editor. People tend to delete it and then are unable to find it again in the docs.
    • Persist file list styly in local storage just like sorting & filter options.
    • Appkeys: Allow to manually generate keys for users via the global settings as well.
    • Strongly recommend bundled Appkeys plugin over global API key for improved security.
    • Plugin Manager: Dedicated error message on general failure instead of unhelpful and misleading "pip not available" message.
    • Port patterns and individual baudrates can now be put on a blacklist so they don't get offered by OctoPrint to connect to and/or used in auto detection.
    • New hook octoprint.comm.transport.serial.additional_port_names to allow plugins to inject additional (custom) port names into OctoPrint to use for connecting to. Especially of interest in combination with octoprint.comm.transport.serial.factory.
    • Virtual Printer: Isolate fully into its own plugin, incl. migrating the settings from devel.virtualPrinter to plugins.virtual_printer.
    • Virtual Printer: Support baudrate and port properties on faked serial.
    • Plugin Manager: Support installing single file plugins from URL or from upload.
    • Improve performance of octoprint.filemanager.util.LineProcessorStream
    • Increase size of file metadata LRU cache to 100 entries
    • Refactored buffered readline wrapper around serial port and added logging of read \0 bytes. See also discussion in #2454.
    • Action Command Prompt aka Printer Dialogs: Default to emergency sending & signalling being enabled, if detected as supporte from the firmware's capability report.
    • Plugin Manager: Small styling changes on plugin list and repository browser
    • Logging: Added an UI indicator when serial.log is active that acts as a reminder to disable it again after debugging.
    • Some layout optimizations in the About dialog.
    • Add link to Discord server to footer and About dialog.
    • GCode Viewer: Isolate fully into its own plugin, incl. migrating the settings from gcodeViewer to plugins.gcodeviewer.
    • Update Tornado, Jinja2, Flask and related dependencies to last versions supporting both Python 2 and 3. See also #3551
    • Various documentation fixes (see also #3516, #3517, #3575, #3608)
    • Various translation fixes (see also #3514)

    Bug fixes

    • #3346 - Only compute ETag for HTML once per reload & optimize performance of config hashing
    • #3376 - Do not close and reopen connection on spammed connection requests but instead deny them.
    • #3378 - Drop file descriptors everywhere we can to avoid issues with processes inheriting them.
    • #3394 - Fix broken by design comm port auto detection through complete rewrite.
    • #3404 - Fix ordering of replacement tabs for core tabs declared by plugins.
    • #3416 - Backup: Preserve original file modification timestamp on backup restore
    • #3422 - Fix caching on /api/files
    • #3467 - Fix temperature reporting for shared nozzle setups where the firmware only ever reports T0
    • #3492 - Fix /api/version permission requirements
    • #3493 - Fix a NoneType comparison error (see also #3494)
    • #3502 - Possible fix for web interface not fully loading due to a not removed timeout trigger.
    • #3510 - Work around a bug in Tornado causing same origin checks to be run case sensitive which doesn't conform with RFC6454
    • #3525 - select command during an ongoing print should return 409 Conflict on the API
    • #3536 - Fix plugin data cleanup, it should not set deleted plugin settings to null but instead delete them from the config (see also #3566)
    • #3547 - Fix Read-only group behaviour so that it is actually possible to create read-only users. The User group is no longer enforced on users, though pre checked for new users (if kept default). This makes it also possible to create group less users, so keep that in mind.
    • #3553 - Virtual Printer: Fix issue where _simulateTemps may never reach target temp
    • #3554 - Fix persistence of default flag on group edit.
    • #3555 - Pin markupsafe Jinja2 dependency to >=1.1,<2.0. Newer versions are Python 3 only.
    • #3582 - Announcements: Fix navbar icon
    • Fix progress reporting on files with CRLF EOLs
    • Only use supplied analysis data if it is actually complete, otherwise enrich with our own analysis
    • Fix session validation, remove side effects for login behaviour after server restart.
    • Software Update: Delete unnecessary check_providers from config for good.
    • Mark all bundled plugins as Python 3 compatible (cosmetic change only, they already were).
    • Plugin Manager: Fix styling of affected versions list in plugin notification popups.
    • Change instances of logger.warn to logger.warning
    • Change instances of warnings.warning to warnings.warn
    • Don't log warnings from plugin system initialization for CLI command invocations.
    • Fix some Py2vs3 bugs
    • Fix a bug that could cause custom translations to not properly load due to a missing path check.

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this RC, especially to @drifkind, @eyal0, @FedericoNembrini, @fieldOfView, @flaviut, @jneilliii, @joshfriend, @justfalter, @kerber, @lachyc, @osubuu and @tedder for their PRs!

    More information

    Source code(tar.gz)
    Source code(zip)
  • 1.4.0(Mar 4, 2020)

    Heads-up Plugin Authors: Python 2's EOL and Python 3

    This release officially adds support to run OctoPrint under Python 3 instead of 2, which has become EOL as of January 1st 2020. However, most third party plugins probably do not yet support Python 3. In order to allow Plugin Authors to test and if necessary adjust their plugins first before OctoPrint tries to load them under Python 3, a new plugin property __plugin_pythoncompat__ has been introduced. Plugins should define the compatibly Python version via this property which OctoPrint will check on load and only proceed with loading the plugin under Python 3 if it signals compatibility.

    Additionally, the Plugin Repository has been expanded to include a new field compatibility.python which signals Python compatibility on the listing as well so that OctoPrint's Plugin Manager will only show such plugins from the repository as installable under Python 3 which are configured as such.

    Please see this guide in the documentation on how to go about compatibility testing and how to modify existing plugins to work with OctoPrint when running under Python 3.

    By default, OctoPrint will assume compatibility to Python 2 only.

    Features

    Improvements

    • #783 - New events UserLoggedIn & UserLoggedOut, on the push socket only available to admin users.
    • #935 - Support alternative source file types in SlicerPlugin.
    • #1665 - Include /dev/ttyS* in serial port pattern.
    • #1703 - Clarify some source code comments.
    • #1748 - Add sameDevice field to slicing API.
    • #1854 - New plugin hooks octoprint.timelapse.capture.[pre/post] to allow plugins to react to capturing happening.
    • #2328 - Grammar fix.
    • #3006 - Add options to allow gcode analysis, only when idle (default, former behaviour) or disable altogether. See also #3337.
    • #3210 - Clarify documentation on when the Error event will fire.
    • #3212 - Mark serial port file handle as not inheritable in order to avoid issues with spawned sub processes keeping a lock on the port vs "exclusive" open mode.
    • #3287 - Action Command Prompt: More flexibility for command definition for better compatibility with Klipper.
    • #3288 - Plugin Manager: Make plugin list filterable by bundled/third party and enabled/disabled and add a search box..
    • #3292 - Action Command Prompt: Support multi line option buttons.
    • #3295 - SWU: Added support for github_commit tracking configuration the the UI.
    • #3299 - Plugin Manager: Option to remove the settings and data of a plugin during plugin uninstall, on click and also to clean up any left overs from by now uninstalled plugins in the settings and data folders.
    • #3318 - Improve performance of the server side gcode interpreter.
    • #3326 - Adjust the toolbar color on Android based on the selected navbar background color.
    • #3342 - Prerender included markdown (AUTHORS.md, SUPPORTERS.md, THIRDPARTYLICENSES.md) and remove changelog (CHANGELOG.md) from About dialog, instead redirect to Github release page which has the full changelog.
    • Strip the remoteAddress from ClientOpened events pushed via the websocket to guests.
    • Loading animation to better communicate when the interface has actually successfully loaded and can be used. Can also be disabled via the settings.
    • Improved logging in case of plugin syntax errors.
    • Sanitized & reconfigured some HTTP headers:
      • X-Content-Type-Options is now set to nosniff
      • X-Frame-Options is not set to sameorigin unless configured otherwise
      • unused JSESSIONID cookie removed from SockJS
    • Clarify use of printer profile fields.
    • PMGR/SWU: Added flag to ignore the throttle state. Will allow people to circumvent the shoot-yourself-into-the-foot-countermeasures that prevent software updates & plugin installs while in a throttled state by editing config.yaml.
    • SWU: Do not persist check providers across reboots.
    • SWU: Add pypi_release version check type
    • SWU: Option to pip auto update right from within OctoPrint. Opt-in since pip updates can and have broken backwards compatibility in the past.
    • Tell users who have JavaScript disabled that OctoPrint's UI requires JS instead of presenting them with a non-functional interface.
    • Do not refresh site source on hard refresh if we are currently printing but print warning to log to use _refresh if it's actually required. See also #3344 for further discussion.
    • Various dependency updates. See also #1536.
    • Various documentation fixes and improvements. See also #2804, #3305, #3233, #3325, #3328.
    • Various typo fixes. See also #3297, #3330
    • #3367 - Ensure that static CSS and JS files always get the correct MIME Type associated, to work around issues when installed under Windows 10 with invalid entries in the registry triggering strict MIME checking
    • #3381 - Continue to support request parameters on the /api/login endpoint for now for backwards compatibility with API clients that still use things like /api/login?passive=true, e.g. older versions of Printoid
    • Remove a left-over comment from the Python 3 migration
    • #3400 (UX of new functionality) - Add ClientAuthed event to allow plugins to react to a client logging in on the socket
    • #3418 (UX of new functionality) - Add API endpoint /api/currentuser to retrieve permissions & groups of currently logged in user
    • #3425 - Change method of prompting for log in for guests without permissions
    • Add documentation for /api/access endpoints and update existing documentation with permission information
    • #3442 (UX of new functionality) - Plugin Manager: Add UI representation of incompatible installed plugins
    • Removed a duplicated line of code
    • #3454 - Explicitly document changed LineProcessorStream behaviour under Python 3
    • (Re-)Implement login dialog through a UiPlugin to work around various issues with regards to caching and general workflow with the current approach.
    • Docs for new access control situation.
    • Remove some left-overs of old login UI and fix some code comments.

    Bug fixes

    • #3125 - Fix potential dead lock when cancelling an SD print.
    • #3202 - Fix a "dictionary changed size during iteration" error.
    • #3267 - Fix OctoPrint not attempting to autoconnect to printer if port is set to None (= AUTO)
    • #3278 - Plugin Manager: Disable plugin management while printer is busy (e.g. paused), not just when actively printing.
    • #3295 - SWU: Fix a link to the documentation.
    • #3301 - Fix a race condition in SD print detection that could cause a just cancelled print to "start again".
    • #3302 - Timelapse: "Save as default" checkbox should always be enabled, regardless of printer state.
    • #3309 - Fix overzealous filtering of history entries on the /printer/{tool|bed|chamber} API endpoints.
    • #3311 - Fix a wording issue.
    • #3319 - Virtual printer: Do not assume that an S parameter must be present on M220 (and then crash when it's not).
    • #3327 - Fix a wrong used HTTP status code on the /api/login endpoint.
    • #3334 - GCODE Viewer: Fix G2 and G3 arcs being misinterpreted.
    • #3335 - Fix another "dictionary changed size during iteration" error.
    • Fix syncing of commands with ok responses. Thanks to @KevinOConner for the idea. See also #2599.
    • Fix the unrendered timelapse list being visible when empty.
    • SockJS iframe fallback no longer embeds SockJS library from a CDN.
    • Aggressively escape return values of the server in the UI.
    • #3348 (regression) - Fix an issue with the warning decorator trying to access non existing fields on instance methods, causing trouble with plugins still using deprecated settings methods.
    • #3349 (regression) - Fix an issue with unset optional headers on file uploads, causing uploads to fail in case of a missing content type or file name, e.g. from Cura.
    • #3350 (regression) - Appkeys: Fix wrong data type for newly generated keys under Python 3, causing the keys to not match and the plugin to not properly work.
    • #3354 (regression - Fix timelapse start not triggering correctly due to using a no longer existing field in the PrintStarted payload.
    • #3357 (regression) - Fix local autologin no longer working due to a logic change introduced by the new granular permission system.
    • #3361 (regression) - Fix an exception raised when attempting to log out the single admin user if access control is disabled.
    • #3362 (regression) - Fix escaping of placeholders in some error notifications.
    • #3363 (regression) - Gracefully handle missing subfolders on file list nodes.
    • #3364 (regression) - Make sure data is actually set.
    • Appkeys: Fix a deprecation warning. (regression)
    • #3365 (regression) - Fix permissions of global API key
    • #3366 (regression) - Appkeys: Fix issue causing 500/internal server error
    • #3370 (regression) - Fix issue causing lost session in case of a client IP change
    • #3371 (regression) - Python 3: Fix calculation of rolling_window in print time estimator
    • #3375 (regression) - Fix abort support for SimpleApiPlugin implementations
    • #3384 (regression) - Python 3: Fix login using HTTP Basic Auth
    • #3385 (regression) - Python 3: Fix serial port auto detection
    • #3388 (bug in new functionality) - Granular permission system: Fix extruder controls being visible without control permission
    • Fix a unicode issue under Windows (regression)
    • #3396 (regression) - Fix timelapse listing not properly refreshing on rendering a new timelapse
    • #3398 (bug in new functionality) - Fix checking of needs not being picky enough
    • #3409 (regression) - Fix timelapse rendering progress reporting under Python 3
    • #3419 (bug in new functionality) - Fix permission modelling for PRINT permission
    • #3425 (bug in new functionality) - Fix permissions for /api/settings
    • #3426 (regression) - Fix "Remember me" checkbox on forced login screen
    • #3428 (regression) - Fix plugin installation and other CLI interactions under Python 2 and 3 and Windows
    • #3431 (regression) - Fix folder writability test under Python 3
    • Fix endless loading issue when page is cached by browser in a tab and the server is down (regression)
    • #3434 (regression) - Fixed autologin & handling of disabled access control
    • #3400 (regression) - Reintroduced the message backlog on unauthenticated push sockets for better backwards compatibility for third party plugins.
    • #3442 (bug in new functionality) - Fix incompatible plugins being marked as enabled
    • (regression) Fixed handling of unset remote addresses
    • #3455 (regression) - Fix a Python 3 bug with the self._printer wrapper injected into plugins.
    • #3456 - Fix firmware info not being reported to plugins if firmware autodetection is disabled. Not a regression, but severe enough to merit inclusion ASAP.
    • #3459 (regression) - Fix login sessions not being persistent even with "Remember me" selected due to forced logout when becoming stale after 24h.
    • (regression) Fix buggy implementation of octoprint.server.api.(before|after)_request hooks.
    • (regression) Fix missing protection for blueprint plugins
    • (regression) Fix yet another Python 3 list vs iterator issue

    Special thanks to all the contributors!

    Special thanks to everyone who contributed to this release, especially to balassy, ByReaL, cameroncros, CapnBry, cbxbiker61, dforsi, eyal0, FHeilmann, fieldOfView, jammi, justfalter, kantlivelong, kevans91, koenkooi, mkobler, noahsmartin, povlhp, razerraz, RyuzakiKK, Salandora, smurfix, tedder & ZachNo for their PRs!

    More information

    Source code(tar.gz)
    Source code(zip)
  • 1.4.0rc6(Feb 26, 2020)

    ⚠️ 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 a Release Candidate.

    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

    • #3454: Explicitly document changed LineProcessorStream behaviour under Python 3
    • Implement login dialog through a UiPlugin to work around various issues with regards to caching and general workflow with the current approach.
    • Docs for new access control situation.
    • Remove some left-overs of old login UI and fix some code comments.

    Bug fixes

    • #3455 (regression): Fix a Python 3 bug with the self._printer wrapper injected into plugins.
    • #3456: Fix firmware info not being reported to plugins if firmware autodetection is disabled. Not a regression, but severe enough to merit inclusion ASAP.
    • #3459 (regression): Fix login sessions not being persistent even with "Remember me" selected due to forced logout when becoming stale after 24h.
    • (regression) Fix buggy implementation of octoprint.server.api.(before|after)_request hooks.
    • (regression) Fix missing protection for blueprint plugins
    • (regression) Fix yet another Python 3 list vs iterator issue

    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)
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 20 Mar 22, 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 21 Feb 6, 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 481 Mar 18, 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 Nov 21, 2021
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 380 Mar 17, 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 73 Mar 13, 2022
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 114 Mar 21, 2022
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 1 Mar 14, 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 17 Jan 26, 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 3 Oct 28, 2021
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 9 Mar 13, 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 74 Mar 23, 2022
💯 Watermark your images with one line of command

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

Orhan Emre Dikicigil 1 Feb 3, 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