{"id":1048,"date":"2025-06-16T10:59:50","date_gmt":"2025-06-16T10:59:50","guid":{"rendered":"https:\/\/psyphi.net\/blog\/?p=1048"},"modified":"2025-06-16T11:01:42","modified_gmt":"2025-06-16T11:01:42","slug":"a-photo-calendar-frame-with-the-inky-impression-7-3","status":"publish","type":"post","link":"https:\/\/psyphi.net\/blog\/2025\/06\/a-photo-calendar-frame-with-the-inky-impression-7-3\/","title":{"rendered":"A photo\/calendar frame with the Inky Impression 7.3&#8243;"},"content":{"rendered":"\n<p>I&#8217;ve been excited by e-ink displays for a long while. I leapt on the original, gorgeous <a href=\"https:\/\/remarkable.com\/?ref=psyphi.net\" target=\"_blank\" rel=\"noopener\" title=\"\">reMarkable<\/a> tablet as soon as it came out and have been a regular user and advocate ever since. I would dearly love to have <a href=\"https:\/\/shopkits.eink.com\/en\/product\/detail\/42%27%27MonochromeePaperDisplay(VB3300-RBA)\" target=\"_blank\" rel=\"noopener\" title=\"\">one<\/a> or <a href=\"https:\/\/www.digitalsignbox.co.uk\/30\/1285\/e-paper-display-screen-indoor-use-42-inch-screen\" target=\"_blank\" rel=\"noopener\" title=\"\">two<\/a> of <a href=\"https:\/\/www.melfordtechnologies.com\/products\/e-ink\/e-ink-displays\" target=\"_blank\" rel=\"noopener\" title=\"\">these<\/a> <a href=\"https:\/\/www.good-display.com\/product\/452.html\" target=\"_blank\" rel=\"noopener\" title=\"\">enormous<\/a> 42&#8243; e-ink art poster displays on the wall, but that&#8217;s for another day.<\/p>\n\n\n\n<p>I&#8217;ve also been a long-time customer of <a href=\"https:\/\/shop.pimoroni.com\/\" target=\"_blank\" rel=\"noopener\" title=\"\">Pimoroni<\/a> and was aware of their range of nifty Inky displays. I recently came across<a href=\"https:\/\/github.com\/mimireyburn\/inky-calendar\" title=\"\"> this neat project<\/a> by @mimireyburn and managed to pick up a 7.3&#8243; Inky Impression after it being on back-order for only a week or two.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"617\" src=\"https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-16-10.50.01-1024x617.jpeg\" alt=\"\" class=\"wp-image-1050\" srcset=\"https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-16-10.50.01-1024x617.jpeg 1024w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-16-10.50.01-300x181.jpeg 300w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-16-10.50.01-1536x925.jpeg 1536w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-16-10.50.01-1200x723.jpeg 1200w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-16-10.50.01.jpeg 1906w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">The Inky Impression 7.3&#8243; with protective film and screen reflection<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-16-10.50.20-1024x768.jpeg\" alt=\"\" class=\"wp-image-1051\" srcset=\"https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-16-10.50.20-1024x768.jpeg 1024w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-16-10.50.20-300x225.jpeg 300w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-16-10.50.20-1536x1152.jpeg 1536w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-16-10.50.20-1200x900.jpeg 1200w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-16-10.50.20.jpeg 2016w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">The Inky Impression 7.3&#8243; rear with mounted Raspberry Pi Zero 2W<\/figcaption><\/figure>\n\n\n\n<p>After flashing RPi OS on a clean card for the Pi Zero 2W, downloading the project, setting up Python, compilers, virtualenvs, prerequisites, etc. I was presented with a complete failure of the underlying driver and inky library to communicate with the display. This isn&#8217;t a fault of the inky-calendar project at all, may I reiterate, but unfortunately a very regular occurrence I&#8217;ve found when using many Pimoroni products.<\/p>\n\n\n\n<p>Searching around I tried a few different things, including the usual modifications to boot parameters to enable the drivers\/kernel modules and fiddling with permissions, users etc. but with no success. Now I&#8217;ve never deliberately pretended to be a Python programmer, nor do I particularly wish to be one, but I&#8217;m pretty good with debugging weird stuff and this was definitely presenting as a driver\/library issue. Specifically some of the differences with the Inky Impression 7.3 seemed to be tripping things up, and it wasn&#8217;t a hole I fancied spelunking in today.<\/p>\n\n\n\n<p>A little more digging highlighted a <a href=\"https:\/\/www.npmjs.com\/package\/@aeroniemi\/inky\" title=\"\">NodeJS package<\/a> by @aeroniemi with working Impression 7.3&#8243; display support. I definitely <em>have<\/em> masqueraded as a JavaScript programmer in the past so things were looking up. Some light Claude.AI vibing and I had two working scripts &#8211; one to fetch images from  <a href=\"https:\/\/picsum.photos\/\" target=\"_blank\" rel=\"noopener\" title=\"\">PicSum<\/a> and another to replicate the calendar fetching+rendering, both from public iCal and authenticated Google Cal sources &#8211; awesome!<\/p>\n\n\n\n<p>Some dremel butchery on the back panel of an old 7&#8243; picture frame to fit around the sticky-out components on the back of the board and I was in business.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-13-17.51.51-1024x768.jpeg\" alt=\"\" class=\"wp-image-1052\" srcset=\"https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-13-17.51.51-1024x768.jpeg 1024w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-13-17.51.51-300x225.jpeg 300w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-13-17.51.51-1536x1152.jpeg 1536w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-13-17.51.51-2048x1536.jpeg 2048w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-13-17.51.51-1200x900.jpeg 1200w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">The rear of the photo frame with cut-outs for most of the components on the rear of the display<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-13-17.52.09-1024x768.jpeg\" alt=\"\" class=\"wp-image-1053\" srcset=\"https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-13-17.52.09-1024x768.jpeg 1024w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-13-17.52.09-300x225.jpeg 300w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-13-17.52.09-1536x1152.jpeg 1536w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-13-17.52.09-1200x900.jpeg 1200w, https:\/\/psyphi.net\/wp-uploads\/2025\/06\/2025-06-13-17.52.09.jpeg 2016w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">Extra clearance given to the left-most microUSB power socket on the Pi Zero 2W<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Improvements<\/strong><\/h2>\n\n\n\n<p>The only slight drawback with using this NodeJS library is that it only handles the image-display side of things &#8211; there&#8217;s no built-in support for the function buttons &#8211; something to revisit another day.<\/p>\n\n\n\n<p>Another improvement would be to better-handle power &#8211; the main benefit of e-ink is that it doesn&#8217;t need power once the display has been set, and that&#8217;s not being utilised here at all &#8211; there&#8217;s a cronjob running on the Pi which displays the calendar before 10:00AM and photos after that, refreshing every half-hour.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>*\/30 6-10 * * * cd \/home\/frame\/ ; node ical2png.js --calendar x --calendar y --google-calendar z --service-account KEY.json --view week ; node main.js --image calendar.png\n*\/30 10-23 * * * cd \/home\/frame\/ ; node main.js --dither<\/code><\/pre>\n\n\n\n<p>Lastly, obviously, the display needs to load images from a folder rather than from the internet. That&#8217;s super-quick to do, and that&#8217;s this afternoon&#8217;s job. The calendar-rendering &#8211; fonts, sizes, colours etc. could do with a little more spit and polish too.<\/p>\n\n\n\n<p>The code for this project can be found at <a href=\"https:\/\/github.com\/rmp\/inky-frame\" rel=\"nofollow\" title=\"\">https:\/\/github.com\/rmp\/inky-frame<\/a>.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve been excited by e-ink displays for a long while. I leapt on the original, gorgeous reMarkable tablet as soon as it came out and have been a regular user and advocate ever since. I would dearly love to have one or two of these enormous 42&#8243; e-ink art poster displays on the wall, but &hellip; <a href=\"https:\/\/psyphi.net\/blog\/2025\/06\/a-photo-calendar-frame-with-the-inky-impression-7-3\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;A photo\/calendar frame with the Inky Impression 7.3&#8243;&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":1049,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[45],"tags":[1084,292,199,59,258],"class_list":["post-1048","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hardware","tag-hardware","tag-javascript","tag-linux","tag-opensource","tag-software"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/posts\/1048","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/comments?post=1048"}],"version-history":[{"count":3,"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/posts\/1048\/revisions"}],"predecessor-version":[{"id":1056,"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/posts\/1048\/revisions\/1056"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/media\/1049"}],"wp:attachment":[{"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/media?parent=1048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/categories?post=1048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/tags?post=1048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}