-
released this
2026-06-10 16:54:03 +10:00 | 2 commits to main since this releaseWhat's changed
- Background blur — reduced brightness (
0.35→0.25) and saturation (0.8→0.4) so the blurred backdrop is a dark, near-monochrome wash that doesn't compete with the main photo - Canvas pile photos — applied
saturate(0.45) sepia(0.25) brightness(0.88)filter plus a stronger warm amber overlay (rgba(140,110,60,0.35)) giving scattered photos an aged, printed-photo look
Downloads
- Background blur — reduced brightness (
-
released this
2026-05-22 19:52:12 +10:00 | 48 commits to dev since this releaseFrambe v1.4.0-dev — Server/Client Admin Dashboard
Admin Dashboard (
/admin)- Real-time client management via WebSocket
- Cards for each connected frame showing IP, status (idle/playing/sleeping), and editable name
- Source selector — dropdown with all albums and people from Immich, plus Random and Favorites
- Playback controls — Start, Stop, Next, Prev
- Power controls — Sleep (blacks out screen), Wake, Refresh (reloads page)
- Slide interval — range slider (5-120s) applied live
- Toggle switches — Clock, Date, EXIF, Progress bar — all applied instantly
- Auto-reconnecting WebSocket with connection status indicator
- Client names persist across reconnects (stored by IP in server memory)
WebSocket Architecture
- Server runs WebSocket on
/ws(same port as HTTP) - Frame clients auto-connect and register with role
frame, reporting status and config - Admin dashboard connects with role
adminand receives live client list updates - Commands:
setSource,start,stop,next,prev,sleep,wake,refresh,setConfig - Clients report status changes back to server, which broadcasts to all admin sessions
Client Changes
- WebSocket client connects on init, auto-reconnects every 5s
- Handles all remote commands from admin
- Sleep mode: full black overlay at z-index 9999
- Config changes (clock, exif, timing) applied live without restart
- Status reported back to server on every state change
Dependencies
- Added
ws^8.18.0 for WebSocket server
Downloads
-
released this
2026-05-22 14:25:04 +10:00 | 39 commits to main since this releaseFrambe v1.3.0 — Vintage Polaroid Pile Theme
Major visual overhaul inspired by Apple Photos' vintage photo theme.
Vintage Polaroid Pile
- Cumulative canvas background builds a scattered desk of photos as the slideshow runs
- Each transition drops the previous photo as a small polaroid at a random position with shadow and rotation
- Pile photos fade in over 1.2s with warm sepia overlay
- Near-pure sepia background (
sepia(1.0),saturate(0.1)) with warm vignette
Main Frame
- Nearly full-screen: 93vw × 85vh, slight overhang allowed
- 1.5° constant rotation for a casual dropped feel
- Slow single-direction drift (90s linear, no rocking)
- Flexbox centering — reliable on all screen resolutions
- Portrait photos get portrait frames (no forced landscape)
- Polaroid proportions match the pile (3% sides, 10% bottom,
#ede8dfpaper)
Video Support
- Videos play inside polaroid frames, auto-advance on end
INCLUDE_VIDEOSenv var (default: true)/api/assets/:id/videostreaming endpoint- 2min timeout fallback for long videos
Person Support
?person=PERSON_UUIDURL param for zero-touch launch/api/peopleand/api/people/:idendpoints
Other
- Periodic album refresh (
REFRESH_INTERVAL, default 300s) - Request logging on all API calls
- No-cache on HTML/JS/CSS to prevent stale browser cache
Downloads
-
released this
2026-05-22 09:19:10 +10:00 | 53 commits to dev since this releaseFrambe v1.3.0 — Vintage Polaroid Pile Theme
Major visual overhaul inspired by Apple Photos' vintage photo theme.
Visual
- Polaroid pile canvas — each photo transition drops the previous image as a small polaroid onto a cumulative canvas background, building a scattered desk of photos over time
- Sepia-washed background — near-full sepia filter (
sepia(1.0),saturate(0.1),brightness(0.15)) with warm vignette - Pile photos fade in over 1.2s with
requestAnimationFramealpha ramp - Warm sepia overlay on pile images (
rgba(150, 120, 70, 0.2)) - Matched polaroid proportions — main frame and pile use identical border ratios (3% sides/top, 10% bottom) and paper color (
#ede8df)
Main Frame
- Nearly full screen —
93vw × 85vhmax (overhang OK),96vw × 88vhon mobile - Flexbox centering — replaced
transform: translate(-50%, -50%)with a flex wrapper, fixing centering on lower resolution screens - 1.5° constant rotation for that casual dropped-on-table feel
- Slow single-direction drift — 90s linear animation, no rocking
- Portrait-correct frame — removed
min-width/min-heightconstraints so the polaroid border hugs the image naturally
Video Support
- Videos play in the same polaroid frame as photos (filmstrip removed)
- Auto-play on display, advance on end or 2min timeout
INCLUDE_VIDEOSenv var (default: true)/api/assets/:id/videostreaming endpoint
Other
- Person/face API endpoints and URL param (
?person=UUID) - Periodic album refresh (
REFRESH_INTERVAL, default 300s) - Server version
1.3.0in config and startup log
Downloads
-
released this
2026-05-19 16:56:12 +10:00 | 53 commits to main since this releaseFrambe v1.2.2
Logging & Debugging
- Startup log is now clean and meaningful — no emojis, shows version, partial API key, all intervals
- Every
/api/*request is logged with method and URL, so you can see exactly what the browser is requesting - Album/person/favorites/random fetches log the result count (e.g.
Album "Holiday" returned 47 images) - Errors log with
[Frambe] ERROR:prefix for easy filtering
Browser Cache Fix
- HTML, JS, and CSS files now served with
no-cache, no-store, must-revalidateheaders - This was almost certainly the cause of the
?album=param not working — the browser was serving a cached copy of the old app.js that didn't have URL param support - Image thumbnails still cached normally (24h) for performance
Version Tracking
- Server reports version in startup log and in
/api/configresponse - Frontend logs version to browser console on init
- Makes it easy to confirm the right code is actually running after a rebuild
Example log output
[Frambe] --- Frambe v1.2.2 --- [Frambe] Server listening on port 3000 [Frambe] Immich URL: http://10.0.0.40:2283 [Frambe] API key: configured (abc12345...) [Frambe] Slideshow: 30s interval, 2s transition, refresh every 300s [Frambe] Waiting for requests... [Frambe] API GET /api/config [Frambe] API GET /api/server-info [Frambe] Immich connection OK, version 1.120.1 [Frambe] API GET /api/albums/581b3896-1a21-4668-bebc-cfaca1c8edba [Frambe] Album "My Album" returned 23 imagesDownloads
-
released this
2026-05-19 16:37:21 +10:00 | 56 commits to main since this releaseFrambe v1.2.1 — Bugfixes
Fixes
- Port mapping: Container now runs internally on port 3000 as expected. Docker Compose maps
3030:3000(external:internal). Previously the internal port was incorrectly set to 3030. - URL param auto-launch: Fixed
?album=UUID(and?person=,?favorites,?random) not starting the slideshow. The slideshow start is now properlyawaited during init, preventing silent failures. Also uses'in' operatorfor flag-style params (?favoriteswith no value). - Added
autoLaunch()helper for cleaner zero-touch startup flow - Added console logging during auto-launch and asset loading for easier debugging
- Better error handling in
loadAssets()— checks HTTP status before parsing JSON
Downloads
- Port mapping: Container now runs internally on port 3000 as expected. Docker Compose maps
-
released this
2026-05-19 16:02:06 +10:00 | 65 commits to main since this release🖼️ Frambe v1.2.0
New Features
🔗 URL-based zero-touch launch
Skip the setup screen entirely by passing query parameters in the URL:?album=ALBUM_UUID— show a specific album?person=PERSON_UUID— show photos of a specific person?favorites— show favorites only?random— show random photos
Perfect for bookmarking different frame URLs on different tablets around the house.
👤 Person/face support
New API endpoints for Immich's people/face recognition:- Browse and display photos by person
- Works via URL params (
?person=UUID) for zero-touch setup
🔄 Periodic album refresh
The slideshow now checks for new photos added to the source (album/person/favorites) every 5 minutes by default. New photos are seamlessly merged into the current rotation without restarting. Configurable viaREFRESH_INTERVALenv var.🎨 App icon
- Frambe logo displayed on setup screen
- Favicon and Apple touch icon for home screen bookmarks
- Place
FrambeIcon.pngaspublic/img/icon.pngin the container
Changes
- Default port changed from
3000to3030 - When launched via URL params, the ✕ button reloads to the setup screen (strips params) instead of going back
Config
New environment variable:
REFRESH_INTERVAL— seconds between source refresh checks (default:300)
Downloads
-
v1.1.0 — Rebrand to Frambe Stable
released this
2026-05-19 14:54:48 +10:00 | 72 commits to main since this release🖼️ Frambe v1.1.0
Rebrand
- Renamed project from "ImmichFrame" to Frambe across all files
- Updated: package.json, server.js, index.html, app.js, Dockerfile, docker-compose.yml, .env.example, README.md
- Docker service/container name changed from
immich-frametoframbe
No functional changes — all features from v1.0.0 remain identical.
Downloads
-
v1.0.0 — Initial Release Stable
released this
2026-05-19 14:31:17 +10:00 | 80 commits to main since this release🖼️ ImmichFrame v1.0.0
Initial release of ImmichFrame — a lightweight Docker web app for displaying Immich photos as a digital photo frame.
Features
- 📡 Immich API integration via secure server-side proxy
- 📁 Album browser with thumbnail previews
- 🎲 Random photos and ⭐ Favorites modes
- 🔄 Smooth crossfade transitions (configurable duration)
- 🌫️ Background blur behind non-covering images
- 🕐 Clock and date overlay
- 📸 EXIF info display (location, date, camera)
- 📊 Progress bar showing time until next photo
- 👆 Touch controls (left/right tap to navigate, centre to toggle overlay)
- ⌨️ Keyboard controls (arrows, space, F, I, Esc)
- 🔒 Screen wake lock for supported devices
- ⚡ Auto-start mode via ALBUM_ID or SHOW_FAVORITES_ONLY
- 📱 Responsive design for any screen size
- 🐳 Single Docker container, ~50MB image
- 🖥️ Designed for older tablets and browsers (vanilla JS, no frameworks)
Downloads