# Use cases for the LED Matrix module

**URL:** <https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171>\
**Category:** Framework Laptop 16\
**Tags:** framework-laptop-16-amd-7040\
**Created:** [November 1, 2023, 5:34am UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171 "2023-11-01T05:34:42Z")\
**Posts on this page:** 20\
**Page:** 5

<div class="post-metadata">

**Author:** ![Jeremy\_Karst](https://avatars.discourse-cdn.com/v4/letter/j/5fc32e/32.png) [@Jeremy\_Karst](https://community.frame.work/u/Jeremy_Karst)\
**Post date:** [September 26, 2024, 12:09pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/82 "2024-09-26T12:09:18Z")

</div>

It draws the lightning bolt as darkened pixels in the charged portion of the battery indicator, and bright pixels in the unfilled.

The artifacting you think you were seeing was probably the tail of the lightning bolt.

If you chose to, instead of commenting out the charging indicator, you could probably use 80% (or whatever your limit is) as the maximum battery value, and not show the indicator if you are within a couple percent of that value.

The last thing I will say is that I suggest you don’t use the charging limit on your laptop unless you always leave it plugged in. While it absolutely does improve your battery longevity, the battery will already last a long time without it, and the batteries are so cheap and easy to replace.

---

<div class="post-metadata">

**Author:** ![Alexander\_Patchin](https://avatars.discourse-cdn.com/v4/letter/a/c68b51/32.png) [@Alexander\_Patchin](https://community.frame.work/u/Alexander_Patchin)\
**Post date:** [September 26, 2024, 1:09pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/83 "2024-09-26T13:09:30Z")

</div>

That’s correct, it’s the inverse of the lightning bolt in the dark area above. I’ll have to see if I can find the maximum battery percentage in the files as it didn’t stand out to me before but sounds like an awesome idea.

As for charging limits, yes, this is a workstation replacement and is always plugged in. My last laptop that had a heat sink fail also with a charge limit on the battery showed 0% degradation to capacity after 3 years because how little I cycle the battery.

---

<div class="post-metadata">

**Author:** ![Alexander\_Patchin](https://avatars.discourse-cdn.com/v4/letter/a/c68b51/32.png) [@Alexander\_Patchin](https://community.frame.work/u/Alexander_Patchin)\
**Post date:** [September 26, 2024, 1:29pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/84 "2024-09-26T13:29:42Z")

</div>

Okay, I figured it out. I added “and battery\_ratio \<= 0.74” after “if battery\_plugged” on line 124 in drawing.py. thank you so much for the suggestion! Now the lightning bolt disappears when my charge level is above 74%! (My bios charge level limit is 75%)

---

<div class="post-metadata">

**Author:** ![Mark\_Leone](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mark_leone/32/36924_2.png) [@Mark\_Leone](https://community.frame.work/u/Mark_Leone)\
**Post date:** [June 1, 2025, 2:57am UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/85 "2025-06-01T02:57:43Z")

</div>

I added an import/export capability to the dotmatrix web app, enabling you to save the displayed patterns as a json file and import them again. There is also a persistence checkbox, which when checked causes the display to never sleep. The modified code can be found in [this fork](https://github.com/MidnightJava/dotmatrixtool). I submitted a Pull Request to the Framework project, but it doesn’t seem to be actively managed anymore.

I plan to build a python app that will, among other things, be able to import these files exported from the dotmatrix webapp and display them. I want to add other capabilities, maybe a horizontally scrolling marquee that can work across one or two matrix displays, to which you can feed a string that loops or a continuous text stream, and specify the vertical offset of the scrolling text. I’m thinking this could be combined with other capabilities, essentially functioning as a label for other functions displayed in adjacent matrix locations. Maybe this can be eventually developed into a pluggable architecture, enabling the development of simple composable display applications.

---

<div class="post-metadata">

**Author:** ![Mark\_Leone](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mark_leone/32/36924_2.png) [@Mark\_Leone](https://community.frame.work/u/Mark_Leone)\
**Post date:** [June 3, 2025, 11:22pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/86 "2025-06-03T23:22:21Z")

</div>

Great job on this! I made some extensions to it, and have ideas for a couple more things I’d like to do.

I’m trying to fork your repo and finding it not possible. I tried to create an account, and it gave me an error, but then I found that I was logged in any way. But while logged in, I can’t see your project. If I log out, I can see it, but then I can’t fork it.

---

<div class="post-metadata">

**Author:** ![Jeremy\_Karst](https://avatars.discourse-cdn.com/v4/letter/j/5fc32e/32.png) [@Jeremy\_Karst](https://community.frame.work/u/Jeremy_Karst)\
**Post date:** [June 4, 2025, 2:53am UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/87 "2025-06-04T02:53:25Z")

</div>

Thanks for checking it out!

It’s a private website, but a publicly viewable repository. I’m not sure why you were able to make an account, but it is intended to be closed. You are welcome to download the code and use it as you like. If you host some changes and send me a link I will merge them into the project if I think they would be useful to others.

Have fun tinkering with your LED panels!

---

<div class="post-metadata">

**Author:** ![Mark\_Leone](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mark_leone/32/36924_2.png) [@Mark\_Leone](https://community.frame.work/u/Mark_Leone)\
**Post date:** [June 4, 2025, 3:25am UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/88 "2025-06-04T03:25:38Z")

</div>

Ok, great, that works. I’ll push the code to my Github account with attribution and a link to your repo. When I have something for you to look at, I’ll let you know.

To give you an idea what I’m working on: I added an option to show sensor temps and fan speeds in place of the disk and network metrics on the right panel. I then abstracted that, letting me target different metrics to each of the four quadrants, i.e. the top and bottom partitions you draw on the two panels. I added an arg parser that lets me specify a pre-defined metrics type to a desired quadrant, with the defaults being the ones you originally coded. So far, I just have the temps and fans, but I may add a couple more options. Also adding support for changing the config on the fly as the code runs, with a key listener checking key press status in each tick of your main loop.

BTW, I remember now that what I actually did was connect my Github account to your repo. It let me do that, but then I can’t read the repo when signed in. I was doing that in case you would accept a pull request, but having you check out my repo when I’m ready works just as well.

I appreciate you sharing the code with us. You have a superb framework implemented that makes it easy and fun to tinker with these matrix modules!

---

<div class="post-metadata">

**Author:** ![Mark\_Leone](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mark_leone/32/36924_2.png) [@Mark\_Leone](https://community.frame.work/u/Mark_Leone)\
**Post date:** [June 23, 2025, 4:08pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/89 "2025-06-23T16:08:05Z")

</div>

@Jeremy_Karst I completed some modifications to your code and pushed the code to [a public GitHub repo](https://github.com/MidnightJava/led-matrix).

Feel free to incorporate any or all of this into your repo if you like. If you have any comments or suggestions, I’d be happy to address them.

**Enhancements and extensions:**

- Added an option to display temperature sensor readings or fan speeds, using the same spiral graph and bar displays you developed
- The original system monitor apps are displayed by default. Alternative apps can be specified by program arguments. Program args can be specified to be applied when running as a Linux service also.
- Any of the original or new apps can be targeted to a desired quadrant (i.e. top or bottom of left or right panel)
- Integrated a plugin framework, so that additional apps can be provided easily by populating a single python script. The temp and fan apps are implemented as a plugin, to serve as an exemplar
- Optional key listener enables quick display of the app names in each quadrant, while the key is pressed.
- Auto-detect LED panels, so the code can work as-is with any panel installation setup (i.e. both left, both right, one each on either side of the keyboard, or one panel only on either side.

The README on the repo gives more info, including installation and run instructions.

I’m working on another plugin, to display the contents of a saved JSON 2D array, either persistently or periodically replacing the assigned system monitor apps.

---

<div class="post-metadata">

**Author:** ![Jeremy\_Karst](https://avatars.discourse-cdn.com/v4/letter/j/5fc32e/32.png) [@Jeremy\_Karst](https://community.frame.work/u/Jeremy_Karst)\
**Post date:** [June 23, 2025, 5:20pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/90 "2025-06-23T17:20:18Z")

</div>

Thanks Mark!

I added you as a collaborator on my code repository so that you are able to submit a pull request. If you are willing to submit a pull request I would prefer to merge that way so that you have proper attribution for your work. If you would rather not, or if I don’t hear from you I will merge your changes myself.

---

<div class="post-metadata">

**Author:** ![Mark\_Leone](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mark_leone/32/36924_2.png) [@Mark\_Leone](https://community.frame.work/u/Mark_Leone)\
**Post date:** [June 23, 2025, 5:44pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/91 "2025-06-23T17:44:36Z")

</div>

Thanks, that’s perfect. I’ll submit a PR, probably this evening.

---

<div class="post-metadata">

**Author:** ![taezea](https://avatars.discourse-cdn.com/v4/letter/t/e99b99/32.png) [@taezea](https://community.frame.work/u/taezea)\
**Post date:** [July 25, 2025, 2:51pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/92 "2025-07-25T14:51:53Z")

</div>

I built this [project](https://github.com/MidnightJava/led-matrix?tab=readme-ov-file) for my nixos FW16. Doing some vibe coding. I created a PR.

Decided to [fork](https://github.com/timoteuszelle/led-matrix) it. See readme.md for installation/configuration.

---

<div class="post-metadata">

**Author:** ![taezea](https://avatars.discourse-cdn.com/v4/letter/t/e99b99/32.png) [@taezea](https://community.frame.work/u/taezea)\
**Post date:** [August 13, 2025, 9:29pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/93 "2025-08-13T21:29:09Z")

</div>

[Updated](https://github.com/timoteuszelle/led-matrix) with all upstream changes.

---

<div class="post-metadata">

**Author:** ![Sigroot](https://avatars.discourse-cdn.com/v4/letter/s/c89c15/32.png) [@Sigroot](https://community.frame.work/u/Sigroot)\
**Post date:** [September 20, 2025, 7:37pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/94 "2025-09-20T19:37:07Z")

</div>

Hello all! I made [custom firmware](https://github.com/sigroot/FW_LED_Matrix_Firmware) for the LED Matrix Modules that makes it easy to set individual brightnesses for each LED and a Rust library to communicate with the firmware. I also expanded on Ecca’s idea and made a [system](https://github.com/sigroot/FW_LED_Applet_Interface/tree/main) to host multiple ‘applets’ on one LED matrix. Please take a look!

---

<div class="post-metadata">

**Author:** ![Simon\_Ha](https://avatars.discourse-cdn.com/v4/letter/s/0ea827/32.png) [@Simon\_Ha](https://community.frame.work/u/Simon_Ha)\
**Post date:** [January 2, 2026, 12:02am UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/95 "2026-01-02T00:02:21Z")

</div>

> [@taezea](#):
>
> [Updated](https://github.com/timoteuszelle/led-matrix) with all upstream changes.

I really wanted to try it, but it unfortunately seems to not work under Ubuntu/Wayland for me. I created a [bug report](https://github.com/MidnightJava/led-matrix/issues/8) upstream—or can anyone give me a hint how to get it up an running? Thx! 🙂

---

<div class="post-metadata">

**Author:** ![taezea](https://avatars.discourse-cdn.com/v4/letter/t/e99b99/32.png) [@taezea](https://community.frame.work/u/taezea)\
**Post date:** [January 5, 2026, 3:11pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/96 "2026-01-05T15:11:19Z")

</div>

I found some time, please test.

---

<div class="post-metadata">

**Author:** ![taezea](https://avatars.discourse-cdn.com/v4/letter/t/e99b99/32.png) [@taezea](https://community.frame.work/u/taezea)\
**Post date:** [January 6, 2026, 7:42pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/97 "2026-01-06T19:42:02Z")

</div>

Bugs squashed, my fork has latest bug fixes, waiting for upstream to merge. Thanks for testing and feedback.

---

<div class="post-metadata">

**Author:** ![Jen\_Savage](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/jen_savage/32/40490_2.png) [@Jen\_Savage](https://community.frame.work/u/Jen_Savage)\
**Post date:** [January 8, 2026, 1:08am UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/98 "2026-01-08T01:08:09Z")

</div>

I was thinking on the left I could have some sort of visual of the audio for whatever song I’m playing or whatever sound is coming through the speakers.

And on the right, I want multiple clocks for different locations around the world where my friends and coworkers live.

---

<div class="post-metadata">

**Author:** ![heckseven](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/heckseven/32/28779_2.png) [@heckseven](https://community.frame.work/u/heckseven)\
**Post date:** [May 25, 2026, 8:37pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/99 "2026-05-25T20:37:22Z")

</div>

i am building most of what is in the requests above. hit me with more requests or ideas.

here’s a peek at the video player:

[![](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/3X/3/9/39ef2089cc1db244a5aa59b91922b642a6ab4956.jpeg "video matrix sneak peak") ](https://www.youtube.com/watch?v=ZUwjycsp_Mg)

currently i have working:

**HUD configuration**

- loads of widgets - one per side
  - clocks, meters, visualizers, biomes, and more
  - meters have configurable settings per quadrant (if available)

- create multiple HUD presets
- HUD presets can be configured to change on trigger (if you are running a VM or something)

**design tool**

- easily design your own images or animations
- can import gifs/images and adjust them as a good starting point

**audio visualizer**

- this thing is rad - visualizes either mic or system audio

**video**

- what you see in the video plus a few more settings

**biomes**

- think GoL with way more bells and whistles
- biome editor - create life one dot at a time or whatever
- import image assets as a starting point

**Notifications**

- set animations to trigger when matching system notifications, ec controls (cam/mic switch), and more that I’ve forgotten
- animation can be scrolling text (configurable) or an animation of your choice made with the design tool
- The animation can either replace what is on the screen (temporary) or overlay.

this is all configurable with a web UI or the daemon. The daemon has CLI commands to do a bunch of the above so if something’s missing, it would be trivial to add it.

right now it’s designed to run in Ubuntu, but once the UI and feature set is stable, I see no reason to keep that requirement. It’ll be open sourced as soon as i get it a bit further and have a release or three out just to minimize pain.

---

<div class="post-metadata">

**Author:** ![taezea](https://avatars.discourse-cdn.com/v4/letter/t/e99b99/32.png) [@taezea](https://community.frame.work/u/taezea)\
**Post date:** [May 26, 2026, 12:14pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/100 "2026-05-26T12:14:53Z")

</div>

I have been working off and on, on this project. And opened a PR with framework to achieve some of the things you mentioned here.

See:

> **[GitHub - MidnightJava/led-matrix: System Monitor display for Framework 16 LED Matrix...](https://github.com/MidnightJava/led-matrix)**
>
> System Monitor display for Framework 16 LED Matrix input module

> <https://github.com/FrameworkComputer/dotmatrixtool/pull/12>
>
> This PR is stacked directly on top of PR #11 (Import and Export patterns by @Mid…nightJava) and adds a software-oriented JSON export feature. All of the behavior from PR #11 remains unchanged.
> 
> \## Relationship to PR #11
> 
> \- This branch is based on the current head of PR #11.
> \- All of Mark’s changes (import/export, persist checkbox, wake loop, etc.) are included as-is.
> \- This PR only adds a separate JSON export path for software workflows.
> 
> That means maintainers can:
> \- Merge PR #11 alone, or
> \- Merge this PR instead, which includes PR #11 plus the software JSON export additions.
> 
> \## Additions in this PR
> 
> \### 1. UI: “Export for Software” section
> 
> Below the existing Import/Export buttons, this PR adds:
> 
> \- \*\*Format options\*\*
> - \`Binary (0/1)\`
> - \`Grayscale (0–255)\` (default)
> 
> \- \*\*Layout\*\*
> - Fixed \*\*column-major\*\* layout (\`9 x 34\`), matching the physical LED matrix orientation and my icon library usage.
> 
> \- \*\*Buttons\*\*
> - \`Export Left (JSON)\`
> - \`Export Right (JSON)\`
> 
> The existing Import/Export buttons and the 39‑byte hardware pattern format from PR #11 remain exactly as implemented there.
> 
> \### 2. JSON export format
> 
> The new buttons generate a \`.json\` file with:
> 
> \- \*\*Shape\*\*
> - \`9 x 34\` (outer array = columns, inner array = rows)
> 
> \- \*\*Values\*\*
> - Binary mode: \`0\` (off) or \`1\` (on)
> - Grayscale mode: \`0\` (off) or \`255\` (fully lit)
> 
> This is derived from the existing convention where \`matrix\[row\]\[col\] === 0\` means “LED on”.
> 
> Filenames follow this pattern, e.g.:
> 
> \- \`matrix\_left\_grayscale\_colmajor.json\`
> \- \`matrix\_right\_binary\_colmajor.json\`
> 
> \### 3. Implementation details
> 
> \- \`index.html\`
> - Adds the “Export for Software” section with:
> - A format radio group (binary vs grayscale).
> - Fixed-layout note (“fixed column-major (9x34)”).
> - \`Export Left/Right (JSON)\` buttons.
> 
> \- \`app.js\`
> - Calls \`initSoftwareExportOptions()\` in the main \`$(function() { ... })\`.
> - Adds \`initSoftwareExportOptions()\`:
> - Wires \`#exportLeftSoftwareBtn\` / \`#exportRightSoftwareBtn\` to the new behavior.
> - Reads the \`exportFormat\` radio value.
> - Adds \`exportMatrixSoftware(matrix, side, grayscale)\`:
> - Builds a fixed column‑major \`9 x 34\` array from the existing \`matrix\_\*\`.
> - Maps internal \`0/1\` cells to \`0/1\` or \`0/255\`.
> - Triggers a JSON download with a descriptive filename.
> 
> \## Compatibility
> 
> \- No changes to the 39‑byte hardware import/export from PR #11.
> \- JSON export is fully additive and only affects the new “Export for Software” UI.
> \- Intended for use cases like the LED matrix monitoring project (icon libraries, grayscale icons, etc.).
> 
> Happy to adjust naming/text if you prefer different terminology for the new options.

---

<div class="post-metadata">

**Author:** ![heckseven](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/heckseven/32/28779_2.png) [@heckseven](https://community.frame.work/u/heckseven)\
**Post date:** [May 26, 2026, 12:51pm UTC](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171/101 "2026-05-26T12:51:30Z")

</div>

nice. to clarify, i have all of the above working.

[Previous page](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171.md?page=4)

[Next page](https://community.frame.work/t/use-cases-for-the-led-matrix-module/39171.md?page=6)
