Build apps for pixel-based displays.

Related tags

Images tools pixlet
Overview

Pixlet

Build & test GoDoc

Pixlet is an app runtime and UX toolkit for highly-constrained displays. We use Pixlet to develop applets for Tidbyt, which has a 64x32 RGB LED matrix display:

Example of a Tidbyt

Apps developed with Pixlet can be served in a browser, rendered as WebP or GIF animations, or pushed to a physical Tidbyt device.

Documentation

Getting started

Install on macOS

brew install tidbyt/tidbyt/pixlet

Install on Linux

Download the pixlet binary from the latest release.

Alternatively you can build from source.

Hello, World!

Pixlet applets are written in a simple, Python-like language called Starlark. Here's the venerable Hello World program:

load("render.star", "render")
def main():
    return render.Root(
        child = render.Text("Hello, World!")
    )

Render and serve it with:

curl https://raw.githubusercontent.com/tidbyt/pixlet/main/examples/hello_world.star | \
  pixlet serve /dev/stdin

You can view the result by navigating to http://localhost:8080:

How it works

Pixlet scripts are written in a simple, Python-like language called Starlark. The scripts can retrieve data over HTTP, transform it and use a collection of Widgets to describe how the data should be presented visually.

The Pixlet CLI runs these scripts and renders the result as a WebP or GIF animation. You can view the animation in your browser, save it, or even push it to a Tidbyt device with pixlet push.

Example: A Clock App

This applet accepts a timezone parameter and produces a two frame animation displaying the current time with a blinking ':' separator between the hour and minute components.

load("render.star", "render")
load("time.star", "time")

def main(config):
    timezone = config.get("timezone") or "America/New_York"
    now = time.now().in_location(timezone)

    return render.Root(
        delay = 500,
        child = render.Box(
            child = render.Animation(
                children = [
                    render.Text(
                        content = now.format("3:04 PM"),
                        font = "6x13",
                    ),
                    render.Text(
                        content = now.format("3 04 PM"),
                        font = "6x13",
                    ),
                ],
            ),
        ),
    )

Here's the resulting image:

Example: A Bitcoin Tracker

Applets can get information from external data sources. For example, here is a Bitcoin price tracker:

Read the in-depth tutorial to learn how to make an applet like this.

Push to a Tidbyt

If you have a Tidbyt, pixlet can push apps directly to it. For example, to show the Bitcoin tracker on your Tidbyt:

pixlet render examples/bitcoin.star
pixlet push --api-token <YOUR API TOKEN> <YOUR DEVICE ID> examples/bitcoin.webp

To get the ID and API key for a device, open the settings for the device in the Tidbyt app on your phone, and tap Get API key.

If all goes well, you should see the Bitcoin tracker appear on your Tidbyt:

Issues
  • Push Formats (star)

    Push Formats (star)

    It looks as if the only format the API accepts for the push command is webp. Is it possible to push a star file, and configure the refresh interval on the Tidbyt?

    Example: I’m writing a clock app (as you have in the README example). When I render and push this, the Tidbyt will only display the one image (it does not update automatically when the minute changes). Do I need a server to render and push the star file once every minute to keep the display up to date? OR should I try to build the clock “app” (which is actually just a webp) such that it includes 720 frames (or 1440 frames for 24 hour time)?

    opened by joeyhoer 9
  • Push As Installation not working?

    Push As Installation not working?

    I'm referencing the Push As Installation instructions: https://github.com/tidbyt/pixlet#push-as-an-installation

    Just got my Tidbyt today, and I'm trying to write some code that shows my current lifetime solar power production, etc. When I add an Installation ID to my push command, it never shows up in the app on my phone as that Install ID or anything added by API as the instructions show should happen.

    Here's the commands I'm running in a .sh file that I plan to have update daily from a Raspberry Pi and then I'd like it to show up in my rotation.

    pixlet render solarlife.star
    
    pixlet push --api-token <API TOKEN> <DEVICE ID> solarlife.webp Solar
    

    Also tried it in quotes ("Solar") to no avail.

    Is this a known issue?

    Thanks!

    opened by jasondborneman 8
  • `brew install`: invalid syntax in tap

    `brew install`: invalid syntax in tap

    Output of brew install:

    brew install tidbyt/tidbyt/pixlet
    ==> Tapping tidbyt/tidbyt
    Cloning into '/opt/homebrew/Library/Taps/tidbyt/homebrew-tidbyt'...
    remote: Enumerating objects: 67, done.
    remote: Counting objects: 100% (67/67), done.
    remote: Compressing objects: 100% (66/66), done.
    remote: Total 67 (delta 41), reused 0 (delta 0), pack-reused 0
    Receiving objects: 100% (67/67), 9.54 KiB | 9.54 MiB/s, done.
    Resolving deltas: 100% (41/41), done.
    Error: Invalid formula: /opt/homebrew/Library/Taps/tidbyt/homebrew-tidbyt/pixlet.rb
    formulae require at least a URL
    Error: Cannot tap tidbyt/tidbyt: invalid syntax in tap!
    

    Other info that might be helpful:

    brew doctor
    Your system is ready to brew.
    
    brew config
    HOMEBREW_VERSION: 3.3.9-36-ge970bb1
    ORIGIN: https://github.com/Homebrew/brew
    HEAD: e970bb18765cd4f16c39585cb0eabc9208c68996
    Last commit: 26 hours ago
    Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
    Core tap HEAD: f2b69fcaf6cf9925caac56dad26d39d30e89b42c
    Core tap last commit: 3 hours ago
    Core tap branch: master
    HOMEBREW_PREFIX: /opt/homebrew
    HOMEBREW_CASK_OPTS: []
    HOMEBREW_CORE_GIT_REMOTE: https://github.com/Homebrew/homebrew-core
    HOMEBREW_EDITOR: code
    HOMEBREW_MAKE_JOBS: 10
    Homebrew Ruby: 2.6.8 => /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby
    CPU: 10-core 64-bit arm_firestorm_icestorm
    Clang: 13.0.0 build 1300
    Git: 2.34.1 => /opt/homebrew/bin/git
    Curl: 7.77.0 => /usr/bin/curl
    macOS: 12.0.1-arm64
    CLT: 13.1.0.0.1.1633545042
    Xcode: 13.1
    Rosetta 2: false
    
    opened by jazzdan 8
  • feat(arm64-support): add arm64 to goreleaser config

    feat(arm64-support): add arm64 to goreleaser config

    hi there! 👋🏻

    I just got my Tidbyt in the mail (yay!) and started playing around. I had to build from source because I'm using an M1 Mac.

    I have a bunch of experience with golang, so I decided to see if I could get things updated to fix this issue https://github.com/tidbyt/pixlet/issues/39

    This PR is an attempt at that 😄

    Notes This adds arm64 to the list of supported go architectures in the goreleaser configuration.

    It also updates the fetch-artifacts.sh script to copy the linux and darwin arm64 artifacts. I'm not entirely sure how this fits into the buildkite CI process, but it seems like it might need to be updated.

    I'm able to run the goreleaser command locally and see it generate all the proper files.

    One interesting and important note about building the render module while running on macos, i did need to set up the CPATH and LIBRARY_PATH as described here https://github.com/tidbyt/pixlet/issues/39#issuecomment-900727783

    fixes #39 (I hope)

    opened by samandmoore 8
  • Support/document installation on ARM

    Support/document installation on ARM

    We've gotten a couple requests now from users with arm and arm64 (Raspberry Pi, Apple M1). The main sticking point seems to be WebP. The library is fairly portable and some users have even managed to install libwebp, but Pixlet still doesn't seem to build.

    • [x] Investigate & resolve blockers for ARM installations.
    • [x] Document how to install on Raspberry Pi.
    • [x] Document how to install on M1.
    opened by rohansingh 8
  • Sequence widget unavailable in v0.17.6

    Sequence widget unavailable in v0.17.6

    Error: module has no .Sequence field or method

    The Sequence widget isn't making into the module exports. From debug:

    [onebusaway2.star] ["Animation", "Box", "Circle", "Column", "Image", "Marquee", "Padding", "Plot", "Root", "Row", "Stack", "Text", "WrappedText", "fonts"]
    2022/05/19 13:56:14 error loading applet: error running script: Traceback (most recent call last):
      onebusaway2.star:39:22: in main
    Error: module has no .Sequence field or method
    ^C
    $ pixlet version
    Pixlet version: v0.17.6
    
    opened by aschechter88 6
  • `render.WrappedText': Add Option for text alignment

    `render.WrappedText': Add Option for text alignment

    This PR adds the option for text alignment with render.WrappedText.

    I think there should be an additional test in the wrappedtext_test.go file. But is there an easy way to make the image output of what to expect instead of manually doing it?

    As there currently is no change to the testing file. Also not sure if I did the go syntax as it should be.

    opened by rs7q5 6
  • Add additional behaviors to Marquee widget.

    Add additional behaviors to Marquee widget.

    Description

    • Add 'behavior' option:

      • If left empty or set to 'scroll', it results in the existing marquee behavior.
      • If set to 'alternate', the child widget will be scrolled with alternating directions.
      • Attention: 'scroll' does NOT support 'pause_start' and 'pause_midway' options (see below).
      • Attention: 'alternate' does NOT support 'offset_start' and 'offset_end' options.
    • Add 'scroll_always' option:

      • If left empty or set to 'False', it results in the existing marquee behavior.
      • If set to 'True', the child widget will be scrolled even if it fits entirely.
    • Add 'pause_start' and 'pause_midway' options:

      • Both values default to '1', and have a minumum value of '1'.
      • They control how many frames to pause the animation at the start and at the midway point, before changing directions.
    • Add tests for all new options.

    Examples

    behavior = "alternate",
    scroll_direction = "horizontal",
    

    marquee_horizontal_alternate

    behavior = "alternate",
    scroll_direction = "horizontal",
    pause_start = 10,
    pause_midway = 10,
    

    marquee_horizontal_alternate_pause_10

    behavior = "alternate",
    scroll_direction = "horizontal",
    scroll_always = True,
    

    marquee_horizontal_alternate_always

    behavior = "alternate",
    scroll_direction = "vertical",
    

    marquee_vertical_alternate

    behavior = "alternate",
    scroll_direction = "vertical",
    pause_start = 10,
    pause_midway = 10,
    

    marquee_vertical_alternate_pause_10

    behavior = "alternate",
    scroll_direction = "vertical",
    scroll_always = True,
    

    marquee_vertical_alternate_always

    behavior = "scroll",
    scroll_direction = "horizontal",
    scroll_always = True,
    

    marquee_horizontal_scroll_always

    opened by fxb 6
  • Fix WrappedText Linespacing

    Fix WrappedText Linespacing

    So am not sure if this is the only thing that is needed to fix #135. But it works for my use case for the fix the vertical scroll in the open PR here.

    Readjusted to fix vertical issue by submitting a PR fix to wrapped text in pixlet.

    Without this merge, the last line will just be cut off, so won't be much different for vertical scroll prior to that PR.

    opened by rs7q5 5
  • Webp not working on M1 Mac (Apple Silicon)

    Webp not working on M1 Mac (Apple Silicon)

    I installed Pixlet via Homebrew on a M1 MacBook Pro, but am getting the following errors with the Web library when running the "Hello World" curl command:

    Library not loaded: /usr/local/opt/webp/lib/libwebpdemux.2.dylib
      Referenced from: /opt/homebrew/bin/pixlet
      Reason: no suitable image found.  Did find:
    	/usr/local/opt/webp/lib/libwebpdemux.2.dylib: mach-o, but wrong architecture
    	/usr/local/opt/webp/lib/libwebpdemux.2.dylib: stat() failed with errno=1
    	/usr/local/opt/webp/lib/libwebpdemux.2.dylib: mach-o, but wrong architecture
    
    opened by corygrunk 5
  • dummy package for goreleaser

    dummy package for goreleaser

    I get "dummy package for goreleaser" when using pixlet:

    ./pixlet dummy package for goreleaser

    I cannot get it to run examples, no matter what it gives me that line.

    v0.17.3 ubuntu and macOS as run env

    opened by disruptivepatternmaterial 4
  • fix(deps): update dependency react-easy-crop to v4.4.2

    fix(deps): update dependency react-easy-crop to v4.4.2

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | react-easy-crop | 4.4.1 -> 4.4.2 | age | adoption | passing | confidence |


    Release Notes

    ValentinH/react-easy-crop

    v4.4.2

    Compare Source

    :tada: This release contains work from a new contributor! :tada:

    Thank you, Conrad Wahlen (@​AnotherHermit), for all your work!

    🐛 Bug Fix
    Authors: 1

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Improve render performance

    Improve render performance

    I'm running pixlet on a Raspberry Pi Zero as a makeshift self-hosted server for private apps. Execution of pixlet render currently takes ages on this admittedly slow hardware, so I started to investigate a bit. As part of this investigation, I discovered 2 possible improvements for render performance.

    Improvement 1 (speedup for applets using the Image widget)

    I started my investigations on the reddit_r_place community app. As-is, pixlet on the Raspberry Pi Zero takes about 37 seconds to render the applet:

    $ time ./pixlet render ../community/apps/redditrplace/reddit_r_place.star
    real	0m37.799s
    user	0m34.017s
    sys	0m2.081s
    

    I used runtime/pprof for obtaining detailed runtime statistics. Immediately, it was apparent that something was strange with all these image.(*NRGBA).Opaque calls. In total, the CPU spent 20 seconds running that function!

    profile1

    Following the pixlet source code, I could see that the relevant portion in pixlet was in transformation.go, where the image specified by the starlark applet's Image element is passed to the gg library's DrawImage function.

    https://github.com/tidbyt/pixlet/blob/ecae45a3e2a4e2c84ec3aeefa3cefa7b9623f8f2/render/animation/transformation.go#L238

    This function in turn calls DrawImageAnchored, which uses golang.org/x/image/draw for the actual drawing:

    image

    Note that draw.Over is passed as the Op, which pixlet doesn't even need here. draw.Src would suffice, since we are drawing into an empty image anyway. This now gets interesting when we have a look at the implementation of the called function inside golang.org/x/image/draw:

    image

    We've found the source of these expensive image.(*NRGBA).Opaque calls, and they are not even needed by pixlet. If we had a way to specify the Op, we would actually prefer draw.Src here. For testing purposes, I changed go's local copy of github.com/fogleman/gg to always use draw.Src, and ran the initial test again:

    time ./pixlet render ../community/apps/redditrplace/reddit_r_place.star 
    
    real	0m12.525s
    user	0m10.279s
    sys	0m1.676s
    

    Quite some improvement, I would say! Now, the problem is: I don't know how this performance issue could sensibly be fixed. The cleanest way would probably be having the github.com/fogleman/gg library export a function that allows specifying the Op parameter, but it seems like that library has been abandoned (no new commits for a year).

    Improvement 2 (speedup for deeply nested applet UIs)

    Currently, the Paint method of every widget creates a new image, which it returns to the caller, who will then just render that image into another image, ... until the root draws it into an image that has a background. I haven't thought that through (or implemented it), but shouldn't it be possible to pass the render context to every Paint method and have all draw operations on the same context? Given the bad performance of the gg.context.DrawImage function, IMHO it should be called as rarely as possible.

    With improvement 1 from above implemented (the ugly way described above), the two gg.context.DrawImage calls per frame are clearly visible (1.3 seconds), and this is for an applet that is not nested at all.

    image

    I don't know whether performance is something you are concerned about for this implementation, but I still wanted to leave my notes here for others to find as well.

    Other than that: I have to say the applet development experience for the Tidbyt platform is great (even if deployment of private applets is a pain ATM)!

    opened by FD- 5
  • handle gif disposal methods

    handle gif disposal methods

    Overview

    This PR adds support for gif disposal methods that were not previously being handled. Without support for disposal methods my Random Slackmoji app was incorrectly rendering most animated gifs so this PR was mainly tested using that application since it contains a wide assortment of gif types with various disposal methods.

    FYI, I'm a total golang noob so please give this a good look for issues. Thanks!

    Example Pixlet output BEFORE this change: random_slackmoji

    Example Pixlet output AFTER this change: random_slackmoji_fixed

    Original gif: avengers

    More Info

    This previous PR to improve the rendering of optimized gifs did not handle all gif disposal methods which resulted in some odd gif rendering. See this discord discussion for more context.

    Testing

    With the Random Slackmoji app, here are some good search queries to use to test out these changes:

    • bananadance_outfit - uses mixed disposal methods per frame and previously did not remove previous frames
    • fish_yellow - uses DisposalBackground method and previously it looks like the fish had multiple tails
    • friday_dog - uses uses DisposalPrevious method and previously no parts of the dog would disappear
    • mole - uses mixed disposal methods per frame - there just happen to be a bunch of "mole" gifs that were failing previously

    cc: @matslina

    opened by btjones 0
  • Feature request: temporary schedule override

    Feature request: temporary schedule override

    I have a use case where I'm displaying a message of "ON AIR" when I'm on a Zoom call or similar, like a recording studio. It would be nice to have the option to have a single app basically take over for some period of time and disrupt the cycle as an always displayed message, and then resume the schedule after the period has expired.

    opened by hexuallyactive 0
  • `schema.Generated` does not disappear if it should return `[]` in pixlet serve

    `schema.Generated` does not disappear if it should return `[]` in pixlet serve

    Not sure if this is expected behavior where when using schema.Generated in pixlet serve,

    The field appears as expected, but when it should return [] after disabling again the field does not disappear. This may or may not be expected behavior.

    opened by rs7q5 0
  • Feature Request: delay in marquee

    Feature Request: delay in marquee

    Would be nice to have a delay of scrolling before marquee starts scrolling instead of always having to start the scroll at the end of the screen and scroll up. I know you can set something similar using animation.Transformation for those types of transformations.

    opened by rs7q5 0
Releases(v0.17.14)
Owner
Tidbyt
See what matters.
Tidbyt
Example of how to achieve pixel perfect shadows in a 2D view

Lights and Shadows Example of how to achieve pixel perfect shadows in a 2D view. The sample is based on the following sources: 2D Pixel Perfect Shadow

Defold 12 Mar 29, 2022
The android-go project provides a platform for writing native Android apps in Go programming language.

android-go The android-go project aims to provide a platform (namely an SDK) for writing native Android apps in Go programming language. All things he

Max Kupriianov 972 Aug 2, 2022
A phoenix Chain client based on the go-ethereum fork,the new PoS consensus engine is based on the VRF algorithm.

Phoenix Official Golang implementation of the Phoenix protocol. !!!The current version is for testing and developing purposes only!!! Building the sou

null 8 Jan 7, 2022
Geocache is an in-memory cache that is suitable for geolocation based applications.

geocache geocache is an in-memory cache that is suitable for geolocation based applications. It uses geolocation as a key for storing items. You can s

Melih Mucuk 138 May 28, 2022
This is old and unmaintained code, ignore it. starfish is a simple, SDL based, 2D graphics and user input library for Go. If you intend to work on it, please fork from the 'devel' branch, not 'master'. Current release: 0.12.0

What is starfish? What starfish is: starfish is a simple 2D graphics and user input library for Go built on SDL. What starfish is not: While it is bui

Gary Talent 12 Jun 4, 2019
A Grid based 2D Graphics library

gridder Built on top of Go Graphics github.com/fogleman/gg with the idea to simplify visualizing Grids using 2D Graphics. Dependencies gg github.com/f

Raed Shomali 54 Jul 3, 2022
Gorched is terminal based game written in Go inspired by "The Mother of all games" Scorched Earth

Gorched Gorched is terminal based game written in Go inspired by "The Mother of all games" Scorched Earth. How the game looks like depends on your ter

Ján Čabala 322 Jul 22, 2022
Canvas is a Go drawing library based on OpenGL or using software rendering that is very similar to the HTML5 canvas API

Go canvas Canvas is a pure Go library that provides drawing functionality as similar as possible to the HTML5 canvas API. It has nothing to do with HT

Thomas Friedel 428 Jul 27, 2022
A Go skia binding based on skia C library through cgo

go-skia is a Go skia binding based on skia C library through cgo. Note: the project is still in early stage, and it only supports Linux-amd64 now. The

Go101 18 Jul 24, 2022
Boundary enables identity-based access management for dynamic infrastructure.

Boundary Please note: We take Boundary's security and our users' trust very seriously. If you believe you have found a security issue in Boundary, ple

HashiCorp 3.4k Aug 1, 2022
A simple API written in Go that creates badges in SVG format, based on the requested route.

A simple API written in Go that creates badges in SVG format, based on the requested route. Those graphics can be used to style README.md files, or to add tags to webpages.

Toby 3 Jul 2, 2021
A simple javascript website that takes user input, queries a Go based backend which then creates ascii art and sends it back to the frontend

A simple javascript website that takes user input, queries a Go based backend which then creates ascii art and sends it back to the frontend. Finally the site displays the ascii art and offers the option to download as multiple file types.

null 0 Jan 7, 2022
Faster than the fastest in the world pixel-by-pixel image difference tool.

imgdiff Faster than the fastest in the world pixel-by-pixel image difference tool. Why? imgdiff isn't as fast as a tool like this should be and I'm no

Nikita Tolkachev 1.6k Jul 27, 2022
💨 A real time messaging system to build a scalable in-app notifications, multiplayer games, chat apps in web and mobile apps.

Beaver A Real Time Messaging Server. Beaver is a real-time messaging server. With beaver you can easily build scalable in-app notifications, realtime

Ahmed 1.4k Jul 30, 2022
Example of how to achieve pixel perfect shadows in a 2D view

Lights and Shadows Example of how to achieve pixel perfect shadows in a 2D view. The sample is based on the following sources: 2D Pixel Perfect Shadow

Defold 12 Mar 29, 2022
Comparison of Pixel and Ebiten API on the trees tutorial

Rewriting the trees tutorial of Pixel with Ebiten for API comparison I tried Pixel and really liked the clean API but the dev seems to be on pause sin

null 4 Dec 7, 2021
Caps - Attempt at making computer generated pixel art from bottle caps

I started sorting the caps and realised that there are significantly more Alexan

Ilia Choly 2 Mar 9, 2022
A golang implementation of the Open Pixel Control protocol

__ ___ ___ _____ ___ /'_ `\ / __`\ _______ / __`\/\ '__`\ /'___\ /\ \L\ \/\ \L\ \/\______\/\ \L\ \ \ \L\ \/\ \__/ \ \

Kelly 18 Jul 3, 2022
Stonks is a terminal based stock visualizer and tracker that displays realtime stocks in graph format in a terminal.

Stonks is a terminal based stock visualizer and tracker. Installation Requirements: golang >= 1.13 Manual Clone the repo Run make && make install Pack

Eric Moynihan 513 Jul 19, 2022
A lightweight job scheduler based on priority queue with timeout, retry, replica, context cancellation and easy semantics for job chaining. Build for golang web apps.

Table of Contents Introduction What is RIO? Concern An asynchronous job processor Easy management of these goroutines and chaining them Introduction W

Supratim Samanta 49 May 3, 2022
🌳 📂 The utility displays a tree of directories and files(symlinks in future).

dirTree The utility displays a tree of directories and files. usage: dirTree [-f] How it works with directory, where I wrote this project for example

Hutiev Alexander 2 Aug 12, 2021
An extension for the GitHub Cli application that displays your current contribution graph

gh-graph An extension for the GitHub Cli application that displays your current contribution graph in the terminal (logged out contribution graph) Ins

Benjamin Chadwick 14 Sep 29, 2021
FSManager - Tree view Simple util to displays the directory structure of a path or of the disk in a drive graphically.

FSManager - Tree view Simple util to displays the directory structure of a path or of the disk in a drive graphically. If you don't specify a drive or

Kostiantyn Denysov 1 Oct 9, 2021
Real-time Map displays real-time positions of public transport vehicles in Helsinki

Real-time Map Real-time Map displays real-time positions of public transport vehicles in Helsinki. It's a showcase for Proto.Actor - an ultra-fast dis

ASYNKRON 28 Jul 12, 2022
Viewnode displays Kubernetes cluster nodes with their pods and containers.

viewnode The viewnode shows Kubernetes cluster nodes with their pods and containers. It is very useful when you need to monitor multiple resources suc

NTTDATA-DACH 8 Jul 15, 2022
A web app that displays a new random famous quote every day (UTC timezone) and allows people to like/unlike the quote

Intro A web app that displays a new random famous quote every day (UTC timezone) and allows people to like/unlike the quote. The app display the curre

Quang Nguyen 0 Dec 8, 2021
Home Assistant screenshot capture web server suitable for e-ink displays

hass-shooter hass-shooter is a Home Assistant screenshot capture web server suitable for e-ink displays. Dependencies Chromium ImageMagick Installatio

Roi Martin 1 Jan 28, 2022
A binary that continuously displays Ethiopian date and time (Amharic). best used in i3-status.

i3-eth-time Display ethiopian calendar date/time in i3-wm! Intended for use in i3-status. How to use Clone/Download repo and compile Open up your i3co

Tibebes. 1 Jan 4, 2022
A simple LCD controller package for raspberry pi liquid crystal I²C displays.

A simple LCD controller package for raspberry pi liquid crystal I²C displays.

arian firoozfar 3 Feb 26, 2022