A command-line tool for extensible LED matrix control with Raspberry Pi devices.

Overview

Matricks

"Teach an old matrix new tricks..."

Matricks is a WASM-based extensible LED matrix control tool intended for use on Raspberry Pi devices. LED matrix functionality is defined by user-developed plugins, or "tricks", which can be developed in any language that is supported by the Extism PDK. On non-Raspberry Pi devices, Matricks will simulate a LED matrix and display the simulated matrix state in real time.

See usage details below:

Usage: matricks [OPTIONS] --plugins <PLUGINS> --width <WIDTH> --height <HEIGHT>

Options:
  -p, --plugins <PLUGINS>              Path to plugin or directory of plugins
  -x, --width <WIDTH>                  Width of the matrix, in number of LEDs
  -y, --height <HEIGHT>                Height of the matrix, in number of LEDs
  -f, --fps <FPS>                      Target framerate at which to drive the matrix [default: 30]
  -l, --log-dir <LOG_DIR>              Directory to write logs [default: log]
  -s, --serpentine                     Data line alternates direction between columns or rows
  -m, --magnification <MAGNIFICATION>  Magnification of the simulated matrix [default: 10]
  -h, --help                           Print help
  -V, --version                        Print version

Installation

Matricks is installed using Cargo. In order to run a simulated matrix on non-Raspberry Pi machines, OpenCV and supported libraries must be installed before installing Matricks. See platform-specific instructions below.

Raspberry Pi

  • Install Rust and Cargo from the Rust website
  • Run apt install libclang-dev
  • Run cargo install matricks

Windows

Ubuntu

  • Install Rust and Cargo from the Rust website
  • Run apt install libopencv-dev clang libclang-dev
  • Run cargo install matricks

Arch Linux

  • Install Rust and Cargo from the Rust website
  • Run pacman -S clang qt5-base opencv
  • Run pacman -S vtk glew fmt openmpi
  • Run cargo install matricks

Mac

  • Install Rust and Cargo from the Rust website
  • Run brew install opencv
  • Run cargo install matricks

Note: for installation on Mac, you will likely also need a C++ compiler and libclang (brew install llvm).

You might also like...
fast rust implementation of online nonnegative matrix factorization as laid out in the paper "detect and track latent factors with online nonnegative matrix factorization"

ONMF status: early work in progress. still figuring this out. code still somewhat messy. api still in flux. fast rust implementation of online nonnega

A command line tool to control the power state of Valve Base Stations 2.0.

lighthousectl A command line tool to control the power state of Valve Base Stations 2.0. Usage Scan All Base Stations It scans endlessly. You can stop

REC2 (Rusty External Command and Control) is client and server tool allowing auditor to execute command from VirusTotal and Mastodon APIs written in Rust. 🦀
REC2 (Rusty External Command and Control) is client and server tool allowing auditor to execute command from VirusTotal and Mastodon APIs written in Rust. 🦀

Information: REC2 is an old personal project (early 2023) that I didn't continue development on. It's part of a list of projects that helped me to lea

An EVM low-level language that gives full control over the control flow of the smart contract.

Meplang - An EVM low-level language Meplang is a low-level programming language that produces EVM bytecode. It is designed for developers who need ful

Small command-line tool to switch monitor inputs from command line

swmon Small command-line tool to switch monitor inputs from command line Installation git clone https://github.com/cr1901/swmon cargo install --path .

IR Remote Controller for WS2812(or analog) LED Strip
IR Remote Controller for WS2812(or analog) LED Strip

ir-smart-led-controller IR Remote Controller for WS2812(or analog) LED Strip. Resources Schematics Gerber files BOM License Licensed under either of A

A blinking LED program written in Rust for the AVR

blink A small Hello World Rust application for the AVR. The program itself toggles a LED on PORTB periodically. Designed for the ATmega328p. The AVR-R

A LED Christmas Tree controlled by Rust. Contribute your own renderers!
A LED Christmas Tree controlled by Rust. Contribute your own renderers!

Rusty Christmas Tree This is code that draws on the LED Christmas Tree made by @aidancrowther. You can see his 3D design files and Pi Pico setup code

Very simple Rust binary that can turn on/off a TP-Link L920 led light strip in your local network
Very simple Rust binary that can turn on/off a TP-Link L920 led light strip in your local network

TP-Link L920 on/off script This is a (very) simple Rust binary that can turn on/off a TP-Link L920 led light strip in your local network. Installation

A fast, extensible, command-line arguments parser

parkour A fast, extensible, command-line arguments parser. Introduction 📚 The most popular argument parser, clap, allows you list all the possible ar

A simple, lightweight and extensible command line argument parser for rust codebases

A simple, lightweight and extensible command line argument parser for rust codebases. This crate aims to provide you with an easy-to-use and extensibl

Control Google Pixel Buds Pro from the Linux command line.

pbpctrl Control Google Pixel Buds Pro from the Linux command line. Might or might not work on other Pixel Buds devices. Allows reading of battery, har

[OUTDATED] Instructions for how to cross compile Rust projects for the Raspberry Pi

Cross Compiling for Raspberry Pi This guide will show how Rust programs can be cross compiled for the Raspberry Pi using Cargo. These instructions may

Operating System development tutorials in Rust on the Raspberry Pi
Operating System development tutorials in Rust on the Raspberry Pi

Operating System development tutorials in Rust on the Raspberry Pi

A port of OxidGB to the Raspberry Pi Pico

OxidGB Pico Port This is a simple, display-only (for now) port of OxidGB to the Raspberry Pi Pico. Note that this by default overclocks your device -

Tested on Raspberry pi 3 on QEMU

Tested on Raspberry pi 3 on QEMU

Program a Raspberry Pi Pico with pure Rust

pi-pico-rs Program a Raspberry Pi Pico with pure Rust. Get Started Install the latest version of Rust and the thumbv6m-none-eabi target. This is the p

Raspberry PI library for Rust. GPIO controller, L298N motors, sockets and
Raspberry PI library for Rust. GPIO controller, L298N motors, sockets and "i2clib" integrated

raslib Raspberry PI library for Rust. GPIO controller, L298N motors, sockets and "i2clib" integrated All tests are made on Raspberry PI 4B+ on Raspbia

A Raspberry Pi Pico-based sequencer for Eurorack

A Raspberry Pi Pico-based sequencer for Eurorack.

Comments
  • Add plugin loop option

    Add plugin loop option

    Adds command line flag to loop plugins once all plugins have completed. Has the side effect that the plugin directory will now be checked before running the plugins again, allowing for plugins to be added/removed from the watch directory while Matricks is still running.

    Closes #2

    opened by wymcg 0
  • Plugin Time Limit Option

    Plugin Time Limit Option

    Add a command line flag that sets a time limit for how long a single plugin can run. If a plugin has been running for more than the specified time, move on to the next available plugin. There is no time limit by default, and the time limit is ignored if there is only one plugin available.

    enhancement good first issue 
    opened by wymcg 0
  • Update Readme and GitHub Pages Site with new usage details

    Update Readme and GitHub Pages Site with new usage details

    Several command line options have been added since v0.1.0. The usage page of the GitHub Pages site needs this information, and the main readme should be changed to reflect the added options as well.

    documentation 
    opened by wymcg 1
  • Fix Conditional Compilation for Non-Raspberry Pi ARM64 Targets

    Fix Conditional Compilation for Non-Raspberry Pi ARM64 Targets

    Currently, Matricks will use the target architecture to determine whether to include rs_ws281x to drive the matrix or opencv to simulate the matrix, and will switch between matrix control thread functionality accordingly. We need to switch away from using a blanket cfg(target_arch = "aarch64") because it presents issues when compiling for non-Raspberry Pi devices that also use ARM64, such as M1 Macs.

    bug 
    opened by wymcg 0
👾 Run WebAssembly (WASM-4) games on small devices (like PyBadge)

?? gamgee Run WebAssembly (WASM-4) games on small devices. Gamgee is a WASM-4 games emulator written in Rust and designed to be executed on devices wi

Orsinium Labs 5 Feb 27, 2024
ruby-build is a command-line utility that makes it easy to install virtually any version of Ruby, from source.

ruby-build ruby-build is a command-line utility that makes it easy to install virtually any version of Ruby, from source. It is available as a plugin

null 3.7k Jan 5, 2023
zzhack-cli is a Command Tool to help you quickly generate a WASM WebApp with simple configuration and zero code

English | 中文文档 zzhack-cli is a Command Tool that can help you quickly generate a WASM WebApp with simple configuration and zero code. It's worth menti

null 17 Feb 9, 2023
A dialect of Lisp that designed for Minecraft bedrock command.

Command Lisp Document Command Lisp是一门为Minecraft Bedrock设计的简化语言,拥有这非常高的抽象程度。同时,它也是Lisp的一门方言。 Lisp 与众不同的部分原因是,它被设计成能够自己进化。你能用 Lisp 定义新的 Lisp 操作符。

CAIMEO 5 Jul 21, 2022
📦✨ your favorite rust -> wasm workflow tool!

?? ✨ wasm-pack Your favorite Rust → Wasm workflow tool! Docs | Contributing | Chat Built with ?? ?? by The Rust and WebAssembly Working Group About Th

Rust and WebAssembly 4.8k Jan 5, 2023
The Hassle-Free JavaScript Tool Manager

The Hassle-Free JavaScript Tool Manager Fast: Install and run any JS tool quickly and seamlessly! Volta is built in Rust and ships as a snappy static

Volta: Start your engines. ⚡ 7.3k Jan 8, 2023
This tool converts Lua code to TS automatically, including the conversion of common standards to their TS equivalents.

lua-to-ts This tool converts Lua code to TS automatically, including the conversion of common standards to their TS equivalents. Code that fails to be

Dion 11 Nov 21, 2022
Some tools for streaming frames to rpi-rgb-led-matrix using ZeroMQ, written in Rust.

led_matrix_zmq Some tools for streaming frames to rpi-rgb-led-matrix using ZeroMQ, written in Rust. This repository includes: Rust client and server l

Dan 2 Sep 6, 2022
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 294 Dec 23, 2022