This is the older software
These instructions are for Pi3D PictureFrame, which is still the right choice on a Raspberry Pi 2, 3 or Zero 2 W. On a Pi 4 or 5, start with the 2026 guide instead.
Tested with
The pi3d method below: Raspberry Pi 5 on OS Bookworm, November 2024, with Wayland and the labwc compositor. The picframe3 method is the one documented by the project; I have not re-tested either on Trixie.
Would you like to use your digital frame in portrait instead of the more common landscape orientation?
It takes you two minutes.
Updated from the old instruction set. Thanks to Adam and Paddy!
There are two ways to do this now, and they have nothing in common, so start by working out which frame you have. If you run pi3d PictureFrame on the Raspberry Pi OS desktop, the compositor turns the picture and the first half of this article is for you. If you run picframe3 on a Pi 4 or Pi 5, there is no compositor and no start_picframe.sh, so skip to the section near the end.
The Pi3D PictureFrame image viewer
If you are a regular reader of my blog, you will know that I unequivocally recommend the Pi3D PictureFrame software as my preferred Raspberry Pi image viewer.
If you don’t, visit “How I added smooth crossfading image transitions to my Raspberry Pi digital picture frame” or “How to build the best Raspberry Pi digital picture frame with Bookworm Wayland” to get started.
Portrait orientation with pi3d PictureFrame
To change to portrait mode, you need to know the resolution of your display in pixels. For example, HD is 1920x1080px, and 4K is 3840x2160px.
If you are unsure, run
wlr-randr
in Terminal, and you’ll see a list of resolutions where this line with (current) is the one that gives you the answer:
1920x1080 px, 23.976000 Hz (current)
The first thing is to amend the start_picframe.sh file.
Add the following two lines at the bottom so that your entire file looks like this:
#!/bin/bash
source /home/pi/venv_picframe/bin/activate # Activate Python virtual environment
picframe & # Start Picframe in the background
sleep 5
wlr-randr --output HDMI-A-1 --mode 1920x1080 --transform 270
If you have another resolution, enter the value instead of 1920x1080.
The open configuration.yaml and find this section (rather at the top)
display_w: 1080 # width of display surface (null->None will use max returned by hardware)
display_h: 1920 # height of display surface
Again, enter your resolution in there.
That’s all there is.
Restart with sudo reboot and it should look like this:
Portrait orientation on picframe3
picframe3 owns the screen directly, so the rotation is done one layer lower, in the kernel. Every layer above it then works in real pixels, which is why it is the better place for it.
Append this to the single line in /boot/firmware/cmdline.txt — it is one line, so add it to the end of the existing line rather than on a new one:
video=HDMI-A-1:1080x1920M@60,rotate=90
Use your own panel’s numbers, giving them the portrait way round. Reboot, and picframe3 doctor should report a 1080×1920 mode. There is nothing to set in the configuration file and no launcher script to edit; the frame simply finds a portrait screen and composes for it.
For a screen that is merely mounted upside down, none of that is needed — display.rotate: 180 in the configuration does it.
One thing still missing
Back in 2021 I wrote that I hoped the Pi3D wizards would add the option of showing two landscape images side by side when the whole frame stands in portrait, as a mirror of the two-portraits-on-a-landscape-screen trick. That still has not happened, on either piece of software. picframe3 does the landscape case — portrait_pairs puts two upright photographs side by side on a landscape panel, each with its own caption — but the other way round remains unbuilt.
Conclusion
If you are focused on people photography, having the portrait option with your digital frame can be really nice.
Give it a try!
Was this article helpful?
Thank you for your support and motivation.