Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
229 changes: 148 additions & 81 deletions docs/docs/getting-started/apps.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,94 +72,161 @@ curl "http://192.168.0.136:53287/brightness?value=0.5"
```

### Frameo
ImmichFrame can be run on inexpensive Frameo digital photo frames with some additional effort. You can typically find these for ~$40 USD. These devices are low powered and run a very old Android version, so they cannot run the full WebView version of the app (however most of the main features are still supported except SplitView). We have found a method to update the WebView, but it is not without risks, see Frameo Webview Update below.
If you have not already, you will need to install ADB on your PC ([ADB instructions][ADB-link]).
ADB is often enabled on these devices by default, if it is not go to Frameo Settings-About-Enable Beta Program. Toggle ADB Access On-Off-On. Use the ADB commands below to sideload [ImmichFrame APK][github-android-releases], configure it to your liking, then disable the Frameo app to to set ImmichFrame as default Home app:
- Sideload ImmichFrame:
ImmichFrame can be run on inexpensive Frameo digital photo frames with some additional effort. You can typically find these for ~$40 USD.

Frameo digital photo frames are low powered and run a very old Android version, so they cannot run the full WebView version of the app (however most of the main features are still supported except SplitView).
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Hyphenate the compound adjective low-powered.

"low powered" modifying "Android version" is a compound modifier and should be hyphenated.

📝 Proposed fix
-Frameo digital photo frames are low powered and run a very old Android version, so they cannot run the full WebView version of the app
+Frameo digital photo frames are low-powered and run a very old Android version, so they cannot run the full WebView version of the app
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Frameo digital photo frames are low powered and run a very old Android version, so they cannot run the full WebView version of the app (however most of the main features are still supported except SplitView).
Frameo digital photo frames are low-powered and run a very old Android version, so they cannot run the full WebView version of the app (however most of the main features are still supported except SplitView).
🧰 Tools
🪛 LanguageTool

[grammar] ~77-~77: Use a hyphen to join words.
Context: ...D. Frameo digital photo frames are low powered and run a very old Android versi...

(QB_NEW_EN_HYPHEN)


[style] ~77-~77: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ...al photo frames are low powered and run a very old Android version, so they cannot run the...

(EN_WEAK_ADJECTIVE)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/docs/getting-started/apps.md` at line 77, The sentence "Frameo digital
photo frames are low powered and run a very old Android version, so they cannot
run the full WebView version of the app (however most of the main features are
still supported except SplitView)." uses the compound modifier incorrectly;
change "low powered" to the hyphenated form "low-powered" in that sentence to
correctly form the compound adjective.


> [!NOTE]
> We have found a method to update the WebView, but it is not without risks, see Frameo Webview Update below.
>
> Webview provides the following features that are not available without it:
> - SplitView
> - Some image formats (HEIC)
> - Video playback (experimental)
> - Better text rendering
> - Show Tag, desc, and album info from Immich.
> - Configurable layout, (size, background and overlay colors, and blur effects, etc.).

1. You will need to install ADB on your PC ([ADB instructions][ADB-link]).

2. Enable ADB on the Frameo device. ADB is often enabled on these devices by default, if it is not go to Frameo Settings-About-Enable Beta Program. Toggle ADB Access On-Off-On.

3. Connect via USB. Next to the power port on the Frameo device there is a USB port, connect this to your PC with a USB cable.

4. Verify connection with `adb devices` command, you should see your device listed. If not, try unplugging and re-plugging the usb cable, or restarting the device while connected via usb.

5. Download the latest ImmichFrame APK from the [GitHub Releases][github-android-releases] page to your PC.

For linux or mac you can run the following command to download the latest release directly to your current directory:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This step seems unnecessary. They are already here on a device, just download it from releases.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You think about the curl and windows equivalent?

I love then i can get latest version directly in terminal without using the web browser, download being outside of current working directory, etc.


```bash
curl -L -o ImmichFrame.apk $(curl -s https://api.github.com/repos/immichFrame/ImmichFrame_Android/releases/latest | grep "browser_download_url.*apk" | cut -d : -f 2,3 | tr -d \")
```

For windows you can run the following command in powershell to download the latest release directly to your current directory:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This step seems unnecessary. They are already here on a device, just download it from releases.

```powershell
Invoke-WebRequest -Uri ((Invoke-RestMethod -Uri https://api.github.com/repos/immichFrame/ImmichFrame_Android/releases/latest).assets | Where-Object { $_.name -like "*.apk" } | Select-Object -First 1 -ExpandProperty browser_download_url) -OutFile ImmichFrame.apk
```

6. Sideload ImmichFrame:
```bash
adb install /path/to/ImmichFrame_vXX.apk
```

**Update/reinstall existing ImmichFrame:**
```bash
adb install -r /path/to/ImmichFrame_vXX.apk
Comment on lines +112 to +118
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Filename in install command is inconsistent with what the download commands produce.

The curl and PowerShell commands in step 5 both save the file as ImmichFrame.apk, but step 6 references ImmichFrame_vXX.apk. Users following the earlier download steps will get an error because the path won't match.

📝 Proposed fix
  6. Sideload ImmichFrame:
     ```bash
-    adb install /path/to/ImmichFrame_vXX.apk
+    adb install ImmichFrame.apk
     ```

     **Update/reinstall existing ImmichFrame:**
     ```bash
-    adb install -r /path/to/ImmichFrame_vXX.apk
+    adb install -r ImmichFrame.apk
     ```

Or add a clarifying note that ImmichFrame_vXX.apk is the filename for manual downloads from the releases page, while the download commands produce ImmichFrame.apk.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/docs/getting-started/apps.md` around lines 112 - 118, The install
commands reference ImmichFrame_vXX.apk which doesn't match the earlier download
steps that save the artifact as ImmichFrame.apk; update the two adb install
examples in the block containing the curl/PowerShell download steps to use
ImmichFrame.apk (or alternatively add a short clarifying note stating that
ImmichFrame_vXX.apk applies only to manual release downloads while the scripted
downloads save as ImmichFrame.apk) so filenames are consistent with the
curl/PowerShell commands.

```
7. Start ImmichFrame:
```bash
adb shell am start com.immichframe.immichframe/.MainActivity
```
8. Configure and disable WebView:
1. Swipe down to enter ImmichFrame Settings
2. Configure URL and Authorization Secret (optional)
3. Disable WebView

9. Set as default HOME app:

On first reboot after install you will be asked to select default Launcher, select `ImmichFrame` and select "Always"

![Frameo default launcher selection screen](Frameo_digital_photo_frames_default_app.png)

10. Then disable the Frameo app to set ImmichFrame as only Home app:

```bash
adb shell su
pm disable net.frameo.frame
exit
adb reboot
```
If this doesn't stick on reboot, repeat the commands but power cycle after exit command
Comment on lines +135 to +143
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Step 10 indentation is inconsistent and the mixed shell/local-terminal code block is ambiguous.

Two separate issues:

  1. Indentation: Line 135 starts with one space ( 10.) while all other steps use two spaces ( 1. 9.). This inconsistency can break markdown list rendering.

  2. Interactive-shell clarity: The code block mixes commands intended to be run inside the adb shell su root shell (pm disable, exit) with a command run from the local terminal afterwards (adb reboot), without visual distinction. Users who copy-paste the block wholesale may run pm disable net.frameo.frame locally rather than on the device.

📝 Proposed fixes

Fix 1 — Indentation:

- 10. Then disable the Frameo app to set ImmichFrame as only Home app:
+  10. Then disable the Frameo app to set ImmichFrame as only Home app:

Fix 2 — Use non-interactive adb shell invocation to avoid ambiguity:

-       ```bash
-       adb shell su
-       pm disable net.frameo.frame
-       exit
-       adb reboot
-       ```
+       ```bash
+       adb shell su -c 'pm disable net.frameo.frame'
+       adb reboot
+       ```

Or keep the interactive form but split the blocks with an explicit note:

+       Enter the root shell:
        ```bash
        adb shell su
+       ```
+       Inside the root shell, run:
+       ```bash
        pm disable net.frameo.frame
        exit
        ```
+       Then from your local terminal, reboot the device:
        ```bash
        adb reboot
        ```

The same pattern (interactive adb shell su block mixing device and local commands) also appears in the Re-enable Frameo section at lines 170–173.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/docs/getting-started/apps.md` around lines 135 - 143, Fix the
inconsistent list indentation for "Step 10" (change the leading single space to
match the two-space format used by other steps) and remove the ambiguous mixed
interactive/local command block by either replacing the interactive adb shell
sequence with a non-interactive invocation (adb shell su -c 'pm disable
net.frameo.frame' followed by adb reboot) or by splitting into two clear fenced
code blocks with an explicit note ("Inside the root shell, run:" / "Then from
your local terminal, run:") so commands intended for the device (pm disable / pm
enable) are separated from local commands (adb reboot); apply the same fix to
the "Re-enable Frameo" section referenced in the comment.


> [!NOTE]
> This is not possible with Frameo app versions >= 1.29, so uninstalling updates (to 1.24) is required to get the overwriting of default home app to work. If you have already updated the Frameo app, you can uninstall updates by going to Android Settings-Apps-Frameo-Uninstall Updates.
Comment on lines +145 to +146
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Inconsistent leading space in the NOTE block.

Line 145 (> [!NOTE]) has no leading space, but line 146 ( > This is not possible…) has one leading space before >. While most renderers are tolerant, this is inconsistent with the NOTE block style used elsewhere in the file.

📝 Proposed fix
 > [!NOTE]
-> This is not possible with Frameo app versions >= 1.29, so uninstalling updates...
+> This is not possible with Frameo app versions >= 1.29, so uninstalling updates...
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
> [!NOTE]
> This is not possible with Frameo app versions >= 1.29, so uninstalling updates (to 1.24) is required to get the overwriting of default home app to work. If you have already updated the Frameo app, you can uninstall updates by going to Android Settings-Apps-Frameo-Uninstall Updates.
> [!NOTE]
> This is not possible with Frameo app versions >= 1.29, so uninstalling updates (to 1.24) is required to get the overwriting of default home app to work. If you have already updated the Frameo app, you can uninstall updates by going to Android Settings-Apps-Frameo-Uninstall Updates.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/docs/getting-started/apps.md` around lines 145 - 146, The NOTE block has
inconsistent leading spacing: the marker line uses "> [!NOTE]" but the following
line begins with " > This..." (an extra leading space). Edit
docs/docs/getting-started/apps.md to remove the stray space before the '>' on
the paragraph line so it matches the marker line format (both lines should start
with "> "), ensuring the "[!NOTE]" block and its content use consistent
blockquote prefixes.



#### Some other useful ADB commands:

**Reboot:**

```bash
adb reboot
```

> [!NOTE]
> You can also reboot or shutdown by holding down power button

**Access Android Settings:**

```bash
adb shell am start -a android.settings.SETTINGS
```

#### Re-enable Frameo

1. Enable Frameo again with ADB command:
```bash
adb install /path/to/ImmichFrame_vXX.apk
adb shell su
pm enable net.frameo.frame
exit
```
- Update existing ImmichFrame:
```bash
adb install -r /path/to/ImmichFrame_vXX.apk

2. Start Frameo app:
```bash
adb shell am start net.frameo.frame
```
- Start ImmichFrame:
```bash
adb shell am start com.immichframe.immichframe/.MainActivity

3. Uninstall ImmichFrame:
```
adb uninstall com.immichframe.immichframe
```
- Swipe down to enter ImmichFrame Settings
- Configure URL and Authorization Secret (optional)
- Disable WebView
- Set as default HOME app
- On first reboot after install you will be asked to select default Launcher, select ImmichFrame
- Alternatively you can disable Frameo
```bash
adb shell su
pm disable net.frameo.frame
exit
```
If this doesn't stick on reboot, repeat the commands but power cycle after exit command
- Some other useful ADB commands:
- Reboot:
```bash
adb reboot
```
- You can also reboot or shutdown by holding down power button
- Access Android Settings:
```bash
adb shell am start -a android.settings.SETTINGS
```
- Re-enable Frameo: repeat disable commands above but replace "disable" with "enable"
- Start Frameo app:
```bash
adb shell am start net.frameo.frame
```
- Uninstall ImmichFrame:
```
adb uninstall com.immichframe.immichframe
```

### Frameo WebView Update
Follow instructions below to update WebView to 106. This has been tested and working on Android 6.01 10.1" Frameo devices:
- Download WebView 106 to PC:
[Lineage OS WebView 106-0-5249-126-12][webview-update]
- Push new apk to sdcard
```shell
adb push /path/to/your/new/webview.apk /sdcard/
```
- Enter shell and switch to the root user
```shell
adb shell
```
then inside the shell
```shell
su
```
- Backup original WebView APK
```shell
mount -o rw,remount /system && cp /system/app/webview/webview.apk /system/app/webview/webview.apk.bak
```
- Delete the oat folder recursively
```shell
mount -o rw,remount /system && rm -rf /system/app/webview/oat
```
- Copy new WebView to system
```shell
mount -o rw,remount /system && cp /sdcard/webview.apk /system/app/webview/webview.apk
```
- exit root
```shell
exit
```
- Reboot device
```shell
adb reboot
```
Follow instructions below to update WebView to 106.

This has been tested and working on Android 6.01 10.1" Frameo devices.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

"6.01" is likely a typo for "6.0.1".

Android version 6 is formatted as 6.0 or 6.0.1; 6.01 is not a standard Android version identifier.

📝 Proposed fix
-This has been tested and working on Android 6.01 10.1" Frameo devices.
+This has been tested and working on Android 6.0.1 10.1" Frameo devices.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
This has been tested and working on Android 6.01 10.1" Frameo devices.
This has been tested and working on Android 6.0.1 10.1" Frameo devices.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/docs/getting-started/apps.md` at line 188, Replace the incorrect Android
version string "6.01" with the standard identifier "6.0.1" in the text fragment
reading: This has been tested and working on Android 6.01 10.1" Frameo devices.;
update that sentence to read "...Android 6.0.1 10.1\" Frameo devices." so the
Android version uses the correct dotted format.


1. Download WebView 106 to PC:

[Lineage OS WebView 106-0-5249-126-12 (arm64-v8a + arm-v7a) (Android 6.0+)][webview-update]

2. Push new apk to sdcard
> [!NOTE]
> Android does not have auto-complete so you will save time if the new file is /sdcard/webview.apk, so you can just run `adb push /path/to/webview.apk /sdcard/webview.apk` and it will be named webview.apk on the device.
```shell
adb push /path/to/your/new/webview.apk /sdcard/webview.apk
```
3. Enter shell and switch to the root user
```shell
adb shell su
```
4. Backup original WebView APK
```shell
mount -o rw,remount /system && cp /system/app/webview/webview.apk /system/app/webview/webview.apk.bak
```
5. Delete the oat folder recursively
```shell
mount -o rw,remount /system && rm -rf /system/app/webview/oat
```
6. Copy new WebView to system
```shell
mount -o rw,remount /system && cp /sdcard/webview.apk /system/app/webview/webview.apk
```
7. Reboot device
```shell
adb reboot
```
After reboot, you should see a "installing new app" notification, and then you can verify the new WebView version by going to Android `Settings-Apps`, top right corner triple dot menu `show system`, Android System WebView.
Comment on lines +200 to +220
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Missing exit step causes step 7 (adb reboot) to fail for users following the guide sequentially.

Step 3 drops the user into an interactive root shell on the device (adb shell su). Steps 4–6 are commands run inside that root shell. Step 7 then instructs the user to run adb reboot, which is a local-terminal command — but the user is still inside the interactive device shell. Running adb reboot from within the adb shell will fail; the correct device command from inside the shell is reboot (no adb prefix).

The fix is either to add an explicit exit step, or change step 7 to use the in-shell reboot command.

📝 Option A — add an explicit `exit` step (preserves `adb reboot` in step 7)
 6. Copy new WebView to system    
     ```shell
     mount -o rw,remount /system && cp /sdcard/webview.apk /system/app/webview/webview.apk
     ```
+7. Exit the root shell
+    ```shell
+    exit
+    ```
-7. Reboot device
+8. Reboot device
     ```shell
     adb reboot
     ```
📝 Option B — use in-shell `reboot` so no exit is needed
-7. Reboot device
-    ```shell
-    adb reboot
-    ```
+7. Reboot device (from within the root shell)
+    ```shell
+    reboot
+    ```

Note: this section also has the same mixed shell/local-terminal code block pattern flagged for the Frameo setup step 10 (lines 135–143) — steps 4–6 look like standalone terminal commands but are actually intended to be run inside the interactive root shell entered in step 3. Adding a brief note ("Run the following inside the root shell:") before each of steps 4–6 would significantly improve clarity.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/docs/getting-started/apps.md` around lines 200 - 220, The guide drops
users into an interactive root shell with "adb shell su" but then runs a host
command "adb reboot" without exiting; either add an explicit "exit" step after
the cp step (so the subsequent "adb reboot" runs from the host) or change the
reboot step to the in-shell command "reboot" and mark it as "Reboot device (from
within the root shell)"; also prepend a brief note like "Run the following
inside the root shell:" before steps that are intended to execute inside the su
session (steps that run cp, rm, mount, etc.), and apply the same clarification
to the Frameo setup step 10 to avoid mixed shell/local-terminal confusion.


![Android System WebView version 106 in system settings](Frameo_digital_photo_frames_webview.png)

> [!NOTE]
> Depending on the device or Android version, the location to the webview apk may be different for you. You can locate it with:
> ```shell
> adb shell pm path com.android.webview
> ```

Depending on the device or Android version, the location to the webview apk may be different for you. You can locate it with
```shell
adb shell pm path com.android.webview
```
#### Alternative WebView Method
If the above method does not work, or you receive permissions issue, try this [Alternative Method][alternate-webview-method]

Expand Down