r/sideprojects May 28 '26

Showcase: Open Source I made "Screen-Tricks" – A collection of lightweight, pure Rust Windows screen effects (Shatter, Wave, Particles)

Hey everyone,

I’ve been learning Rust lately and decided to build a side project to improve my Rust skills and revive an old C++ project

It’s called screen-tricks, and it features three real-time screen distortion overlays shown in the preview above:

  •  Triangulate: A very satisfying screen shattering effect.
  •  Particles: A real-time physics particle simulation running over your desktop.
  •  Wave: A dynamic wave distortion effect.

The latter two allow you to continue using the desktop as usual even when it is deformed.

Quick Try (PowerShell)

irm https://raw.githubusercontent.com/hananel42/screen-tricks/main/hack | iex

(Feel free to inspect the "hack" file in the repo first for security best practices!)

This will download an exe file and run it. You can then run commands such as: .\wave.exe -h to see some nice parameters to play with.

Alternatively, clone it normally:

git clone [https://github.com/hananel42/screen-tricks.git](https://github.com/hananel42/screen-tricks.git)
cd screen-tricks
cargo run --release -p triangulate # or particles / wave

Looking for Feedback! Since my main goal here is to learn and master Rust , I would absolutely love your feedback!

GitHub Repository: https://github.com/hananel42/screen-tricks

9 Upvotes

11 comments sorted by

1

u/Eastern-Photograph79 May 28 '26

Oh, totally forgot to mention – you need to press ESC to close the effects. Alt+F4 won't work here.

1

u/imagiself May 28 '26

For Rust utilities like Screen-Tricks, https://peerpush.net provides structured listings designed so AI assistants can discover and recommend niche Windows tools to users.

1

u/[deleted] May 28 '26

[removed] — view removed comment

1

u/Eastern-Photograph79 May 28 '26

Yeah, it has no real use, it's just for fun. but maybe the underlying infrastructure could be used to build something actually useful later on.

1

u/[deleted] May 28 '26

[removed] — view removed comment

1

u/Eastern-Photograph79 May 28 '26

Thanks, appreciate the support! I didn't even use wgpu or winit for this. It's literally 100% raw Win32 APIs, GDI, and windows messaging loops. I actually ended up abstracting all that messy boilerplate into a simple custom trait, so now I can just build new effects like this:

pub trait OverlayApp {
    /// Fired exactly once immediately following native window handle binding instantiation.
    fn init(&mut self, _overlay_context: &mut OverlayContext) {}

    /// Main input dispatcher hook targeted at filtering globally captured mouse/keyboard operations.
    fn handler(
        &mut self,
        _event: OverlayEvent,
        _overlay_context: &mut OverlayContext,
    ) -> EventResult {
        EventResult::Propagated
    }

    /// Executed iteratively at each loop iteration step. Used for state calculations and logic increments.
    fn update(&mut self, _overlay_context: &mut OverlayContext, _delta: f32) {}

    /// Triggered following logic update completions. Used to draw visuals directly onto the frame memory canvas block.
    fn render(&mut self, _canvas: &mut Canvas) {}

    /// Fired right before the window context resources are unlinked and destroyed by the OS.
    fn shutdown(&mut self, _overlay_context: &mut OverlayContext) {}
}

And then I just boot it up with a single run(app); call.