Raspberry Pi Buster no longer available for download

I have just been contacted by a blog reader who told me that Raspberry Pi Buster is no longer available for download.
I will start experimenting with Bookworm on a Pi4 this weekend to see what still works and what might be broken in Pi3D PictureFrame.

Ok, I have started the check. Downloaded and installed Bookworm with Desktop on a Pi 4. So far so good. Screen Blanking is D4 now (was D2 before) but that doesn't matter.
Heading over to my blog article on the installation of Pi3D.
sudo raspi-config nonint do_boot_behaviour B2 && sudo raspi-config nonint do_memory_split 512 && sudo raspi-config  needs to have the do_memory_split 512 removed. Can't find that anymore in the raspi config menu. Maybe this is automatic now?
When I then enter the first installation command
pi@pi4test:~ $ sudo python3 -m pip install -U pip
I get
error: externally-managed-environment
× This environment is externally managed ╰─> To install Python packages system-wide, try apt install     python3-xyz, where xyz is the package you are trying to     install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.

For more information visit http://rptl.io/venv

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages. hint: See PEP 668 for the detailed specification.

So, I guess, there's some work to do to get Pi3D running on Bookworm...

So, it seems like Python packages in Bookworm must now be installed in a virtual environment.
I did
python3 -m venv myenv andsource myenv/bin/activate which then allows me to pip install picframe.
This resulted in Successfully installed IPTCInfo3-2.1.4 Pillow-9.5.0 PyYAML-6.0.1 defusedxml-0.7.1 ninepatch-0.1.22 numpy-1.26.1 paho-mqtt-1.6.1 pi-heif-0.13.0 pi3d-2.49 picframe-2023.7.26.post1
So far, so good.

Entering picframe -i .  however, then results in a mouthful.
Traceback (most recent call last):
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/core/init.py", line 24, in
from . import multiarray
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/core/multiarray.py", line 10, in
from . import overrides
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/core/overrides.py", line 8, in
from numpy.core._multiarray_umath import (
ImportError: libopenblas.so.0: cannot open shared object file: No such file or directory
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/init.py", line 130, in
from numpy.config import show as show_config
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/config.py", line 4, in
from numpy.core._multiarray_umath import (
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/core/init.py", line 50, in
raise ImportError(msg)
ImportError:
IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
Importing the numpy C-extensions failed. This error can happen for
many reasons, often due to issues with your setup or how NumPy was
installed.
We have compiled some common reasons and troubleshooting tips at:
https://numpy.org/devdocs/user/troubleshooting-importerror.html

Please note and check the following:

The Python version is: Python3.11 from "/home/pi/myenv/bin/python3"
The NumPy version is: "1.26.1"

and make sure that they are the versions you expect.
Please carefully study the documentation linked above for further help.
Original error was: libopenblas.so.0: cannot open shared object file: No such file or directory
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/pi/myenv/bin/picframe", line 5, in
from picframe.start import main
File "/home/pi/myenv/lib/python3.11/site-packages/picframe/start.py", line 8, in
from picframe import model, viewer_display, controller, version
File "/home/pi/myenv/lib/python3.11/site-packages/picframe/viewer_display.py", line 1, in
import pi3d
File "/home/pi/myenv/lib/python3.11/site-packages/pi3d/init.py", line 19, in
from pi3d.Buffer import Buffer
File "/home/pi/myenv/lib/python3.11/site-packages/pi3d/Buffer.py", line 4, in
import numpy as np
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/init.py", line 135, in
raise ImportError(msg) from e
ImportError: Error importing numpy: you should not try to import numpy from
its source directory; please exit the numpy source tree, and relaunch
your python interpreter from there.
(myenv) pi@pi4test:~ $ picframe -i .
Traceback (most recent call last):
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/core/init.py", line 24, in
from . import multiarray
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/core/multiarray.py", line 10, in
from . import overrides
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/core/overrides.py", line 8, in
from numpy.core._multiarray_umath import (
ImportError: libopenblas.so.0: cannot open shared object file: No such file or directory
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/init.py", line 130, in
from numpy.config import show as show_config
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/config.py", line 4, in
from numpy.core._multiarray_umath import (
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/core/init.py", line 50, in
raise ImportError(msg)
ImportError:
IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
Importing the numpy C-extensions failed. This error can happen for
many reasons, often due to issues with your setup or how NumPy was
installed.
We have compiled some common reasons and troubleshooting tips at:
https://numpy.org/devdocs/user/troubleshooting-importerror.html

Please note and check the following:

The Python version is: Python3.11 from "/home/pi/myenv/bin/python3"
The NumPy version is: "1.26.1"

and make sure that they are the versions you expect.
Please carefully study the documentation linked above for further help.
Original error was: libopenblas.so.0: cannot open shared object file: No such file or directory
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/pi/myenv/bin/picframe", line 5, in
from picframe.start import main
File "/home/pi/myenv/lib/python3.11/site-packages/picframe/start.py", line 8, in
from picframe import model, viewer_display, controller, version
File "/home/pi/myenv/lib/python3.11/site-packages/picframe/viewer_display.py", line 1, in
import pi3d
File "/home/pi/myenv/lib/python3.11/site-packages/pi3d/init.py", line 19, in
from pi3d.Buffer import Buffer
File "/home/pi/myenv/lib/python3.11/site-packages/pi3d/Buffer.py", line 4, in
import numpy as np
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/init.py", line 135, in
raise ImportError(msg) from e
ImportError: Error importing numpy: you should not try to import numpy from
its source directory; please exit the numpy source tree, and relaunch
your python interpreter from there.

Forcing virtual env seems like a big departure from previously. There will need to be a massive rewrite of documentation all over the place, not just for picframe and pi3d!

Could tools like Replin help in the conversion? I was generating and testing several Python scripts yesterday to see how well they work, and I was blown away by the result.
Also, just checked out Replin, which is like Copilot but apparently a lot better. It even has a gree option.

Forcing virtual env seems like a big departure from previously. There will need to be a massive rewrite of documentation all over the place, not just for picframe and pi3d!

Virtual envs good for doing different things with a computer (especially different dependencies or python versions). However for a dedicated application like picframe they're an extra layer of complexity.
The main issue will be all the documentation and examples on line where pip install x stops working

Hmm, that's a bummer. I guess then at the moment, there is no way to use Pi3D with the current RPI OS anymore.
It's astonishing how many breaking changes OS changes introduce.

It doesn't seem too bad. There might be one or two things needing to be fine tuned, but I have just done this and it all seems OK:
1. Put bullseye on an SD card then stick it in an RPi4
2. Log in, open a terminal and git clone pi3d and pi3d_demos
3. cd to pi3d_demos and python3 RunTests.py

Not sure about FPS but didn't look too bad, obviously should have set GPU driver, memory and all the other fine details, but it seems a positive start.
Paddy

Hmm. As you say, these OS upgrades are full of breaking changes.
I've tried pip installing pi3d and, as you discovered, this has now become non-trivial. I had to use venv and had to specify source on github: python -m pip install git+https://github.com/tipam/pi3d having gradually discovered that python has changed from being an alias for python2 to python3. However the dependency in pi3d.setup.py for numpy downloads and installs version 1.26.1 although 1.24 is already installed with  bookworm. And the pip installed version of numpy is missing the compiled libraries for blas... Surely this problem will have happened with lots of other people! Anyway, I think we need to specify the debian python3-numpy rather than whatever pip dredges up!
PS Some progress: At least with testing pi3d as above, if I delete the environment I created earlier and recreate it using the --system-site-packages option it seems to work (I didn't change my user name as instructed during setup!)
(venv) pi@raspberrypi:~ $ deactivate
pi@raspberrypi:~ $ rm -r venv
pi@raspberrypi:~ $ python -m venv --system-site-packages venv
pi@raspberrypi:~ $ source /home/pi/venv/bin/activate
(venv) pi@raspberrypi:~ python -m pip install git+https://github.com/tipam/pi3d

NB To stop the demos using the version of pi3d in /home/pi/pi3d, if you cloned it there, you need to $ mv ~/pi3d_demos/demo.py ~/pi3d_demos/demo.tmp
This does mean there will probably need work-arounds for picframe installation because we ask for specific version number of some packages, possibly not using the debian site package. More testing, then, when picframe seems to work I will start to see if we can manage without the desktop!!
Paddy

One quirk I've found, that might be related to @helgeerbe's work getting pi3d to run on the mac, is that I have to set use_glx=True if I try to start a demo program over SSH. Most demos will run if started locally even without use_glx apart from TriceratopsModel which just hangs. One or two, such as TigerTank start but then freeze the process inescapably.

I guess the key is to get it going on the Pi, so that's probably a sacrifice to make. :-)

Ok, so I just did a clean install with bullseye on a Pi 4.
I encountered the first difference
In the raspi-config module, go to 6 Advanced Options > A2 GL Driver > Choose G2 GL Fake KMS.
There is no fake driver anymore. Just an experimental Wayland backend.
Pi3D installation seems to have worked but gave a few warnings:

pi@pi4bullseye:~ $ sudo python3 -m pip install -U pip
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: pip in /usr/lib/python3/dist-packages (20.3.4)
Collecting pip
Downloading https://www.piwheels.org/simple/pip/pip-23.3-py3-none-any.whl (2.1 MB)
|████████████████████████████████| 2.1 MB 1.1 MB/s
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 20.3.4
Not uninstalling pip at /usr/lib/python3/dist-packages, outside environment /usr
Can't uninstall 'pip'. No files were found to uninstall.
Successfully installed pip-23.3

pi@pi4bullseye:~ $ sudo python3 -m pip install pi-heif
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting pi-heif
Downloading pi_heif-0.13.1-cp39-cp39-manylinux_2_28_armv7l.whl.metadata (6.1 kB)
Collecting pillow>=9.1.1 (from pi-heif)
Downloading https://www.piwheels.org/simple/pillow/Pillow-10.1.0-cp39-cp39-linux_armv7l.whl (1.2 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 3.9 MB/s eta 0:00:00
Downloading pi_heif-0.13.1-cp39-cp39-manylinux_2_28_armv7l.whl (625 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 625.3/625.3 kB 5.4 MB/s eta 0:00:00
DEPRECATION: gpg 1.14.0-unknown has a non-standard version number. pip 24.0 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of gpg or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063
Installing collected packages: pillow, pi-heif
Attempting uninstall: pillow
Found existing installation: Pillow 8.1.2
Uninstalling Pillow-8.1.2:
Successfully uninstalled Pillow-8.1.2
Successfully installed pi-heif-0.13.1 pillow-10.1.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

pi@pi4bullseye:~ $ sudo pip3 install picframe
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting picframe
Downloading https://www.piwheels.org/simple/picframe/picframe-2023.7.26.post1-py3-none-any.whl (3.2 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2/3.2 MB 3.8 MB/s eta 0:00:00
Collecting Pillow==9.5.0 (from picframe)
Downloading https://www.piwheels.org/simple/pillow/Pillow-9.5.0-cp39-cp39-linux_armv7l.whl (1.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 3.9 MB/s eta 0:00:00
Collecting defusedxml (from picframe)
Downloading https://www.piwheels.org/simple/defusedxml/defusedxml-0.7.1-py2.py3-none-any.whl (25 kB)
Collecting pi3d>=2.49 (from picframe)
Downloading https://www.piwheels.org/simple/pi3d/pi3d-2.49-py3-none-any.whl (270 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 270.8/270.8 kB 4.0 MB/s eta 0:00:00
Requirement already satisfied: PyYAML in /usr/lib/python3/dist-packages (from picframe) (5.3.1)
Collecting paho-mqtt (from picframe)
Downloading https://www.piwheels.org/simple/paho-mqtt/paho_mqtt-1.6.1-py3-none-any.whl (75 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 75.6/75.6 kB 3.0 MB/s eta 0:00:00
Collecting IPTCInfo3 (from picframe)
Downloading https://www.piwheels.org/simple/iptcinfo3/IPTCInfo3-2.1.4-py3-none-any.whl (12 kB)
Requirement already satisfied: numpy in /usr/lib/python3/dist-packages (from picframe) (1.19.5)
Collecting ninepatch (from picframe)
Downloading ninepatch-0.1.22-py3-none-any.whl (16 kB)
Requirement already satisfied: pi-heif>=0.8.0 in /usr/local/lib/python3.9/dist-packages (from picframe) (0.13.1)
DEPRECATION: gpg 1.14.0-unknown has a non-standard version number. pip 24.0 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of gpg or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063
Installing collected packages: paho-mqtt, IPTCInfo3, Pillow, defusedxml, pi3d, ninepatch, picframe
Attempting uninstall: Pillow
Found existing installation: Pillow 10.1.0
Uninstalling Pillow-10.1.0:
Successfully uninstalled Pillow-10.1.0
Successfully installed IPTCInfo3-2.1.4 Pillow-9.5.0 defusedxml-0.7.1 ninepatch-0.1.22 paho-mqtt-1.6.1 pi3d-2.49 picframe-2023.7.26.post1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

pi@pi4bullseye:~ $ picframe -i .
INFO:start.py:starting ['/usr/local/bin/picframe', '-i', '.']
This will configure  /home/pi/picframe_data/config/configuration.yaml
To keep default, just hit enter
Enter picture directory [~/Pictures]:
Enter picture directory [~/DeletedPictures]:
Enter locale [en_GB.UTF-8]:
created /home/pi/picframe_data

Starting Pi3D with
pi@pi4bullseye:~ $ sudo xinit /usr/bin/python3 /home/pi/picframe_data/run_start.py /home/pi/picframe_data/config/configuration.yaml
gave this:

X.Org X Server 1.20.11
X Protocol Version 11, Revision 0
Build Operating System: linux Raspbian
Current Operating System: Linux pi4bullseye 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64
Kernel command line: coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_headphones=0 snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_hdmi=0 video=HDMI-A-1:1920x1080M@60 smsc95xx.macaddr=E4:5F:01:8D:66:33 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  console=ttyS0,115200 console=tty1 root=PARTUUID=1dcecdd5-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
Build Date: 30 March 2023  01:46:14PM
xorg-server 2:1.20.11-1+rpt3+deb11u6 (https://www.debian.org/support)
Current version of pixman: 0.40.0
Before reporting problems, check http://wiki.x.org
to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
(++) from command line, (!!) notice, (II) informational,
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Tue Oct 17 21:53:50 2023
(==) Using config directory: "/etc/X11/xorg.conf.d"
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
error: XDG_RUNTIME_DIR not set in the environment.
DRM_IOCTL_MODE_CREATE_DUMB failed: Cannot allocate memory
Failed to create scanout resource
(EE)
Fatal server error:
(EE) AddScreen/ScreenInit failed for driver 0
(EE)
(EE)
Please consult the The X.Org Foundation support
at http://wiki.x.org
for help.
(EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.
(EE)
(EE) Server terminated with error (1). Closing log file.
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error

I guess that's a result of the graphic driver.

So this is what I did next, and pi3d seems to run OK (though no where near the FPS of rust_pi3d)
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install libsdl2-dev python3-numpy python3-pil python3-pip git
$ python -m pip install pysdl2 --break-system-packages ## really should use venv or some other option!
$ cd ~
$ git clone https://github.com/tipam/pi3d
$ cd pi3d
$ git checkout sdl2 ## use sdl2 branch
$ cd ~
$ git clone https://github.com/pi3d/pi3d_demos
$ cd pi3d_demos
## edit ForestWalk.py, say, and change
  DISPLAY = pi3d.Display.create(x=100, y=100, frames_per_second=30, use_sdl2=True)
##
$ python ForestWalk.py

I've got a workable system: For the Pi up to and including 3 I can run from the command line with SDL2, for the Pi 4 (and 5, who knows?) it runs using xinit.
Once we've tested it, the sdl2 branches will be merged into main so the local install steps will be simplified. However the new system of venv seems fraught and I couldn't get it to work without scrambling the modules, so used --break-system-packages, which doesn't sound very promising but seems to work.

Flash SD with bookworm lite and set county, language, user, password, wifi, boot. (I didn't change anything else in raspi-config as I had an ethernet connection and connected keyboard.)
apt install the libraries for either <3 or 4+

sudo apt update
sudo apt upgrade
sudo apt install python3-numpy python3-pil python3-pip git

2.a. install libraries for SDL2 with Pi <3 - obviously this could be added to above command
sudo apt install libsdl2-dev python3-sdl2

2.b install X11 libraries and xinit application if Pi is 4 or 5
sudo apt install xserver-xorg xserver-xorg-legacy xinit

pi3d, sdl2 branch

git clone https://github.com/tipam/pi3d
cd pi3d
git checkout sdl2
cd ..

picframe, sdl2 branch

git clone https://github.com/helgeerbe/picframe
cd picframe
git checkout sdl2
nano pyproject.toml
# change dependency to "Pillow>=9.4.0"
cd ..

install pi3d and picframe from local repos

python -m pip install file:///home/pi/pi3d --prefer-binary --break-system-packages
python -m pip install file:///home/pi/picframe --prefer-binary --break-system-packages
/home/pi/.local/bin/picframe -i /home/pi/ # accept defaults
mkdir {Pictures, DeletedPictures}

6.a Set config to use SDL2 and run in Pi <3
nano ~/picframe_data/config/coonfiguration.yaml
# use_sdl2: True
python /home/pi/.local/bin/picframe /home/pi/picframe_data/config/configuration.yaml

6.b Can still set configuration use_sdl2: True but not needed for Pi 4+
sudo nano /etc/X11/Xwrapper.config
# change
allowed_users=anybody
needs_root_rights=yes
# save
xinit /usr/bin/python /home/pi/.local/bin/picframe /home/pi/picframe_data/config/configuration.yaml

Thanks, Paddy. Will try this on the weekend.

Newbie alert!
I am running it on Model 3B
cat /proc/cpuinfo | grep ^Model
Model           : Raspberry Pi 3 Model B Rev 1.2
Here are a few minor issues
Issue 1: Unable to set locale to en_US.UTF-8
ERROR:model.Model:error trying to set locale to en_US.UTF-8
Issue 2: mkdir {Pictures, DeletedPictures} doesn't work.  It's creating 2 directories "{Pictures" and "DeletedPictures}"
Issue 3: Typo on 6.a  filename coonfiguration.yaml should be configuration.yaml
After fixing those minor issues, it is running fine.  Thanks everyone for all the hard work!

@rock-meister thanks for testing and sorry for the typos which I've fixed. It's rather a 'work in progress' as git cloning, changing branch then pip installing locally is very clunky. (I'm not sure about the en_US but it should be possible to set this up at an earlier stage in raspi-config). I would really like to find a way for the SDL2 route to work on RPi 4 and 5 which would simplify the whole thing further. Short term it's really helpful of you to test the system on different setups.

When I get to point 5 python -m pip install file:///home/pi/pi3d --prefer-binary --break-system-packages I get the error

Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing ./pi3d
ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/home/pi/pi3d'

(Pi4 Bookworm)

Just installed it on a Pi4 with Bookworm (64-bit with Desktop (the recommended version)) and it works. Will let it run for a while to see if it's stable. Thanks, @paddywwoof !

The only unusual thing I can notice at this point, is when I add pictures on the fly while Pi3D is running, the I get this error

WARNING:get_image_meta.GetImageMeta:Cause: cannot identify image file '/home/pi/Pictures/2021. 09.15 - 12.46. 24 Fnatenrahmen.jpg'

However, the image is shown and the metadata are correct.

@paddywwoof Can you test if the performance is the same? Not sure how would you measure it.

Hi, I will check out that error, might be more checking for various things.. especially getting video working after a fashion.
I can test the frame rate on the RPi3 in the kitchen then update it to new stem and try that.

BTW, this sudo apt install python3-numpy python3-pil python3-pip git  does not seem to be necessary with the recommended Bookworm version. I get

python3-numpy is already the newest version (1:1.24.2-1).
python3-pil is already the newest version (9.4.0-1.1+b1).
python3-pil set to manually installed.
python3-pip is already the newest version (23.0.1+dfsg-1+rpt1).
git is already the newest version (1:2.39.2-1.1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

And sudo apt install xserver-xorg xserver-xorg-legacy xinit  only xserver-xorg-legacy needs to be installed.

xserver-xorg is already the newest version (1:7.7+23).
xinit is already the newest version (1.4.0-1).
The following NEW packages will be installed:
xserver-xorg-legacy
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.

The only unusual thing I can notice at this point, is when I add pictures on the fly while Pi3D is running, the I get this error

WARNING:get_image_meta.GetImageMeta:Cause: cannot identify image file '/home/pi/Pictures/2021. 09.15 - 12.46. 24 Fnatenrahmen.jpg'

However, the image is shown and the metadata are correct. And I think the error message came with the old version as well.

I think this comes up because the file analysis is triggered before the full transfer of the file has actually taken place.

I have started an post with your new instructions, @paddywwoof here: https://www.thedigitalpictureframe.com/how-to-build-a-gorgeous-digital-picture-frame-with-a-raspberry-pi-based-on-2023-bookworm/
Haven't tested it on the Pi3 yet.
Does this 2.a. install libraries for SDL2 with Pi <3 include the Pi 3 is it just for the Pi2?

I am using Raspberry Pi OS (64-bit) with the Raspberry Pi Desktop, which has "Recommended" in brackets. I always try to stay as close to the default settings, which avoids issues when readers try to follow the instructions.
And definitely not the end of the world. :-))))

Just made a fresh install on a Pi 3. Also works as it should! :-)

Hi, sorry I was away on a longer trip and hadn't time to write.
This is my shortest setup guide to run picframe on bookworm:

Install bookworm desktop. I configured it as host=raspberrypi , user=pi and using wifi
After first boot open terminal and run:

sudo apt-get update
sudo apt-get full-upgrade
sudo reboot

sudo raspi config

1 System Options -> S5 Boot -> B2 Sonsole Autologin as 'pi' user
2 Display Option -> D2 Screen Blanking -> Disable Screen Blanking
3 Interface Options -> I1 SSH -> Enable SSH
5 Localisation Options -> L1 Locale -> de_DE.UTF-8 UTF-8 (or whatever what your country is)
5 Localisation Options -> L2 Timezone -> Europe Berlin (or whatever your timezone is)
5 Localisation Options -> L3 Keyboard -> my keboard layout
6 Advanced Options -> A1 Expand Filesystem and reboot

Install picframe using a virtual environment for python

mkdir pvenv
python –v venv /home/pi/pvenv
source pvenv/bin/activate
pip install picframe
picframe –i .

5 create startscript that activates virtual python env
nano start_picframe.sh
#!/bin/bash
source /home/pi/pvenv/bin/activate # activate phyton virtual env
picframe &  #start picframe

make script executable
chmod +x start_picframe.sh

create user systemd service to start picframe on boot

mkdir ~/.config/systemd/user/ -p
nano ~/.config/systemd/user/picframe.service

[Unit]
Description=PictureFrame on Pi3

[Service]
ExecStart=/usr/bin/wayfire
Restart=always

[Install]
WantedBy=default.target

Controlling the service

You have the following options:

Enable service systemctl --user enable picframe.service
Disable service systemctl --user disable picframe.servcie
Start service systemctl --user start picframe.service
Stop service systemctl --user stop picframe.service
Stop restart systemctl --user restart picframe.service
Check logfiles journalctl --user-unit picframe.service

Good: Easy setup
Bad: Before the first image is displayed, you will see the desktop for a short time.

THanks much, @helgeerbe ! Is this for both Pi 3 and 4?

Helge, that's great fixing the issues with venv.
In latest news: I've found the cause of SDL2 not working on the RPi 4+. Basically trying to set the depth buffer to 24 bits causes the problem, I'll check why, but it works without specifying anything. So that would mean one set of instructions and no need for any desktop, X11 or otherwise... However I've not yet found a way to blank the screen without X11. Hmm😕

THanks much, @helgeerbe ! Is this for both Pi 3 and 4?

I tested it on Pi3. But there is nothing special, so I would assume this works with a Pi 4 as well.
But this setup uses xWayland. So its still an X application.
If @paddywwoof get the SDL support ready and we set SDL_VIDEODRIVER=wayland. It should run completely natively on wayland.
Anyhow, I found some hickups in my setup:

starting the service is not working over ssh. You have to run sudo reboot as a workaround
Picframe log does not appear in in journalctl. You have to set the log path in configuration.yml
I have to find out, which command can be used to blank the screen.

Performance seems to be (on Pi 3) the same, as under bulleseye.

I've updated the SDL2 branch so it works with Piv4+ and, once I've done a little more testing I will merge into main and bump to v2.51.
I got a bit of a lead here https://forums.raspberrypi.com/viewtopic.php?t=358689 but doesn't seem to work so far. There is an option in SDL to enable and disable screen blanking so maybe we can set it to a short period in the setup then toggle with SDL... Who knows!

@paddywwoof I tested the sdl branches and it works, without using X11 anymore.
What have I done:

sudo apt install libsdl2-dev python3-sdl2
in the venv environment I removed picframe and pi3d and installed the sdl versions
in the venv enrironment pip install  pysdl2-dll so python can import sdl. (Maybe you don't need to install the libsdl2-dev python3-sdl2)
add to configuration.yaml use_sdl2: True
change start_picframe.sh so sdl videodriver is wayland and not xWalyand anymore

#!/bin/bash
source /home/pi/pvenv/bin/activate # activate phyton virtual env
export SDL_VIDEODRIVER=wayland # sdl has to use wayland
picframe &  #start picframe

I would assume that the same setup would work for Pi3, Pi4 and Pi5. Would be good, if someone can confirm this.
If this is working we should:

make sdl the default
add pysdl2-dll to the dependencies
put a sample picframe_service, and start_picframe.sh file in the config folder

Maybe we should find out, what additional packages are needed, if you install the lite version

commands to blank screen under wayland on/off are
wlr-randr --output HDMI-A-1 --off
wlr-randr --output HDMI-A-1 --on

@rock-meister thanks for testing and sorry for the typos which I've fixed. It's rather a 'work in progress' as git cloning, changing branch then pip installing locally is very clunky. (I'm not sure about the en_US but it should be possible to set this up at an earlier stage in raspi-config). I would really like to find a way for the SDL2 route to work on RPi 4 and 5 which would simplify the whole thing further. Short term it's really helpful of you to test the system on different setups.

@helgeerbe I've started trying to follow your instructions with a new SD but I can't really get past first base. I had to insert a step sudo apt install python3-venv but after pip install picframe I don't have a any usable modules. numpy is missing the openblas library, PIL is missing various components, pi3d can't find the OpenGL libraries... What am I missing to make it work?
Also, do you get screen blanking with wlr-randr? I just get wlr-randr says failed to connect to display and if I run as root XDG_RUNTIME_DIR is invalid or not set in the environment If I run setterm from a keyboard on the RPi then it will blank and wake up but it doesn't work either on the remote picframe.

@paddywwoof which image are you using?. I used
Raspberry Pi OS with desktop
Release date: October 10th 2023
System: 64-bit
Kernel version: 6.1
Debian version: 12 (bookworm)
Size: 1,093MB
wlr-randr does not work remotely (ssh) and wayfinder (compositor) has to be running. To test ist run it from a terminal on the desktop:
wlr-randr --output HDMI-A-1 --off; sleep 10; wlr-randr --output HDMI-A-1 --on

I am using 2023-10-10-raspios-bookworm-armhf-lite but the first SD I burned was the desktop version and I think I had the same error messages when I tried to pip install numpy in a venv.
I was running wlr-randr in a python subprocess.run() on the picframe RPi but I hadn't got the wayfinder compositor running (is that right or should it be wayfire, I can't find much info on either on line)

I also can't get Helge's instructions to work. using a Pi 4 with Bookworm Desktop (Recommended). Does it work through Terminal? I don't have a keyboard connected to my Pi and it's not really the way people would configure their picture frame.

I assume, that lite is missing too many packages. I would go with desktop, to show that it's working. Using lite we have to identify the missing packages.
Wayfinder must be running. Using wayland, the compositor provides the api. If we are happy, we could replace wafinder with cage. Cage is a compositor for a single kiosk application. But for now, I would use the raspberry standard tools.
@sapnho I don't have a spare pi4. But yes, you should be able to do the configuration through a terminal. Only starting the service through a terminal seems not to work.
Tomorrow I will do a clean set up and will document each step again.

picframe itself runs fine on lite with only libsdl2-dev, python3-sdl2, python3-numpy,  python3-pil and the other modules needed by picframe the problem is getting python3-venv working. I did a very basic venv just install numpy and it was impossible to load. Surely that shouldn't happen! Maybe it's a bug in pywheels.org?

Yes it's running. But you are using xWayland (even with sdl). xWayland is a xServer layer in wayland for legacy applications. The future is to get rid of X completely.
I hadn't any issue creating the python virtual environment. So I could just run pip install picframe and all dependencies were installed from pypi.org

Helge, yes you are right. Even on RPi 4 it's using xWayland. It would be nice if SLD could 'automatically' start wayland like it does for X11 but it doesn't seem to, if the SDL_VIDEODRIVER is set to wayland it fails. I think wayfire needs to be started in another process. Somehow!
I can't decide whether using using the pip route for things like numpy, pill and pysdl2 is the best route. I know we've had problems in the past and needed to specify versions but current 32 bit armhf lite pip packages seem to be in disarray. Just looking at the piwheels.org website for numpy it says you need to
sudo apt install libgfortran5 libopenblas0-pthread
pip3 install numpy

so why not just sudo apt install python3-numpy instead? There is an option when creating a venv to use --system-site-packages

Hi, I reinstalled picframe on bookworm. Using native Wayland (no X). I created a wiki page, that can be edited more easily:
https://github.com/helgeerbe/picframe/wiki/Setup-guide-Bookworm-and-Wayland

Hi @paddywwoof I could install all dependent packets with a simple pip install picframe. Using a virtual environment we can control even the versions of the packets which are required by picframe.

@helgeerbe that works great. The SD burning and OS loading is significantly more time consuming than the lite versions but that only really matters during testing where I'm doing it lots of times. The average user will just do it once. I'm in the process of merging pi3d sdl2 branch to main but in the mean time I found I could replace https://github.com/helgeerbe/picframe/wiki/Setup-guide-Bookworm-and-Wayland#install-sdl-branches-of-picframe-and-pi3d with
pip uninstall picframe
pip uninstall pi3d
pip install git+https://github.com/tipam/pi3d@sdl2
pip install git+https://github.com/helgeerbe/picframe@sdl2
pip install pysdl2

i.e. it's possible to pip install directly from a git branch, which I didn't realise before!
Now we just need to figure out how to launch wayfire without all the desktop stuff. Thanks again for sorting this out.
 I was afraid it would take a long time to run PictureFrame on Bookworm! Thank you two so much!

This is my minimum wayfinder.ini
[core]
plugins = alpha autostart
#xwayland = false

[autostart]
picframe = /home/pi/start_picframe.sh

With this setting you will get a black screen with a mouse pointer in the middle of the screen, before picframe starts.
We coud start wayfinder with a separate ini file, to keep the original wayfinder.ini untouch.
@paddywwoof I tried also to disable xwayland, but picframe is complaining, that it still need X11 to be running. I did some tests with SDL_VIDEODRIVER=wayland and checked that picframe is using wayland. So why pi3d needs still X11?

@helgeerbe I've made a bit of progress:

I've done a major hack on pi3d using project.toml and getting rid of setup.py as well as binning the support for python2 and taking out a couple of other things that said they were deprecated. Hopefully it will all still work, I tried installing from wheels I've built here and it runs OK but I will put it on the RPi 3 and 4 at least and run the tests. At the moment it's in sdl2 branch, I've not yet merged to main.
I've managed to run pi3d with SDL_VIDEODRIVER=wayland on the lite version of bookworm. Essentially with your wayfire.ini setup - but I left the xwayland = false line in. I had the export SDL_VIDEODRIVER=wayland  in the bash script but also added it to /etc/environment

@helgeerbe OK I've made a new SD card using 64 bit bookworm lite and basically followed your instructions with the following changes:
# apt update
sudo apt install python3-venv git libsdl2-dev wayfire

mkdir /home/pi/.config
nano /home/pi/.config/wayfire.ini
...
    [core]
    plugins = autostart
    xwayland = false

    [autostart]
    picframe = /home/pi/start_picframe.sh
...
mkdir {Pictures,DeletedPictures}

Also I have merged the sdl2 branch to main in pi3d and made pysdl2 a dependency so you can
pip uninstall picframe
pip uninstall pi3d
pip install git+https://github.com/tipam/pi3d
pip install git+https://github.com/helgeerbe/picframe@sdl2

All in all it seems simpler than the previous X11 descriptions

I'll give it a try. I'm wondering what the load is.  That is OK, but not as good as the old OS. Maybe it becomes better using lite)

Seems to be around 1.1 to 1.2 so only a very marginal improvement. As time goes on it might be improved I suppose.
top - 09:05:49 up  7:22,  2 users,  load average: 1.09, 1.14, 1.09
Tasks: 129 total,   2 running, 127 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.0 us,  1.5 sy,  0.0 ni, 96.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :    908.5 total,    185.6 free,    441.9 used,    342.8 buff/cache
MiB Swap:    100.0 total,    100.0 free,      0.0 used.    466.6 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    750 pi        20   0<PHONE_NUMBER>92  76296 S   6.2  21.5  32:40.08 picframe
    730 pi        20   0  234748  78540  55236 S   5.9   8.4  24:43.31 wayfire
   1505 root      20   0       0      0      0 D   1.3   0.0   0:04.05 kworker+
   1531 pi        20   0   11712   4676   2776 R   1.0   0.5   0:04.10 top
   1529 root      20   0       0      0      0 I   0.7   0.0   0:02.52 kworker+
     15 root      20   0       0      0      0 I   0.3   0.0   1:37.35 rcu_pre+
     25 root      20   0       0      0      0 S   0.3   0.0   0:01.51 ksoftir+
    636 root      20   0  262600  19120  16160 S   0.3   2.1   0:17.66 Network+
   1504 root      20   0       0      0      0 I   0.3   0.0   0:00.28 kworker+
   1507 root      20   0       0      0      0 I   0.3   0.0   0:00.43 kworker+
      1 root      20   0  168644  11816   8584 S   0.0   1.3   0:07.62 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.16 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par+
      5 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 slub_fl+
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 netns
     10 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_perc+

Looks good.
I have to test, if screenblanking is working with this minimal setup of wayfire.ini or if we have to load an additonal plugin.
I will change the wiki page.

I updated the wiki.

add missing wlr-randr for screen blanking
update start_picframe.sh Blanking screen to have a nicer startup
Add an additional tweak chapter

disable bluetooth
silent boot

@paddywwoof how do you select the hdmi-port for picframe? Do we need a config to select the hdmi port? Using HMI-A-1 means we would assume that picframe is always running on the first hdmi port.

I think I found a command to list the displays. I will dig around and see if I can find it. Does the wlr-randr --on and --off work on the desktop SD image for you?

hm, could ist be more a sdl2 problem?
I installed lxterminal. Run terminal and picframe (with reduced size). Then I run 'wlr-randr --output HDMI-A-1 --off; sleep 10; wlr-randr --output HDMI-A-1 --on`in the terminal.
picframe terminates with memory exception

@paddywwoof I can confirm that the latest instructions works on using 64 bit bookworm lite on Model 3B+.
@helgeerbe both systemctl --user start picframe.service and systemctl --user restart picframe.service works fine over ssh.  Not sure what errors you see.

@rock-meister thanks for checking that. I'm not sure what causes the memory exception but the general problem is turning the screen on and off i.e. at night or if you have an infrared sensor. None of the old methods seem to work anymore on wayland but the nearest is using wlr-randr. However it seems to stop the slideshow as well as blanking the monitor, which could be solved by shutting everything down then restarting it again (i.e. with systemd) but that seems like overkill, and it's nice for the slideshow to pickup where you left it rather than re-shuffling everything.

@helgeerbe I just made a clean install on a Pi4, and it works. Thanks! So, with Bookworm, there is no difference between installing on a Pi3 or 4 (and soon Pi5)? That makes it even easier for people to build some nice photo frames for Christmas!
@paddywwoof Is there any reason why the transitions shouldn't be as smooth as before? I may have noticed some jitter but I haven't tried it on my 32'' 4K frame in the living room yet, and it might have just been a long day.

At the moment sdl support for picframe and pi3d is not released

Is this a PictureFrame issue or is it something that has to do with Bookworm?

@rock-meister thanks for checking that. I'm not sure what causes the memory exception but the general problem is turning the screen on and off i.e. at night or if you have an infrared sensor. None of the old methods seem to work anymore on wayland but the nearest is using wlr-randr. However it seems to stop the slideshow as well as blanking the monitor, which could be solved by shutting everything down then restarting it again (i.e. with systemd) but that seems like overkill, and it's nice for the slideshow to pickup where you left it rather than re-shuffling everything.

For a moment, I was happy having found this solution but in the new setup it doesn't work anymore.
Blanking the screen seems to be the last piece of the puzzle of the migration. This must be such a common issue on the Raspberry Pi, I wonder why it's so darn tricky.

And Stop restart systemctl --user restart picframe.service (does not work over ssh)  work well via Terminal.

I'm not sure about the transitions. I did notice one of the pi3d_demos files, which is just a simple texture rendered onto a quad, seemed to have a slight flicker in brightness when I first tested it on wayfire with xWayland forced off. That seems very odd but it might be related to the compositor, I will do some more tests to see if I can narrow down the issue (or just check that there is an issue)
It is also slightly related to your other questions. The reason your xrandr solution doesn't work is because we have gone to some lengths to make SDL2 use wayland. Left to its own devices it would use xWayland, which is functionality built into wayland to allow X11 applications to still run. X11 is the old, tried and tested system (which is why SDL2 defaults to using it if both are available) but the intention is for everything to eventually switch over to wayland and X11 will gradually be shelved.
pi3d did actually run much of the time without any alteration on bookworm using xWayland (the hardest part was installing dependencies with the venv system) but there were a few issues, possibly with the way X11 functionality was being emulated so I decided now was a good time to make the switch to using SDL2 and, at the same time, switch to using wayland.
However (despite all the effort sorting out the issues) we don't have to switch to wayland right now. The picture frame I have running in the kitchen here has been going happily for several days and it's not running using wayfire (the windowing and input system for wayland) The trouble is that xrandr doesn't work with the DISPLAY=:0.0, `WAYLAND_DISPLAY="wayland-1" or anything else either, probably because of the differences between xWayland and X11 (or something else) At the moment I am just pausing and turning the brightness down to 0.0 but that's not really satisfactory.
Can you systemctl --user stop.. and start? I can certainly do that over ssh here.

Can you systemctl --user stop.. and start? I can certainly do that over ssh here.

Yes, all the systemctl commands work well over ssh. (There is a typo in the Disable service systemctl --user disable picframe.servcie line).

commands to blank screen under wayland on/off are
wlr-randr --output HDMI-A-1 --off
wlr-randr --output HDMI-A-1 --on

Why does this work in @helgeerbe 's script but not stand alone?

Sadly it doesn't work in that script either! If you add at the end a series of off then on

@paddywwoof
Can you do some tests on sdl2? When I run wlr-randr -off the display is listed as Enabled: no
Check SDL_DisplayModeChange event:
SDL2 provides an event called SDL_DisplayModeChange to notify applications about changes in screen resolution and other display settings. Your application should listen for this event and respond accordingly.
Here's an example of how to listen for the SDL_DisplayModeChange event:
SDL_Event event;
while (SDL_PollEvent(&event)) {
    if (event.type == SDL_DISPLAYMODECHANGED) {
        // Handle resolution change here
    }
}

So maybe pi3d can catch the event, and start drawing, when display is enabled again?

using the screensaver on wayland does not work. SDL seems to disable it, if running.
And I can confirm that systemctl --user start picframe.servcice works on lite. I'm pretty sure I tested it on the desktop version, and was not able to start picframe.

Helge, I'll have a look at the SDL side when I get home. From memory the python process has been terminated by wlr-randr --off so it tale a bit of working round!

When I call wlr-randr --off  I see that picframe stops with memory exception. So I thing it is loosing its display context (drawing to a non existing display). So my hope is, that you can catch the event, stopp drawing, and when the display returns, picframe resumes.
Don't know if I remember right, but I thought, that I read something that Wayland application should stop outputs to the display, if there is none. This will save cpu time, if there is nothing to do.

OK, makes sense. As we're switching off the display we can stop the rendering first. I don't know if the SDL render surface will remain 'attached' and available for when the display is there again.On 5 Nov 2023 13:40, helgeerbe @.***> wrote:
When I call wlr-randr --off  I see that picframe stops with memory exception. So I thing it is loosing its display context (drawing to a non existing display). So my hope is, that you can catch the event, stopp drawing, and when the display returns, picframe resumes.
Don't know if I remember right, but I thought, that I read something that Wayland application should stop outputs to the display, if there is none. This will save cpu time, if there is nothing to do.
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>

I was able to use the screensaver. Picframe also survive dpms mode.
export SDL_VIDEO_ALLOW_SCREENSAVER
with the idle plugin from wayfire I can toggle screensaver on and off by keyboard.
What I don't know is, how to send keystrokes from an sh script

I tried using wtype but the screensaver wasn't working so I couldn't tell. I also couldn't get the screensaver to work with keyboard or wayfire.ini anyway!

Your have to load the idle plugin in the core setting.

Booting up, I get picframe and a terminal window. Waiting 20 sec the screensaver starts and the windows wobble. After 30 sec the screen gets black when dpms is activated.  Moving the mouse activates the screen. Picframe is still running. If I hit shift+Windowskey+i, screensaver is disabled. Hitting shift+Windowskey+i activates the countdown for the screensaver again.

I thought I'd tried exactly that, but sure enough now I run it, it works!   I used your Setup-guide-Bookworm-and-Wayland  guide which only listed
[core]
plugins = autostart
xwayland = false

[autostart]
picframe = /home/pi/start_picframe.sh

@sapnho I think not, certainly I only have autostart and idle in mine.
@helgeerbe I have added a couple of functions to pi3d.Display to call sdl2.SDL_EnableScreensaver() and Disable... I will test here then put the changes on GitHub if I can get it to work!

@rock-meister  this was only for testing. If we do any changes, I will put it in the wiki
@paddywwoof I had the same idea. I saw that sdl2 is providing such an api. Hope this will will work.

I've put in a couple of changes. To picframe sdl2 branch:
https://github.com/helgeerbe/picframe/commit/e4374406f21c51504b9bda7b836a788c45e62cf2
and pi3d sdl2 branch
https://github.com/tipam/pi3d/commit/b370747c8fa5c8f57c6c482b88755144f3539504
I'm over at my mum's house at the moment, without a Raspberry Pi handy so I've only tested them on my laptop but it seems to work (after a fashion; the screensaver locks the screen requiring a password and if I attempt to turn that off it does something odd, turning the screen back on but minimising the python/sdl app)
Also I've not put any code in the @display_is_on.getter but there is a function SDL_IsScreenSaverEnabled() to get the state of the screensaver (a wrapper for which would have to be added to the pi3d.Display object)

I've put in a couple of changes. To picframe sdl2 branch:
https://github.com/helgeerbe/picframe/commit/e4374406f21c51504b9bda7b836a788c45e62cf2
and pi3d sdl2 branch
https://github.com/tipam/pi3d/commit/b370747c8fa5c8f57c6c482b88755144f3539504
I'm over at my mum's house at the moment, without a Raspberry Pi handy so I've only tested them on my laptop but it seems to work (after a fashion; the screensaver locks the screen requiring a password and if I attempt to turn that off it does something odd, turning the screen back on but minimising the python/sdl app)
Also I've not put any code in the @display_is_on.getter but there is a function SDL_IsScreenSaverEnabled() to get the state of the screensaver (a wrapper for which would have to be added to the pi3d.Display object)
PS Tested this at home now and I'm struggling to get the the SDL_EnableScreenSaver() to work. i.e. If I comment out the line in viewer_display.slideshow_start() to disable the screensaver, it cuts in after a few seconds (set in .config/wayfire.ini) but with the line in the screensaver is disabled, as it should be. If I then put a line immediately after the disable to enable the screensaver it continues to be disabled, and the same goes for calling viewer_display.display_is_on(True) which seems to work but display_is_on(False) doesn't.

I attempted a standard ctrl-f to check for this suggestion, so I apologize if it was tried already and did not work.
would adding the following to crontab -e work? I found this during my own searching/investigating:

0 23 * * * /opt/vc/bin/tvservice -o
0 7 * * * /opt/vc/bin/tvservice -p && sudo systemctl restart display-manager

@helgeerbe I thought I had solved the screensaver issue by using ydotool which I cloned and compiled giving two executables a) ydotoold which is a server and listens on a socket for b) ydotool and then accesses the linux io system directly (which requires root).
I added a few lines to viewer_display.py as shown below and, sure enough, when I set the venv and start picframe from a terminal it works perfectly. However when I do the same thing using start_picframe.sh (either manually or using .config/wayfire.ini and systemd) then the screen stays visible fine i.e. the synthetic mouse jiggling works, and the jiggling stops when I send the message to turn the screen off, and the screensaver cuts in. But then it doesn't wake up when I start the jiggling again.
I can't figure out what the problem is, or a way round it, but it does seem reminiscent of wlr-randr being able to switch off but not on again.
diff --git a/src/picframe/viewer_display.py b/src/picframe/viewer_display.py
index 8058725..3bb3f65 100644
--- a/src/picframe/viewer_display.py
+++ b/src/picframe/viewer_display.py
@@ -99,6 +99,8 @@ class ViewerDisplay:
         self.__clock_format = config['clock_format']
         self.__clock_opacity = config['clock_opacity']
         ImageFile.LOAD_TRUNCATED_IMAGES = True  # occasional damaged file hangs app
+        self.__mouse_jiggle_time = 0
+        self.__mouse_jiggle = True

     @property
     def display_is_on(self):
@@ -133,9 +135,11 @@ class ViewerDisplay:

         # do this anyway, shouldn't do any harm if pi3d.USE_SDL2 is not set TODO refactor the following section - use __display_power == 2 ?
         if on_off is True:
-            self.__display.disable_screensaver() # screensaver stops working - screen stays on indefinitely
+            #self.__display.disable_screensaver() # screensaver stops working - screen stays on indefinitely
+            self.__mouse_jiggle = True # stop screensaver by moving mouse
         else:
-            self.__display.enable_screensaver() # screensaver start - will turn after the the timeout period
+            #self.__display.enable_screensaver() # screensaver start - will turn after the the timeout period
+            self.__mouse_jiggle = False # leave mouse alone

         self.__logger.debug("Switch display (display_power=%d).", self.__display_power)
         if self.__display_power == 0:
@@ -450,7 +454,8 @@ class ViewerDisplay:
         self.__flat_shader = pi3d.Shader("uv_flat")

         # turn off screensaver
-        self.__display.disable_screensaver() # screen will stay on
+        #self.__display.disable_screensaver() # screen will stay on
+        subprocess.run("sudo /home/pi/ydotool/build/ydotoold &".split()) # start server

         if self.__text_bkg_hgt:
             bkg_hgt = int(min(self.__display.width, self.__display.height) * self.__text_bkg_hgt)
@@ -553,6 +558,11 @@ class ViewerDisplay:
             if block is not None:
                 block.sprite.draw()

+        if self.__mouse_jiggle and (tm - self.__mouse_jiggle_time) > 10: # NB set timeout to 30s
+            #subprocess.run("sudo /home/pi/ydotool/build/ydotool type a".split())
+            subprocess.run("sudo /home/pi/ydotool/build/ydotool mousemove -x 1 -y 0".split())
+            self.__mouse_jiggle_time = tm
+
         return (loop_running, False)  # now returns tuple with skip image flag added

     def slideshow_stop(self):

So, I have included @paddywwoof's latest modifications and the slide show works great in Bookworm.
Are we closer to the screen on/off issue? It really is a tricky one, isn't it?

Sounds good. I've been trying to get to the bottom of a couple of other quirks around picframe occasional not updating the db and not playing movies. Bothe we're fine before so it might be something I missed or a corruption, the power supply isn't really big enough so that's a likely cause of random problems.
I feel the screen off and on should be within reach. It works well if I start picframe manually rather than via a bash script so that must narrow down the cause of the problem. I could alway post a question on the RPi forum or stack exchange. (I did try the chat bots!)
Paddy
PS Happy Christmas 🎄

Merry Christmas, @paddywwoof ! In Germany, we celebrate on Dec 24, so tonight I have some time for tinkering.. :-)
It would be great to find a solution for the screen, as this is still the missing link to complete the migration. Fingers crossed!

Hi, I might put a very quick how-to on here showing simple mods such as this https://youtu.be/IFycHagcdwA

Very cool idea!

Hi, I might put a very quick how-to on here showing simple mods such as this https://youtu.be/IFycHagcdwA

One idea for the next New Year party: Can you do fireworks as well? :-)

Hi, another RPI newbie here.
I tried following the instruction here to set up RPI for PI3D on a clean SD card.
I tried the recommended …arm64.zip and …armhf-full.zip on RPI 3A or 3B, neither combo even boots, despite trying editing hdmi settings directly on the SD card.
The latest install recommended by Imager is currently Debian Bullseye 32-bit, 2023-12-05. It boots and works like a charm to configure wifi, mount a usb disk, and Samba.
When following the step-by-step tutorial here to get PI3D running, I get similar messages described in this thread. And with few ideas what to do, google pointed me to this thread.
After reading this thread, it seems there might be a solution in sight but not yet an easy step-by-step instruction for less experienced users. Would this be a fair conclusion?
Is there any way to get my setup to work at this time, or should I put it to rest for a while until new ways are uncovered and documented?

Hi I'm kind of obliged to use the latest default RPi OS here at home, and try to debug any issues in pi3d and picframe in the process. So I have a testing pi4 and Pi5 but the screen in the kitchen is 3b. All are running bookworm and the only disadvantage Seems to be the inability to turn the screen off.
That your pi fails to boot implies to me that there is a different problem, though not sure what.

Thanks!
Is Bookworm a different release than Bullseye and Buster?
Both 3A and 3B are new out of the box, and with two new SD cards. RPI original power supply + HDMI. All combinations work with Bullseye, neither with Buster.
Since the topic of this thread is how to do without Buster, I hope there’ll be others like me, trying to set up PI3D on e.g. Bullseye.

Hi, yes Bookworm is the latest version of the Pi Foundation's OS, there are some problems around the move from the older windows and input system (xorg) to the newer (wayland). However it does work in most respects and you can follow the instructions https://github.com/helgeerbe/picframe/wiki/Setup-guide-Bookworm-and-Wayland I didn't know that the Pi Foundation recommended Bullseye for RPi3 - that also sounds odd, maybe they found
Wolfang has stuck with the older Buster setup on his site as we know that it worked reliably. It should work in a similar way with Bullseye to be honest, if you can get that running, but you might not get the screen to turn off properly, having to make do with just turning the brightness down to zero. I'm away at the moment but I will try following his instructions when I get home, just to check how it goes.
The fact that you couldn't get the SD card to boot but you tried editing the HDMI settings on the SD card  makes me think that you got some specific symptoms when you tried to boot that let you conclude that the problem was in the display setup or something. i.e. Maybe you could see from the LEDs flashing that it was infact booting, but you didn't get any output to the display?
Anyway, let us know how you get on.

Thanks for helping out, much appreciated!The onboard LEDs led me to suspect the HDMI output was wrong. Red led constantly lit, while green was blinking in bursts indicating activity although nothing visible on screen. Seems to be Buster related though since HDMI works just fine with both Bullseye and Bookworm, with and without GUI.Today I tried Bookworm with RPI 3A+. The full 64-bit version was unstable, but 64-bit lite (command line only) seems good. The new step-by-step on github works great! It took me a while to get started with USB disk and network configuration, but getting there slowly. Will update more when I make it all the way or get stuck.Cheers!28 jan. 2024 kl. 17:59 skrev Paddy @.***>:
Hi, yes Bookworm is the latest version of the Pi Foundation's OS, there are some problems around the move from the older windows and input system (xorg) to the newer (wayland). However it does work in most respects and you can follow the instructions https://github.com/helgeerbe/picframe/wiki/Setup-guide-Bookworm-and-Wayland I didn't know that the Pi Foundation recommended Bullseye for RPi3 - that also sounds odd, maybe they found
Wolfang has stuck with the older Buster setup on his site as we know that it worked reliably. It should work in a similar way with Bullseye to be honest, if you can get that running, but you might not get the screen to turn off properly, having to make do with just turning the brightness down to zero. I'm away at the moment but I will try following his instructions when I get home, just to check how it goes.
The fact that you couldn't get the SD card to boot but you tried editing the HDMI settings on the SD card  makes me think that you got some specific symptoms when you tried to boot that let you conclude that the problem was in the display setup or something. i.e. Maybe you could see from the LEDs flashing that it was infact booting, but you didn't get any output to the display?
Anyway, let us know how you get on.
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you commented.Message ID: @.***>

I guess this issue can be closed.


Support enums that contain fields

Find a way to support enums that contain fields in the mapper.
Example:
Foo(1, true)

The JSON ObjectMapper does not support these, so there is no prior code in Jackson to fall back on.

Experimental feature added - a complex RON enum can map to/from a class with a @RONEnum annotation


HIVE-15585 LLAP failed to start on a host with only 1 cpu

LLAP failed to start on a host with only 1 cpu. The number of thread was calculated by dividing the number of cpus with 2. This resulted zero if the cpu count was 1 and caused an IllegalArgumentException upon startup. Fixed this by adding Math.max(1, cpus/2).

someone has fixed it since than


quota metrics always expose zero value

In our deployment we found that quota metrics (e.g firehose_exporter_container_metric_disk_bytes_quota) always seem to yield value zero. All other metrics seem to work fine.
In Cloud Foundry, we see reasonable data for quota usage, so could it be that something gets lost in the firehose exporter?

@thomasspatzier What version of diego-release are you using? memory and disk quotas started to be reported in Diego v0.1482.0 (see this commit).
I'm able to fetch those metrics using the latest diego release:

Hi @frodenas - thanks for the quick reply. I don't have access to the system right now, so I can't check for the exact version number. I'll check tomorrow morning and post an update.

@frodenas - So I checked our diego version and it's in fact back-level at version 0.1467.6. So looking at the commit you pointed to, we should be fine when we upgrade. I guess you can close this issue. Thanks for your help!

ok, perfect, thanks for checking this.


Added basic product review functionality

I really think that product review feature is required.
As a stepping stone to implement product review I suggest this merge request
related issue #3513

Pull Request Checklist

[ ] Privileged views and APIs are guarded by proper permission checks.
[ ] All visible strings are translated with proper context.
[ ] All data-formatting is locale-aware (dates, numbers, and so on).
[ ] Database queries are optimized and the number of queries is constant.
[X] Database migration files are up to date.
[ ] The changes are tested.
[ ] The code is documented (docstrings, project documentation).
[ ] GraphQL schema and type definitions are up to date.
[ ] Changes are mentioned in the changelog.

Thanks for opening a PR! In my opinion however it's not ready to merge yet. Before we do that, this needs a proper discussion and planning e.g.

what models and model fields do we exactly need?
should we support reviews moderation in the dashboard?
rendering reviews in the storefront

Also this whole PR should ideally provide full backend implementation which also means adding GraphQL API for that. @subhadeepdas91 Do you think you'd be able to work on that? If not, right now I'm rather against merging partial PRs.


https://github.com/samaaron/sonic-pi/commits/master

I'm completing lost as well when it comes to wallets. Which wallet is "The Wallet".. I have so many. All showing a 0 balance. Can't be right. 0x829BD824B016326A401d083B33D092293333A830

so i am
2018년 8월 24일 (금) 오후 6:04, pysmith78<EMAIL_ADDRESS>작성:

I'm completing lost as well when it comes to wallets. Which wallet is "The
Wallet".. I have so many. All showing a 0 balance. Can't be right.
0x829BD824B016326A401d083B33D092293333A830
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/Bitcoin-com/Wallet/issues/300, or mute the thread
https://github.com/notifications/unsubscribe-auth/Adc7ti6C0wDZiAqRT8L0DlREfydQZoPNks5uT8GogaJpZM4WLALZ
.


brainflow: 5.13.2 -> 5.13.3

Description of changes

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.11 Release Notes (or backporting 23.11 and 24.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

Result of nixpkgs-review pr 341221 run on x86_64-linux 1

5 packages built:

brainflow
python311Packages.brainflow
python311Packages.brainflow.dist
python312Packages.brainflow
python312Packages.brainflow.dist

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/prs-already-reviewed/2617/1947


Redirected to my-ghost-blog.com on first prod run

I was recently testing the new admin split code and I needed to test production mode.
After switching to production mode, I was redirected from http://localhost:2368/ghost -> http://my-ghost-blog.com.
This is a problem because of the following common case:

I install Ghost on my server using ghost-cli
As part of that, I tell Ghost I want my URL to be http://hannah.wf. I haven't set my DNS up yet though, I'm just getting Ghost installed and will configure my DNS later.
I try to go through the ghost setup flow

Note: if I don't add a url, I get sent to my-ghost-blog. If I do add one, e.g. if I configure http://hannah.wf locally, I get redirected to my Ghost(Pro) admin panel.
This issue is something that was changed as part of the work to simplify our url config and then revisited after we discovered this issue in https://github.com/TryGhost/Ghost/pull/7956
It seems like it is working correctly until I try to visit /ghost/. I don't have a special admin URL configured, so I think it is wrong that a redirect is happening?
Steps to Reproduce

Run grunt prod
Don't edit the production config url, but do make sure you've got valid DB credentials
Run npm start --production
Try to visit your blog

Any other info e.g. Why do you consider this to be a bug? What did you expect to happen instead?
Technical details:

Ghost Version: master + #8142 + TryGhost/Ghost-Admin#574
Node Version: 4.4.7

If we allow to navigate via localhost to the admin panel, you will get a redirect mismatch from the auth service 😐
The problem with this case is, that Ghost registers a public client on bootstrap. Ghost sends as redirect url either the configured admin url (which is not present for the default production setup) or the blog url as fallback (my-ghost-blog.com/ghost or your custom blog url you have configured via the CLI). The admin url in Ghost is optional. So even if we register the public client with the redirect url localhost:2368/ghost, you will get a mismatch if your DNS is setup and you navigate to my-ghost-blog.com/ghost. The redirect url get's only updated in the auth service if the url changes. This is only the case if you either change your blog url or you add the custom admin url. So if you set your custom blog url via the CLI directly, you won't change the config anymore.
I am not sure how to support this case. What we could do is making the use case more visible to the user, that he has to setup his DNS first?

Hmm - this seems like a deeper problem to me.
Usecase: I'm moving my blog from my other server that's running wordpress. What do I do now?

Different server: The new server has a public ip. You can use this public ip to login to the admin panel. If you later switch DNS, you update the blog url in the config and restart. Ghost will auto update the remote auth service.
Same server: Your wordpress url is "example.com" and you set "example.com:2000" for your blog url in ghost. So you are running two processes on 80 and 2000. If are finished with porting, then you can change the blog url in the config and restart. Ghost will auto update the remote auth service.

What we would like to do here is to make some actual testing on a live server to figure out problems and real use cases. And then we'll decide.


Refactor IPC channel from global functions to an object

We want to configure the IPC channel to go over stdout or a unix socket, so let's encapsulate it with an object that we pass around instead of having some global functions everyone calls.
There's still a little too much indirection in here for my liking, but it gets the object in.

Just so that everything is cleaner, can we make each IPCPayload store a reference to the MautrixIPCChannel that it came through so we don't have to keep passing around a MautrixIPCChannel to each like payload.respond and payload.fail and Runnable.run, etc?


Does it support Mathjax?

Hello
Does cebe-markdown support Mathjax?
There are some conflicts between markdown and mathjax: http://docs.mathjax.org/en/latest/tex.html#tex-and-latex-in-html-documents
Thanks.

you can write an extension for mathjax, by adding a parser method for the $ marker. It is not supported by default.


it doesnt work after new update a1111.

i tried reinstal and instal it again but it doesnt work. why???

Make sure your webui is also up to date.
If that doesn't solve it for you I'll need more info.

My WebUI is up to date, they recently changed the UI causing this extension to not work anymore. There are no error messages.

Nvm I fixed it, just needed to disable the extension, restart, and then enable it again.

Nvm I fixed it, just needed to disable the extension, restart, and then enable it again.

i re instal SD because somehow it lagging but now it work.


Fix response fakes in docs

The docs showed a wrong way of generating fake Response.

Awesome @thekonz, thanks!


[ACTION NEEDED] Fix flaky integration tests at distribution level

What is the bug?
It was observed in 2.13.0 and previous other releases that this component manually signed off on the release for failing integration tests. See https://github.com/opensearch-project/opensearch-build/issues/4433#issuecomment-2026486279
The flakiness of the test runs take a lot of time from the release team to collect go/no-go decision and significantly lower the confidence in the release bundles.
How can one reproduce the bug?
Steps to reproduce the behavior:

Run integration testing for altering and see the failures.
Issues can be reproduced using the steps declared in AUTOCUT issues for failed integration testing

What is the expected behavior?
Tests should be consistently passing.
Do you have any additional context?
Please note that this is a hard blocker for 2.14.0 release as per the discussion here

@Swiddis Can you please provide your inputs?

@rupal-bq has been working on it, we're currently working with @rishabh6788 to close this out.


Use programmatic API

https://github.com/sindresorhus/ava/issues/345

I've opened https://github.com/avajs/ava/issues/1043 to discuss the necessary API work in AVA itself.

Closing this for now. We can reopen when the AVA API is stable.


[Admin Portal] Minus values can be included to the unit time field in advanced throttling policy section

Description:
It is possible to add (-) values to the unit time field when adding a new advanced throttling policy.
Steps to reproduce:

Navigate to the admin portal
Add minus value for unit time for the request count
Save

Affected Product Version:
3.2.0
Environment details (with versions):

OS: macOS

We are closing this as this bug is no longer reproducible.


Add initial DB warning

Adds a permanent (for now) disclaimer over the DB. It is simply placed below the ActionBar so user can scroll past it.
The intent is to clarify that the DB is not designed for robust, standardized comparisons. While some configs are written for this purpose, the user should exercise discretion on how they interpret the results, and they are freely able to open them, edit, and rerun.
Future updates: dismissible? translations?
The tanuki asset is official, from mhy https://genshin-impact.fandom.com/wiki/HoYoLAB/Paimon's_Paintings (Set 12), similar to the other assets.
Various screen sizes:

Added hide/show and lined up warning with the db entries


chore(repo): Add workbench color customizations

Description
When dealing with multiple VSCode concurrent instances, and actively moving between them, it's hard to keep track of which window is which. This aims to cut down on that overhead.

Checklist

[x] npm test runs as expected.
[x] npm run build runs as expected.
[ ] (If applicable) JSDoc comments have been added or updated for any package exports
[ ] (If applicable) Documentation has been updated

Type of change

[ ] 🐛 Bug fix
[ ] 🌟 New feature
[ ] 🔨 Breaking change
[ ] 📖 Refactoring / dependency upgrade / documentation
[x] other: editor config

Packages affected

[ ] @clerk/backend
[ ] @clerk/chrome-extension
[ ] @clerk/clerk-js
[ ] @clerk/clerk-expo
[ ] @clerk/fastify
[ ] gatsby-plugin-clerk
[ ] @clerk/localizations
[ ] @clerk/nextjs
[ ] @clerk/clerk-react
[ ] @clerk/remix
[ ] @clerk/clerk-sdk-node
[ ] @clerk/shared
[ ] @clerk/themes
[ ] @clerk/types
[x] build/tooling/chore

Not using vscode myself so I'm not sure if this is something that can be configured on a per-user basis using the local settings.json file?

Not using vscode myself so I'm not sure if this is something that can be configured on a per-user basis using the local settings.json file instead of changing the default for everyone?

I think that's the right approach. This made sense until you factor in dark mode, which VSCode doesn't support targeting one or the other cleanly OOTB, and would need to be dependent on the name of the theme you're using.
Going to close.