2005 was the year of Compiz. 20 years later, we’re doing it all over again. Designed with the power user in mind, Wayfire continues to push the bar with astounding animations, effects and functionality. In today’s post, we’re talking about live window previews. The concept is that you have a window button in a taskbar and hovering over it yields a tooltip containing a live preview of the corresponding window. This is a sought after feature but there are many ways to skin this cat and wayland makes for an interesting ride. You can have the client tell the compositor where to render the tooltip preview but where’s the fun in that? You could have the client request a buffer stream and send the bits to the client so it can render them as it sees fit. So how did we do it? The latter seemed to be the more reasonable choice, so that’s how it started. Wayfire has the ability (for a plugin) to communicate with a client using ipc, side banding messages not on the wayland socket wire. The way this works is: On button enter, the client sends an ipc message with the view id. The wf-live-previews plugin receives this message and creates a view-sized headless output named “live-preview-#” where “#” is the view id. Then the plugin sets up rendering the view to the output. The client gets the new wl_output global and checks the name, then uses this to begin requesting frames for the hidden output using the standard wlr_screencopy protocol. Finally, it gets the frames and displays them (in this case) in a tooltip. And if that wasn’t enough, the client in question is a python panel called panorama-panel. It uses pywayland, pywayfire ipc and gtk4 in a python client, which make for a powerful combination. Now to drive the point home, is a video:
Monthly Archives: August 2025
Wayfire Animation Updates
Wayfire is constantly improving and new interesting animations are constantly pushing the bar. This time, we introduce a new animation part of wayfire-plugins-extra extra-animations plugin. It is called melt, and has an interesting story. Long story short, it was created by an AI LLM. Spoiler alert: It was Google ‘AI Mode’. I fed it the current fire shader and asked it to make an improved version. It spit back a shader which I massaged into an instance that wayfire could consume. In addition to the distortion there was a lot of code to render a gradient of color to simulate some fire, but I felt the distorted surfaces were spot on for a wayfire open/close animation. So I ripped the gradient out and left it as a shader that melts the view to/from existence.
Additionally, a long time wayfire contributor Daniel Kondor filed this issue. At first I dismissed it because the squeezimize shader is quite difficult to work with in its current state. However I am really glad that someone brought this up because 1) it pushed me to improve squeezimize shader and 2) Daniel wrote a companion shader which allows the squeezimize animation to reasonably handle left and right minimize targets. Before, it only handled top and bottom panels. Of course all of this text can be boring and cumbersome, so here are some videos:
Melt Animation
Improved Squeezimize