0bCdian / Waypaper-Engine

A wallpaper setter with playlist functionality!
GNU General Public License v3.0
165 stars 0 forks source link

Per wallpaper playlist settings #7

Closed ryphon closed 2 months ago

ryphon commented 5 months ago

I'm curious if it's possible to set the wallpaper in an individual playlist to its own set of options.

I.e. I have several 'normal' wallpapers, and then a few ultrawide that would fit accross 2 normal monitors. The rest of the normal wallpapers could just go about their business normally, but the ultrawide would do the "Extend across all monitors" setting.

Separately (I can do write this up in another issue, and I'll probably take a look at the code to see if I can PR it in rather than just asking work of you), I'd love to see a way to do random wallpapers per monitor. So like in wallpaper-engine, where you can have a playlist for each monitor individually. I know swww can handle which display is applied, so it seems like something at least mildly technically feasable.

0bCdian commented 5 months ago

Hi! All of the features you mentioned aren't technically difficult per se, what I'm stuck on is on how would it be best implemented in terms of user experience, since that's not my strong suit. What I'm thinking on is have a sidebar on the right when you click an image, that will display that image settings, like , "extended always" or something like that, and for the individual random images by monitor, you mean like, when you call random wallpaper, a random wallpaper is selected for each screen? If so, the way I think it's the easiest to implement gui wise, is by having it in the app configuration section, "Set different random image in each monitor". But please let me know how would you like this features to be implemented.

ryphon commented 5 months ago

I'm not super strong in the user experience concept myself.

I was imagining something where you add something to the playlist, and then right click (similar to how you'd set an individual wallpaper) and set the specific settings for it. I'd think a toggle in the playlist configuration for "random image per monitor", but if a 'next in the queue' wallpaper is marked as "span across x", then it would ignore the "per monitor" settings for that.

So I'm imagining having a timer per wallpaper swap, and it would on a timer do monitor a, then b, then n, and if a wallpaper was set as span, it would replace a, b, n with the spanned wallpaper.

Alternatively, can do something similar to wallpaper-engine, where you have a playlist per monitor, and they operate on timers too?

0bCdian commented 5 months ago

I never realized wallpaper engine stored playlists per monitor. Right now all the logic in the playlist class accounts for only one playlist at a time, and I would have to make some potential breaking changes that would require a migration in the database to achieve this, but nevertheless is something not that difficult and I was going to rewrite a lot of the code anyways since I was building it on the go without much thought on future expansion of features (I never thought people would actually use this hahahha) so, I'll get to it, right now I'm not working so I have a lot of free time to learn and work on personal projects. I will keep you updated on any progress made, and would love any help with testing the features!

ryphon commented 5 months ago

Haha honestly not trying to jam more onto your plate. I know I could do a lot with raw scripts, but I really like having a proper UI to do wallpaper/playlist management. Sometimes I want to have a separate set of wallpapers than just "pick a random one in the directory". It's one of the things I missed most from Windows Wallpaper-Engine, so I'm a big fan.

0bCdian commented 5 months ago

I'm glad you like the project! I really like programming, so it's not a problem for me to always have more work to do, on the contrary it motivates me to see interest in the project from users, and will always try and do my best to deliver a good product!

0bCdian commented 5 months ago

Just to update, I'm currently doing a big rewrite and will take a bit longer to add the features you asked, I'm also considering on porting the daemon to rust , and possibly move to tauri, but this is more longer term, meanwhile I will just rewrite the logic to add the wallpaper per display options. I am also fixing a lot of mess in the codebase because I didn't configure the linter properly starting out and now it's a big mess in terms of good style and formatting. But be assured the feature will come.

On the whole rust side, I have big ambitions and want to implement truly animated wallpapers, like wallpaper engine, but that requires that I somehow put a chromium or webkit2 instance in the background layer to control the wallpapers, this approach will let me handle all the wallpaper setting logic myself, and replace swww altogether as well as supporting animated wallpapers through html js and css just like wallpaper engine does, also videos, gifs, etc. Other benefits will be that positioning of wallpapers will be much more instant and easy, because right now what I do is generate images for each monitor spliting the original image, this is a considerable performance overhead, and with a webbrowser, I will just stretch the window to span across monitors and define "canvas" components for each monitor logical size, which is way simpler to implement later a custom positioning for an image for example, which right now I want to implement but doing so would be a lot of work on the frontend to accomplish. Anyways, enough blabbering, I'll get back to work 😅

ryphon commented 5 months ago

Love to hear the background. I'd definitely love to see the daemon in rust. I'm personally not a huge fan of TS, so it's tough for me to parse to try to assist anywhere.

I like the idea of the webkit/chromium instance, but dang I wouldn't want to have to keep that updated constantly, or have to worry about any kind of security issues relating to it.

I know wallpaper engine proper does use chromium, so it's definitely possible, and would be quite slick on Linux as well.

c0mpile commented 3 months ago

I actually came here about the same issue. One possible solution would be a setting to auto span multi monitor wallpapers with the ability to mark images as multi monitor with a monitor count, then split the image into that number of parts and set them per monitor.

0bCdian commented 3 months ago

Hi! i wanted to let you guys know how is development going, I almost finished adding all the features you asked plus some more I had planned like selecting images for easier deleting of images or add/remove from playlists. I will still be ironing out some bugs and finish adding the last features plus adapting the cli for the new changes.

https://www.youtube.com/watch?v=77e2qn5A53I

Any feedback would be appreciated!

ryphon commented 3 months ago

Excellent work @0bCdian, looks really really good. Can't wait to get my hands on that!

c0mpile commented 3 months ago

@0bCdian That looks great . Any chance we could get a white tray icon option?

0bCdian commented 3 months ago

@0bCdian That looks great . Any chance we could get a white tray icon option?

Sorry for the late reply, I don't have a white tray for the icon, and adding such a feature seems a little pointless, I do have this version of the icon tho:

image

Since I streamlined the build process quite substantially recently, I'm going to add instructions for manually building and installing the app, and I'll add a section where you can swap the icon you want, or any image you want for the matter, I hope this will suffice :)

c0mpile commented 3 months ago

That's perfect. My OCD doesn't like 1 colored icon among the white ones in my monochrome theme. :)

0bCdian commented 2 months ago

Sorry for the big delay, I took a break from all typing related activities because of constant pain in the hand joints. Anyway, I have resumed development although a bit slower and almost finished the new cli

https://www.youtube.com/watch?v=BMW6upV1UrI

you can now control playlists from within the cli, start them , stop them ,send them commands, get info, get the image history, as well as query the current monitors and their corresponding images set. I also added to the start command both in daemon and the app itself the optional args to pass the xrgb format workaround to swww's glitching problem that some folks have been experiencing. I thought of adding a one time run mode just like the waypaper app, you pass the cli a folder and it will open and display all the images in that folder, although Im still figuring out the implementation details and features, but this will come in later versions, for now I will finish polishing the cli and tack the css responsiveness and will call it a day for 2.0, I have more features planned for the future like dragging images to the app, adequate 2k and 4k thumbnail sizes, a script folder to replace the current scripting feature, and individual scripts per playlist.

0bCdian commented 2 months ago

Hi! I released the new version and will be closing this issue, update is also live in the aur, so if anything pops up feel free to open up another issue!