A desktop "smart photo frame" app built with Flutter. Pick a folder and the app enters presentation mode, showing photos at random for 10 seconds each.
Pre-built binaries are available on the Releases page for every version tag.
- Download
Framez-macos-x64.dmgfrom the latest release. - Open the
.dmgfile. - Drag Framez.app into the Applications folder.
- On first launch, right-click the app and select Open to bypass Gatekeeper (the app is unsigned).
- Install runtime dependencies:
sudo apt-get update sudo apt-get install ffmpeg libheif-examples libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \ gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
- Download
Framez-linux-x64.debfrom the latest release. - Install the package:
sudo dpkg -i Framez-linux-x64.deb
- Launch from the terminal or your system app menu:
To uninstall:
framez
sudo dpkg -r framez
- macOS
- Linux (Requires
ffmpegfor.movplayback andheif-convertfor HEIC support) - Web (browser-native playback; no server-side conversion)
- Images: JPEG, PNG, HEIC/HEIF (auto-converted on macOS & Linux; browser-native on web), GIF, WebP
- Videos: MP4, MOV (auto-converted on Linux; browser-native on web), WebM
-
Install Flutter and ensure desktop support is enabled.
-
From the project root:
flutter pub get flutter run -d macos # or windows, linux, chrome -
Use Choose folder to select a directory. The app scans it (and subfolders) for supported images.
-
Tap Start presentation to enter full-screen presentation mode.
-
In presentation mode, tap anywhere or press Escape to exit.
Build a self-contained nginx image that serves the Flutter web app as static content:
docker build -f web.Dockerfile -t framez-web .Run the container (served on http://localhost:8080):
docker run --rm -p 8080:80 framez-webThen open http://localhost:8080 in your browser.
Note: The initial
docker buildclones Flutter (beta channel) and compiles the app, which takes several minutes on the first run. Subsequent builds reuse the Docker layer cache where possible.
The app is automatically built and deployed to https://neuman968.github.io/flutter_framez/ on every push to main via the deploy-web.yml workflow.
One-time repo setup: go to Settings → Pages → Build and deployment → Source and select GitHub Actions.
The docker-compose-rpi.yml file in this directory runs the application as well as a Sambda server that can be configured so that a Raspberry pi, or any other linux device hooked up to a display can be turned into smart photo frame. Wayland is required when running with docker compose.
- Directory selection — Native folder picker on macOS, Windows, Linux, and web browsers (
webkitdirectory). - Recursive scan — Finds images in the chosen folder and all subfolders.
- Random order — Order is shuffled when you start a presentation.
- HEIC on Linux — HEIC/HEIF files are converted to JPEG for display on Linux.
- MOV on Linux —
.movfiles are automatically converted to.mp4for playback on Linux usingffmpeg. - Default Directory — Set a default scan directory via the
FRAMEZ_PHOTO_DIRenvironment variable. - Audio Toggle — Choose to play or mute video audio from the landing page.
- Pinch/pan — Optional zoom and pan via
InteractiveViewerwhile a photo is shown.