bevy_streamdeck 0.9.0

Elgato Stream Deck plugin for Bevy
Documentation
use bevy::{asset::AssetPlugin, log::LogPlugin, prelude::*};
use bevy_streamdeck::{StreamDeck, StreamDeckPlugin};
use rand::RngExt;

fn main() {
    App::new()
        .add_plugins((
            MinimalPlugins,
            AssetPlugin::default(),
            ImagePlugin::default(),
            LogPlugin::default(),
        ))
        .add_plugins(StreamDeckPlugin)
        .insert_resource(Time::<Fixed>::from_seconds(1.0))
        .add_systems(Startup, load_asset)
        .add_systems(FixedUpdate, change_image)
        .run();
}

#[derive(Resource)]
struct Logo(Handle<Image>);

fn load_asset(mut commands: Commands, asset_server: Res<AssetServer>) {
    commands.insert_resource(Logo(asset_server.load("birdoggo.png")));
}

fn change_image(streamdeck: Res<StreamDeck>, logo: Res<Logo>, images: Res<Assets<Image>>) {
    if let Some(image) = images.get(&logo.0) {
        let mut rng = rand::rng();

        if let Some(kind) = streamdeck.kind() {
            let key = rng.random_range(0..kind.keys());

            streamdeck.set_key_image(key, &image);
            for i in 0..kind.keys() {
                if i != key {
                    streamdeck.reset_key(i);
                }
            }
        }
    }
}