A small NodeJS based server to serve local or public images optimized for common eInk Displays (e.g. from Waveshare) in combination with a WiFi-enabled microcontroller (e.g. esp32, esp8266).
Important: This is only the server part. You will need to program your microcontroller yourself so it fetches images from this server using TCP/IP.
Images are converted to BMP and translated into black and white "grayscale" using Floyd Steinberg dithering.
Support for Docker is available and the recommended way of deploying.
Currently two services have been implemented:
This service picks a random picture from a local folder (including subfolders). Supported image types are: bmp
, jpeg
, png
, tiff
and heic
.
Endpoint: /local.bmp
This service downloads a random desktop wallpaper from Wallhaven.cc and converts it.
Endpoint: /wallpaper.bmp
The server listens on port 3000 and individual configuration is done using environmental variables, all of which are optional and have reasonable defaults. You probably want to adapt EINK_WIDTH and EINK_HEIGHT to match your specific display. The following options are available:
Environmental Variable | Required | Default | Description |
---|---|---|---|
EINK_WIDTH | false | 800 | Display width in pixels. Used to scale the original image up or down to this width. |
EINK_HEIGHT | false | 480 | Display height in pixels. Used to scale the original image up or down to this height. |
LOCAL_FOLDERS | false | /images |
Comma separated list of folders to include in local image list |
LOCAL_EXCLUDE | false | empty | Comma separated list of (sub-)folder names to be excluded from LOCAL_FOLDERS |
LOCAL_SHOW_HIDDEN | false | false | Wether to use hidden files (=starting with a dot) in LOCAL_FOLDERS. |
This will make the server available on port 3000 on the host machine.
docker run -d \
-p 3000:3000
--name eInkServer \
tfohlmeister/eink-display-server:latest
You can then load an eInk-optimized version of a random wallpaper at http://$HOST_IP:3000/wallpaper.bmp
.
This command will mount a local image folder /path/to/local/images
:
docker run -d \
--name eInkServer \
-p 3000:3000 \
-v /path/to/local/images:/images \
tfohlmeister/eink-display-server:latest
The following command will mount two local image folders and excludes all folders called PrivatePictures
:
docker run -d \
--name eInkServer \
-p 3000:3000 \
-v /path/to/local/images1:/images/images1 \
-v /path/to/local/images2:/images/images2 \
-e LOCAL_FOLDERS=/images/images1,/images/images2 \
-e LOCAL_EXCLUDE=PrivatePictures \
tfohlmeister/eink-display-server:latest
You should now be able to also display eInk-optimized versions of your mounted images at http://$HOST_IP:3000/local.bmp
.
If you see Watcher Error
s in the log stating the system limit for number of file watchers reached
, you need to increase the amount of inotify watchers on your (host) system. Restart the application afterwards.
If you found a bug or find this project is missing a feature please create an Issue.
npm install
npm run watch-debug
npm run build
docker build --tag eink-display-server:latest .