Skip to content

Commit 1f53697

Browse files
Sawtaytoesclaude
andcommitted
docs: RESOLVED 13.3" Photo Frame OOM — bumped castkit app to 16 GB/16 CPU
Applied the fix: raised castkit TrueNAS app resources to match the retired inkcast app (16 GB / 16 CPUs). All 4 e-ink panels now render cleanly (both 13.3" Photo Frames + kitchen), peak ~2.5 GiB/16 GiB, no new chrome-headless OOM. Also re-set the kitchen view to Photo Frame (stranded on Now Playing after the migration). Added the resource-limit gotcha to the migration runbook step 3. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 202e497 commit 1f53697

2 files changed

Lines changed: 40 additions & 1 deletion

File tree

docs/2026-07-11-castkit-eink-oom-and-view-state-handoff.md

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,42 @@
11
# Handoff: castkit e-ink Photo Frame OOM (13.3" panels) + post-migration view state
22

33
**Date:** 2026-07-11
4-
**Status:** OPEN — root cause found, fix not yet applied (documenting per request).
4+
**Status:** ✅ RESOLVED 2026-07-11 (primary fix applied; see Resolution). One
5+
optional code-hardening follow-up remains open (browser auto-relaunch).
56
**Follows:** [`fleet-topic-migration-inkcast-to-castkit.md`](fleet-topic-migration-inkcast-to-castkit.md)
67
(the `inkcast``castkit` fleet migration that introduced this regression).
78

9+
## Resolution (2026-07-11)
10+
11+
Bumped the `castkit` TrueNAS app back to the retired inkcast app's limits —
12+
**16 GB / 16 CPUs** — via `app.update` (`resources.limits.cpus=16`,
13+
`resources.limits.memory=16384`). The container recreated with
14+
`MemLimit=17179869184` (16 GB), `NanoCpus=16000000000`. Force-refreshed the two
15+
13.3" panels + the kitchen; all four now render cleanly:
16+
17+
```
18+
push eink-6e6697 (Photo Frame, 40633 bytes)
19+
push eink-07769e (Photo Frame, 44203 bytes)
20+
push eink-4da1be (Photo Frame, 44203 bytes)
21+
push eink-a615f8 (Clock (Weather), 1193 bytes)
22+
```
23+
24+
Peak memory during concurrent 13.3" renders ≈ 2.5 GiB / 16 GiB, **no new
25+
`chrome-headless` cgroup OOM**, `OOMKilled=false`. The `image.eink_07769e_*` /
26+
`eink-4da1be_*` timestamps advanced (were frozen at 17:33). Also re-set the
27+
**kitchen (`eink-6e6697`) view to Photo Frame** — it had been stranded on "Now
28+
Playing (Poster)" because its revert-to-idle trigger was missed during the
29+
migration's discovery churn (both Shield players were idle).
30+
31+
**Still open (optional, low priority):** the secondary code hardening below —
32+
make the Chromium engine relaunch a dead/OOM-killed browser instead of stranding
33+
the fleet until a container restart. With 16 GB headroom this is now defence in
34+
depth, not urgent.
35+
36+
---
37+
38+
## Original investigation (kept for the record)
39+
840
## Symptom (as reported)
941

1042
- The **Immich Photo Frame isn't rendering on the two large 13.3" panels**

docs/fleet-topic-migration-inkcast-to-castkit.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,13 @@ NOT change (deliberate, so HA never recreates entities). Consequences:
9696
`IMMICH_URL` + `IMMICH_API_TOKEN` (copy from the inkcast app), set
9797
`INKCAST_RENDER_ENGINE=chromium` (the image bundles Playwright Chromium),
9898
and mount `App-Configs/inkcast` read-only if the merged file references it.
99+
**⚠️ ALSO raise the app's resource limits to match the retired inkcast app —
100+
`resources.limits.cpus=16`, `resources.limits.memory=16384` (16 GB).** The
101+
castkit app shipped at 4 GB / 4 CPUs (fine for two tiny browser kiosks); at 4
102+
GB, Chromium OOM-kills on the 13.3" Photo Frame renders (2400×3200
103+
supersampled) and the crash cascades to the whole fleet. This was **missed on
104+
the first run** and caused a same-day regression — see
105+
[`2026-07-11-castkit-eink-oom-and-view-state-handoff.md`](2026-07-11-castkit-eink-oom-and-view-state-handoff.md).
99106
4. **Stop the inkcast app** (`app.stop inkcast`) so two servers never race on
100107
the same broker. Do NOT delete it yet.
101108
5. **Clear the old retained discovery configs FIRST** (see "Entity identity"

0 commit comments

Comments
 (0)