The simulator#

opendmd-sim plays a card, or any folder of GIFs, in a desktop window drawn as the panel's LEDs: the same opendmd-core engine the firmware runs, with a renderer that models the real P4 panel's dots and glow instead of flat squares. It is a tool for developers (checking an effect, a transition or a card without a board on the desk).

Most people want the web demo instead. It runs in any browser, with nothing to install, and plays a demo card on the same engine: opendmd.github.io/demo.

The simulator playing a fire tunnel effect

Run it from source#

You need a stable Rust toolchain and a desktop to open the window on. From a checkout:

make sim                                  # a folder picker opens
make sim ARGS="/path/to/card"             # a card: a folder with filelist.txt
make sim ARGS="/path/to/gifs"             # any folder of GIFs, in name order
make sim ARGS="/path/to/one.gif"          # a single GIF
make sim ARGS="--demo"                    # the built-in demo, no files needed

(cd opendmd-sim && cargo run --release -- <options> does the same.) With no argument a folder picker opens, and the demo plays if you cancel it. A folder or GIF dropped onto the program counts as the argument. opendmd-sim --help lists every option: filters for a card (--platforms, --title, --category), --shuffle, --scale (pixels per LED, default 10), --transition, --look (the panel's tints), --glow, and --play '@clock?date=1' for a single live item or effect.

Key
Space next GIF
P pause / resume
L LED or flat squares
Esc quit

The clock live item

The demo and the web demo's card use only OpenDMD's own effects and Kenney sprites (CC0).

Screenshots without a window#

--screenshot out.png renders one frame and exits, so it works on a headless machine; --screenshot-at <ms> picks the moment, and --screenshot-canvas out.png writes the raw 128x32 canvas. This is how the pictures on this page were made:

make sim ARGS="--demo --screenshot demo.png --screenshot-at 500"
make sim ARGS="--play '@clock?style=big&date=1' --screenshot clock.png"

Kenney sprites, a scene from the demo card

How the LEDs are drawn (their size, bloom and gamma) is modelled in opendmd-render/src/lib.rs, measured from a close-up photo of the real panel.