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.
230 changes: 149 additions & 81 deletions docs/docs/getting-started/apps.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,94 +72,162 @@ 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).

> [!NOTE]
> We have found a method to update the WebView, but it is not without risks, see Frameo Webview Update below.
>
> Webview provieds the following features that are not available without it:
> - SplitView
> - Some image formats (HEIC)
> - Video playback (experimenta)
> - Better text rendering
> - Show Tag, desc, and album info from Immich.
> - Configurable layout, (size, background and overlay colors, and blur effects, etc).
Comment on lines +82 to +88
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

Fix typos in the WebView feature list.

The note block contains several typographical errors:

  • Line 82: "provieds" should be "provides"
  • Line 85: "experimenta" should be "experimental"
  • Line 88: "etc)" should be "etc.)"
📝 Proposed fix for typos
-> Webview provieds the following features that are not available without it:
+> Webview provides the following features that are not available without it:
 > - SplitView
 > - Some image formats (HEIC)
-> - Video playback (experimenta)
+> - 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). 
+> - Configurable layout, (size, background and overlay colors, and blur effects, etc.).
🧰 Tools
🪛 LanguageTool

[grammar] ~82-~82: Ensure spelling is correct
Context: ...ameo Webview Update below. > > Webview provieds the following features that are not ava...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[style] ~88-~88: In American English, abbreviations like “etc.” require a period.
Context: ...d and overlay colors, and blur effects, etc). 1. You will need to install ADB o...

(ETC_PERIOD)

🤖 Prompt for AI Agents
In `@docs/docs/getting-started/apps.md` around lines 82 - 88, Correct
typographical errors in the Webview feature note: change the heading sentence
"Webview provieds the following features" to "Webview provides the following
features", change the list item "Video playback (experimenta)" to "Video
playback (experimental)", and change the trailing "etc)" to "etc.)" so the
feature list text is spelled and punctuated correctly.


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:

```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:
```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 | Invoke-WebRequest -OutFile ImmichFrame.apk
```
Comment on lines +108 to +109
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

🧩 Analysis chain

🏁 Script executed:

cat -n docs/docs/getting-started/apps.md | sed -n '105,115p'

Repository: immichFrame/ImmichFrame

Length of output: 688


🏁 Script executed:

# Test the PowerShell command syntax
pwsh -NoProfile -Command '
# Original command from the review
$originalCmd = "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 | Invoke-WebRequest -OutFile ImmichFrame.apk"

# Proposed fix
$fixedCmd = "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"

Write-Host "Testing original command syntax..."
try {
  [scriptblock]::Create($originalCmd) | Out-Null
  Write-Host "Original command parses OK"
} catch {
  Write-Host "Original command has syntax error: $_"
}

Write-Host "Testing fixed command syntax..."
try {
  [scriptblock]::Create($fixedCmd) | Out-Null
  Write-Host "Fixed command parses OK"
} catch {
  Write-Host "Fixed command has syntax error: $_"
}
'

Repository: immichFrame/ImmichFrame

Length of output: 184


🏁 Script executed:

pwsh -NoProfile -Command '
# Test original command logic - will it fail at runtime?
Write-Host "Testing original command execution logic..."
try {
  # Simulate the command without actually hitting the API
  $assets = @(
    [PSCustomObject]@{name="ImmichFrame.apk"; browser_download_url="https://example.com/apk"},
    [PSCustomObject]@{name="other.zip"; browser_download_url="https://example.com/zip"}
  )
  
  # This is what the original command tries to do:
  Write-Host "Attempting: Invoke-WebRequest -Uri `$assets | Where-Object..."
  $result = $assets | Where-Object { $_.name -like "*.apk" }
  Write-Host "After pipeline: $($result | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name)"
  
} catch {
  Write-Host "Error: $_"
}

Write-Host ""
Write-Host "The issue: the original command passes .assets array to -Uri instead of extracting the URL first"
Write-Host "The .assets array object cannot be converted to a valid URI"
'

Repository: immichFrame/ImmichFrame

Length of output: 371


Fix the PowerShell command to extract the download URL before passing it to Invoke-WebRequest.

The command has a logic error: it passes the .assets array object directly to the -Uri parameter instead of extracting the URL string first. This will fail at runtime.

🔧 Corrected PowerShell command
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

Or more readably:

$url = (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
Invoke-WebRequest -Uri $url -OutFile ImmichFrame.apk
🤖 Prompt for AI Agents
In `@docs/docs/getting-started/apps.md` around lines 108 - 109, The PowerShell
pipeline passes the .assets array to Invoke-WebRequest instead of the APK
download URL; extract the browser_download_url first and pass that string to
Invoke-WebRequest. Update the invocation that uses Invoke-RestMethod, .assets,
Where-Object and Select-Object -ExpandProperty browser_download_url so the
result (or a local $url variable) is what you feed into Invoke-WebRequest -Uri,
then call Invoke-WebRequest -OutFile ImmichFrame.apk with that URL.


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

**Update/reinstall existing ImmichFrame:**
```bash
adb install -r /path/to/ImmichFrame_vXX.apk
```
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"
Comment on lines +129 to +131
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

Fix inconsistent list indentation for step 9.

Line 129 is indented differently from the other numbered steps, which can break markdown list rendering. Align the indentation to match the surrounding steps.

🧰 Tools
🪛 markdownlint-cli2 (0.20.0)

[warning] 129-129: Inconsistent indentation for list items at the same level
Expected: 2; Actual: 1

(MD005, list-indent)

🤖 Prompt for AI Agents
In `@docs/docs/getting-started/apps.md` around lines 129 - 131, The numbered step
9 has inconsistent indentation in the markdown; update the block containing "Set
as default HOME app:" and the following indented instruction line ("On first
reboot after install you will be asked to select default Launcher, select
`ImmichFrame` and select \"Always\"") so its indentation matches the other
numbered steps (use the same two-space or four-space indent pattern as steps
above) to ensure the markdown list renders correctly.


![](Frameo_digital_photo_frames_default_app.png)
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

Add alt text to image for accessibility.

The image is missing alt text, which is important for screen readers and when images fail to load.

♿ Proposed fix to add alt text
-![](Frameo_digital_photo_frames_default_app.png)
+![Frameo default launcher selection screen](Frameo_digital_photo_frames_default_app.png)
📝 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_default_app.png)
![Frameo default launcher selection screen](Frameo_digital_photo_frames_default_app.png)
🧰 Tools
🪛 markdownlint-cli2 (0.20.0)

[warning] 133-133: Images should have alternate text (alt text)

(MD045, no-alt-text)

🤖 Prompt for AI Agents
In `@docs/docs/getting-started/apps.md` at line 133, The markdown image tag
"![](Frameo_digital_photo_frames_default_app.png)" is missing alt text; update
that image reference to include a descriptive alt string (for example "Frameo
digital photo frame default app") so screen readers and broken-image contexts
have meaningful text, i.e., modify the markdown image tag to include the alt
text between the brackets.


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

> [!NOTE]
> This is not possible with latest app version (< 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.



#### 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.

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.
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

Use hyphen for compound adjective.

The compound adjective "auto complete" should be hyphenated as "auto-complete".

📝 Proposed fix
->    > 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.
+>    > 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.
📝 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
> 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.
> 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.
🧰 Tools
🪛 LanguageTool

[grammar] ~197-~197: Use a hyphen to join words.
Context: ...[!NOTE] > Android does not have auto complete so you will save time if the ne...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
In `@docs/docs/getting-started/apps.md` at line 197, Replace the unhyphenated
compound adjective "auto complete" with the hyphenated form "auto-complete" in
the sentence containing "`adb push /path/to/webview.apk /sdcard/webview.apk`"
(the line that currently reads "Android does not have auto complete...") so the
documentation uses the correct compound adjective form.

```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.

![](Frameo_digital_photo_frames_webview.png)
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

Add alt text to image for accessibility.

The image is missing alt text, which is important for screen readers and when images fail to load.

♿ Proposed fix to add alt text
-![](Frameo_digital_photo_frames_webview.png)
+![Android System WebView version 106 in system settings](Frameo_digital_photo_frames_webview.png)
🧰 Tools
🪛 markdownlint-cli2 (0.20.0)

[warning] 223-223: Images should have alternate text (alt text)

(MD045, no-alt-text)

🤖 Prompt for AI Agents
In `@docs/docs/getting-started/apps.md` at line 223, The markdown image tag
currently has no alt text for Frameo_digital_photo_frames_webview.png; update
the tag ![](Frameo_digital_photo_frames_webview.png) to include a concise,
descriptive alt string (for example: ![Screenshot of Frameo digital photo frames
webview](Frameo_digital_photo_frames_webview.png)) so screen readers and cases
where the image fails to load have meaningful text.


> [!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
> ```
Comment on lines +227 to +229
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

Remove extra spaces after blockquote symbol.

Line 227 has multiple spaces after the blockquote symbol (>), which is inconsistent with markdown formatting conventions.

📝 Proposed fix
 > [!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
+> ```shell
 > adb shell pm path com.android.webview
 > ```
🧰 Tools
🪛 markdownlint-cli2 (0.20.0)

[warning] 227-227: Multiple spaces after blockquote symbol

(MD027, no-multiple-space-blockquote)

🤖 Prompt for AI Agents
In `@docs/docs/getting-started/apps.md` around lines 227 - 229, Fix the blockquote
spacing in the fenced code block: remove the extra spaces after the blockquote
symbol on the lines that currently read as quoted shell lines (the lines
wrapping "```shell", "adb shell pm path com.android.webview", and "```") so each
line uses a single ">" followed immediately by the content (i.e., change ">  adb
shell pm path com.android.webview" to "> adb shell pm path com.android.webview"
and similarly for the surrounding fence lines).


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