{"id":4667,"date":"2026-08-30T16:14:44","date_gmt":"2026-08-30T15:14:44","guid":{"rendered":"https:\/\/www.beady.com\/blog\/?p=4667"},"modified":"2026-08-30T17:15:21","modified_gmt":"2026-08-30T16:15:21","slug":"keeping-swmbo-happy-1244555","status":"publish","type":"post","link":"https:\/\/www.beady.com\/blog\/keeping-swmbo-happy-1244555\/","title":{"rendered":"Keeping SWMBO happy #1244555 for \u00a3100"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I moved the photo pile to <a href=\"https:\/\/immich.app\/\">Immich<\/a>. Face recognition, maps and memories, without feeding the lot into somebody else&#8217;s cloud.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That left the important bit: turning it into something SWMBO would actually use. So I built a portrait frame that boots itself, fixes itself after a power cut and has proper buttons. Brownie points, engineered.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"577\" src=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich-1024x577.jpg\" alt=\"Custom portrait Immich photo frame with three-image display and touch controller\" class=\"wp-image-4666\" srcset=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich-1024x577.jpg 1024w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich-300x169.jpg 300w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich-768x433.jpg 768w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Immich in the big screen; the useful controls on the little one.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">What it does<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>One large photo and two smaller ones, shuffled every 20 seconds.<\/li>\n\n\n<li>The USB controller mirrors all three thumbnails and shows date, faces and location.<\/li>\n\n\n<li>Tap a photo to freeze it, open its map, hide the photo or folder, or send that exact image.<\/li>\n\n\n<li>MQTT turns the main screen and controller on or off and reports the real state back.<\/li>\n\n\n<li>After a cold boot it gets back to the frame without somebody hunting for a remote.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The send button uses <a href=\"https:\/\/reticulum.network\/manual\/\">Reticulum<\/a> and LXMF. The frame waits for an announcement, then routes the selected photo to <a href=\"https:\/\/github.com\/Quad4-Software\/MeshChatX\">MeshChatX<\/a> or <a href=\"https:\/\/github.com\/torlando-tech\/columba\">Columba<\/a>. No Google account and no extra Wi-Fi gadget on the controller.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-163309.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"753\" src=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-163309-1024x753.png\" alt=\"ImmichFrame RP2350 touch controller showing three live photo thumbnails\" class=\"wp-image-4674\" srcset=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-163309-1024x753.png 1024w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-163309-300x221.png 300w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-163309-767x564.png 767w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-163309-1023x752.png 1023w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Screenshot-2026-08-30-163309.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">The little screen follows the three live frames over USB.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">The hardware<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original Immich server already lives in Docker on a Windows 11 PC. The frame stack runs beside it, while an X88 Pro 13 Android box, a cheap portrait HDMI IPS screen and a Waveshare RP2350-Touch-LCD-2.8 controller make up the visible end.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Pihut-Waveshare-touchscreen.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"564\" src=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Pihut-Waveshare-touchscreen-1024x564.png\" alt=\"Waveshare RP2350 2.8-inch touch LCD used as the ImmichFrame controller\" class=\"wp-image-4671\" srcset=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Pihut-Waveshare-touchscreen-1024x564.png 1024w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Pihut-Waveshare-touchscreen-300x165.png 300w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Pihut-Waveshare-touchscreen-768x423.png 768w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Pihut-Waveshare-touchscreen.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Waveshare RP2350-Touch-LCD-2.8, SKU 30706.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Amazon-tv-x88-box-for-immich-frame.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"416\" src=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Amazon-tv-x88-box-for-immich-frame-1024x416.png\" alt=\"X88 Pro 13 Android TV box used to run the ImmichFrame client\" class=\"wp-image-4670\" srcset=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Amazon-tv-x88-box-for-immich-frame-1024x416.png 1024w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Amazon-tv-x88-box-for-immich-frame-300x122.png 300w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Amazon-tv-x88-box-for-immich-frame-768x312.png 768w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Amazon-tv-x88-box-for-immich-frame.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">The X88 runs the Android frame client and the USB helper.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Amazon-screen-for-immich-frame.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"442\" src=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Amazon-screen-for-immich-frame-1024x442.png\" alt=\"Portable IPS monitor mounted vertically for a custom Immich photo frame\" class=\"wp-image-4669\" srcset=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Amazon-screen-for-immich-frame-1024x442.png 1024w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Amazon-screen-for-immich-frame-300x130.png 300w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Amazon-screen-for-immich-frame-768x332.png 768w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Amazon-screen-for-immich-frame.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">A basic IPS screen looks much better once the plastic case disappears.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The original wall-warts were a bit marginal, so I used one proper regulated 5V\/4A Waveshare supply. A 5.5 x 2.1 mm splitter powers the X88 and the screen; a right-angle 5.5 x 2.1 mm female-to-USB-C male adapter makes the screen connection fit neatly. The splitter advert may say 12V, but it is only a passive cable: the supply here is 5V, centre-positive. Do not put 12V into a USB-C screen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Build one<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The working Docker files, three-panel composer, Android helper, RP2350 firmware, MQTT control and Reticulum sender are here:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><a href=\"https:\/\/github.com\/TheBeadster\/ImmichFrame-Touch-Frame\">github.com\/TheBeadster\/ImmichFrame-Touch-Frame<\/a><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The guide starts from bare metal and only includes the version that survived the power-cycle tests. No archaeology through the dead ends.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich.png\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich-576x1024.png\" alt=\"Finished DIY Immich photo frame built into a portrait wooden surround\" class=\"wp-image-4672\" srcset=\"https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich-576x1024.png 576w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich-169x300.png 169w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich-768x1364.png 768w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich-865x1536.png 865w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich-1153x2048.png 1153w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich-1024x1819.png 1024w, https:\/\/www.beady.com\/blog\/wp-content\/uploads\/2026\/08\/Custom-picture-frame-for-Immich.png 1200w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><\/a><figcaption class=\"wp-element-caption\">Add wood, paint and a few stones. Hide the wires. Happy wife \ud83d\ude42<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>I moved the photo pile to Immich. Face recognition, maps and memories, without feeding the lot into somebody else&#8217;s cloud. That left the important bit: turning it into something SWMBO would actually use. So I built a portrait frame that boots itself, fixes itself after a power cut and has proper buttons. Brownie points, engineered. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4672,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[73],"tags":[],"class_list":["post-4667","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-stuff"],"_links":{"self":[{"href":"https:\/\/www.beady.com\/blog\/wp-json\/wp\/v2\/posts\/4667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.beady.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.beady.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.beady.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.beady.com\/blog\/wp-json\/wp\/v2\/comments?post=4667"}],"version-history":[{"count":4,"href":"https:\/\/www.beady.com\/blog\/wp-json\/wp\/v2\/posts\/4667\/revisions"}],"predecessor-version":[{"id":4679,"href":"https:\/\/www.beady.com\/blog\/wp-json\/wp\/v2\/posts\/4667\/revisions\/4679"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.beady.com\/blog\/wp-json\/wp\/v2\/media\/4672"}],"wp:attachment":[{"href":"https:\/\/www.beady.com\/blog\/wp-json\/wp\/v2\/media?parent=4667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.beady.com\/blog\/wp-json\/wp\/v2\/categories?post=4667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.beady.com\/blog\/wp-json\/wp\/v2\/tags?post=4667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}