🌐 English · 88 other languages
Afrikaans · العربية · Azərbaycanca · Беларуская · Български · Bislama · বাংলা · Brezhoneg · Bosanski · Català · Čeština · Чӑвашла · Dansk · Deutsch · Deutsch (Schweiz) · Ελληνικά · English (UK) · Esperanto · Español · Eesti · Euskara · فارسی · Suomi · Filipino · Français · Gaeilge · Galego · Alemannisch · ગુજરાતી · עברית · हिन्दी · Hrvatski · Magyar · Հայերեն · Bahasa Indonesia · Íslenska · Italiano · 日本語 · ქართული · Taqbaylit · Қазақша · ខ្មែរ · Kurmancî · ಕನ್ನಡ · 한국어 · ภาษาเขมรถิ่นไทย · Lëtzebuergesch · Lombard · Lietuvių · Latviešu · Bahasa Melayu Kelantan · Te reo Māori · Македонски · മലയാളം · Монгол · मराठी · Bahasa Melayu · Norsk bokmål · नेपाली · Nederlands · Norsk nynorsk · ਪੰਜਾਬੀ · Polski · Português · Português (Brasil) · Română · Русский · සිංහල · Slovenčina · Slovenščina · Shqip · Српски · Srpski · Svenska · Kiswahili · Schwäbisch · தமிழ் · తెలుగు · ไทย · Tagalog · Türkçe · Українська · اردو · Oʻzbekcha · Tiếng Việt · 粵語 · 简体中文 · 繁體中文Translations: this English README is the reference, and the translated versions, in the readme_i18n folder, are regenerated from it at each release.
Your media. Any screen. Every perspective.
Flat, 360° and 3D photos and videos from your device, your NAS, your Immich server, your cameras and your drone. No account needed. Immuch360 is a free and open source app that reads your photos and videos where they are and plays each one in the viewer that fits it: flat, as a sphere you look around in, in 3D, or all around you in a headset. It runs on phones, tablets, TVs, Meta Quest headsets and computers.
New in builds 33 to 42. Films pick up where you stopped. They start sooner, and from a slow server they play on instead of stopping. The timeline zooms out to months and years on phones and computers. On an Android phone or a Meta Quest, "Browse a folder" opens a folder of the device like a share, and TIFF photos show. Android TV searches by date with the remote, a Meta Quest 3 or 3S opens Gaussian splats (experimental), turned with the right thumbstick and SPZ version 4 included, and a computer makes the 3D versions of the photos of your NAS. On a Windows laptop with two graphics chips, the app now runs on the fast one, so 8K films play smoothly. Gaussian splats now open on computers and Android phones and tablets, a Windows computer makes splat scenes from your photos or a video by AI, your Immich server keeps them inside photos that open from your timeline, and computers play AV2 videos, all experimental. From build 42, the raw videos of Insta360, GoPro MAX and DJI Osmo 360 cameras, from your Immich library, a share or a folder, play stabilised with the camera's gyroscope on Android phones, tablets and TVs, the splat maker of desktop build 22 offers a Detailed quality for scenes you look at closely, and a 360° panorama starts with 3.5 GiB of the graphics card free, all experimental. The iPhone and iPad app is on the App Store, version 3.3.2.
Unofficial fork of the Immich mobile app. Not affiliated with Immich or FUTO. The name reads as "I am much 360".
Contents
- Who it is for
- Which screens, what they do together and what each screen does
- What you can do
- Get it on your device
- How to
- Watch your photos and videos, with or without a server
- Explore panoramas, 360°, VR180 and 3D
- Turn one photo into 3D, a scene, a panorama
- Watch on the TV with the remote: Android TV and Google TV, LG, Samsung
- Sign in a TV, a headset or a computer with your phone
- Step inside your photos and videos with a Meta Quest: kiosk mode
- Explore Gaussian splats in a Meta Quest 3 or 3S
- Explore Gaussian splats on your phone, tablet or computer
- Make a splat scene from your photos or a video (AI)
- Keep a splat scene on your Immich server
- Play the files of a NAS, a computer, a media server or Plex
- Browse a folder of your phone or headset
- Pick up a film where you stopped
- When a video waits or will not play
- Keep your Immich library, with more
- Find a month or a year in a long timeline
- Watch your home cameras on the big screen
- Your DJI drone (experimental): live video, in a Quest or on Android TV, import
- Open the raw files of 360° cameras
- Stabilise your 360° videos with the camera's gyroscope (experimental)
- Turn a photo with one key
- Use your computer as the media player
- Play AV2 videos on your computer
- Compared with Immich
- Privacy
- Licences and credits
- Roadmap
- Documentation
- You shoot 360° or 3D and want to look around in your shots, not see them flat, doubled or stretched: 360°, VR180 and 3D.
- You film with a 360° camera in your hand, on a bike or on a helmet and want the raw videos of your Insta360, GoPro MAX or DJI Osmo 360 camera, kept in Immich, on a share or in a folder, to play level and steady on your phone and your TV (experimental): stabilised with the camera's gyroscope.
- Your photos and films sit on a NAS, a computer, Plex or Immich and you want them on the TV without copying anything: on the TV, NAS, shares and Plex.
- You have a Meta Quest and want to step inside your own photos and videos: in the headset.
- Your photos are flat and you want them in 3D, as a scene to lean into in a headset, or inside a 360° panorama, without a 3D camera: turn one photo into 3D, a scene, a panorama, new, made by AI on your own computer.
- You run Immich and want its app, plus the immersive viewers and the big screens you sign in from your phone: your Immich library, compared with Immich.
- You watch your home with Tapo cameras and want them next to your photos, on the TV too (checked against a simulated camera): home cameras.
- You fly a DJI drone and want its live picture on your phone without DJI Fly, and in a Meta Quest or on an Android TV for the people with you (experimental): your drone.
- You capture places and objects in 3D, as Gaussian splats, or would like to make them from your own photos, and want to walk through them on your phone, your computer or in a headset (experimental): on a phone, tablet or computer, made from your photos, kept in Immich.
- You have AV2 videos, the format that follows AV1, and want to watch them on your computer (experimental): AV2 on your computer.
- You have several screens at home and want them to work together: what your screens do together.
There is no Immuch360 account to create, and nothing goes to us: the app talks only to your devices and to the servers you choose, and downloads an AI component or the AV2 decoder only when you ask for it.
| Platform | Where to get it | Status on 6 November 2026 |
|---|---|---|
| Google Play · APK | on Google Play (build 40; build 41 in Google's review since 5 November), build 42 on GitHub, where raw 360° videos play stabilised (experimental), films pick up where you stopped, "Browse a folder" opens a folder of the phone and Gaussian splats open, from a share or from your Immich timeline (experimental) | |
| App Store | version 3.3.2 on the App Store since 6 November, with months and years in the timeline, films that pick up where you stopped, the sign in of a TV, a headset or a computer from the phone, and the splat scenes kept in Immich shown as their photo; or build it yourself | |
| APK · Google Play | build 42 on GitHub: raw 360° videos stabilised (experimental), search by date with the remote, sign in with your phone by scanning a QR code, a time bar, audio and subtitles for the remote in the video player, and a drone's live video relayed by a phone (experimental); the TV listing is under Google's review | |
| LG TVs with webOS 5.0 and later | .ipk, version 1.0.1 · LG Content Store (in review) | version 1.0.0, submitted to the LG Content Store on 24 October, under LG's tests since 26 October; version 1.0.1, on GitHub since 27 October, zooms a photo from the arrows and says when a photo is still loading; until LG publishes the app, it installs in Developer Mode. Version 1.0.0 ran on webOS 25 TVs of LG's Cloud Test Lab |
| Samsung TVs with Tizen 5.5 and later | .wgt test build | test build 0.2.0 of the same TV app, to sign with your own Samsung certificate and install in Developer mode; 0.1.0 ran on a tester's Samsung TV, and 0.2.0 holds the fixes from that run; not on Samsung's store |
| Horizon Store · APK | on the Horizon Store (build 40, live since 3 November; build 41 in Meta's review since 5 November), build 42 on GitHub, with a kiosk mode and, on Quest 3 and 3S, Gaussian splats and the AI relief of a flat photo, all experimental | |
| Installer or ZIP | desktop build 22, a signed preview: photos, flat and 360° videos, shares, Plex, cameras (checked against a simulated camera), sign in with your phone, photos turned with one key, the interface in 89 languages, and 3D photos, 3D scenes and 360° panoramas made from your photos by AI (experimental), those of your NAS included; Gaussian splats opened, made from your photos or a video and kept in Immich, AV2 videos, and from desktop build 22 a Quality choice for the splat scenes and 360° panoramas from 3.5 GiB of free graphics memory, all experimental | |
| .deb, .rpm, DMG | desktop build 22, previews: photos, 360° photos and flat videos (360° videos play flat), an Immich server and network shares, and 3D photos and 3D scenes made by AI from your photos, with 360° panoramas on Linux on a graphics card of 8 GB, from 3.5 GiB of it free, and Gaussian splats and AV2 videos (experimental, not tried on a Mac yet); desktop build 11 tried on 26 October in an Ubuntu 24.04 container and on a Mac; unsigned on macOS |
The statuses are updated at each release; the details, build by build, are in Release status.
Install Immuch360 on each screen you watch on: each one reads your sources itself, and some hand a picture, a file or a sign in to another. In each picture, the Immuch360 icon marks the devices that run the app.
You need: a NAS with an SMB or WebDAV share, and Immuch360 on each screen you watch on.
Add the share on each screen, and each one plays the photos and videos where they sit, nothing copied: phones, tablets, Android TV, a Meta Quest, Windows, Linux and macOS computers, and LG TVs signed in to your Immich server (SMB from webOS 22). A 360° photo turns as a sphere on the phone and the TV, and surrounds you in the headset. How to: Play the files of a NAS, a computer, a media server or Plex.
You need: an Immich server, Immuch360 on your Android phone, and Immuch360 on the screens you sign in: Android TV, a Meta Quest, a Windows, Linux or macOS computer.
On the phone, Immuch360 keeps the whole Immich mobile app, adds its 360°, VR180 and 3D viewers, and installs next to the official app. Signed in to your server, it signs the big screens in: it scans the QR code of the TV or the computer, or you type on it the code the headset shows, and your password stays on the phone. How to: Sign in a TV, a headset or a computer with your phone.
You need: Immuch360 on a Windows, Linux or macOS computer and in a Meta Quest, with your NAS between them, or your Immich server with "Also back up AI versions" on.
The computer itself turns your photos into 3D photos and 3D scenes, and into 360° panoramas with a graphics card of 8 GB on Windows or Linux, and saves them next to the originals. The headset shows a 3D photo in true 3D, puts a scene in your room and a panorama all around you; phones and TVs open the panoramas in their 360° viewer. How to: Turn one photo into 3D, a scene, a panorama.
You need: a DJI drone and its DJI RC-N3 remote, Immuch360 on the Android phone plugged into the remote, and Immuch360 in a Meta Quest or on an Android TV.
The phone shows the drone's live video and relays it, over your Wi-Fi or its own hotspot, so the people with you watch the flight in the headset or on the TV. Receive only: no command is ever sent to the remote or the drone, and the remote keeps full control. How to: Watch it in a Meta Quest or on an Android TV.
You need: an Insta360, GoPro MAX or DJI Osmo 360 camera, your NAS, and Immuch360 on the screens: phones, tablets, Android TV, a Meta Quest, Windows.
Copy the .insp, .insv, .360 or .osv files from the camera's card to an SMB or WebDAV share of your NAS, as they are; an Immich server takes the Insta360 ones too. Each screen stitches them as they play, with the calibration written in each file, and nothing is exported in the camera's app first. How to: Open the raw files of 360° cameras.
You need: a Plex Media Server or a DLNA server such as Jellyfin, Emby or minidlna, and Immuch360 on each screen: Android TV, a Meta Quest, phones, tablets, Windows.
Plex gives the original files of your libraries, so a 360° video stays 360°, all around you in the headset, at home and through your port forwarding away from home; DLNA servers are found on your home network. LG TVs signed in to your Immich server play them too. How to: Play the files of a NAS, a computer, a media server or Plex.
You need: Immuch360 on an Android phone, an iPhone or a Windows computer, and in a Meta Quest, on the same home Wi-Fi.
Turn on "Share this phone on the network" on the phone, or "Share this computer on the network" on the computer, and the headset plays its photos and videos, the 360° ones all around you: no server, no NAS, no upload. On an iPhone, the share runs while the app is on screen. How to: Share this phone on the network.
You need: Tapo cameras on your home network, and Immuch360 on an Android phone, an Android TV, a Meta Quest or a Windows computer.
Each screen shows a camera live and plays the recordings of its memory card day by day, next to your photos, and the phone sends a clip to your Immich server. The app talks to the cameras on your network only, never through TP-Link's servers. Checked against a simulated camera. How to: Watch your home cameras on the big screen.
You need: a splat made with Polycam, Scaniverse, Luma or another tool, as a .spz or binary .ply file on your NAS or in the headset, and Immuch360 in a Meta Quest 3 or 3S.
The headset sets the place or the object at its size, in front of you or all around you: walk around it, glide through it with the left thumbstick, turn with the right one. Gaussian splats use an experimental API of the Meta Spatial SDK, which Meta neither supports nor warrants: any defect is Immuch360's own. How to: Explore Gaussian splats in a Meta Quest 3 or 3S.
You need: a Meta Quest with Immuch360, and a 360° photo or video in the headset, on your NAS or on your Immich server.
In kiosk mode, the headset opens your 360° photo or video by itself, from the start, each time a visitor puts it on, and a film ends on a card with your text. Visitors press nothing; you hold B or Y for one second to leave. How to: Kiosk mode, for an exhibition or a shop.
One code base for the phones, tablets, Android TV, the Meta Quest and the computers, and a separate TV app for LG TVs, also packaged for Samsung TVs as a test build. What each one has today:
| Capability | Android | iPhone, iPad | Android TV | LG webOS | Samsung Tizen | Quest |
|---|---|---|---|---|---|---|
| Gallery, albums, search with an Immich server | ✅ | ✅ | ✅ viewer | ✅ viewer | ✅ viewer | ✅ |
| Timeline by months and years | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Sign in with your phone (QR code) | ✅ scans the code | ✅ scans the code | ✅ | ✅ in the phone's browser | ❌ typed on the TV | ✅ code typed on the phone |
| Without a server: the device's own media | ✅ | ✅ | shares only | ❌ | ❌ | ✅ |
| A folder of the device, opened like a share | ✅ a folder you pick | ❌ | ❌ | ❌ | ❌ | ✅ |
| Flat photos and videos | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| TIFF photos | ✅ | ✅ system decoder | ✅ | ✅ from the server | ✅ from the server | ✅ immersive too |
| Rotate a photo with one key | ✅ | ✅ | ✅ colour keys | ✅ colour keys | ✅ | ✅ window |
| 360° photos as a sphere | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ immersive |
| 360° videos | ✅ | ✅ no time bar | ✅ message if not decodable | flat only | flat only | ✅ immersive |
| Films pick up where you stopped | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ immersive too |
| Video source: the file this device decodes | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
| A slow server: how long a video waits, and why | ✅ | its own waiting rule | ✅ | ❌ | ❌ | ✅ |
| AV2 videos (experimental) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 3D and VR180 | ✅ one eye | ✅ one eye | ✅ one eye | photos one eye, videos flat | photos one eye, videos flat | ✅ true 3D |
| Flat 3D by file name, sharper screens you move (experimental) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| Kiosk mode for visitors (experimental) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| Spatial 2.5D (head tracking) | ✅ experimental | ✅ experimental | ❌ | ❌ | ❌ | ❌ |
| Apple spatial photos | ✅ one eye | ✅ one eye | ✅ one eye | ❌ | ❌ | ✅ 3D |
| Gaussian splats, .spz and .ply (experimental) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ Quest 3 and 3S |
| Splat scenes kept as photos in Immich (experimental) | ✅ | the photo | the photo | the photo | the photo | ✅ Quest 3 and 3S, not tried in a headset yet |
| 3D photo from a 2D photo (AI) | ✅ reads it, side by side | ✅ reads it, side by side | ✅ reads it, side by side | ✅ reads it, side by side | ✅ reads it, side by side | ✅ AI relief in the headset (Quest 3 and 3S), shown in 3D |
| 3D scene from a 2D photo (AI) | ✅ reads it, as its photo | ✅ reads it, as its photo | ✅ reads it, as its photo | ✅ reads it, as its photo | ✅ reads it, as its photo | ✅ explored in 3D |
| 360° panorama from a 2D photo (AI) | ✅ reads it, with its AI label | ✅ reads it as a 360° photo, label 🔜 | ✅ reads it, with its AI label | ✅ reads it as a 360° photo, label 🔜 | ✅ reads it as a 360° photo, label 🔜 | ✅ reads it all around you, with its AI label |
| 3D versions next to the photos of a share (AI) | ✅ reads them | ✅ reads them | ✅ reads them | ✅ reads them | ❌ | ✅ reads them |
| Splat scene from photos or a video (AI) | ✅ reads it | ❌ | ❌ | ❌ | ❌ | ✅ reads it, Quest 3 and 3S, not tried in a headset yet |
| Raw Insta360, GoPro and DJI files | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ |
| Raw 360° videos stabilised with the camera's gyroscope (experimental) | ✅ Insta360, GoPro MAX, DJI Osmo 360, from your library, shares and folders | 🔜 | ✅ Insta360, GoPro MAX, DJI Osmo 360, from your library and shares | ❌ | ❌ | 🔜 |
| SMB, WebDAV, DLNA shares | ✅ | ✅ | ✅ | ✅ SMB from webOS 22 | ❌ | ✅ |
| Plex Media Server | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
| Tapo cameras: recordings | ✅ | ✅ | ✅ | 🔜 not before December 2026 | ❌ | ✅ |
| Tapo cameras: live view | ✅ | ✅ not tried on an iPhone yet | ✅ | ✅ video only | ❌ | ✅ |
| Share this device on the network | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Upload to Immich from shares and the device | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| Import from a DJI drone or a card over USB (experimental) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| The DJI drone's live video (experimental) | ✅ with an RC-N3 | ❌ | ✅ relayed by a phone | ❌ | ❌ | ✅ relayed by a phone |
| Dark theme | as the system | as the system | ✅ by default | ✅ only theme | ✅ only theme | as the system |
| Input | touch, gyroscope | touch, gyroscope | remote; Left and Right also during a video and on its time bar, Menu for the details | remote, Magic Remote | remote | controllers, hands |
| Where to get it | Google Play, APK | App Store | APK, Google Play (in review) | .ipk, LG Content Store (in review) | .wgt test build, signed by you | Horizon Store, APK |
| Capability | Windows | Linux | macOS |
|---|---|---|---|
| Gallery, albums, search with an Immich server | ✅ | ✅ | ✅ |
| Timeline by months and years | ✅ Ctrl and the wheel | ✅ Ctrl and the wheel | ✅ Command and the wheel |
| Sign in with your phone (QR code) | ✅ | ✅ (its web page tried) | ✅ (which way not recorded) |
| Without a server: the device's own media | ✅ folders | ✅ folders | ✅ folders |
| A folder of the device, opened like a share | ✅ folders | ✅ folders | ✅ folders |
| Flat photos and videos | ✅ | ✅ | ✅ |
| TIFF photos | ✅ system decoder | ❌ a placeholder tile | ✅ system decoder |
| Rotate a photo with one key | ✅ | ✅ | ✅ |
| 360° photos as a sphere | ✅ | ✅ | ✅ |
| 360° videos | ✅ | flat only | flat only |
| Films pick up where you stopped | ✅ | ✅ | ✅ |
| Video source: the file this device decodes | ✅ | ✅ | ✅ |
| A slow server: how long a video waits, and why | ✅ | ✅ | ✅ |
| AV2 videos (experimental) | ✅ | ✅ | ✅ checked by the CI |
| 3D and VR180 | ✅ one eye | photos one eye, videos flat | photos one eye, videos flat |
| Flat 3D by file name, sharper screens you move (experimental) | ❌ | ❌ | ❌ |
| Kiosk mode for visitors (experimental) | ❌ | ❌ | ❌ |
| Spatial 2.5D (head tracking) | 🔜 in development | ❌ | ❌ |
| Apple spatial photos | ✅ one eye | ✅ one eye, from a server | ✅ one eye |
| Gaussian splats, .spz and .ply (experimental) | ✅ | ✅ | ✅ built by the CI |
| Splat scenes kept as photos in Immich (experimental) | ✅ | ✅ | ✅ built by the CI |
| 3D photo from a 2D photo (AI) | ✅ | ✅ | ✅ built by the CI |
| 3D scene from a 2D photo (AI) | ✅ | ✅ | ✅ built by the CI |
| 360° panorama from a 2D photo (AI) | ✅ graphics card of 8 GB | ✅ graphics card of 8 GB, run at a small size on Intel graphics | 🔜 on the roadmap |
| 3D versions next to the photos of a share (AI) | ✅ | ✅ | ✅ 3D photos and scenes |
| Splat scene from photos or a video (AI) | ✅ graphics card of 4 GB | ✅ reads it | ✅ reads it, built by the CI |
| Raw Insta360, GoPro and DJI files | ✅ | ✅ photos, videos flat | ✅ photos, videos flat |
| Raw 360° videos stabilised with the camera's gyroscope (experimental) | 🔜 | ❌ | ❌ |
| SMB, WebDAV, DLNA shares | ✅ | ✅ | ✅ |
| Plex Media Server | ✅ | 🔧 CI | 🔧 CI |
| Tapo cameras: recordings | ✅ | 🔧 CI | 🔧 CI |
| Tapo cameras: live view | ✅ | 🔧 CI | 🔧 CI |
| Share this device on the network | ✅ | ❌ | ❌ |
| Upload to Immich from shares and the device | ✅ | ✅ | ✅ |
| Import from a DJI drone or a card over USB (experimental) | ❌ | ❌ | ❌ |
| The DJI drone's live video (experimental) | ❌ | ❌ | ❌ |
| Dark theme | as the system | as the system | as the system |
| Input | mouse, keyboard | mouse, keyboard | mouse, keyboard, trackpad |
| Where to get it | installer or ZIP (signed preview) | .deb, .rpm (preview) | DMG or ZIP (unsigned preview) |
Linux and macOS: desktop build 11, tried on 26 October 2026 on Ubuntu 24.04, in a container with a test Immich server and test shares, and by the author on a Mac. The AI rows, with test builds of the code of desktop build 13, from 27 to 29 October 2026: 3D photos made by the Linux app in a container on a Linux PC, scenes by the Windows app on a laptop with an RTX 4060 and by the engine on that Linux PC, 360° panoramas on that laptop. The rows of builds 33 to 39: the month and year views on a Windows PC with desktop build 14, the 3D versions written to a Samba and a WebDAV share on the project's build host, "Browse a folder" on an Android 16 emulator, the start of streamed videos on an Android emulator behind slowed links, the kiosk and the sharper flat screens in a Quest 3 with build 35, the splat files of build 39 in the splat module of a Quest 3 on 31 October, and the films and the video source by the tests of the project's CI and build host. The rows of build 41 and desktop build 21: the splats on a Galaxy S24+, in the Windows app on a laptop with an RTX 4060 and on Linux in the CI's containers, the splat scenes made by that laptop, the splat photos against test Immich servers 3.3.0 and 3.2.4, and AV2 on that laptop, in Ubuntu 22.04 and 24.04 containers and, without a screen, on the CI's Mac. The rows of build 42 and desktop build 22: the stabilisation by the tests of the project's CI and build host on the motion tracks of sample files of Insta360 X3, X4 and X5, GoPro MAX and DJI Osmo 360 cameras, the Quality choice by its tests and a measure of its training on the laptop with an RTX 4060, and the iPhone and iPad column from version 3.3.2 of the App Store.
✅ in the app on that platform · ❌ not offered there · 🔜 planned · 🔧 CI in the sources, built and started by the project's CI on that system · flat only: the video plays flat, with a message, because the 360° video renderer of the computers is Windows only; on LG TVs, whether webOS hands video frames to the sphere is still to be measured; on a tester's Samsung TV, the browser gave black video frames to the 3D view. "One eye" means a 3D file shows its left eye on a flat screen. The LG and Samsung columns are one separate TV app: LG version 1.0.0, whose shares and Plex were checked against real servers and its cameras against a simulated camera on the project's build host, and Samsung test build 0.2.0. What was checked where, and what remains to confirm, is in Features, Platform support and Compatibility.
In the AI rows, "reads it" means that the device opens what a computer made, and makes nothing itself: a 3D photo shows its two eyes side by side, a scene shows as its photo with a small 3D SCENE mark, a panorama opens in the 360° viewer. Its AI label is the "360° AI" badge, the sentence "Generated by AI beyond the photo's edges" and the outline of the original photo, which the roadmap brings to the iPhone, iPad, LG and Samsung apps. Only the computers and the Quest make anything. What was checked for these rows is in the how to.
- Android phones and tablets: the complete app, touch and gyroscope, every source; from build 32 they open the 360° panoramas made on a computer with their AI label; from build 38 they browse the folders of the device, show TIFF photos and pick up a film where you stopped, and from build 39 a streamed video starts as soon as the link allows and says why it waits. From build 41 they open Gaussian splats, and the splat scenes kept in Immich (experimental). From build 42, the 360° player stabilises the raw videos of Insta360, GoPro MAX and DJI Osmo 360 cameras with the camera's gyroscope, from your Immich library, a share or a folder of the device (experimental).
- iPhone and iPad: the complete app; the 360° video player has play and pause only, and the DLNA search sends unicast requests until Apple grants the multicast entitlement. Version 3.3.2, on the App Store since 6 November 2026, brings the phone side of the sign in with your phone, the months and years of the timeline, the films that pick up where you stopped, the video source and the Tapo live view, not tried on an iPhone yet.
- Android TV and Google TV: the same APK, driven by the remote, dark by default; a viewer: backup, uploads and the editor are hidden and the details are read only, but a photo still turns with one key. Every search filter works with the remote: Location and Camera open their choices in a list, the date filter shows all its choices, and the Tags, Location, Date, Media Type, Star Rating and Display options sheets put Clear and Apply beside the choices, one Right away, on most of the screen height. The photo grid uses less image memory, and a held arrow moves it at most about 10 rows a second. From build 28 it signs in from a phone, by its QR code or its short code (tried between two emulators, the code typed). From build 29 the time bar of a video takes the focus of the remote, films get audio and subtitle menus, and the next file of a share opens with controls of its own. Checked on the Google TV emulator; build 28 ran on a real Android TV on 23 October, and the video problems found there are the fixes of build 29, checked on the emulator. From build 30, its Drone card shows the live video of a DJI drone that a phone relays, with the drone's values and obstacle ring (experimental): the pairing and the picture were tried on a TCL Android TV on 25 October, with stutter and a green cast on the earlier relay; on 26 October, with build 30, the steady stream that answers them kept that TV's picture coming in flight, with 7 freezes. From build 33, Search and its date range work with the remote, a photo shows its date at the bottom left and quick presses on the time bar seek faster; from build 38, films pick up where you stopped and TIFF photos show. From build 42, the 360° player stabilises the raw videos of Insta360, GoPro MAX and DJI Osmo 360 cameras with the camera's gyroscope, from your Immich library or a share (experimental).
- LG TVs with webOS 5.0 and later: a separate app for the remote and the Magic Remote, built on immich-tv-webos: an Immich viewer with the 360° photos on a sphere, a photo turned with one key, a dark theme and the 89 languages of the app (the few texts of the TV app itself in English for now); the network shares, Plex and the live view of Tapo cameras, through its own service on the TV (SMB from webOS 22); 360° videos flat. Version 1.0.0, submitted to the LG Content Store on 24 October, ran on webOS 25 TVs of three models in LG's Cloud Test Lab: sign in, the phone sign in page, photos, albums, a video, the 360° view, the slideshow, a search and Back from every page. Version 0.1.0 ran on a tester's LG TV (webOS 22). The shares and Plex were checked against real servers and the cameras against a simulated camera on the project's build host.
- Samsung TVs with Tizen 5.5 and later: the LG TV app packaged for Samsung TVs, test build 0.2.0, to sign and install yourself: an Immich viewer for the remote, signed in by typing (the server address, then an email and password or an API key), with the slideshow, the 360° photos on a sphere, a photo turned with one key and an About page that tells what the TV supports; the sign in with a phone, the shares, Plex and the cameras are on its roadmap; 360° videos flat, with a notice. Version 0.1.0 ran on a tester's Samsung TV on Tizen 9: photos and videos up to 4K played, nothing above 4K decoded, and the browser of the TV gave black video frames to the 3D view. Version 0.2.0 holds the fixes from that run (a message for a video above the TV's decoders or one that stalls, 360° videos flat with a notice) and was checked by the project's CI in browsers that stand in for the TV.
- Meta Quest 2, Pro, 3 and 3S: the app as a window, plus the immersive view and, from build 30, a Drone card that shows the live video of a DJI drone relayed by a phone (experimental), first tested with build 30; HEVC is the safe codec, H.264 stops around 4096x2304 on the Quest 3; the app is checked on a Quest 3. From build 32, on a Quest 3 or 3S, the AI relief shows a flat photo in 3D, computed in the headset, and the 3D photos, scenes and panoramas made on a computer open in 3D (experimental). From build 33, flat 3D screens you move and a kiosk mode; from build 38, films resumed and TIFF photos in the immersive view; from build 39, Gaussian splats on Quest 3 and 3S.
- Windows 10 and 11: a preview, with folders instead of a gallery, a video player of its own (libmpv) for flat and 360° videos, raw files stitched on the graphics chip, files and folders opened with the program or dropped on the window, an installer or a ZIP, signed by APROGSYS; from desktop build 13, "Make 3D (AI)" turns your photos into 3D photos and 3D scenes on the processor, and into 360° panoramas on a graphics card of 8 GB. From desktop build 16, "Make 3D (AI)" works on the photos of a network share too, from desktop build 17 a video plays from the file this computer decodes, from desktop build 18 films pick up where you stopped, and from desktop build 19 a film from a slow server plays on and says why it waits. From desktop build 20, the window closes at once, even while a film waits for a share: open films keep where they stopped, and the logs of the session are written. From desktop build 21, the app runs on the fast graphics chip of a laptop that has two, and the video details say how a film is decoded. The same build opens Gaussian splats, makes splat scenes from your photos or a video on a graphics card of 4 GB, and plays AV2 videos, all experimental. From desktop build 22, a 360° panorama starts with 3.5 GiB of the graphics card free, and the splat scenes come in three qualities, Headset, Detailed and Maximum (experimental).
- Linux: a .deb and an .rpm built by the project's CI, installed and checked on Ubuntu 22.04 and 24.04, Debian 12 and Fedora 40 and 44; photos, 360° photos and flat videos through the system's libmpv (360°, 3D and raw videos play flat with a message), drawn on the hardware path on X11 sessions too from desktop build 7; SMB shares from Ubuntu 22.04 and Debian 12 on; without a keyring (GNOME Keyring or KWallet) the app no longer freezes for 25 s at its first start: it keeps the passwords for the session only and says so in its settings; from desktop build 13, "Make 3D (AI)" makes 3D photos and scenes on the processor, and 360° panoramas on a graphics card of 8 GB (tried only at a small size, on Intel graphics); checked under WSLg and in containers. From desktop build 16, "Make 3D (AI)" works on the photos of a network share too, from desktop build 17 a video plays from the file this computer decodes, from desktop build 18 films pick up where you stopped, and from desktop build 19 a film from a slow server plays on and says why it waits. From desktop build 20, the window closes at once, even while a film waits for a share: open films keep where they stopped, and the logs of the session are written. From desktop build 21, it opens Gaussian splats and plays AV2 videos (experimental). From desktop build 22, a 360° panorama starts with 3.5 GiB of the graphics card free.
- macOS: a DMG and a ZIP built by the project's CI, universal, unsigned (Gatekeeper asks once); it starts, opens the files and folders given to it, Finder included, keeps its secrets in the login keychain and plays flat videos with its own libmpv, first checked on the project's CI Mac; on 26 October 2026 the author tried desktop build 11 on a Mac, and it worked. From desktop build 13, the Mac app built by the project's CI makes 3D photos and scenes on the processor too, and 360° panoramas on a Mac are on the roadmap. From desktop build 16, "Make 3D (AI)" works on the photos of a network share too, from desktop build 17 a video plays from the file this computer decodes, from desktop build 18 films pick up where you stopped, and from desktop build 19 a film from a slow server plays on and says why it waits. From desktop build 20, the window closes at once, even while a film waits for a share: open films keep where they stopped, and the logs of the session are written. From desktop build 21, the Mac app built by the project's CI opens Gaussian splats and plays AV2 videos too (experimental), not tried on a Mac yet.
Each line opens its how to below. The full guide, with every option, message and limit, is in the user guide.
- Watch your photos and videos, with or without a server: a gallery and a player, on the device alone or with your Immich server.
- Look around 360° photos and videos, panoramas, VR180 and 3D: a sphere you turn with a finger, the phone or the remote.
- Turn one photo into a 3D photo, a 3D scene or a 360° panorama: made by AI on your computer, seen in 3D in a Meta Quest, which also gives any flat photo its relief. New, experimental.
- Watch on the TV with the remote: Android TV and Google TV, LG TVs, and Samsung TVs as a test build.
- Sign in a TV, a headset or a computer with your phone: scan its QR code, confirm, watch.
- Step inside your photos and videos with a Meta Quest: 360° all around you, 3D in true 3D.
- Explore Gaussian splats in a Meta Quest 3 or 3S: the 3D captures of Polycam, Scaniverse or Luma, in your room. Experimental.
- Explore Gaussian splats on your phone, tablet or computer: on an Android phone or tablet, or on Windows, Linux and macOS, and you walk through the scene. Experimental.
- Make a splat scene from your photos or a video (AI): a place or an object rebuilt on a Windows computer, to walk through. Experimental.
- Keep a splat scene on your Immich server: inside a photo of it, opened from your timeline. Experimental.
- Play the files of a NAS, a computer, a media server or Plex: in place, nothing copied.
- Browse a folder of your phone or headset: a folder of the device opened like a share, its TIFF photos too.
- Pick up a film where you stopped: a bar on its tile, and it plays on from where you left it.
- When a video waits or will not play: the file this device decodes, how long before it starts, and why.
- Keep your Immich library, with more: the Immich mobile app, plus the immersive viewers and the big screens.
- Find a month or a year in a long timeline: months, then years, one tap to open.
- Watch your Tapo cameras: live, and the recordings of their memory card; checked against a simulated camera.
- See your DJI drone's live video on your phone, and in a Meta Quest or on an Android TV: through a DJI RC-N3 remote, receive only. Experimental.
- Bring a drone's or a camera card's photos and videos to Immich: over USB, from an Android phone. Experimental.
- Open the raw files of 360° cameras: Insta360, GoPro MAX and DJI Osmo 360, stitched by the app.
- Stabilise your 360° videos with the camera's gyroscope (experimental): the horizon level and the shake gone, in the 360° player of Android phones, tablets and TVs.
- Turn a photo with one key: a button, a key of the keyboard or a colour key of the remote.
- Use your computer as the media player: your folders, Open with, a file dropped on the window. Preview.
- Play AV2 videos on your computer: decoded by the processor, as fast as your computer allows. Experimental.
Take the app from the store of your device where it is published, or from the Releases page meanwhile.
- Google Play, or the APK of the Releases page:
Immuch360-v<version>-arm64-v8a-release.apkfor a phone; the universalImmuch360-v<version>-release.apkworks everywhere. - The app installs next to the official Immich app. The APK from GitHub does not update itself: watch the Releases page; once you have installed the app from a store, take the updates from that store.
- App Store: version 3.3.2, published on 6 November 2026. Or build the app with Xcode on a Mac, see Build it yourself.
- Tap "Use without a server", or "Connect to an Immich server" to sign in with your server; both are on the welcome page from build 24.
- Until Google Play offers the app on TVs, take the universal
Immuch360-v<version>-release.apkof the Releases page. - On the TV, turn on the developer options and USB debugging (on a Google TV: Settings, System, About, select "Android TV OS build" seven times, then Settings, System, Developer options; the names vary between TVs).
- From a computer on the same network, with adb (Android SDK Platform Tools):
adb connect <address of the TV>, accept the prompt on the TV, thenadb install -r Immuch360-v<version>-release.apk. - The app shows among the apps of the TV, with its banner. Install the next release the same way:
-rkeeps the login and the settings.
- Version 1.0.0 is in LG's review. Until it is on the LG Content Store, it installs in Developer Mode: you need an LG TV with webOS 5.0 or later, a computer on the same network and a free LG developer account. On the TV, install Developer Mode from the LG Content Store, sign in, turn Dev Mode Status on and let the TV restart; note its IP address and the passphrase the app shows.
- On the computer, install the webOS CLI (Node.js 18 or later):
npm install -g @webos-tools/cli, then register the TV withares-setup-device(its IP address, port 9922, userprisoner) andares-novacom --device <name> --getkey, which asks for the passphrase. - From the webOS 1.0.1 pre-release, download
Immuch360-webOS-1.0.1.ipkfor a UHD TV, orImmuch360-webOS-1.0.1-1280x720.ipkfor a Full HD TV, to which LG gives 1280x720 apps. Check it againstSHA256SUMS.txt, thenares-install --device <name> Immuch360-webOS-1.0.1.ipk. The webOS Dev Manager of webosbrew does the same without the command line. - A Developer Mode session lasts 1000 hours and the EXTEND button of the Developer Mode app renews it; when it expires, the TV removes the apps installed this way. The details are in webos/README.md.
- Once the app is on the LG Content Store, remove the Developer Mode copy and install it from the store.
- Test build 0.2.0 is not on Samsung's store: you install it yourself. You need a Samsung TV with Tizen 5.5 or later (2020 models and later), a computer on the same network and a Samsung account. On the TV: Apps, App Settings, type 12345, turn Developer mode on, enter the IP address of the computer, then restart the TV.
- Download
Immuch360-Tizen-0.2.0.wgtfrom the Tizen pre-release and check it againstSHA256SUMS.txt. A Samsung TV installs only an app signed for it, so the package must be signed again with a Samsung certificate that lists the DUID of your TV: Apps2Samsung, a community tool, reads the DUID, signs the package with your Samsung account and installs it; Tizen Studio with the Samsung Certificate Extension does the same by hand. - Open the app and sign in by typing your server address, then your email and password or an API key. About this TV shows what the TV supports, as text and as a QR code: that text, posted in Issues or Discussions with what does not work, helps the most.
- From the Horizon Store: the store version, updated as Meta reviews each submission.
- Or sideload the
-quest-release.apkfile of a release in developer mode with adb or SideQuest:adb install -r Immuch360-v<version>-quest-release.apk, then open the Library of the headset, "Unknown sources". - The store version and the GitHub APK are signed with different keys: to switch from one to the other, uninstall the app first, which loses the login, the settings and the list of network shares.
- Download
Immuch360-Desktop-3.3.0-rc.0-desktop.22-windows-x64-setup.exefrom the desktop pre-release (withSHA256SUMS.txtto check it) and open it. The installer and the ZIP are signed; Windows shows APROGSYS as the publisher. While the publisher is new to SmartScreen, it may still ask once: "More info", then "Run anyway". - Choose "Install for me only" (no administrator rights) or "Install for all users", then the language of the installer, the one of Windows already selected.
- Start Immuch360 Desktop from the Start menu. Photos and videos get it in "Open with" (right click a file, Open with); it never makes itself their default program. The first start of a new build can take up to a minute while Windows scans the files.
- Windows 10 or 11, 64 bit. To update, open the installer of the next build: your sign in, folders and settings stay. The ZIP of the same release is the same program as a folder, to unzip anywhere and start
immuch360.exefrom it. On a computer where desktop builds 4 to 8 stopped at the start on "duplicate column name: group_date", build 9 opens that database and keeps your data.
On Ubuntu 22.04 or later and Debian 12 or later: sudo apt install ./Immuch360-Desktop-3.3.0-rc.0-desktop.22-linux-amd64.deb; on Fedora 40 or later: sudo dnf install ./Immuch360-Desktop-3.3.0-rc.0-desktop.22-linux-x86_64.rpm, both from the desktop pre-release. Then start Immuch360 Desktop from your applications. A preview: the folders of the computer, photos and 360° photos as a sphere, and flat videos through the system's libmpv, which the package installs (360°, 3D and raw videos play flat, with a message); SMB shares work from Ubuntu 22.04 and Debian 12 on. On Fedora, camera videos need the FFmpeg of RPM Fusion. Without GNOME Keyring or KWallet, the passwords are kept for the session only, and the settings of the app say so.
Open Immuch360-Desktop-3.3.0-rc.0-desktop.22-macos.dmg from the desktop pre-release and drag the app to Applications (Apple silicon and Intel, macOS 12 or later). It is unsigned, so macOS asks you once: Control click it and choose Open on macOS 14 and earlier, or choose "Open Anyway" in System Settings, Privacy & Security on macOS 15 and later. The author tried desktop build 11 on a Mac on 26 October 2026, and it worked; reports from other Macs and macOS versions are welcome.
Each entry says what you get, then the steps, then the limits. The user guide has every option and message.
Immuch360 is first a gallery and a player for ordinary photos and videos, and it needs neither an account nor a server. "Use without a server" opens the app on the photos and videos of the device, with every viewer, the 360° list and the network sources, and nothing leaves the device. With an Immich server, the timeline, the albums, the favorites, the memories and the search come from it. Videos play in a native player with sound, seeking, a buffering indicator and a choice of audio tracks, in the 360°, Spatial and computer players and, from build 29, in the flat player of the Android app, which shows subtitles too.
- Open the app. The welcome page shows "Your media. Any screen. Every perspective." and three choices: tap the first one, "Use without a server". A server can be connected later, from Settings or the Library tab.
- Allow access to your photos and videos. If you refuse, the app says "The app cannot see the photos of this device", with "Allow access" and "Open the settings".
- The Photos tab shows the timeline of the device; Search and Albums stay greyed out, as they come from the server. The Library tab has 360° at the top, then On this device (the albums of the device) and Network shares. The menu at the top right says "This device only": nothing is sent anywhere.
- Tap a photo or a video to open it; swipe left and right to go to the next one, pinch or double tap to zoom. Swipe up on a video for its details: codec, size, frame rate, bit rate, and whether this device decodes it.
- On Android phones, tablets and TVs, from build 29, a film with several audio languages or with subtitles has an audio button and a subtitles button in its controls: the audio language you pick is kept for the next films, and subtitles stay off until you pick them, except forced ones. The Immich app's Android player has neither.
On a computer, the folders you choose play the part of the gallery; on a TV, which has no photos of its own, the network sources do.
More: without a server or an account, the viewers and the video player, video details and decoders.
Immuch360 knows flat photos and videos, panoramas, 360° photos and videos, VR180, stereoscopic 3D, Apple spatial photos and the 360° spheres of DJI drones, and opens each one in the viewer that fits it. A 360° photo opens as a sphere you turn with a finger or by moving the phone; a 360° video plays in a spherical player with sound; VR180 files are drawn on a half sphere; stereoscopic 3D files show one eye on a flat screen and both eyes in a headset. Partial panoramas keep their crop, and the picture starts on the view the camera recorded. A file the server does not flag can be viewed as 360° with one tap.
- Open the photo or video. 360° files carry a 360° badge on their thumbnail, and the Library tab has a 360° list that gathers them, with filters by period, source, kind and camera.
- Tap 360° in the top bar. Drag to look around, pinch to zoom, tap the gyroscope button to look around by turning the phone.
- The 3D button cycles "Mono (not 3D)", "3D, top and bottom" and "3D, side by side"; the 360°/180° button switches between the full sphere and the half sphere of VR180.
- For a file that shows flat although it is a 360° one: ⋮ at the top right, then "View as 360°".
On phones and tablets, a stereoscopic video can also gain depth on the flat screen: the Spatial 2.5D player uses the front camera to follow your head and shows the view in between the two eyes (experimental). Apple spatial photos taken with an iPhone are recognised and shown in 3D in a Meta Quest.
More: 360° photos and videos, 3D and VR180, Spatial 2.5D, Apple spatial photos and videos, the 360° list.
Most of your photos are flat, and you cannot go back and take them again in 3D. Immuch360 gives them depth. On your computer, one photo becomes a 3D photo, a 3D scene you lean into in a headset, or a 360° panorama that imagines the rest of the place around you. A Quest 3 or 3S does the relief itself, for any flat photo. Everything runs on your own computer and headset: no cloud, no account, your originals never changed. New in build 32 and desktop build 13, experimental and on by default. The Immich app has nothing like it.
A real output of the app from a CC0 photo of Poly Haven, reduced, not retouched: a 3D photo, its two eyes in turn.
On your computer, with desktop build 13 on Windows, Linux or macOS:
- Select one or more photos in the library, in a folder or on a network share, then "Make 3D (AI)".
- Pick what you want: "3D photo", "3D scene", "360° panorama", or "3D version of a 360° photo" for your own 360° shots. The box says what AI will estimate or invent ("About 96% of this panorama will be invented by AI"), about how long it takes on this computer, and where the file goes: "Next to the original" or "A folder of my choice". A type this computer cannot do stays greyed, with its reason, such as "Not yet on Mac" or "The graphics card has 6.0 GiB of memory, 360° panoramas need 7.5 GiB". From desktop build 15, "3D version of a 360° photo" also takes a photo with a 2:1 frame and no 360° tag, listed under "No 360° tag, 2:1 frame only: check that each is a 360° photo" so that you check it first.
- The first time, the box offers the components of that type: Download, once. They run on this computer and work offline afterwards.
- Convert. The jobs queue on two lanes, the processor and the graphics card, with their steps and the time left; Cancel stops one at any moment, and quitting the app asks first.
- Open the result. A 3D photo shows as "Left eye", "Side by side", "Wiggle" (the animation above) or "Red and cyan" for glasses; a scene has "Preview in 3D", turned with the mouse or the touchpad, and "Export for other 3D apps (.glb)"; a panorama opens in the 360° viewer.
One photo, four ways: real outputs of the app from a CC0 photo of Poly Haven, reduced, not retouched, with the app's badges added for this page, the two scene views drawn from the scene file. Everything outside the outline of the panorama is made up by AI.
| 3D photo | 3D scene | 360° panorama | |
|---|---|---|---|
| What you get | <name>_3D_LRF_Full_SBS.jpg, a side by side 3D photo: your photo for the left eye, a computed right eye |
<name>_scene3D.jpg, a photo that carries the scene, in layers |
<name>_360.jpg, 6144 x 3072, and with "Also make the 3D version", <name>_360_3D.jpg |
| What AI does | estimates the relief of the photo (Depth Anything V2 Small) | estimates the shape of the place (MoGe-2) and fills what the photo hides (LaMa), for a scene in layers | invents everything beyond the photo's edges (FLUX.2 klein 4B and a 360° LoRA); your own pixels stay where they were |
| How long | a few seconds a photo | 15 to 45 seconds a photo | about 5 minutes on a laptop with an RTX 4060, 30 seconds more for its 3D version |
| It runs on | the processor of a Windows, Linux or macOS computer | the processor of a Windows, Linux or macOS computer | a graphics card with Vulkan and 8 GB of its own memory, in a Windows or Linux computer with 16 GB of memory; checked with an NVIDIA card, with AMD and Intel cards and the Mac on the roadmap |
| Downloaded once, when you ask | about 110 MB | 349 MB more | about 5.4 GB more |
| Where to see it | in 3D in a Meta Quest; "Wiggle" or "Red and cyan" on a computer | in a Meta Quest, where you lean into it; "Preview in 3D" on the computer | all around you in a Meta Quest, and in every 360° viewer |
Every new file goes next to its original, never over it, or into a folder of your choice when the original's folder takes no new file; on a network folder, only once you say yes for that folder ("Immuch360 writes new files there, never the originals"). The library links each version to its original with its badge, "3D AI", "3D scene" or "360° AI", in the album "Immuch360 AI versions", which stays out of your Immich backup unless you turn on "Also back up AI versions"; careful, "Select all" in the backup albums picks this album too and turns that switch on. To see a file in the Quest, save it on your NAS, back it up to your Immich server or, on Windows, turn on "Share this computer".
Photos of a network share, from desktop build 16: select them in the share, or open one and use its ⋮ menu. The app copies each photo to the computer first, with its progress, then writes the 3D version next to the original on an SMB or WebDAV share once you answer "Yes, for this network folder", never over a file. DLNA and Plex take no files, so there the version goes to the folder of your choice. The page of a photo of a share gets Versions, which lists the 3D versions found beside it. Checked on the project's build host against a Samba and a WebDAV server.
In a Meta Quest, with build 32:
- AI relief: open any flat photo, from your library or a share, and press "AI relief" in the top bar: the headset estimates the relief itself and shows the photo in 3D, "Relief estimated by AI". The model, 99.5 MB, downloads the first time you press it, and the reliefs are kept in a cache. "Open AI reliefs in 2.5D (experimental)", in Settings, Advanced, "AI and 3D", makes near objects move in front of the background as you move your head. On a Quest 2 or a Quest Pro the button stays greyed, "Not tested on this headset yet", until you turn on "AI relief on Quest 2 and Quest Pro (untested)" there.
- 3D photos and scenes from the computer: "View in 3D" shows a 3D photo in true 3D. "View the 3D scene" on the original, or "Explore the 3D scene" on the scene, puts the scene in your room: lean in, or glide with the left thumbstick inside the rebuilt area ("Room to move: about 0.5 m each way" for the room shown above); the layers flatten and darken at its edge, Reset, in the panel that A, X or grip shows, places the scene again in front of you, and B or Y goes back.
- Panoramas: a generated panorama opens all around you, facing your photo, with "Generated by AI beyond the photo's edges" and a thin outline of the original photo, which fade after a few seconds; its 3D version is in true 3D.
On phones, tablets and TVs, the files a computer made open as they are, and nothing is generated there. A panorama opens in the 360° viewer with the "360° AI" badge, the sentence and the outline on Android phones, tablets and Android TV; on iPhone, iPad, LG and Samsung TVs it opens as a plain 360° photo for now. A scene shows as its photo, with a small 3D SCENE mark in its corner; on Android, its details add "Open it on a Meta Quest to explore it". A 3D photo shows its two eyes side by side.
What is real and what is not, always said. It is the point, not the small print. The relief of a 3D photo is estimated from one photo, and what the photo hides is filled in and is not real. A scene is "Reconstructed from one photo, explore within its limits". A panorama keeps your real pixels where they were and invents the rest, about 90% of the sphere for a typical photo, and the box says how much before you start. The app says it where you look, with "Relief estimated by AI", "Generated by AI beyond the photo's edges" and the badges, and the files say it too: in our XMP, and for the scenes and the panoramas in the IPTC digital source type of an image made with AI, so that other apps can tell a generated panorama from a real 360° photo. Your originals are never changed, and nothing leaves your computer or your headset. As the box puts it: "A finished conversion does not guarantee a good result."
What was checked, by 29 October 2026, with test builds of this code: 3D photos by the Linux app in a container on a Linux PC, offline too; scenes by the Windows app on a laptop with an RTX 4060 Laptop GPU (ten in 2 min 39 s) and by the engine on the Linux PC; on that laptop, four panoramas in 4 min 16 s to 4 min 44 s each, their 3D versions in about 30 s, with Cancel, a killed app, another program holding the graphics card, and no network connection of the app during the tests.
Limits: 360° panoramas need a Windows or Linux computer with a suitable graphics card, and the box says why otherwise ("Not yet on Mac", "No graphics card with Vulkan found", "Integrated graphics share the computer's memory: too slow for panoramas", with "Try on integrated graphics (untested)" to try anyway); from desktop build 21, before a panorama starts, the app frees the graphics memory it holds itself, paused videos and cached pictures, and from desktop build 22 it then asks 3.5 GiB of the card free (below about 5.6 GiB the generation runs in pieces, slower, with the same image, and takes up to 8 GB of the computer's memory), and waits otherwise, saying what is free (what each card can do); inside a panorama, the edge of your photo can show as a sharp step in tone; most scenes say "Field of view guessed: shapes may be off"; a scene needs about 2 GB of free memory ("Not enough memory" otherwise); with AI versions backed up, Immich's duplicate finder pairs each photo with its scene and often suggests keeping the scene, the heavier file: keep the original. Phones and TVs make nothing, and the headset makes reliefs only; a scene comes from one photo, and from several photos or a video a Windows computer makes a splat scene.
The components: on the computer, Settings, "AI and 3D" lists the components of each feature with their size, Download and Remove, then "Remove all AI components" and "Move the AI components" to another drive; "AI features" off hides every AI button and downloads nothing. Each file is checked by its SHA-256. On Windows they sit in %LOCALAPPDATA%\com.aprogsys\Immuch360 Desktop\ai-components, which the uninstaller deletes (not a folder you moved them to); on Linux in ~/.local/share/immuch360/ai-components on most systems, and on a Mac in ~/Library/Application Support/com.aprogsys.immuch360.desktop/ai-components. In the Quest, "AI and 3D" is in Settings, Advanced, with the relief cache.
More: the notes of build 32, desktop build 13, desktop build 15, desktop build 16, desktop build 21 and desktop build 22, and the models, their licences, their sources and their sums.
Your photos on the big screen, with the remote. The TV apps all work the same way: the arrows move the frame, OK opens, Back goes back, and in a 360° photo the arrows look around. A TV has no photos of its own, so it shows your Immich server and, on Android TV and LG TVs, your network shares, your Plex server and your cameras.
- Android TV and Google TV: the Android app itself, build 42, from GitHub until Google Play offers it on TVs.
- LG TVs with webOS 5.0 and later: a TV app of its own, version 1.0.0, in LG's review for the LG Content Store, and version 1.0.1 on GitHub.
- Samsung TVs with Tizen 5.5 and later: the same TV app as on LG TVs, test build 0.2.0, which you sign and install yourself.
The same Android app, in a dark theme from the first start, with the remote as the only input. In the viewer, Left and Right go to the previous or next photo or video, even while a video plays, and in a 360° photo or video the arrows look around.
- Install the APK with adb, see Install. On the welcome page, choose "Add a network share or a media server" for a share, a Plex server or a camera, "Use without a server", or "Connect to an Immich server", whose page signs the TV in when you scan its QR code with your phone (see Sign in with your phone).
- In a viewer, the play and pause, rewind, fast forward, previous and next keys of the remote work. OK during a video shows the controls with play and pause selected, and a second OK pauses; the -10 s and +10 s buttons follow, then the audio and subtitles buttons when the film has them. From build 29, Down from play reaches the time bar: Left and Right move 10 s per press, faster while held, and OK plays or pauses. The controls and the date hide 5 s after the last key, and Left and Right then go to the previous or next file; on a share, that file opens in a page of its own, with controls that drive it. Videos no longer loop on a TV, unless you turn on Settings, Asset Viewer, Videos, Looping.
- The Menu key, the Info key or OK held down opens the details of the photo or video, read only: date, place, camera, codec, size and bit rate. A video the TV cannot decode says so, with its codec, its size and the limit of the TV's decoders, instead of loading forever; a 360° video beyond the decoders asks before opening the 360° player, and the reason is written on the Logs page of the profile menu.
- Search with the remote: Back from the results returns to Search, with the focus on the search entry, and in Date, "Custom range" picks the start and the end year first, then the month and the day. In Albums, Clear sits beside the search entry. This is the work of Michael Cloutier (mlc70), with his commits.
- A photo shows its date and time at the bottom left while its controls show ("Show photo date and time", in Settings, Asset Viewer). On the time bar of a video, a quick series of Left or Right presses seeks 10 s, then 30 s, then 60 s each, and every press counts. An album opens on its first photo, with its name in the top bar.
Build 28 ran on a real Android TV on 23 October; the video fixes of build 29 came from that run, and builds 29 to 35 were checked on the Google TV emulator, where 13 quick series of presses out of 13 landed on the right time with build 35.
Immich's own apps do not install on an LG TV. Immuch360 has a TV app of its own for LG TVs with webOS 5.0 and later (2020 TVs on), driven by the remote and the Magic Remote: it shows your Immich server, your network shares, your Plex server and your Tapo cameras, and puts your 360° photos on a sphere you turn with the arrows. It is built on immich-tv-webos by Seeky91, which brought the timeline, the albums, people, places, search, the slideshow and the sign in with a phone; thanks to Seeky91. Version 1.0.0 was submitted to the LG Content Store on 24 October and ran on webOS 25 TVs of LG's Cloud Test Lab; until LG approves it, it installs in Developer Mode, and every report in Issues helps.
- Install it on a TV in Developer Mode, see Install. It has its own app id, so it installs next to Immich TV by Seeky91.
- Sign in with your phone (scan the QR code), with your email and password, or with an API key.
- Browse with the arrows and OK. In the viewer, Left and Right go to the previous or next photo or video, also while a video plays; the controls hide 5 s after the last key; Info opens the details; the channel keys zoom; the Magic Remote pointer and wheel work. From version 1.0.1, on GitHub, Up zooms a photo in at once, the arrows then move it and Back zooms out, and a Loading pill shows while a photo is still coming.
- A 360° photo opens on a sphere: each press of an arrow turns it by a step, and a held key keeps it turning. "View as 360°" covers a 2:1 photo the server does not flag; a VR180 photo shows on a half sphere and a 3D photo with one eye. The yellow and blue keys turn a flat photo.
- Once signed in, "Network shares" in the rail of the app: add an SMB, WebDAV or DLNA share, a Plex server (signed in with a code on plex.tv/link) or a Tapo camera. Their photos open in the same viewer, 360° photos on the sphere.
Version 1.0.0 is made for the LG Content Store: Back leaves the app from Photos or the welcome page the way each webOS version expects, and closes an open popup first; a server that does not answer within 15 s ends with a message that says why and a Retry button; the privacy policy opens in the app, with a QR code to read its LG TVs section on a phone; the TV uses its Gallery picture mode, as LG asks of photo apps; and a second package suits the Full HD TVs to which LG gives 1280x720 apps.
Limits: SMB needs webOS 22 (2022 TVs) or later. The shares, Plex and the cameras come through the app's own service on the TV, which reads them for the app, and were checked against real servers and a simulated camera on the project's build host. The live view of a camera is video only. To come: the recordings of the cameras (not before December 2026) and their sound, 360° videos on the sphere (they play flat, with a message), uploads. On webOS before 25, the reverse proxy in front of Immich must send CORS headers; the app explains them when it meets the problem. The app ran on webOS 22 and 25, and webOS 26 is on the roadmap.
Samsung TVs with Tizen 5.5 and later (2020 TVs on) get the same TV app as test build 0.2.0, which is not on Samsung's store: sign in by typing, the timeline, albums, the viewer and the slideshow, 360° photos on the sphere and a photo turned with one key. On the roadmap: the sign in with a phone, the shares, Plex and the cameras, which run in a background service on LG TVs.
- Sign the package for your TV and install it in Developer mode, see Install.
- Sign in by typing your server address, then your email and password or an API key.
- Browse with the arrows and OK. A 360° photo opens on the sphere; a 360° video plays flat, with a notice the first time, because on a tester's TV the browser of the TV gave black video frames to the 3D view.
- A video above what the TV's decoders accept says so, with the size the TV can play and the size of the file, instead of loading forever. A video that stalls shows a notice with its bitrate and the way out: let Immich transcode heavy files, or use a faster link. About this TV gives the TV's video ceiling.
Version 0.1.0 ran on a tester's Samsung TV on Tizen 9, and 0.2.0 holds the fixes from that run, checked by the project's CI in browsers that stand in for the TV. The text of the About page, posted in Discussions or Issues after a run, helps the most.
More: watch on your TV, the webOS app: install, remote control keys, CORS headers, platform support.
Scan. Sign in. Watch. Typing a server address, an email and a password with a TV remote, or in a headset, takes minutes. With Immuch360 on your phone, signed in to your Immich server, a TV, a Meta Quest or a computer is signed in within seconds: the big screen shows a QR code, the phone scans it, you confirm, and the screen opens on your library. With the phone app, your password stays on the phone. The Immich app has nothing like it.
- On the big screen (Android TV and Google TV, the Meta Quest window, Windows, Linux or macOS), choose "Connect to an Immich server": the sign-in page shows "Sign in with your phone", a QR code and a 10 character code, beside the server form.
- On the phone, signed in to your server: Settings, "Connect a TV or computer", then "Scan the code". In a Meta Quest, whose screen a phone cannot scan, choose "Enter a code instead" and type the code the headset shows.
- The phone asks "Sign (the screen) in?" and shows a six digit number: check that the screen shows the same one, then tap Sign in. The screen opens on your timeline.
How it stays safe: the phone and the screen must be on the same home network, and the code lasts two minutes at most and works once. The phone asks your server for a new session for that screen, named after it ("Immuch360 on Living room TV"), and sends it to the screen encrypted, so your password never leaves the phone. "Connect a TV or computer" lists the screens this phone signed in, each with Sign out, and Immich lists them in Account settings, Authorized devices, where you can revoke them too. Signing the phone out signs them out as well.
The phone side runs on Android, and on iPhone and iPad from version 3.3.2. Without Immuch360 on the phone, scan the code with the camera of the phone: a page served by the screen opens in the browser, for your email and password, encrypted and used once. LG TVs sign in with a QR code of their own, in the browser of the phone; from build 28 the scanner of the phone app recognises it and opens that page. Samsung TVs are signed in by typing for now.
More: sign in with your phone, what the screens send and keep.
On a Meta Quest the same app runs as a window with your whole library, and its 360° button opens an immersive view where the photo or video is all around you: you look around by turning your head, stereoscopic files are in true 3D, an Apple spatial photo floats in front of you in 3D, and the controllers or your hands drive the time bar, previous and next, and the Turn button that brings what is behind you in front without turning your chair. The media come from your server, the headset itself, a NAS, a media server, a phone or a Plex server, played in place.
- Install the app from the Horizon Store, or sideload the APK of a newer build, see Install.
- On the welcome page, tap "Use without a server" for the headset's own photos and videos, or "Connect to an Immich server": type the code the headset shows in Immuch360 on your phone (sign in with your phone), or log in with your server address, email and password.
- Open a 360° photo or video and press 360°: the immersive view opens. B or Y, or the Back button of the info panel, brings the window back.
- In the immersive view, push the right thumbstick left or right to turn the view 30° that way. From build 29 it turns the way you push it, as in most headset apps; builds 17 to 28 turned it the other way, and Settings, Asset Viewer, Videos, "Reverse thumbstick turn" brings that direction back.
- In the window, push a thumbstick right for the next photo or video, left for the previous one, from the commits of Gaurav Mukherjee (gmfun).
- "View on a big screen" puts a photo or a video on a large flat screen in front of you: hold a grip to move it, push the thumbstick to bring it nearer or farther, and hold both grips to resize it. A video named like
Movie_SBS.mp4,Film.Half-OU.mkvorclip_LR.mp4gets "View in 3D" and plays in 3D on such a screen ("3D by file name (experimental)"), and "Sharper flat screens (experimental)" draws these screens through the headset's own super sampling and sharpening; both are in Settings, Advanced. - When the decoder stops a video in the middle, the viewer plays it again past the part that failed, and says so. A film picks up where you stopped, and TIFF photos show in the immersive view too.
Hand the headset to visitors and it opens your 360° photo or video by itself, from the start, each time it is put on. The idea comes from the exhibition builds of ppawelstachh-sys, written again on our code.
- In Settings, Advanced, "Kiosk mode (experimental)": choose the "Kiosk media", a 360° photo or video, and if you like an "End card text" ("Thank you for the journey" otherwise).
- At the next start, the headset names the kiosk media for a few seconds, with Cancel, then opens it.
- The film starts again each time the headset is put on and ends on the card. A kiosk takes no press: hold B or Y for one second to leave.
Checked in a Quest 3 on 30 October with build 35: a side by side photo on a sharper flat screen, a 3D scene and the kiosk twice, each closed with the app's window back.
More: in the Meta Quest headset, the headset: codecs, store and permissions.
A Gaussian splat is a 3D capture of a place or an object, made with Polycam, Scaniverse, Postshot, Luma and other tools. In a Meta Quest 3 or 3S, Immuch360 sets it in front of you or all around you, at its size, and you walk around it or glide through it. Experimental, and on by default.
- Put your .spz or .ply splats on an SMB or WebDAV share, or in a folder of the headset ("Browse a folder", or "Open a splat file" in the + menu of Network shares). They come after the photos and videos, with a "3D splat" badge and their number of gaussians.
- Open one, then "Explore the splat scene". An object stands in front of you at eye height, a place opens around you. The left thumbstick glides through it, and the right thumbstick turns the view 30° about you, keeping the spot you reached ("Reverse thumbstick turn" turns it the other way). Reset, in the panel that A, X or grip shows, places it again from where you stand, and "Turn upright" turns one that comes in lying down or upside down, remembered for that file.
- A splat shows 50,000 gaussians at most, and a larger one its 50,000 strongest ("Reduced to 50,000 of 452,451 gaussians"); "Large splats (experimental)", in Settings, Advanced, takes up to 150,000.
- The headset reads binary .ply files and SPZ versions 1 to 4, version 4 from build 40.
Gaussian splats use an experimental API of the Meta Spatial SDK, which Meta neither supports nor warrants: any defect is Immuch360's own. On a Quest 2 or a Quest Pro the splats are listed, and "Explore the splat scene" says "Gaussian splats need a Meta Quest 3 or 3S". Files to try: the CC0 samples of the splat viewer page of InnerScene.
Checked in a Quest 3 on 31 October: the files that the code of build 39 prepares from those samples open in the splat module of the Meta Spatial SDK, the one the app uses, each in view and upright. For build 40, the project's tests and CI checked the turn and SPZ version 4: the thumbstick moves recorded in a Quest 3 with build 39, replayed, turn the view 30° per push and never reset it, a turn keeps the spot you glided to, and the version 4 files of the tests are prepared for the headset byte for byte like their version 3 sources.
More: the notes of build 36, build 39 and build 40.
A splat made with Polycam, Scaniverse, Postshot, Luma or another tool, or one your computer made from your photos, opens on an Android phone or tablet and on Windows, Linux and macOS, and you walk through it as in a headset. Experimental, on by default. The Immich app opens no splat.
- Put your .spz or .ply splats on an SMB or WebDAV share or in a folder of the phone ("Browse a folder"), or pick one with "Open a splat file" in the + menu of Network shares; on a computer, a splat file opened with the program or dropped on its window opens at once. Splats come after the photos and videos, with a "3D splat" badge and their number of gaussians.
- Open one: a place opens around you, an object in front of you. On a computer, drag to look around, walk with W, A, S, D (Z, Q, S, D on AZERTY) or the arrows, go forward and back with the wheel, up and down with E and Q, and press R to reset and Esc to go back; "Turn around" turns about an object instead of walking. On a phone, your left thumb walks, a drag looks around, a pinch goes forward and back, two fingers slide and a double tap resets; the gyroscope button looks around as you turn the phone.
- Reset places the scene again, "Turn upright" turns one that comes in lying down or upside down, remembered for that file on this device, and the info sheet says how many gaussians are shown and how fast they are drawn.
How many gaussians are shown depends on the device. A phone or a tablet shows 150,000 at most, the strongest ones ("Reduced to 150,000 of 452,451 gaussians"), or 500,000 with "Large splats (experimental)" in Settings, Advanced. A computer with a graphics card of its own shows a splat whole, up to what its memory holds (about 10 million gaussians on a laptop with 16 GB of memory and an 8 GB card), and says "Too large for this computer" beyond. With a graphics chip that shares the computer's memory, it shows 1,000,000 at most, unless "Keep every gaussian (experimental)", in Settings, Advanced, asks for them all. When a splat shown whole draws too slowly, the viewer offers a lighter copy or to keep them all, and remembers your answer for that file. On Windows, "Splats on the more powerful graphics card (experimental)", on by default, draws them on the dedicated card of a laptop that has two.
Checked on a Galaxy S24+, where the splats of the tests showed almost at once and moved smoothly; in the Windows app on a laptop with an RTX 4060, which drew each of them at about 120 frames a second, a room of 637,401 gaussians included; and on Ubuntu, Debian and Fedora by the project's CI. iPhone, iPad and the TVs do not open splats, and on a Mac the viewer is built by the project's CI, not tried yet. On Linux with an NVIDIA card, when the viewer draws nothing, start Immuch360 with WEBKIT_DISABLE_DMABUF_RENDERER=1, as the app says.
More: the notes of build 41 and desktop build 21, and the viewer's code and licences.
You filmed a room, a garden or a statue and would like to stand in it again. On a Windows computer, Immuch360 Desktop rebuilds it from your photos or a video as a Gaussian splat, which you walk through in a Meta Quest 3 or 3S or in the splat viewer above. Everything runs on your computer: no cloud, no account. Experimental, on by default. The Immich app has nothing like it.
You need a Windows computer with a graphics card of its own, with Vulkan and 4 GB of memory or more, 8 GB of memory in the computer, and 20 to 200 photos of the place or the object, or one video of it, from 10 seconds to 5 minutes.
- Film slowly, or take a photo at every step, each one seeing most of what the previous one saw. For a place, walk along the walls looking across it, then through the middle; for an object, walk around it twice, at its height then from a little above. Even light, no zoom, nothing moving; avoid mirrors, windows against the light and shiny surfaces.
- Select the photos or the video, in the library or a folder, then "Make a splat scene (AI)", and say what you filmed: "A place: a room, a street, a garden" or "An object, walked around". The box says which photos it leaves out and why, what the headset will get (up to 150,000 gaussians), about how long it takes on this computer, and where the file goes: next to the photos, or a folder of your choice. "Also save a .ply for other 3D apps" keeps the same gaussians as a .ply too.
- The box offers its two components, to download once: COLMAP 4.2.1 (BSD 3 Clause), about 10 MB, which places the photos in 3D on the processor, and Brush 0.3.0 (Apache 2.0), about 16 MB, which trains the splat on the graphics card. Both are built by the project's CI from their sources, signed by APROGSYS and checked by their SHA-256; then they work offline.
- "Make the scene". The panel shows each step, taking the frames, placing the photos in 3D, training the splat, with the time left, and Cancel stops it. On a laptop with an RTX 4060, about 12 minutes for 150 photos of a room, and 8 for a one minute video of an object.
- The scene,
<name>_splat.spz, goes next to the photos or into your folder. Open it in the headset from your NAS or from its Download folder ("Large splats", in its Settings, Advanced, shows all of it), or in the splat viewer of a computer, a phone or a tablet, where "Save to Immich" keeps it on your server. An object is cropped around it for the headset, so that it opens in front of you; the .ply keeps the whole scene.
Quality, from desktop build 22: under "What did you film?", the box offers three lines, each naming the devices it is made for, with the time it would take on this computer and the size of its file ("About 13 min on this computer, a file of about 3.4 MiB"). "Headset (Meta Quest, phone, tablet, PC)" is chosen each time the box opens.
- "Headset (Meta Quest, phone, tablet, PC)": the scene of the steps above, up to 150,000 gaussians, 5 to 6 minutes of training on the laptop with an RTX 4060.
- "Detailed (PC, recent phone; headset gets a reduced copy)": the photos and frames prepared and trained at 1,920 pixels, up to a million gaussians, so that fine text, a grid or a screw come out sharp where Headset blurs them. On that laptop, 27 to 31 minutes of training, and a file of 3 MB for an object, 19 to 20 MB for a place.
- "Maximum (PC with a graphics card; headset and phone get a reduced copy)": Detailed at the full size of your photos or video, as far as this computer's memory holds it; the line says "Same as Detailed on this computer" when it does not, as for a 1080p video.
With Detailed and Maximum, <name>_splat.spz holds the whole scene, for computers and phones, and <name>_splat.headset.spz beside it, its 150,000 strongest gaussians, is the copy to open in the headset. The figures and the choice are detailed in the user guide.
Only what the photos saw is rebuilt: places no photo saw stay empty or blurred. When too few photos can be placed in 3D, the app says why and what to film again. Splat scenes are made on Windows with a graphics card of its own: integrated graphics, 360° photos and 360° videos are not taken yet.
Checked on the author's laptop with an RTX 4060 Laptop GPU: a room from 150 photos in 12 min 18 s, and his own one minute video of an object, filmed with a phone, 129 of 130 frames placed and the object set upright, in 7 min 47 s. The three qualities were measured on that laptop with the training program alone, on that object, a place filmed in 8K and a room of 150 photos, and the box, the files and the headset copy by the project's tests; no Detailed or Maximum scene was made in the app itself yet, and no scene of the maker was opened in a headset yet.
More: the notes of desktop build 21 and desktop build 22, and the components and their sums.
An Immich server does not take .spz or .ply files. Immuch360 saves a splat scene inside a photo of it, <name>_splat.jpg, which any Immich server keeps like any other photo: it shows in the timeline of all your devices, and Immuch360 opens the scene from it. Experimental, on by default, with nothing to change on the server.
- In the splat viewer of a computer, an Android phone or a tablet, walk to a view you like, then "Save to Immich": the view you see becomes its photo, in your timeline on the scene's date and in the album "Splat scenes". Several splats of a share or a folder: select them, then "Upload to Immich". A .ply is saved as an SPZ, compressed with a slight loss.
- Open the photo in your timeline, then "Explore the splat scene": on a computer, an Android phone or tablet, or a Meta Quest 3 or 3S with the GitHub build. Each device downloads the scene once (on mobile data, it asks before a large one), then opens it at once, offline too.
- The photo carries a small 3D mark in a corner, so that you tell it apart in Immich and other apps; "Mark the photos of saved splat scenes", in Settings, Advanced, leaves it out of the next ones.
The editor and the one key rotation are off on these photos: a splat scene turns in its viewer, with "Turn upright". Android TV, iPhone and iPad show the photo and say where to explore it; LG and Samsung TVs and the Immich apps show the photo. A photo edited in Immich keeps its scene, which opens from the original; a copy saved again by another program, as a messaging app does when it compresses photos, loses it.
Checked against test servers of Immich 3.3.0 and 3.2.4: scenes of 38,884 to 1,000,000 gaussians saved in 2 to 7 seconds and read back to the byte, also through a proxy that drops range requests, a second save of the same scene found it already there, and the photo shown with its mark by the Immich web app. No splat photo was opened in a headset yet.
More: the notes of build 41 and desktop build 21.
Your videos sit on a NAS, a computer, a media server or Plex. Immuch360 finds the servers of your network by itself, browses them and plays their photos and videos in place, in every viewer of the app, without copying anything: SMB (Samba, Windows shares), WebDAV (Nextcloud, Synology and others) and DLNA media servers (Jellyfin, Emby, minidlna, a NAS, a TV box). A phone can also share its own gallery on the Wi-Fi for a headset or any WebDAV client, and so can a Windows computer.
- Open the Library tab, then Network shares, then + and "A network share (NAS, computer, media server)". From build 24, "Add a network share or a media server" on the welcome page opens Network shares directly, without a server.
- Tap a server under "Found on the network", or fill the form by hand: type, server name or address, share or path, start folder, user name and password.
- Tap "Test the connection", then Save. Tap the share to browse it: folders first, then the photos and videos, with the 360° badge on the files recognised as 360°.
- For a Plex server: in Network shares, + and "A Plex Media Server", then tap your server under "Found on the network", paste a token once ("How to get it" on the page says where to find it), then "Test the connection" and Save.
- With an Immich server connected, select files in a folder and tap "Upload to Immich" to send them to your server.
The players read the bytes they need through a bridge inside the app, with byte ranges, so seeking works and nothing is stored on the device; an SMB video is read over up to six connections in parallel for smooth playback. From build 29, films recorded as M2TS (Blu-ray, AVCHD camcorders, TV recorders) play in the Android app from SMB and WebDAV shares and from DLNA servers that list them as transport streams, and a DLNA server that lists a size of 0 no longer gives an empty video.
Plex Media Server, without plex.tv: the app pairs with your server directly, with a token you paste once, and reads the original files of your libraries live, so 360° stays 360°, at home and, through your port forwarding, away from home. On an LG TV, Plex is signed in with a code on plex.tv/link.
More: network shares, share this phone on the network, DLNA media servers, Plex Media Server.
On this device lists the albums of the device one by one, without their subfolders, so a folder of films in Download/Quest or a folder of splats does not show there as it sits. "Browse a folder" opens a folder of the phone, the tablet or the Meta Quest like a network share, with all its subfolders, and keeps it in your list.
- Library, On this device, "Browse a folder" (or Network shares, +, "Browse a folder of this device").
- The folder picker of Android opens in Download: pick a folder inside it, such as Download/Quest, then "Use this folder" and "Allow". Android 11 and later let apps open a folder inside Download, not Download itself, and the photos placed directly in Download stay in the Download album.
- The folder opens with its subfolders, its photos and videos with their 360° and 3D badges and, in the headset, its Gaussian splats. It stays at the top of On this device; "Cannot be read now" means it was moved or unplugged, and its cross takes it off the list, with Undo, leaving the files on the device.
- A long press, or Select, then "Upload to Immich" sends files to your Immich server.
TIFF photos show too, on phones, tablets, Android TV and the Quest. From your server, a TIFF shows from the JPEG your server makes of it ("Shown as the server's preview: this device does not decode TIFF"); from the device or a share, the app decodes it itself ("Decoding the TIFF on this device"), and downloads keep the original TIFF. Windows and macOS show TIFF photos through their own decoders, and Linux gives them a placeholder tile.
Checked on an Android 16 emulator: the picker in Download, a folder and its subfolders, a photo, an upload, a restart of the app, a moved folder and its removal. The TIFF decoder gives back 24 test files to the exact pixel.
More: the notes of build 38.
You come back to a film a day later and do not know where you were, nor which films you finished. Immuch360 keeps it for you: the tile of a film shows how far you watched, and the film plays on from there.
- A video longer than 10 minutes counts as a film. Its tile shows a bar of how far you watched, and a check once you watched it to its last 2 minutes.
- Open it again: it plays on from where you stopped, with "Resumed at 42:10" for a few seconds. No button, no popup, and swipes and the keys of a remote work as before.
- "Play from the start" and "Mark as not watched" are in the menu of the viewer and in the details, which also say "Watched 42 %" or "Stopped at 42:10 of 01:40:00". On a TV, the remote reaches them in the details.
- In Settings, Asset Viewer, Videos, "Remember where I stopped" turns it off, and its slider sets the length of a film, from 0 (every video) to 60 minutes. Films no longer loop; shorter videos keep looping.
It works in the viewer of your Immich library, in the player of the network shares and of the folders of the device, in the immersive view of the Meta Quest and on computers; the 360° players of phones and computers start a film from the beginning. What you watched stays in a database on the device and is never sent to your server.
Checked by the project's CI and on its build host, with build 38 and desktop build 18: the whole Dart suite passed, with the tests written for the films, from the bar on a tile to the resume in the immersive view of the Quest.
More: the notes of build 38 and desktop build 18.
A film from your server or your NAS plays from the file this device decodes, and when it has to wait, it says why and for how long.
- The file that decodes plays. Immich keeps the original of a video and, when it transcodes, a copy. The app plays the one this device decodes: "Playing the original: the server's copy (H.264 5760 x 2880) is above this device's decoder". When the server cannot stream that original, the app downloads it first ("Downloading the original to play it: 45 %"); when neither file decodes, it says what to change in Immich. Swipe up on a video: the "Video source" tile says which file plays and why, and its button plays the other one.
- A slow link. Under the spinner, "Loading: 2 Mbit/s of the 8.1 Mbit/s this video needs" and "Starts in about 37 s": the app waits for what the link carries, then plays longer stretches. "The server sends this video at 2 Mbit/s, it needs 8.1 Mbit/s: it will pause now and then" comes with the way out: in Immich, Administration, Video transcoding, a lower target resolution or a maximum bit rate.
- A server that stopped. "The server stopped sending this video. It plays on as soon as the server answers": the film waits for the server and plays on once it answers. The same holds for a share.
- A laptop with two graphics chips. From desktop build 21, the Windows app runs on the fast chip: on the author's laptop, an 8K HEVC film that showed 15 to 19 pictures a second, with black frames, on the integrated chip now shows about 30, with none. In the details of a playing film (I on the keyboard), "Video decoding" names the graphics card and the decoder ("Hardware, on NVIDIA GeForce RTX 4060 Laptop GPU • d3d11va"), and for a 4K or 8K film, when Power saving in the graphics settings of Windows keeps the app on the integrated chip, it adds where to choose High performance: Windows Settings, System, Display, Graphics, then restart the app. On battery, Power saving there keeps the app on the integrated chip and saves power, at the cost of 4K and 8K playback. On an integrated chip, 8K plays better than with desktop build 20, but not smoothly: about 23 pictures a second, with a few black frames.
iPhone and iPad keep their system decoders and their own waiting rule. Checked on an Android emulator against a server and a share slowed down to between 0.6 and 3 Mbit/s: films that build 38 gave up after 20 s now play, and a film whose server went silent for a minute played on 1.3 s after the server answered.
More: the notes of build 37, desktop build 17, build 39, desktop build 19 and desktop build 21.
With an Immich server, Immuch360 is the Immich mobile app, with the same server and the same account as the web app: backup, timeline, albums, search, people, memories, sharing, partners, all synced with your server. It installs next to the official app. On top of it: the 360° badge and list, every immersive viewer, the choice between the original file and the server's transcoded stream for each video, the technical details of a video, and the files of a share or of the device sent to your server by hand.
- On the welcome page, tap "Connect to an Immich server", then log in with your server address, your email and your password, as in the Immich app; Back returns to the welcome page. Up to build 23 the login page opens directly. Your library, albums and backup settings are those of your account.
- In Settings, Asset Viewer, Videos, "Video source" picks the original when this device decodes it, always the original, or always the transcoded stream.
- To show a 360° photo to someone who does not have the app, share it with an Immich shared link: the Immich web app shows it as a sphere in their browser.
The current build, build 42, is based on Immich main of 10 October 2026 (version 3.3.0-rc.0), like builds 28 to 41; build 28 was tested against a server built from that same Immich main, and build 27 also against an Immich 3.2.4 server. Please report problems in Issues, not to the Immich project.
What is the same and what Immuch360 adds is in Compared with Immich.
More: everything else is Immich, compared with the Immich app.
Ten years of photos make a long scroll. Pinch out past the smallest tiles and the timeline shows one block per month, with a few tiny thumbnails and the count, then one block per year with its twelve months. Asked by ChazyChaxxx in Discussion 10.
- On a phone or a tablet, pinch out; on a computer, hold Ctrl and turn the mouse wheel (Command on a Mac), or pinch on the touchpad. "Months" shows, then "Years".
- Tap or click a month or a year to open it at your usual zoom; from the months and the years, Back returns to the grid.
- The scrubber on the right shows the year and the month under your finger, and slows down when you hold it still.
Checked on the author's phone and, step by step, on a Windows PC with desktop build 14. The app always opens on the grid, and TVs and the window of the Meta Quest keep the grid.
More: the notes of build 33 and desktop build 14.
An illustration. The Tapo support was checked against a simulated camera.
Your Tapo cameras of TP-Link, next to your photos, without the Tapo app. The app shows a camera live (Android phones and tablets, Android TV, the Meta Quest, Windows and, video only, LG TVs; iPhone and iPad from version 3.3.2, not tried on them yet) and lists the recordings of its memory card day by day (phones, tablets, Android TV, the Quest and computers). A clip is fetched from the camera, plays like any video and can be sent to Immich. The app talks to the camera on your network only, never to the servers of TP-Link, and never changes anything on the camera.
Checked against a simulated camera. The protocol was written from captures of a C510W with firmware 1.3.4. A report with the model and firmware that "Test the camera" shows helps a lot.
- In the Tapo app first: create the camera account (settings of the camera, Advanced Settings, Camera Account), used for the live view, and turn on Third-Party Compatibility, under Me, then Tapo Lab.
- In Immuch360: Library, Network shares, + and "A Tapo camera". Tap your camera under "Found on the network", or type its address.
- Type the password of your TP-Link account for the recordings, the camera account for the live view, or both; then "Test the camera", and Save.
- Tap the camera: its live view is at the top of its page, with the sound, SD or HD and Full screen; below it come the days with recordings. Tap a clip to fetch it and play it; its ⋮ menu has "Upload to Immich".
More: Tapo cameras.
A Drone card in the Library, experimental and on by default, gathers what Immuch360 does with a DJI drone: on an Android phone, the drone's live video through its remote controller, and its photos and videos brought to Immich over USB; in a Meta Quest or on an Android TV, that live video relayed by the phone, to watch. Immuch360 is not a DJI product and is not approved by DJI, and nothing is sent to DJI.
See what your DJI drone sees on your Android phone, without DJI Fly and without any account: plug a DJI RC-N3 remote controller into the phone with its cable, and Immuch360 shows the drone's live video full screen in landscape, H.265 in 1080p, with the flight values read from the cable. The remote keeps full control of the drone. It was tried with an RC-N3, a DJI Neo 2 and a Samsung Galaxy S24+: on the ground with build 29, and in flight with test builds of build 30 on 24 and 25 October, then with build 30 on 26 October.
Which remotes and drones, on 26 October 2026: the live video comes through a DJI remote that holds the phone on its cable. Tried another pair? On the live screen, open Advanced, then Diagnostics, and tell us in Issues which drone and remote you used and what Diagnostics shows.
- Tested: a DJI Neo 2 fitted with its Digital Transceiver, which it needs to fly with any remote, and a DJI RC-N3, with a Samsung Galaxy S24+; on the ground on 23 October and in flight, indoors, from 24 to 26 October.
- Expected to work: the RC-N3 with the other drones DJI lists for it (Neo, Flip, Mini 4 Pro, Mini 5 Pro, Air 3, Air 3S, Lito 1, Lito X1, and the Avata 360 by its own guide), and the RC-N2, which holds the phone on the same cable, with the same drones and the Neo 2. The app shows H.265 video only, and the flight values are proven on the Neo 2 only: with another drone the picture or the values may be missing.
- Not supported: remotes with their own screen (DJI RC, RC 2, RC Pro 2), and so the Mavic 4 Pro, which DJI ships with one of them; DJI goggles; the RC-N1, the RC-N1C and older remotes; a drone flown from the phone over Wi-Fi, without a remote.
It only listens. No command is ever sent to the remote or the drone: the one byte the page writes each second, from 20 seconds after the remote opens, only tells whether the remote takes data, and carries no command.
On the live screen: the drone's battery and the motor time and, in flight, the height above the take off point, the vertical speed, the speed and the distance below the drone. A value goes there only once our own flight captures prove it: the height, the speeds and the distance below were proven on the captures of two indoor flights on 25 October, up to 1.8 m high and 1.5 m/s, not beyond yet; showing them there is new in build 30 and first tested with it. The height shows about 1.5 s after lift off, once the drone has left the ground or the hand, and stays hidden until the motors stop if it ever jumps in a way no aircraft can. Advanced adds the battery's voltage and temperature, the heading (its zero not checked against north) and the motors, and Diagnostics every number the link gives, the battery current included. No satellites, position or distance from home are shown. The numbers are not compared with DJI Fly yet: do not fly by them.
Obstacle ring, on by default: when the drone's sensors see something close, a translucent circle shows around the middle of the picture, with an arc toward the obstacle, amber turning red as it gets closer, its distance beside it and a short tick that speeds up; with nothing close, nothing shows. The circle and the direction of the arc were checked in flight, indoors, on 25 October, on a test build where the direction was an option; shown by default, it is first tested with build 30. In Advanced you set the distances ("Glow from", 3.0 m, and "Strong glow from", 1.0 m), choose a frame at the edges of the picture instead of the circle, or turn off the ring, its sound or its vibration. It shows only what the drone's sensors report: nothing in Sport mode or with obstacle avoidance off, and no glow does not mean the way is clear. Information only: Immuch360 never steers or stops the drone.
- The Drone card is in the Library, and "DJI live video" on its page: "DJI live video (experimental)", in Settings, Advanced, is on by default.
- Turn on the drone and the remote, close DJI Fly, then open "DJI live video" and read the safety notice.
- Plug the remote into the phone with its cable. If Android asks which app should open it, choose Immuch360 without "Always", which would take the remote away from DJI Fly; if it asks for a USB mode, choose charging only. Plugging in the remote then opens this screen by itself ("Open this screen when the remote is plugged in", on by default in Advanced).
- Remote, Drone and Picture light up in turn, and the picture comes full screen within a few seconds. Three buttons (leave, "Send to a headset or a TV" and Advanced) and the values sit in the black bands beside the picture. The notes, such as "Live", fade after about five seconds; a tap anywhere brings them back, and nothing on the picture acts on the drone. An error that asks you to act stays.
- Advanced has "Save a capture for a bug report", which writes the link's capture to
Download/Immuch360/dji-link, "Play a saved capture", to play one again without the remote, and Diagnostics, with every number the link gives.
The drone's photos and videos cannot be reached through the remote, which does not open the drone's storage: copy them from the drone itself over USB or from its card, as below. Keep the saved captures to yourself, as the page says: they hold the drone's video and the serial numbers of the remote and the aircraft, and may hold its position; a report in Issues with what Diagnostics shows helps, above all with other DJI remotes.
The phone plugged into the remote can send the drone's picture and values to Immuch360 in a Meta Quest or on an Android TV or Google TV on the same local network, for the people with you. A headset shows them in a window or, larger, in a flight view in front of you, and a TV full screen, with the same values and obstacle ring as the phone. They only watch: nothing a headset or a TV does reaches the remote or the drone. Their notes, such as "Watching only", fade after a few seconds and come back with a key, a tap or a button. The drone's picture reached a Quest 3 once, on 24 October, over a home Wi-Fi; the headset window and the flight view with the values and the obstacle ring are first tested with build 30. Should the circle hide the middle of the picture in the headset, "Frame at the edges" in its menu keeps the middle clear. On a TCL Android TV, the pairing and the picture were tried on 25 October, with stutter and a green cast on the earlier relay; on 26 October, with build 30, after the switch to the steady stream, the TV kept showing the picture through a flight where the drone sent 18 Mbit/s, with 7 freezes, the longest 1.7 s; how the picture looked was not recorded. From build 31 the safety notice on the TV keeps the focus of the remote (checked by widget tests); in build 30 the view under it could take the focus, so the notice could be neither read nor accepted, and the only way out was Back, which leaves the page. Flying while you watch the headset or the TV needs an observer next to you who keeps the drone in sight (EU open category); without one, watch the drone.
- On the phone, on the live screen, tap "Send to a headset or a TV" and turn it on.
- Meta Quest: open Immuch360, Library, Drone, and pick the phone; type the code the phone shows, once for that phone. The picture opens in the window; "Open the flight view" makes it larger, and B or Y brings the window back.
- Android TV and Google TV: open Immuch360, Library, Drone. Under "Let this TV watch", the TV shows a code and its QR code: on the phone, in the same panel, tap "Add a TV" and scan it, or type it. Then select the phone on the TV and press OK: the picture comes full screen; OK shows or hides the numbers, and Menu opens the options.
- The phone and the screen must be on the same local network. Away from home, turn on the phone's hotspot, in the 5 GHz band if it offers it, and join it from the headset or the TV.
- For a bug report, the headset's menu and the TV's Options have Diagnostics and "Save a reception record", which keeps what that screen received.
Relay quality, new in build 30, in Advanced on the phone: in flight the drone sends about 18 Mbit/s, and on 25 October a home Wi-Fi path from the phone through the router to the TV carried that full stream only a third of the flight time; the rest of the time the TV's picture stuttered, broke up and took a green cast. With Automatic, the default, a screen whose Wi-Fi cannot keep up gets a steady picture that the phone encodes again for it, up to 1080p at 30 pictures a second and at the rate its Wi-Fi carries, made to stay clean, with less detail, instead of breaking up; it goes back to the drone's own picture at the next landing or take off, once its Wi-Fi has carried the steady picture for 30 s without a stall; on 26 October that TV's Wi-Fi never did, and the TV stayed on the steady picture, at 15 pictures a second for 44 of its 59 seconds. Full stream always sends the drone's picture as it comes, Steady stream always the phone's. The steady picture first ran on a phone on 26 October, with build 30: a Galaxy S24+, encoding it in hardware HEVC at a constant bit rate. A TV on an Ethernet cable, or a screen joined to the phone's own hotspot, leaves one Wi-Fi hop instead of two.
Not in this build: the drone on iPhone and iPad (not started), the relay to LG and Samsung TVs, and the proof of the values above 1.8 m and 1.5 m/s, then the satellites and the distance from home, which wait for an outdoor flight.
Import the photos and videos of a DJI drone over USB, straight to your Immich server: plug the drone or a card reader into an Android phone, pick the new files and send them, with the videos placed on the map from the drone's flight data and the drone's 360° spheres shown as 360°. The Immich app backs up only what is already in the phone's gallery, and the Immich server cannot read the place of a DJI Neo 2 video yet. This page is experimental, on Android phones and tablets only, and was checked on an Android emulator with test files; a test with a real DJI Neo 2 is on the roadmap.
- Open the Drone card in the Library, then "Photos and videos from the drone". Its setting, "DJI drones (experimental)" in Settings, Advanced, is on by default; turn it off there to hide that page.
- Plug the drone (a Neo 2 can stay off) or a card reader into the phone with a USB-C data cable; a DJI remote without a screen (RC-N1, RC-N2, RC-N3) holds no photos. On the DJI drone page, tap "Choose the drone or the card", choose it in the side menu of the picker, open its DCIM folder or keep the whole drive, then "Use this folder" and Allow.
- The page lists the photos and videos by day, without the .LRF, .SRT, .THM and .m4a side files. Tap "Select all new", then "Upload to Immich"; the files sent before carry a cloud mark and are skipped. "Keep on the device" copies the files to the phone's gallery instead, in the album "Immuch360 import".
- For a video to land on the map, turn on Video Subtitles in DJI Fly (video mode, Settings, Camera) before you fly: the drone then writes a .SRT file next to each video, the app reads the place from it and sets it on your server after the upload, when Immich found none.
The 360° spheres of DJI drones (Mini, Air, Mavic and others, recognised from their camera) show as 360° in Immuch360 even without 360° tags. Immich needs those tags: the upload option "Tag drone spheres as 360° for Immich", off by default, sends the photo unchanged with a small .xmp file beside it, so that Immich shows it as a sphere too. The Neo 2 has no sphere or panorama mode: its photos and videos are flat. When the phone recorded the sound of a Neo 2 clip, that sound is in a separate .m4a file: the page marks the clip, and Immich receives it without sound (download it with DJI Fly to keep the sound). Any camera card with a DCIM folder works the same way in a card reader. Nothing is sent to DJI.
More: DJI drones over USB, DJI link diagnostics.
The raw .insp photos and .insv videos of Insta360 cameras (one or two lenses, in one track, two tracks or two files), the .360 files of the GoPro MAX and the .osv files of the DJI Osmo 360 are stitched by the app as they play, with the calibration written in the file, with nothing to install anywhere.
- Put the raw files where the app reads them: an SMB or WebDAV share, your Immich server (it takes .insp and .insv only), or the folders of a computer. The gallery of an Android phone does not list raw files, so a raw file copied to the phone shows neither in its gallery nor in the app.
- Keep the two files of a recording made of two files together: the app looks for the other one next to the first.
- Open the file and tap 360°. A photo shows "Raw 360° file, stitched by the app" with the source of its calibration; a video is stitched as it plays. On Android phones, tablets and TVs, an Insta360, GoPro MAX or DJI Osmo 360 video also plays stabilised with the camera's gyroscope (experimental).
Linux and macOS play raw videos flat, and dual fisheye .dng files show flat for now.
More: raw 360° camera files.
A 360° video filmed in the hand, on a bike or on a helmet shakes, and its horizon leans. The cameras record their own motion in the raw file without stabilising its pixels. From build 42, the 360° player of Android phones, tablets and TVs reads that motion, recorded by the camera's gyroscope, and turns each frame back: the horizon stays level, the shake goes and the view follows the road when you turn. Experimental, on by default. The Immich app has nothing like it.
- Put the raw videos where the app reads them: your Immich server takes the .insv videos of an Insta360 X3, X4 or X5 as they are, and a network share or a folder of the device also holds the GoPro MAX (.360) and DJI Osmo 360 (.osv) videos, which an Immich server does not take. Keep both files of a recording made of two files together, as in Open the raw files of 360° cameras.
- Open the video from your timeline, a share or "Browse a folder" and tap 360°: it starts at once, and "Stabilized with the camera's gyroscope" shows for a few seconds.
- The stabilisation button, in the top bar of the player next to the audio, 360° and 3D buttons, turns it off to see the video as it was filmed, and on again. "Stabilize with the camera's gyroscope (experimental)", in Settings, Asset Viewer, Videos, follows the button and keeps your choice for the next videos.
A GoPro MAX video was checked on one file: the horizon and the shake are corrected, except while the camera points near straight up or down, where part of the shake stays. A DJI Osmo 360 video goes from the raw picture to the stabilised one over its opening 5 seconds, since the camera's record of those seconds can lean by up to 20°. A GoPro MAX 2 video plays as before, without the button, and so does a file the app cannot read at any position: a file of a DLNA or Plex server that does not tell its size, a server that sends a whole file when asked for a part of it, a device that sends each file from its start. A video without a motion track plays as before, without the button, and the view can start turned to one side, the horizon level. iPhone, iPad, the Meta Quest and the computers do not stabilise yet.
Measured on six Insta360 files: the gyroscope matches the motion seen in the picture within 0.1 to 0.3° per frame, against a shake of 0.65 to 1.0° per frame on motorbike rides. Checked by the project's tests and CI on the motion tracks of sample files of Insta360 X3, X4 and X5, GoPro MAX (one file) and DJI Osmo 360 cameras, read from the Immich library and from a share. No run of the stabilised picture on a phone or a TV is recorded yet.
More: the notes of build 42, and issue 14, where Aoaodacat asked for it.
Rotate a photo 90° with one press, without opening an editor: a button, a key of the keyboard or a colour key of the TV remote, on every platform. The Immich app turns a photo in its editor; Immuch360 does it with one key, and for your own photos on an Immich server 2.6 or later it goes through that same server editor, so the web app and your other devices show them turned. Any other photo is turned on this device only. 360°, 180° and 3D photos never turn, so the immersive views stay level.
- Phones, tablets and the Meta Quest window: open the photo and tap Rotate in the bottom row, before Edit, to turn it clockwise; a long press turns it the other way. With a keyboard, R and Shift+R.
- Android TV and Google TV: the yellow key of the remote turns the photo clockwise and the blue key counterclockwise, wherever the focus is in the viewer. On a remote without colour keys, press Down: the bar under the photo shows with Rotate selected (one Right away when the photo has a text button), and each OK turns the photo.
- LG TVs (webOS): yellow and blue as on Android TV, R and Shift+R on a keyboard, or the turn button of the photo's controls. Samsung TVs turn a photo with one key too.
- Windows, Linux and macOS: R turns clockwise, Shift+R counterclockwise, or the rotate button in the top bar, before full screen.
- Photos of a network share, Plex or a camera: the rotate button first in the top bar, R and Shift+R, or the yellow and blue keys.
Where the turn is saved: a photo of your own account on Immich 2.6 or later is turned through the server's photo editor, which keeps the original file and makes a turned picture (a thin bar shows while it works; four turns, or one turn back, return to the original). The photos of the device, of a share, of a partner or a shared album, and every photo on an older server are turned on this device only, for that photo, and the file is never changed; the app says so once for an Immich photo. In the Android, iOS and computer apps, a turn kept on the device shows in the viewer, not yet in the thumbnails, the slideshow and the memories. Videos, the locked folder and every 360°, 180° or 3D photo have no Rotate.
On a Windows computer, Immuch360 Desktop reads the folders you choose with no server at all, plays flat and 360° videos in a player of its own, browses the same shares and servers, and can share the computer with a headset at home. Linux and macOS have it as previews, with 360° videos played flat.
- Install the preview, or unzip it and start
immuch360.exe, see Install. On the welcome page, "Use without a server" opens the choice of your folders, and "Connect to an Immich server" the login page, with its QR code for your phone. - A photo, a video or a folder opened with the program, or dropped on its window, opens at once, a 360° one in its 360° view; several files open together on one page. Photos and videos get it in "Open with"; it never makes itself their default program.
- In a viewer, the keyboard drives it: Space plays and pauses, J and L go back and forward, F is full screen, and R and Shift+R turn a photo.
More: on a Windows computer, platform support.
AV2 is the video format that follows AV1, finalised by the Alliance for Open Media in 2026, and no phone, TV or graphics card we know of decodes it yet. Immuch360 Desktop reads AV2 files with software decoding: the processor of your computer decodes them with dav2d by VideoLAN, as fast as your computer allows. Immich does not play them. Experimental, on by default, on Windows and Linux; on macOS, checked by the project's CI only, no Mac tried yet.
- Put your
.ivfor.obuAV2 files in a folder of your library, or open the share that holds them, or open one with Immuch360 Desktop from your file manager. Their tiles carry an AV2 badge. - Open one. Once, "Download and play" fetches the AV2 decoder (about 1 MB, 1.7 MB on a Mac; the Windows one signed by APROGSYS) and checks it by its SHA-256; it then works offline, and your AV2 videos get their thumbnails.
- "Video decoding", in the details of the video (I on the keyboard), shows how fast this computer decodes it. On the author's laptop, with an Intel Core i9-13980HX, 8 bit videos up to 1080p play smoothly, 10 bit 1080p just keeps up, and 4K does not keep up, in 8 bit as in 10 bit: such a video pauses to catch up. A video this computer decodes too slowly says so before it plays, with "Play anyway".
To turn it off: Settings, Asset Viewer, "AV2 videos (experimental)"; "Remove the AV2 decoder" is there too. Decoding uses every core of the processor and warms the computer. The phones, the TV and the Quest do not play AV2 yet, and the Immich server does not take .ivf and .obu files.
More: the notes of desktop build 21, and the AV2 decoder and its licences, from the prerelease av2-decoder-1.
Immuch360 keeps the whole Immich mobile app and adds what is around it. In short:
| Immuch360, compared with the Immich app | |
|---|---|
| The same | your Immich server and account: backup, timeline, albums, search, people, memories, sharing and partners, all synced with your server. It installs next to the official app. |
| No server needed | it also runs without a server or an account, on the photos and videos of the device, the folders of a computer and network shares; Plex and the cameras use their own sign in, never an Immuch360 account. |
| 360° and immersive | 360° photos and videos as a sphere, panoramas, VR180 and 3D, an immersive view in a Meta Quest, a 360° badge and a 360° list, and on Android phones, tablets and TVs the raw videos of Insta360, GoPro MAX and DJI Osmo 360 cameras stabilised with the camera's gyroscope (experimental). 360° viewing in the Immich mobile app has been requested since January 2024 and is not there yet. |
| 3D from your photos | on a computer, one photo becomes a 3D photo, a 3D scene or a 360° panorama, and in a Meta Quest 3 or 3S any flat photo gets its relief: made by AI on your own computer and headset, labelled as such in the app and in the files, the original never changed. The Immich app makes nothing in 3D. |
| Gaussian splats | opened on Android phones and tablets, computers and the Meta Quest 3 and 3S, made from your photos or a video on a Windows computer, and kept on your Immich server inside a photo, since the server takes no .spz or .ply file. The Immich app opens no splat. |
| On the TV | the same app on Android TV and Google TV, and a TV app for LG TVs, also packaged for Samsung TVs as a test build. Immich's own apps do not install on an LG TV. |
| Sign in with your phone | a TV, a headset or a computer is signed in when your phone scans its QR code, and your password stays on the phone. The Immich app has nothing like it. |
| Shares and Plex | SMB, WebDAV and DLNA shares and Plex servers, played in place, and their files sent to your server by hand. |
| Tapo cameras | the live view and the recordings of the memory card, next to your photos; checked against a simulated camera. |
| One key rotation | the Immich app turns a photo in its editor; Immuch360 turns it with one key, and for your own photos on Immich 2.6 or later it goes through that same server editor, so the web app and your other devices show them turned. |
| Videos | audio and subtitle menus in the Android player, which the Immich app's Android player does not have; the original file or the transcoded stream, chosen per video; the technical details of a video; films that pick up where you stopped; the file this device decodes, chosen for you, and a slow server told apart from one that stopped; on computers, AV2 videos decoded by the processor (experimental). |
| Your drone | a DJI drone's photos and videos sent over USB, with the videos placed on the map from its flight data, where the Immich app backs up only what is already in the phone's gallery; and the drone's live video through an RC-N3 remote, with its flight values and an obstacle ring, on the phone and relayed to a Meta Quest or an Android TV. Both experimental. |
| Where to report | Immuch360 Issues, not the Immich project. |
The comparison function by function is in Compared with the Immich app.
Nothing goes to the developer: no account, no analytics, no crash reporting service, no advertising. The app talks only to the servers you choose (your Immich server, your shares, your Plex server, your cameras) and, without a server, to nothing at all. Passwords and tokens stay in the secure storage of the device; LG and Samsung TVs have none for the app, so there they stay in the app's own storage, not encrypted. The camera is used on the device only, by the Spatial 2.5D player and to scan the code of a screen you sign in; its images are never stored and never sent anywhere. A screen signed in from your phone gets a session of its own, sent encrypted on your home network, never your password; an LG TV is signed in by a page in the phone's browser, which sends your email and password to the TV unencrypted on your home network, and the TV keeps only the session. The captures and reception records of the drone pages stay on the device unless you share them: they hold the drone's video and may hold its position, and a capture the serial numbers of the remote and the aircraft. The drone's picture and values go from the phone only to the headsets and TVs you pair, on your local network, not encrypted, as with a phone shared on the Wi-Fi. Nothing is sent to DJI, nor to TP-Link. The full policy is in PRIVACY.md, and the details per source in the user guide. What you watched of your films is kept in a database on the device and never sent to your server.
The AI features work on your devices only. The photo, its relief, its scene and its panorama are computed on your computer or in your headset and sent nowhere. The app connects only to download a component you asked for, from the releases of this project on GitHub or, failing that, from the model's official page when it has one, checks each file by its SHA-256, and then works offline. ONNX Runtime, which runs the models on a computer, sends telemetry to Microsoft in its official builds; Immuch360 turns it off. The new files go next to your originals, never over them, and reach your Immich server only if you turn on "Also back up AI versions" ("Select all" in the backup albums turns it on too).
Immuch360 is an unofficial fork of the Immich mobile app, under the GNU AGPL v3, not affiliated with, nor endorsed by, the Immich team or FUTO. The fork exists because 360° viewing on mobile has been requested in Immich since January 2024 and is not in the official app yet; it ships it now, gathers real device feedback, and will offer back to Immich, in small pull requests, whatever the maintainers want. Everything the official app does is kept; the branches, the build chain and the CI are described in Build it yourself.
The 360° photo viewer is based on the upstream pull request immich-app/immich#31169 by dmitry-brazhenko, itself built on the prototype by bencefr in #30192; thanks to both. The remote control fixes of the search filters and the album sorting on TVs started from the work of mlc70 in mlc70/Immuch-Android-TV#1, and the action rail and the filter sheets on 80 percent of the screen height come from mlc70's mlc70/Immuch-Android-TV#3, with their authorship kept; thanks to mlc70. The LG webOS app, also packaged for Samsung TVs, is built on immich-tv-webos by Seeky91, under the MIT licence, kept in its folder; thanks to Seeky91. The Tapo cameras were written from what pytapo, Home Assistant Tapo Control and python-kasa document. The Meta Quest view relies on the Meta Spatial SDK, which is not open source, so it stays in this fork. The SMB shares use libsmb2, under the LGPL 2.1 or later: from build 27 and desktop build 7, every build carries its notice, its licence texts and its source archive, Immuch360-libsmb2-sources.tar.gz, which is also attached to each release. The Windows and macOS builds carry libmpv (the library of mpv, with FFmpeg) built by the project, under the LGPL, with its licences and sources, listed on the licence page of the app (Licenses, at the bottom of the profile menu). From build 40, the Quest APK carries zstd-jni 1.5.7-3 (BSD 2-Clause), with zstd 1.5.7 under its BSD licence, to read SPZ version 4 splats, and its licence page shows them under "zstd-jni". From build 41 and desktop build 21, the splat viewer of the computers, phones and tablets carries Spark 2.4.0 (MIT, World Labs), built by the project's CI from its sources, and three.js 0.180.0 (MIT), listed in its notes; the AV2 decoder, downloaded only when you ask from the prerelease av2-decoder-1, is built on dav2d of VideoLAN (BSD 2-Clause), under the Alliance for Open Media Patent License 1.0 (its notes). The details and the trademarks of the platforms named on this page are in License and trademarks.
Build 33 brings the Search navigation of Michael Cloutier (mlc70) with his commits, the commits and ideas of Gaurav Mukherjee (gmfun), and ideas of the exhibition builds of ppawelstachh-sys, written again on our code; the month and year views answer ChazyChaxxx in Discussion 10. Thanks to them. Build 42 answers Aoaodacat, who asked for the stabilisation of 360° videos in issue 14, and gthrepwood, whose reports in issue 13 led to the panorama memory of desktop build 22; thanks to both.
The AI features run models and engines made by others, downloaded only when you ask, from the prereleases ai-components-1, ai-components-2, ai-components-3 and ai-components-4 of this repository; each file, its source, its licence and its SHA-256 are in MODEL-LICENSES.md. Thanks to their authors:
- 3D photos: Depth Anything V2 Small (Apache 2.0), run by ONNX Runtime (MIT) on a computer and by LiteRT 2.3.0 (Apache 2.0), inside the Quest APK, in the headset.
- 3D scenes: MoGe-2 ViT-S (MIT), exported to ONNX by the project from its MIT weights, and LaMa (Apache 2.0).
- 360° panoramas: FLUX.2 klein base 4B with its VAE (Apache 2.0), Qwen3 4B (Apache 2.0), the 360° LoRA of nomadoor (Apache 2.0), MI-GAN (MIT) and Real-ESRGAN x4plus (BSD 3 Clause), run by stable-diffusion.cpp and ggml (MIT), built by the project's CI and signed on Windows.
- Splat scenes: COLMAP 4.2.1 (BSD 3 Clause), built without its GPL parts, and Brush 0.3.0 (Apache 2.0), both built by the project's CI and signed on Windows.
The 360° LoRA of nomadoor is Apache 2.0 on its card and was trained on CC0 and public domain images, with a part under CC BY: the attribution of that part comes in a later version of MODEL-LICENSES.md. Nothing here is under a non commercial licence, and nothing needs CUDA. ONNX Runtime and LiteRT have other libraries built in, listed in their notices, among them Eigen under the MPL 2.0, a weak copyleft licence.
The captures of this page are real captures of the app: the phone ones on the Android build in an emulator, the Android TV ones on the Google TV emulator, the LG and Samsung ones in a browser that stands in for the TV, the Windows ones on a Windows 11 PC and the Meta Quest window in a Quest 3, all with CC0 panoramas from Poly Haven; the immersive captures of the headset were taken on a Quest 3 with the author's own media, and the iPad one in the iPad simulator, with a CC0 Poly Haven panorama. The pictures of the AI creator are real outputs of the app, made from CC0 photos of Poly Haven, with two real captures of the Windows app. The opening image and the pictures of the TV, the sign in, the rotation, the cameras and the drone are illustrations made for the project: they show no screen of the app, no logo of another company and no face. The use case cards set such an illustration above a row drawn for the project, with the platform logos, the app's icon, real captures of the app in two cards and CC0 photos of Poly Haven in two; besides the platform logos, they show no logo of another company and no face. The four how to cards of the splats and AV2 are made the same way, with no capture of the app; the AV2 card shows a frame of a CC0 film of Wikimedia Commons. Each image, with its source, date and licence, is listed in CAPTURES.md.
What is not done yet, the most likely first. Nothing here is a promise, and feedback on the issue tracker helps decide what comes first.
- The stores: Google Play with build 41 (in Google's review since 5 November; the TV listing in review), the Meta Horizon Store with build 41 (in Meta's review since 5 November), the App Store with the iOS version of the next builds, the LG Content Store (version 1.0.0 in LG's review since 24 October, then version 1.0.1), and later the Samsung store.
- AI creator: 360° panoramas on a Mac; splat scenes made on Linux, with integrated graphics and from 360° photos and videos; the headset copy of the Detailed and Maximum splat scenes measured in a headset; the AI labels in the iOS, LG and Samsung apps; panoramas tried on a Linux PC with a graphics card, and on AMD and Intel cards.
- Drones: an outdoor flight to prove the height and the speeds above 1.8 m and 1.5 m/s and the obstacle distances against a tape, then to show the satellites and the distance from home; the steady picture of the relay checked in a headset; the relay to LG and Samsung TVs; the drone on iPhone and iPad, not started; a test of the import page with a real DJI Neo 2, then the sound recorded by the phone merged into its clip. Nothing that sends a command to a drone is planned before those tests.
- TVs: build 29 on a real Android TV, its video controls and the sign in with your phone included; the shares, Plex and the live view of the LG app on a real LG TV, and webOS 26; Samsung test build 0.2.0 on a real Samsung TV, then the sign in with a phone, the shares, Plex and the cameras on Samsung TVs; then the 360° videos on the sphere of LG TVs, the sound of the cameras and their recordings (not before December 2026).
- Cameras: the Tapo cameras checked with a real camera.
- Computers: the test of each function by hand on a Windows PC, sign in with your phone included; Spatial 2.5D with the webcam on Windows, in development for November 2026; then the 360° video renderer on Linux and macOS, a test on a real Linux PC; then automatic updates and a signed macOS app; AV2 in MKV, WebM and MP4 files, which an Immich server takes.
- Phones and tablets: a time bar in the iOS 360° video player, previous and next in the 360° players of phones, audio track and subtitle menus in the iOS flat player; the splat viewer on iPhone and iPad.
- Immersive media: dual fisheye .dng, the stabilisation of the raw videos on iPhone and iPad, the Quest and the computers, and of GoPro MAX 2 files, spatial videos in 3D on the Quest if its decoders allow it, previous and next between spatial photos in the headset.
- Sources: swiping between the files of a share folder, Digest authentication for WebDAV, a QR code to bring the Plex token from the computer, IPv6 for Plex, H.265 Tapo recordings, channels on the TV home screen.
- Upstream: small pull requests to Immich for the parts the maintainers want, starting with the 360° photo viewer.
The full list, with the device checks still pending for each feature, is in Release status.
- Features: the complete inventory and the feature by platform matrix
- User guide: every function, step by step, with its options and messages
- Compatibility: formats, codecs, decoders, servers and devices checked, limits
- Platform support: what each system has, how it is installed, what differs
- Known issues and Troubleshooting, with the logs to attach to a report
- Technical details: architecture, Flutter and native modules, the media bridge, the stitching pipeline, the decoders
- The AI components: each model, its source, its licence, its size and its sum
- The desktop 360° video renderer: libmpv, the projection pass and the measurements behind it
- Release status: builds, stores and what each store has
- Build it yourself: phones, headsets, TVs and computers
- Immuch360 for LG webOS TVs: install in Developer Mode, the remote control keys, the CORS headers
What the app can read and play, for the reader who wants the whole extent. Each line is detailed in the user guide and the compatibility page.
Formats, sources, playback and hardware, in detail
- Formats: flat photos and videos (what the device decodes: MP4, MOV, MKV and more); equirectangular 360° photos and videos; partial panoramas (GPano crop); VR180; stereoscopic 3D, top and bottom or side by side, read from the file (the st3d box) or guessed from the frame; Apple spatial photos (HEIC stereo pairs) and spatial videos (MV-HEVC, one eye); raw Insta360 .insp and .insv, GoPro .360, DJI .osv; 10 bit HLG and PQ sources tone mapped on the sphere; TIFF decoded by the app on Android (8 and 16 bit, gray, RGB, palette and CMYK, uncompressed or with LZW, Deflate, PackBits or JPEG compression); Gaussian splats in .spz versions 1 to 4 and binary .ply, in the Meta Quest 3 and 3S and, from build 41 and desktop build 21, on Android phones and tablets and on computers, and inside the
_splat.jpgphotos the app saves to Immich; AV2 in .ivf and .obu files on computers (experimental). - Projection and metadata: GPano and spherical metadata read from the file, with range requests on a server or a share; the initial view of the camera; the spheres of DJI drones recognised from their camera, with an optional .xmp sidecar so that Immich flags them too; "View as 360°" remembered on the device; VR180 recognised from the file or its name; the place of a drone video read from its .SRT flight log; metadata kept intact because the original file is played, never a converted copy; a quarter turn saved through the Immich editor or kept on the device, never on an immersive file.
- Native playback: Media3 on Android and the TV, SceneKit and AVFoundation on iOS, the Meta Spatial SDK in the headset, libmpv on Windows; the original or the transcoded stream chosen from what the device decodes; a list of the device's video decoders in Settings, Advanced; the audio track choice, subtitles in the Android player and a buffering indicator; the start of a streamed video set by what the link carries against what the video needs, and a video waited for while its server is silent; AV2 decoded on the processor by dav2d of VideoLAN, in a small program of the project that serves the frames to libmpv on the computer only; Gaussian splats on computers, phones and tablets drawn by Spark 2.4.0 on three.js in the system's web view (WebView2, WebKitGTK, WKWebView, Android System WebView), served by the app on the device only.
- Raw files stitched on the device: a Flutter fragment shader for photos; a GPU effect in the player for single track videos; two hardware decoders at once and a GPU compositor for videos with one lens per track or per file (OpenGL ES 3 on Android and the Quest, Metal on iOS, and on Windows, from desktop build 5, two libmpv players whose frames the app pairs on the graphics chip); the camera's own calibration (Mei, V6 and equidistant models) and accelerometer record; fallbacks to one lens, the transcoded stream, the camera's LRV copy or the unstitched video when the device cannot run two decoders. From build 42, the camera's motion track (the Insta360 gyroscope, the GoPro MAX orientation and gravity, the DJI Osmo 360 attitude) read in the file and turned into one rotation per frame, which the 360° player of Android hands to Media3 with each frame (experimental).
- Sources: the device's gallery; the folders of a computer; a drone or a camera card over USB, through the system folder picker (Android, experimental); a DJI RC-N3 remote controller over its cable for the drone's live video (Android, experimental), relayed on the local network to a Meta Quest or an Android TV; an Immich server; SMB 2 and 3, WebDAV, DLNA/UPnP; Plex over HTTPS checked against the server's own certificate; Tapo cameras over the local network (HTTPS and RTSP); a phone or a computer shared on the Wi-Fi as a WebDAV server; servers found by Bonjour/mDNS, a local network scan, SSDP, GDM and the TP-Link discovery, and followed when they change address; the folders of an Android phone, tablet or Meta Quest through the system folder picker.
- On demand reading: a local bridge serves the players with byte ranges and a per session token; large blocks, read ahead and up to six SMB connections in parallel; thumbnails from a frame of each video; nothing copied to the device.
- Hardware: hardware decoders used wherever they exist, with their measured limits (the Quest 3 H.264 ceiling, two 2048x2048 lenses at most for software decoders); on Windows the 360° view drawn by the graphics chip from each decoded frame, the frame size measured on each computer, the integrated or dedicated chip detected, and from desktop build 21 the dedicated one asked of the drivers on a laptop that has two; on a computer, the gaussians of a splat counted against the memory of the computer and of its graphics card.
- Platform specifics: the gyroscope and the Spatial 2.5D player on phones; the immersive view, controllers and hands on the Quest; the remote layout, the keyboard dialog and the TV banner on Android TV; on the computer, mouse and keyboard, full screen, a single window, files and folders opened with the program or dropped on its window, read like the files of your folders, HEIC, AVIF, TIFF and camera raw photos of the folders when Windows has a decoder for them, and the Windows data protection for passwords and tokens.
- AI creator: 3D photos as full width side by side JPEGs, left eye first, the relief from Depth Anything V2 Small through ONNX Runtime 1.31.0 on the processor (1.23.2 on an Intel Mac); scenes as a JPEG that carries a glTF scene in layers cut where the depth breaks, from MoGe-2 ViT-S and LaMa, with a .glb export; 360° panoramas of 6144 x 3072, generated by FLUX.2 klein base 4B and a 360° LoRA through stable-diffusion.cpp on Vulkan, the seam joined by MI-GAN, the detail raised by Real-ESRGAN and the real pixels put back; 3D versions of 360° photos, top and bottom; in every file our XMP (kind, origin, the SHA-1 of the original, quality flags), and in the scenes and the panoramas the IPTC digital source type; the relief of the Quest by LiteRT, on its graphics chip or its processor, kept in a cache; on the computer, a queue on two lanes and a gate that reads the graphics card through Vulkan, frees the app's own share of it before a panorama, asks 3.5 GiB of it free from desktop build 22, with the generation cut into pieces below about 5.6 GiB, and waits while other programs hold its memory; each component checked by its SHA-256, the Windows generator signed; the 3D versions of the photos of a share written next to them on SMB and WebDAV; splat scenes from 20 to 200 photos or a video, the cameras placed by COLMAP 4.2.1 on the processor and the splat trained by Brush 0.3.0 on Vulkan, an object set upright on the surface it stands on, written as an SPZ of version 2 of up to 150,000 gaussians, or from desktop build 22, with Detailed and Maximum, the whole scene and a copy of its 150,000 strongest gaussians for the headset, and, when asked, a .ply.
- Privacy by construction: no account, no cloud, no analytics; passwords and tokens in the device's secure storage (on LG and Samsung TVs, which have none for the app, in the app's own storage, not encrypted); a screen signed in from a phone gets a session of its own, sent encrypted on the home network, never the password (an LG TV gets the password from a page in the phone's browser, unencrypted on the home network, and keeps only the session); the camera of the Spatial player and of the code scanner used on the device only; shares, Plex and cameras reached on your network only; the AI computed on the device, its components downloaded only when you ask and checked by their SHA-256, the telemetry of ONNX Runtime turned off; what you watched of your films kept on the device.







































