Releases: starbrightlab/immortal
Immortal 1.43
Clock faces
- New clock-face picker (Screensaver > Clock face) with five built-in faces: the classic Immortal overlay, a real flip clock, a big centred clock, a tall Bold clock with the date, and a Minimal corner clock.
- Small / Medium / Large size options for the flip, big, and bold faces, plus a switch to turn the clock off entirely (photos only).
- The now-playing card is now independent of the face and shows on all of them.
Photo sources
- Self-hosted sources: Immich, network shares (SMB/NAS), WebDAV, and any web page (for dashboards or Immich Kiosk), on their own subpage split into Standard and Advanced.
- Set up from your phone: open a form on a phone or laptop on the same Wi-Fi (with a scannable QR code) to enter server details and keys with a real keyboard instead of typing on the Portal.
- Support for the latest iCloud shared-album links (the new photos.icloud.com/shared/album format), thanks to @MrFruitDude.
Screensaver and sleep
- A dimmed overnight night clock option (a bedside flip clock).
- Consolidated the screen-off handling so idle and overnight behave consistently and never trap the device.
Devices on 1.42 will self-update.
Immortal 1.42.1 — Windows provisioning fix
A provisioning-only hotfix. The app is unchanged from 1.42 (same APK, same versionCode) — there is nothing to update on already-provisioned Portals. This only matters if you are setting up a Portal from Windows.
Fixed
Provision-Portal.batcrashed on Windows withMissing closing '}' in statement blockatfunction Grant-Perms. Three em dashes (—) had slipped intoprovision.ps1in the 1.42 provisioning hardening. Windows PowerShell 5.1 (what the.batruns) reads the file as ANSI and mis-decodes one of them inside a string into a phantom quote, which breaks parsing. macOS/Linux (provision.sh) were never affected. The script is now pure ASCII and parses identically on Windows PowerShell 5.1 and PowerShell 7.
Won't happen again
- CI now parses
provision.ps1under real Windows PowerShell 5.1 on a Windows runner (the previous check only ran PowerShell 7, which reads UTF-8 correctly and never saw the bug), plus a guard that rejects any non-ASCII byte in the Windows-executed scripts.
Getting the fix
- Download
immortal-provisioning-1.42.1.zipbelow, or re-pull theprovisioning/folder from the repo. - Already on Windows and mid-setup? Run this once in the Provisioning folder, then re-run
Provision-Portal.bat:$p="$PWD\provision.ps1";$t=[IO.File]::ReadAllText($p,[Text.Encoding]::UTF8);[IO.File]::WriteAllText($p,($t -replace [char]0x2014,'-'),[Text.ASCIIEncoding]::new())
immortal-1.42.apk is included unchanged for convenience.
Immortal 1.42
Immortal 1.42 — a big release for Home Assistant users, plus a long-requested app switcher.
Home Assistant
- Screensaver → your dashboard. Tapping the photo-frame screensaver to wake the Portal can now open your Home Assistant app — or deep-link straight to a specific dashboard (
homeassistant://navigate/…) — instead of always returning to the launcher. Set it in Settings → Screensaver → When dismissed. - Native MQTT Discovery. Immortal can publish the Portal to Home Assistant as an auto-discovered device — presence, screen, battery, now-playing, IP, plus screen / identify / media-transport controls — with no YAML. Just point it at your MQTT broker in Settings → Immortal → Home Assistant (MQTT). Off by default; disabling cleanly removes the device from HA.
- Wake the panel from HA. A two-way screen control means Home Assistant can wake the Portal (e.g. on a doorbell or motion) and turn it off.
- Device health page. Settings → Immortal → Device health shows the status of each capability the Portal was set up with, and — when something's missing — what's degraded and how to fix it.
App switcher
- A top-bar app switcher — the Portal has never had one. A button appears on the system bar (in sync with it) and opens your recent apps with per-app notification badges, usage/recency info, a long-press menu (open / app info / close / uninstall), and a search box that doubles as an app drawer. Turn it on in Settings → Immortal → Quick buttons.
Under the hood
- Provisioning now warns (instead of silently failing) if the screen-off device admin can't be granted.
Verified on a Portal Go (Android 10) against a live Home Assistant.
🤖 Generated with Claude Code
Immortal 1.40: multi-room audio and now-playing on every Portal
This release has something for everyone, and a big unlock for power users.
Now-playing on every Portal
Everyone gets album art and a mini-player for media playing in any app. Whatever you're listening to or watching shows a compact player in the home header, with the cover art and a play/pause control, read straight from the device's own media session. The screensaver can show it too. Both are on by default and stay out of the way when nothing is playing.
Multi-room audio (power users)
We've unlocked multi-room audio that synchronizes perfectly across your Portals. Now you can unify all those devices you just bought into one in-sync speaker system, with native play, pause, skip and now-playing on every Portal in the group.
There are a few components to set up:
- Install and set up Music Assistant as a server on your home network. If you're new to Music Assistant, you can find out more here: https://music-assistant.io/
- Once you've got Music Assistant set up, download and set up Snapcast from the Immortal App Store, and point it at your Music Assistant server.
- Go to the Immortal settings page, find Multi-room audio, and set up the connection to your Music Assistant server.
Enjoy device-native control of your Music Assistant setup across your Portals.
Also in this release
- Start on boot: a new Settings page to choose which apps relaunch after a reboot, so a synced room comes back on its own after a power blip.
- Provisioning overhaul. Apps now install through the standard Android installer (the old silent-install helper is gone, so installs no longer pause until you re-run setup). Setup now asks whether to block OS updates instead of doing it silently. The status bar is hidden by default but you can show it from Settings. The fleet agent is opt-in. Forced dark mode is gone.
- Cleaner uninstall. Immortal can turn off its own device admin from Settings, and Restore is honest about what it can and can't undo from a script.
- Android 10 fixes. The Restore Amazon Alexa step no longer appears (it only works on the first-gen Portal), and no display settings are forced.
Updating
Provisioned Portals self-update automatically. To update manually, reinstall immortal.apk. To set up a new Portal, download portal-kit.zip and run the included provision script.
Generated with Claude Code
Immortal 1.39 — sharp screensaver photos on every Portal
One fix from a user bug report (#12).
Photo-frame screensaver: the built-in web photos are now sharp on every Portal. The default photo feed was requesting a fixed 1280×800 image, so on any display with a different resolution the picture was scaled to fit and looked blurry — notably the portrait Portal Mini (800×1280) and the higher-resolution Portal+ 2nd gen (2160×1440). It now requests photos at the device's actual screen resolution and orientation, so they fill the screen crisply. When an Unsplash key is configured, the feed also picks a portrait or landscape crop to match the screen instead of always asking for landscape.
Provisioned Portals will self-update to this build automatically. To update manually, reinstall immortal.apk.
🤖 Generated with Claude Code
Immortal 1.38 — sideways photo fix + overnight tap fix
Two fixes from user bug reports. Devices update automatically on their next check (Settings → Updates to check now).
Photo-frame screensaver: photos display the right way up
Photos served from a folder are now rotated to match how they were taken. Portrait shots from phone cameras were appearing sideways — and some landscapes upside-down — because phones save the raw sensor image plus a rotation tag in the file's EXIF metadata, and Immortal wasn't reading that tag. It now does, applying the correct rotation (or flip) before display. The built-in web photo feed was never affected.
Overnight sleep: tapping the screen lets you use the device
With Overnight sleep enabled, tapping the screen inside the overnight window woke it for a moment and then immediately locked again, on every tap — making the device unusable until the window ended. A deliberate tap now wakes the device and lets you use it normally; it returns to sleep a short while after you stop interacting. A stray wake with no interaction still goes back to sleep promptly.
Install / update: existing devices self-update over the air. For a fresh setup, download portal-kit.zip (the provisioning kit) and follow the README. immortal.apk is the signed app, also used by the OTA updater.
Immortal 1.37 — Alexa setup in Settings + smoother first-time link
Moves falcon's Amazon-link app into the Settings folder ("Alexa setup") instead of the home grid, and makes the provisioning kit's Alexa setup smoother: it shows the amazon.com/code linking screen immediately and connects automatically the moment you finish signing in. Includes the 1.36 changes.
Immortal 1.36 — hey picker + trigger guard
Refinements to the "hey" voice button.
- Long-press the "hey" button to pick which assistant to talk to (the chooser is shown by the Millennium voice app; Premium unlocks more than the built-in Alexa).
- Hardened the trigger: only the launcher can fire the "hey" trigger now (signature-permission guard), not other apps.
Full notes: CHANGELOG.md.
Immortal 1.35 — 'hey' voice button + tidier header
A push-to-talk voice button in the header, and a tidier top bar.
- New "hey" button in the home header — taps wake your voice assistant (push-to-talk), no wake word needed. Appears only when the companion Millennium voice app is installed.
- Clock moved to the top-left corner, with the screensaver + "hey" buttons grouped to its right.
- Provisioning kit: Shizuku now installed on every Portal; new opt-in Restore Amazon Alexa step (
./provision.sh --alexa).
Full notes: see CHANGELOG.md.
Immortal 1.34 — Calls fix + screen-off scheduling
Calls
- The Calls tile now reliably opens the Portal's calling screen instead of bouncing back into Immortal. The root cause was Immortal's own photo-frame screensaver hijacking the hand-off; it now deep-links to the stock launcher's home and holds off the frame during the transition.
Screensaver / power (all new options are OFF by default)
- Master on/off switch for the photo-frame screensaver that actually sticks — Immortal no longer forces it back on, so the screen can sleep or you can run your own screensaver.
- Turn the screen off after a set time of inactivity (a simple timer).
- Overnight sleep — keep the screen off between two times each night.
Under the hood
- Provisioning now enables a force-lock device admin so Immortal can turn the screen off (removed on
--restore).
Note on presence: matching the stock "show photos when someone's in the room, sleep when it's empty" behaviour isn't possible for a third-party app — the Portal's presence signal is gated behind Meta-only (signature|privileged) permissions, and that decision was made by Meta's SuperFrame, which Immortal replaces.