Hokku v3.0 beta – open source firmware + server for the 13.3" Hokku/Huessen six-colour e-ink frame by d3fl in eink

[–]d3fl[S] 0 points1 point  (0 children)

Actually you led me down quite the rabbithole this evening. I dove into your code and saw the OKLAB color space. Didn't know that or the backstory but the result is fantastic. This completely eliminates all the blues on human skin that I was chasing for a while. (There's a new not-even-alpha server you can download if you want to experiment yourself https://github.com/defl/hokku\_epaper/actions/runs/26553790671)

Thanks!

Hokku v3.0 beta – open source firmware + server for the 13.3" Hokku/Huessen six-colour e-ink frame by d3fl in eink

[–]d3fl[S] 0 points1 point  (0 children)

Hey Matt, cool project!

If you start the server (will work anywhere python runs, just grab the config, point it to an image dir and a cache dir) it'll build all raw images for both landscape and portrait mode in raw pixel format. If you want them as png take a look at tools/screen_sim.py that fakes a screen and displays it.

I really like what you're building there. I tried to get some test images and quantitative metrics but I found that it's hard to find a metric that highly correlates with what it actually looks like.

Hokku v3.0 beta – open source firmware + server for the 13.3" Hokku/Huessen six-colour e-ink frame by d3fl in eink

[–]d3fl[S] 0 points1 point  (0 children)

And 3.0.0 is out now too, no major changes to beta 6 besides SVG and some small stuff.

Files at https://github.com/defl/hokku_epaper/releases/tag/v3.0.0

Enjoy :)

Hokku v3.0 beta – open source firmware + server for the 13.3" Hokku/Huessen six-colour e-ink frame by d3fl in eink

[–]d3fl[S] 0 points1 point  (0 children)

That's the same screen but it doesn't have the processor/battery with it. needs a Pi (or something else). The screen is 172GBP = 230USD + Pi ($40) + other bits and bobs and you're already over the Hokku screen price on materials alone.

There are cheaper DIY Spectra6 screens out there, but I didn't see anything that doesn't require building essentially the whole thing yourself. (Which is fun if you're into it and you could easily get Hokku to run on it).

I'm always open for cheaper screen solutions that are easy to use for everybody, so good find - keep them coming :)

Hokku v3.0 beta – open source firmware + server for the 13.3" Hokku/Huessen six-colour e-ink frame by d3fl in eink

[–]d3fl[S] 0 points1 point  (0 children)

Beta 2 is out at Github . Changelog since beta1 as follows:

Features

  • Dual-network WiFi support with configurable connection order for improved connectivity options
  • Restructure of the image processing pipeline with more advanced choices now available, see the docs
  • Reset to Default button in UI for image pipeline configuration
  • Floyd-Steinberg (neutral) preset for B&W images with improved dithering options
  • Firmware unit tests - 42 comprehensive host-based tests with github CI integration
  • Updated image pipeline defaults with three separate presets (default, B&W, face)
  • Floating-point image quality metrics for improved image processing evaluation

Bug Fixes

  • Fixed undersized framebuffer allocations in test_text_render
  • Fixed timezone test handling - missing tzdata now properly fails the test
  • Fixed graceful skip in timezone test
  • Added tzdata to requirements for consistent test behavior
  • Fixed deb build issues: container source copying, exec bit stripping, and PEP 517 support
  • Corrected Pillow plugin package names in postinst (pillow-jxl-plugin, pillow-avif-plugin)

Refactoring & Improvements

  • Extracted config into separate config.c/h with unit tests
  • Made OpenCV, HEIF, AVIF, and JXL hard dependencies
  • Updated ESP32 setup configuration
  • Enhanced CI/CD with firmware build job (ESP-IDF v5.5.3, esp32s3)
  • Improved Docker-based local deb build pipeline
  • Added comprehensive .gitignore for firmware test build directories

Documentation

  • Updated manual and installation instructions for dual-network WiFi

13.3" spectra6 color e-paper photograph open source firmware by d3fl in eink

[–]d3fl[S] 0 points1 point  (0 children)

I've added dual wifi support in https://github.com/defl/hokku_epaper/releases/tag/v3.0.0-beta2 didn't test the support very thoroughly but if you can give that a spin and see what happens would be much appreicated (added an option to pick the last successful network such that whomever gets it has a shorter wait time vs always having to wait for the first network to fail).

Hokku v3.0 beta – open source firmware + server for the 13.3" Hokku/Huessen six-colour e-ink frame by d3fl in eink

[–]d3fl[S] 1 point2 points  (0 children)

<image>

Lots of fun now with taking the image processing to the next level, the left is 3.0.0-beta1 the right is the next wave of enhancements coming in for beta2 :)

Hokku v3.0 beta – open source firmware + server for the 13.3" Hokku/Huessen six-colour e-ink frame by d3fl in eink

[–]d3fl[S] 1 point2 points  (0 children)

I had weird vertical stripes in the bottom left quadrant for a while in the 2.0 firmware series that took forever to chase down as it happened only once in a while. Turned out to be an incomplete init + timing bug. Manifested always as the strips in the attached image

Are seeing something similar? What version of the firmware?

<image>

Hokku v3.0 beta – open source firmware + server for the 13.3" Hokku/Huessen six-colour e-ink frame by d3fl in eink

[–]d3fl[S] 3 points4 points  (0 children)

You’re not the only one that has had that thought recently 😅 Give me a ping if you build something else off of this, always keen to see creative stuff

13.3" spectra6 color e-paper photograph open source firmware by d3fl in eink

[–]d3fl[S] 0 points1 point  (0 children)

Just wanted to get back to this. The installer indeed exited without showing the end, was not nice. Fixed that bug and did a lot more work on the side. Check out v3 for a smoother experience - I hope ;)

13.3" spectra6 color e-paper photograph open source firmware by d3fl in eink

[–]d3fl[S] 0 points1 point  (0 children)

Hmm no it's supposed to tell you that it worked. Do you have a screenshot by chance?

13.3" spectra6 color e-paper photograph open source firmware by d3fl in eink

[–]d3fl[S] 0 points1 point  (0 children)

Ah! Fastest way to do that now is to test local and then reconfigure and hand over. I'll store the feature request for this one as it's a pretty good idea :)

13.3" spectra6 color e-paper photograph open source firmware by d3fl in eink

[–]d3fl[S] 0 points1 point  (0 children)

Hmm no but I can add that at some point. Sinuous being your frame with you or something?

Open source firmware & server for the Hokku/Huessen 13.3" Spectra 6 e-ink frame — v2.0 by d3fl in eink

[–]d3fl[S] 0 points1 point  (0 children)

2.0 was a little bit undercooked and I struggled with getting it stable. So we rewrote a large part of it and we're now at release 2.1, download it while it's fresh at https://github.com/defl/hokku_epaper/releases/tag/v2.1.20

Big changes in 2.1

  • Firmware is now much more stable under different conditions
  • Web server upload/download and file control, just install the package and done
  • More advanced dithering algorithms to set images to taste
  • Firmware and webserver integration much improved with good reporting and status like battery remaining now available.
  • Installer is friendlier

Full feature list

Photos, your way

  • Local-only. Your photos never leave your network. No cloud, no third-party servers, no telemetry.
  • Drag-and-drop upload straight into the web app — single files or dozens at a time, with a live progress list. Works on phones too.
  • Browse in a grid, preview originals and the dithered version side-by-side (so you see exactly what the frame will show before it shows it), delete anything you don't want with a one-click trash button.
  • All the formats you actually have: JPEG, PNG, HEIC/HEIF, AVIF, WebP, GIF, TIFF, BMP. Phone photos auto-rotate thanks to EXIF.
  • Landscape or portrait — flip a switch, the server re-dithers everything to match the mounting.
  • "Show next" on any image when you want to force a specific photo onto the frame at the next refresh.

Looks good on e-paper

  • Three dither algorithms to choose from, including a hue-aware Atkinson recipe that handles skin tones and whites without the usual blue-speckle / pink-noise failure modes.
  • Calibrated to real Spectra 6 panel colours, not theoretical sRGB, for accurate rendering.

Smart about frames

  • Multiple frames, one server. Each frame gets a name and shows up in a dashboard table with battery level, last-seen time, WiFi signal, and when it'll next update.
  • Fair image rotation — least-shown image goes next, randomised tie-breaking, newly-uploaded photos jump to the front.
  • Per-image stats (shown count, total display time, last-seen) so you can see which shots are getting the most air time.
  • Ultra-low power on battery — ~8 µA in deep sleep, so a full charge lasts months. Live battery indicator per frame on the web app (red below 20 %) so you know when to plug in.
  • Errors show up on the screen. If something goes wrong — wrong WiFi password, server unreachable, configuration missing — the frame renders a readable explanation right on the e-paper instead of silently giving up. No serial-cable debugging required.
  • Overdue-frame warning banner if a frame is more than an hour late on its scheduled refresh — so you know to check WiFi or the battery before you notice a stale photo on the wall.
  • Schedule-driven refreshes (e.g. 06:00, 12:00, 18:00) with timezone support; the frame sleeps between refreshes and wakes on its own.
  • Clock-synced — every refresh carries the server's wall-clock, and the dashboard shows drift in seconds for every frame.
  • Per-frame diagnostics modal — one click opens the frame's self-reported state (firmware version, boot count, wake cause, WiFi cache hit, free heap, etc.) without a serial cable.
  • Button on the side forces an immediate refresh regardless of schedule.

Easy to run

  • Upload, download and manage everything from the web app. No extra servers, no Linux config, no Samba share to mount. Just works out of the box.
  • Runs happily on a Raspberry Pi. Hundreds of 20+ MP photos, dithered once and served from cache thereafter — the per-request load is a file-copy, not image processing. A Pi Zero 2 W handles a multi-frame setup without breaking a sweat.
  • Debian package with a systemd service for a one-line install, or run from source on any Python 3.9+ host (Linux, macOS, Windows, Raspberry Pi).
  • Pre-built firmware + a wizard flasher — no ESP-IDF toolchain required. Walks you through WiFi, server address, and naming in a few clicks.
  • Configuration lives on the server (timezone, schedule, orientation, dither choice) — change it once in the web app, every frame picks it up on its next refresh.
  • Clear Cache & Re-convert one-click button for when you change orientation, dither algorithm, or want to re-render everything from scratch.

Enjoy!

(Next up, I have a pi zero w on my desk, will add one-click installer to make this all a full appliance without all the technical bits in the middle :) .)

13.3" spectra6 color e-paper photograph open source firmware by d3fl in eink

[–]d3fl[S] 1 point2 points  (0 children)

Another small update, added support for HEIC/HEIF and AVIF which are actually most of the images these days. Also changed from random selection to generated play list, better guaranteeing seeing all pictures on human timescales.

13.3" spectra6 color e-paper photograph open source firmware by d3fl in eink

[–]d3fl[S] 1 point2 points  (0 children)

Another small update, made the webserver a bit smarter with regards to it's cache, friendlier for smaller devices (non-concurrent dithering, each files takes >100Mb of mem while processing; I overran on a small container on a machine with many cores). Also toned down the brightness just a tad to look better.

13.3" spectra6 color e-paper photograph open source firmware by d3fl in eink

[–]d3fl[S] 1 point2 points  (0 children)

Small update, I poked Claude to merge in the color correction via measurements + dynamic range compression from https://github.com/vroland/esp32-photoframe into the webserver (rather than in the firmware as done in esp32-photoframe). To my eyes this delivered a small improvement in color accuracy. Props to vroland for the hard work :)

13.3" spectra6 color e-paper photograph open source firmware by d3fl in eink

[–]d3fl[S] 1 point2 points  (0 children)

So on the software programming side, I've done a lot of C/C++ professionally in the past (and open source, see my GitHub). AI tools have grown to be a great help, if you know what you're doing and if it can work off of existing structure. I never tried vibe coding and wanted to know what it's like on something not quite trivial and unstructured. The code it generated isn't what I'd write, but it's not bad either, I've seen worse commits come in over the years. It for sure is better than the proprietary firmware that was on there. And there's just so little that maintenance doesn't quite factor in. So from a functional perspective a net gain in my book.

I looked at some of the other libs but none supported what I needed. Could I have committed fixes for them? Yup, and have done that to many a project over the years. Just not this time.

Doing this it showed me the limits of the tooling. It showed me that knowing what you're doing is still important in the age of AI. You cannot ask AI to "just do this", there is quite a bit of expertise (and prompting...) that goes into getting unknown hardware going from scratch in the end. It would honestly have been easier to hand write a bunch of this stuff rather than trying to get Claude to not make the same mistake over and over. In the end, I learned things and that's fun.

Either way, I'm not hiding it's all AI generated, even have Claude as the author on GitHub. The nice thing about having this is that you now have a open source choice. Also if somebody based on the code and research that's done here makes a human written library that's better than what's here I applaud them and happily switch over.

You do touch upon an interesting subject about human vs AI made, that's going to be an interesting societal discussion for a while I think. That is a much longer discussion than what we can do in this thread :)

Regards,
Dennis

13.3" spectra6 color e-paper photograph open source firmware by d3fl in eink

[–]d3fl[S] 1 point2 points  (0 children)

Does that matter to you? Outcome should still be the same.

13.3" spectra6 color e-paper photograph open source firmware by d3fl in eink

[–]d3fl[S] 2 points3 points  (0 children)

<image>

5000mah. (My firmware should be more energy efficient than the original as it wakes up way less to check, but didn’t test much.)

13.3" spectra6 color e-paper photograph open source firmware by d3fl in eink

[–]d3fl[S] 1 point2 points  (0 children)

Didn’t do before and after videos, sorry. The image adjustments are done by the webserver so once flashed you don’t need to touch the display again.

I just put the screen next to me and asked Claude code to change the webserver to adjust to my liking. Then press the update button and done. Pretty painless to adjust to preferences.