One of the key features of using OctoPrint is that you can monitor your print remotely from your computer/phone and a key part of monitoring that is of course the webcam. I ordered some cheapo Raspberry Pi clone from Walmart. I linked to the one I bought, but I don’t recommend it
Out of the box this just works. I plugged in the ribbon cable to the Pi, restart and the cam just worked. This was great. However the quality wasn’t great. I assume it was just the lighting in my basement but then realized it was only grabbing an 640 pixel wide image. I knew the camera could do MUCH better than.
I poked around the Octoprint UI way to long and realized through ALOT of Googling that you can’t do it there. If you want to up the resolution you need to SSH into the PI and edit a configuration file. Being pretty experienced with Linux this was easy, but I wanted to document this for anyone else that wants better resolution from their Raspberry Pi camera or clone.
Step 1: SSH into Pi
Assuming you have setup SSH. If not you will need to turn off Octoprint, put the SD card into your computer and add an empty file titled
.ssh to the root folder of your SD card. After than put it back in the PI and start it up.
SSHH into pi with (most likely) the following command:
ssh [email protected]
If you haven’t set a custom password it would be
raspberry but you should REALLY change it.
Step 2: Determine available resolutions:
Enter the following command command:
v4l2-ctl -d /dev/video0 --list-formats-ext
This should give you a list with a bunch of information including something similar to the following.
: 'MJPG' (Motion-JPEG, compressed) Size: Stepwise 32x32 - 2592x1944 with step 2/2
Without going too much into details this shows my camera supports a max resolution of 2592×1944, which happens to be a 4×3 image and not 16:9.
Step 3: Update resolution in OctoPi’s configuration
Use the Nano text edit to edit the octopi text file with the following command:
sudo nano /boot/octopi.txt
This is a fairly large file and very well documented so if you are interested please read it.
The one line you will need to add/edit is:
camera_usb_options="-r 2592x1944 -f10
then close the file with CTRL X, and save with Y and restart the pi with:
sudo reboot now
With that your Octoprint instance should be showing a much higher quality image in OctoPrint and as a standalone screenshot. You can test that by going here: http://octopi.local/webcam/?action=snapshot in my case I am correctly seeing my desired resolution. Easy as pi.
There is quite a bit of advanced options out there, well beyond what you may need but I wanted to list it here for those interested.
The following information is taken right from this blog post, I copied and pasted it directly is because forum posts generally don’t age well and having it on something more permanent may be useful. To everything below I take no credit for.
USB webcams (
input_uvc.so comes bundled with MJPG Streamer.
See also the documentation for the recommended MJPG Streamer fork (bundled with OctoPi) 4.2k for additional options not listed here.
-d <device>: The video device to use, e.g.
-r <resolution>: The resolution, e.g.
-r 640x480for 640x480px
-f <framerate>: The framerate in frames per second, e.g.
-f 10for 10 fps
-q <quality>: The quality of the JPG compression to use, e.g.
-q 85for compression down to 85%
-y: Use this if your camera doesn’t support MJPG, pictures will be captured in YUVY
input_raspi.so is included in this MJPG Streamer fork 2.4k by Jackson Liam 89 which also supports the Raspberry Pi Camera 1.5k. This is the fork that is shipped on the OctoPi SD card image for the Raspberry Pi.
See also the documentation 1.9k for more information about these options.
--framerate: set video framerate, default 1 frame/sec
--width: width of frame capture, default 640
--height: height of frame capture, default 480
-quality: set JPEG quality (0 to 100), default 85
-usestills: uses stills mode instead of video mode
-sh: Set image sharpness (-100 to 100)
-co: Set image contrast (-100 to 100)
-br: Set image brightness (0 to 100)
-sa: Set image saturation (-100 to 100)
-ISO: Set capture ISO
-vs: Turn on video stablisation
-ev: Set EV compensation
-ex: Set exposure mode, valid values (according to the RaspiCam 2.1k documentation):
auto: Use automatic exposure
night: Select setting for night shooting
backlight: Select setting for back-lit subject
sports: Select setting for sports (fast shutter etc.)
snow: Select setting optimized for snowy scenery
beach: Select setting optimized for beach
verylong: Select setting for long exposures
fixedfps: Constrain fps to a fixed value
antishake: Antishake mode
fireworks: Select setting optimized for fireworks
-awb: Set AWB mode, valid values (according to the RaspiCam 2.1k documentation):
off: Turn off white balance calculation
auto: Automatic mode (default)
sun: Sunny mode
cloudshade: Cloudy mode
tungsten: Tungsten lighting mode
fluorescent: Fluorescent lighting mode
incandescent: Incandescent lighting mode
flash: Flash mode
horizon: Horizon mode
-ifx: Set image effect (according to the RaspiCam 2.1k documentation):
none: No effect
negative: Produces a negative image
solarise: Solarise the image
whiteboard: Whiteboard effect
blackboard: Blackboard effect
sketch: Sketch-style effect
denoise: Denoise the image
emboss: Embossed effect
oilpaint: Oil paint-style effect
hatch: Cross-hatch sketch style
gpen: Graphite sketch style
pastel: Pastel effect
watercolour: Watercolour effect
film: Grainy film effect
blur: Blur the image
saturation: Colour-saturate the image
colourswap: Not fully implemented
washedout: Not fully implemented
posterise: Not fully implemented
colourpoint: Not fully implemented
colourbalance: Not fully implemented
cartoon: Not fully implemented
-cfx: Set colour effect (U:V), the supplied U and V parameters (range 0 to 255) are applied to the U and Y channels of the image. For example,
--colfx 128:128should result in a monochrome image (according to the RaspiCam 2.1k documentation).
-mm: Set metering mode (see raspistill notes), valid values (according to the RaspiCam 2.1k documentation):
average: Average the whole frame for metering
spot: Spot metering
backlit: Assume a backlit image
matrix: Matrix metering
-rot: Set image rotation (0-359, at the present only 0, 90, 180 and 270 are supported though)
-hf: Set horizontal flip
-vf: Set vertical flip