Upload vs Upload to SD card

Hi there,

I am using Connection OctoPrint 1.3.10 running on OctoPi 0.16.0 with a Creality Ender 3.

I am unsure what the difference is between Upload and Upload to SD card options are on the main page.

If I choose upload, I can upload a GCODE file pretty quickly, then press the Load and Print button and away it goes.
If I choose the Upload to SD Card option, it uploads the file then spends upwards of a hour (depending how complex the print is) before I can actually 'Load and Print' the file.

When I choose Upload, where does it upload the file to? The Raspberry Pi's SD card? The SD card plugged into the printer? The printer's internal memory?
And same for Upload to SD Card, which SD card? The one in the Pi or the one in the printer?

Which option is the more advisable of the two?


Upload goes to the pi. Upload to SD goes over the serial connection to the SD card in the printer and takes forever.. I have never found any reason to use the printer SD card after getting Octopi set up.

1 Like

Thanks for that.
Ok so I'm doing it right if I choose Upload, which goes to the Pi, and then after a minute click the "Load and Print" setting?

Yes that is correct !

Surely, there is some reason that upload to SD exists; otherwise, they probably would not have bothered to inplement it.

@anoctoprintuser For instance, you want to save the gcode to the SD card and then reprint from the printers LCD using the SD card. Most of us would say .. why.. well what if the network was down.. not really much chance of that at my house but it can happen.. What if the user has a second printer of the same type but only one octoprint interface.. they can upload to sd card once and then move that card to the second printer to reprint the part..

1 Like

I have a few small "utility" gcode scripts that I keep on the printer's SD card. Occasionally, I'll update one of these scripts and rather than take the printer's SD card out, plug it into my desktop, update the file(s), and move it back to the printer I will just upload the script to the printer's SD card through OctoPrint. For small files, it's a little faster than the sneakernet approach. I would never upload actual print jobs to the printer's SD card this way.

So I had a question regarding the slow serial upload I couldn't seem to find an answer to elsewhere.

I plan on connecting my pi to my SKR 1.3 via the GPIO pins to clean up the printer a bit. Could this also positively affect the transfer rates to the printer's SD, or is there another bottleneck other than the cable/port itself?

Uploads to the printer's SD card are always going to be slow. The overhead of using a serial port for the connection is just too high.

I guess that's what I'm asking. if you're going from the GPIO pins on the pi to the TX/RX pins on the SKR, is it still a Serial connection? I'm showing a load of ignorance on the subject, but I guess what's considered a serial connection, and once you have a connection directly to the board rather than the USB port, could you up the baud rate to increase transfer speeds??

Yes, it is still a serial (RX/TX) connection.

1 Like

All you have to do is upload to sd and cancel after its done saving and starts streaming.. Then start your print. Less than a minute round trip and then you're not streaming the bits from pi. I've always had better results from sd than uploading to the pi but I'm using a zero-w. I don't know what its doing after uploading but if you're waiting for it to finish, quit doing that.

"Don't be afraid to break it! That's how you find out what it can do!" ~ me

So, sorry for jumping into the middle here, but I am very new to the RBPi/Octoprint lifestyle on my Ender3 and am interested in understanding the process. So when I click and select a .gcode file from my local machine, the file is uploaded to the RBPi (4B w/2GB in mysetup)? And then when I select [Load and Print], does that mean that the RBPi is send the code, command by command, to the Ender3? Is it expected and normal that printing this way takes longer than if I were to have the .gcode file on the Ender3 SD card and print from LCD? And btw, the reason I am even on this thread is because I was trying to find out what the [Upload to SD] function even does, because it is grayed out on mine.



Not really, but this can be the case with complex files since the Pi cannot push data into the printers command buffer quick enough. There are ways to increase the buffer size, involving flashing new firmware. If you are having issues with simple files, you may want to take a look at the terminal tab, it could be that there are a lot of resend requests which slow things down.

It will be greyed out because the printer doesn't say it has an SD card in, to OctoPrint. If you want help fixing that (if you do in fact have the SD card plugged in) I suggest opening a new thread as that's easier than this old thread.

Not quite. The problem is more that the regular 8 bit printer boards are overstrained by what they have to do. In addition to a SD card print: Recalculate the checksum, keep track of the line number, etc .
A Pi with four cores at 1400 MHz is way faster then an Arduino with one core at 24 MHz.

1 Like

@fyvstrang, How the Upload to SD option works has been detailed in the previous posts in this thread. I suggest you read through the entire post.

Most .gcode files are printed without issues over the USB serial connection. Files that contain a large number of very short commands (fine detail on the original object) can overwhelm the serial connection causing the printer to pause which can add blobs and other artifacts to the printed object. These files may produce a better quality print from the SD card but getting the file to the SD card should probably be done by physically moving the SD card between the system generating the .gcode and the printer.

Thanks! I will probably open another thread shortly.

@airscapes, So when you say "Upload goes to the pi" does it go the pi memory or the SD card in the pi running octoprint/octopi?

The RPi operating system is usually stored on the micro SD card which is often called the "boot device". It is possible on some RPi models to boot directly from a USB port instead which would then change the "boot device".

Many 3D printers also have an SD card (some micro, some full size) which is controlled by the firmware in the printer.

When uploading files via OctoPrint, the file will end up on the "boot device" if "Upload" is used and on the firmware controlled SD card if "Upload to SD" is used. Note that the "Upload to SD" option is often very slow because the file is transferred over the USB serial link, the same link that is used when you print a file from the RPi.


Another usage (mine) . Sometimes the rasp meets some undervoltage (I tried multiple solutions to fix that without success, but it is not the topic of this question)
Then, when I upload directly into the SD card, octoprint is only used to "monitor" the print, in this case, no "data resent" and no error during print. Even with "undervoltage" issue.