Davidnet / inkyshot

Get a daily random inspirational quote delivered direct to your desk with Inkyshot. Build multiple Inkyshots and share the inspiration with your friends, family and loved ones ❤️

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Inkyshot - a shot of inspiration to start the day

Get a daily random inspirational quote delivered direct to your desk with Inkyshot. Build multiple Inkyshots and share the inspiration with your friends, family and loved ones ❤️

Hardware required

Setup & Installation

Running this project is as simple as deploying it to a balenaCloud application. You can do it in just one click by using the button below:

You can also deploy in the traditional manner using the balena CLI and balena push command. For more information check out the docs.


Your fleet of Inkyshots can all be managed centrally via balenaCloud. Try any of the environment variables below to add some customization.

Update time

Inkyshot wants to deliver a shot of inspiration to start your day, and by default will do this at 9AM/0900 hours UTC. You can change the hour that the update will happen with the UPDATE_HOUR variable; set it anywhere from 0 to 23.


In order for the update time to work correctly, you'll of course have to tell Inkyshot what timezone you'd like to use. Set the TZ environment variable to any IANA timezone, e.g. Europe/London, America/Los_Angeles, Asia/Taipei etc.

This timezone is also used for displaying the correct date when the environment variable MODE is set to weather.

Message override

Is there a special occasion in your family? Override the daily quote with a shot of celebration by setting the INKY_MESSAGE environment variable. Try Happy birthday Sister!, Congratulations on the new job, mate!, or Happy mother's day!.

Quote of the day category

The quote api has several quote categories available. Use the QOD_CATEGORY environment variable to change the type of quote retreived. Available categories: inspire (default), management, sports, life, funny, love, art, students.


There are a few fonts built in that you can try. The default is AmaticSC, but you can use the FONT variable and set it to any of: FredokaOne, HankenGrotesk, Intuitive, SourceSerifPro, SourceSansPro, Caladea, Roboto and Grand9KPixel. You're welcome to PR more options into the project!

Font size

Inkyshot will automatically choose the largest font size for your message that still fits on the display. Too big? Override it with the FONT_SIZE variable and Inkyshot will use this as a maximum and continue to resize downwards if your message doesn't fit.

Test character

When figuring out what size font to use, Inkyshot (invisibly) fills the screen with the a character to see how many will fit. You can override this by setting the TEST_CHARACTER environment variable with any wider (w) or slimmer (i) characters of your choosing to adjust this behavior.


If Inkyshot is living in a different house where things aren't necessarily always the same way up, use the ROTATE environment variable to rotate the output by 180 degrees.


To enable the weather display, set the environment variable MODE to weather.

Next, use either LATLONG (e.g. 39.9199,32.8543) or WEATHER_LOCATION (e.g. Ankara, Turkey) environment variables to define the location for weather information. Entering only an empty WEATHER_LOCATION is also sufficient and in this case Inkyshot will lookup the latitude and longitude information from device's IP address.

Set SCALE environment variable to F to display the temperature values in Fahrenheit scale. The default is Celcius scale.

Use the WEATHER_FONT variable to customize the font used in weather display mode.

Use the WEATHER_INVERT variable to invert the Image being displayed - WAVESHARE specific.

LOCALE variable allows to display the date of temperature reading in any language supported by the date library.

Finally, you can set the environment variable MODE to alternate for Inkyshot to rotate between quote and weather modes. You can put number of minutes in the ALTERNATE_FREQUENCY environment variable in order to configure Inkyshot to update periodically. By default, the first display is quote mode and you can instead chose weather by setting current_display tag to weather on the device.


By default the device will be assigned the hostname inkyshot so it can be easily found on a network. This can be changed with the DEVICE_HOSTNAME environment variable.

Wifi Connect

As from v1.2.0 this project includes wifi-connect which is a utility for dynamically setting the WiFi configuration on a Linux device via a captive portal. If your device is not connected to the internet, an access point will be created. You can refer to the docs here for customizing the different settings for wifi-connect.


STL files are included within the assets folder of the project for you to 3D print your own case.

The case has two positions for a captive M3 nut, and can be fastened together with two countersunk 8mm M3 machine screws. If you're using design 2, the screws you'll need are something like this.

A position is open in the rear of the case for the use of a micro USB PCB socket, allowing for direct connection of power to the back of a Raspberry Pi Zero.

Contributing & Commit structure

When submitting a pull request, please use the guidance outlined below.

Each commit message should consist of a body and a footer, structured in the following format:

<scope (optional)>: <subject (mandatory)>
(optional) <body>
(optional) Connects-to: #issue-number
(mandatory) Change-type: major | minor | patch
(optional) Signed-off-by: Foo Bar <foobar@balena.io>


Quotes are delivered from the theysaidso.com They Said So® REST API.

Location information based on IP address is retrieved from ipinfo.io.

We use Norwegian Meteorological Institute's weather API to get the weather forecast of the day. Weather symbols are customized from yr.no's repository.


Get a daily random inspirational quote delivered direct to your desk with Inkyshot. Build multiple Inkyshots and share the inspiration with your friends, family and loved ones ❤️

License:Apache License 2.0


Language:Python 94.2%Language:Shell 4.0%Language:Dockerfile 1.8%