Your frame may already do this
picframe3 does this by itself, so on a Raspberry Pi 4 or 5 you no longer need anything below. The article stays here for frames still running the older software.
If you run picframe3, there is nothing to set up. picframe3 publishes the photograph itself as a Home Assistant image entity over MQTT auto-discovery — no Generic Camera, no HTTP endpoint, no IP address typed into a form. It is the photograph and not the screen, so there is no mat and no caption on it, and it is there even while the display is off. It is retained, so a dashboard shows the right picture straight after a Home Assistant restart rather than a grey box. You can turn it off with mqtt.publish_image: false, and mqtt.image_width (1280 by default) and mqtt.image_quality decide how big it goes over the wire.
The frame also brings the metadata with it as separate sensors — title, date taken as a real timestamp entity, place with latitude and longitude a map card can read, tags, camera, folder — so most of the card below has a picframe3 equivalent that needs no YAML at all.
The rest of this article is the pi3d PictureFrame version. Everything in it depends on the pi3d web server on port 9000, which picframe3 does not have, and the entity names below (sensor.picframe_image, switch.picframe_paused, button.picframe_next, sensor.cpu_temp_rahmen and so on) are pi3d-era names that will not match a picframe3 install.
Helge did an excellent job integrating the Pi3D PictureFrame controls into Home Assistant a few years ago.
However, as Home Assistant evolves, it frequently introduces new commands and integrations, which often result in breaking changes. At the same time, many of these updates bring features that simplify tasks that were previously more complex.
At some point, the current photo stopped displaying properly in my Chrome browser. Strangely, it still worked in Safari, but I was never able to pinpoint the exact cause. Eventually, it stopped showing in Safari as well, along with every other browser I tried.
Recently, I decided it was time to refresh my Home Assistant cards and find a way to get the image display working again.

It turned out to be surprisingly easy.
Home Assistant Integration
As long as the HTTP integration is activated in your configuration.yaml, you can view the current image directly in your browser by accessing:
http://192.168.178.58:9000/current_image
Insert the IP address of your PictureFrame Raspberry Pi in the URL, of course.
If this works, displaying the image in Home Assistant is a piece of cake.
Go to Settings > Devices & Services in the Home Assistant interface.
Click the + Add Integration button in the bottom-right corner.
- Search for and select Generic Camera.

Configure the Generic Camera:
- Enter the following details:
- Still Image URL:
http://192.168.178.58:9000/current_image - Stream Source URL: (leave empty)
- RTSP transport protocol: HTTP
- Authentication: Basic
- Still Image URL:
Don’t check anything else. Click “Submit”.

Create a new Picture Entity Card in your Dashboard and select the newly added camera entity.

The current image should now appear in your dashboard.
And if you use the Nabu Casa service, you can see the current image even from outside of your home network. Pretty cool!
Note: The image updates slightly late, a few seconds. This is a function of the network speed of your picture frame.
For the design shown above, I am using the Bubble Card.
If you are interested, here is the full code
type: vertical-stack
cards:
- type: custom:bubble-card
card_type: separator
name: PictureFrame
icon: ""
columns: 2
sub_button:
- entity: sensor.image_count_rahmen
show_attribute: false
show_last_changed: false
show_state: true
show_background: false
show_icon: true
icon: mdi:ticket-confirmation-outline
- entity: sensor.image_count_deleted
icon: mdi:trash-can-outline
show_attribute: false
show_icon: true
show_state: true
show_background: false
show_name: false
tap_action:
action: none
- entity: sensor.cpu_temp_rahmen
icon: mdi:thermometer-low
show_state: true
show_background: false
tap_action:
action: none
- type: custom:bubble-card
card_type: button
entity: sensor.picframe_image
show_attribute: true
show_state: false
show_last_changed: false
force_icon: false
sub_button: []
attribute: location
show_name: false
show_icon: true
icon: mdi:map-marker-radius-outline
- type: custom:bubble-card
card_type: button
entity: sensor.picframe_image_date
show_attribute: false
show_state: true
show_last_changed: false
force_icon: false
sub_button:
- entity: button.picframe_back
show_name: false
show_state: false
show_attribute: false
name: Back
tap_action:
action: toggle
double_tap_action:
action: toggle
hold_action:
action: toggle
- entity: switch.picframe_paused
show_background: true
name: Pause
tap_action:
action: toggle
double_tap_action:
action: toggle
hold_action:
action: toggle
- entity: button.picframe_next
name: Next
tap_action:
action: toggle
double_tap_action:
action: toggle
hold_action:
action: toggle
- entity: button.picframe_delete
show_state: false
show_attribute: false
show_background: false
tap_action:
action: toggle
double_tap_action:
action: toggle
hold_action:
action: toggle
attribute: location
show_name: false
show_icon: true
icon: mdi:calendar-clock-outline
- show_state: false
show_name: false
camera_view: auto
type: picture-entity
entity: camera.192_168_178_58
image: https://demo.home-assistant.io/stub_config/bedroom.png
camera_image: camera.192_168_178_58
Make sure you install Bubble Card via HACS first.
One caveat on that card: I wrote it in December 2024 against the Bubble Card of the day, and I have not re-checked it against a current release. If a key has been renamed since, the card editor will tell you which one.
Enjoy!
Was this article helpful?
Thank you for your support and motivation.