Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Presets #375

Open
ZenRevision opened this issue Sep 11, 2024 · 14 comments
Open

Presets #375

ZenRevision opened this issue Sep 11, 2024 · 14 comments
Labels
enhancement New feature or request

Comments

@ZenRevision
Copy link

ZenRevision commented Sep 11, 2024

It would be useful to be able to save preset configs, similar to how we can save window configs, but not targeted to a specific window.

Currently we can save window configs, either through a hotkey, or through the menu dropdown 'save' button. These saved configs target a specific window and get applied automatically when opening the targeted window.

Presets could function similarly, with a separate hotkey, and a new 'save preset' button within a new 'Preset' menu item. The difference would be that presets wouldn't be targeted to a specific window nor we they be applied automatically. Rather they would be applied manually, with a hotkey, or through the menu. The 'Preset' menu item would function similar to other effects, with a main menu button that opens a submenu overlay when hovered over with the mouse. See further UI details below.

An example workflow:

  1. I open a notepad window, and activate some various WindowTop effects and configure according to preference.
  2. Hit the 'save preset' hotkey, or click the 'save preset' button within the 'Preset' submenu overlay of the WindowTop menu.
  3. A dialogue would pop up requiring that I input a name for the preset, and optionally assign a hotkey for it.
  4. Upon assigning a name, and optionally a hotkey, and confirming these dialogue options. The preset would be saved.
  5. Now I could apply this saved 'preset' config to any window, by hitting the assigned hotkey (provided a hotkey was assigned), or by opening the menu and selecting from a list of all saved presets.

The Presets UI:

  • The Preset menu item, would work like the other effects, such as Glass.
  • Clicking on the main 'Preset' button would toggle on/off the currently selected preset.
  • Hovering the mouse over the main 'Preset' button, with a delay, would present the Presets submenu overlay, with buttons to save and delete presets, and a list to scroll through and select from different saved presets.
  • This interface should always remember the previously selected preset, which could always be quickly toggled on/off by just clicking the main Preset button.
  • The 'Preset' menu option could be disabled in settings so this whole Presets UI wouldn't appear in the WindowTop menu at all.
@gileli121 gileli121 added the enhancement New feature or request label Sep 11, 2024
@gileli121
Copy link
Member

gileli121 commented Sep 11, 2024

@ZenRevision

That is a great description and sounds like an interesting idea.
Can you answer why you need different presets?

I want to hear more practical examples of a real problem you want to solve with the presets concept.

An example of a problem is that I want an opacity of 50% for program X and 80% for program Y. In that case, the save-window-configuration feature will do the trick. If you only want WindowTop to remember the opacity level and don't enable it when the window is open, just change the opacity level, disable the opacity, and click on the save button.

With the preset concept, I may be able to quickly set the opacity to 50%; however, this does not seem like an ideal way to handle it—I need to remember what preset is with 50%.

I want to know about real examples that save-window-configuration is not a good answer for.

This can help ensure that this is the best approach.

@ZenRevision
Copy link
Author

For me personally... just adding configurable defaults for glass would be mostly sufficient. Though in fact there are numerous other configuration settings where there is no access provided for editing defaults. I guess I should make a separate issue requesting that a "set defaults" button be added into the each of the effect config submenus. When activating Glass, the default blur setting is disabled, and I pretty much always want that set at medium.

When I want to apply glass to a window, I must also go into the glass settings and set transparency 80%, blur medium, image 50%, text 50%, which seems to work well enough for many apps.

The reason presets would be helpful is that some apps are better with Transparency 75%, blur medium, image 0%, text 100%. While other apps work better with image filtering disabled. So the presets would allow me to setup several presets, and apply them with hotkeys, bypassing a lot of fiddling with settings.

Why not just save the suitable configs for each app? Well in many cases I don't want an app to always get the effect applied automatically. One example is the windows Calculator app. I like applying Glass to the Calculator, but if I save that config, it gets applied to "taskbar settings," and various other components of windows (not sure why - perhaps that's a separate issue, but just one example of not wanting to always auto-apply a config). So I prefer not to use the "save" function for Calculator.

I can also imagine many instances where one may want to make a window 60% transparent, always on top, with click through activated, to keep some info visible on screen while working in another app, only for the purpose of working on a specific task temporarily, without wanting to auto-apply the config for normal use. Again, with a preset saved, this could be done with a single preset toggle hotkey, and then disabled with the same hotkey once finished working on the respective task, rather than going through and configuring several different settings when beginning work on the task, and then either closing/relaunching the respective app, or going through those same settings again, after finishing up.

The other thing the presets would allow, is having a second set of defaults. For example, I could just click the Glass button to apply Glass defaults, or if I had already selected a suitable preset in the presets submenu (a selection which should persist), then I could always just click the Preset button to apply an alternate Glass config. This would be that much more useful if more defaults (such as Glass defaults) could be edited.

I see a lot of utility in a presets system as described in the OP here. I think it would add efficiency and flexibility. I think editable defaults are also important, but this preset system could provide a workaround for the fact that currently many defaults aren't editable, while also providing additional utility. That said, maybe just adding the ability to edit more of the defaults would be much easier than adding presets, I'm not really sure about that, but if that is the case, then more comprehensive editable defaults should probably be higher priority than presets.

@gileli121
Copy link
Member

gileli121 commented Sep 13, 2024

@ZenRevision

According to what you wrote here:

Why not just save the suitable configs for each app? Well in many cases I don't want an app to always get the effect applied automatically. One example is the windows Calculator app. I like applying Glass to the Calculator, but if I save that config, it gets applied to "taskbar settings," and various other components of windows (not sure why - perhaps that's a separate issue, but just one example of not wanting to always auto-apply a config). So I prefer not to use the "save" function for Calculator.

It seems that, based on your initial thought, you prefer the save config per app or window.
But then you rolled it out because of the issue that it applies every time (when the window opens), and you don't want this specific behavior (you only wanted to save the config but only sometimes apply it). It seems like a good idea.
So, why going too far with a complete different concept? what if I only develop this proposal and also option to not auto apply the config? so you keep using the existing save config feature. but it will include a button and hotkey to apply this config (if detected for that window by process name or something like what you described here) .

The only benefit of the preset concept is that you can switch between configurations for every window very quickly.
I still find it a little hard to understand why it is needed, and maybe just a simple button to apply configuration (instead of auto enable it) can answer your need.

Can you explain a specific real use case where presets will be more useful?

@ZenRevision
Copy link
Author

ZenRevision commented Sep 16, 2024

Well, as mentioned above, it relates partially to defaults. Though I think I must revise a previous statement I made regarding that, as I've come to realize that presets would really be extending the existing save functionality.

I use Glass a lot. Some apps I always want to apply Glass effect to, so 'save' works fine. But many apps I don't want to auto apply any config to. Many times it's an app I only just installed, and I may not decide whether I want to auto apply any config for some time, or if I even want to keep that app installed on my system. With presets I could instantly apply a suitable config to an app with the absolute minimal input, in a way that can be reused. Then If I find that every time I open an app, I'm applying a given preset, then I can save that config for the app, and thus further automate.

I'm also an artist, and often work with reference materials that may be open in various apps, while I work in another app. So I may frequently want to apply "always on top, click through, 40% transparent" to a window, so I can reference it while working in another app below. That is task specific though, not app specific, so that window config makes sense as a preset (as described), or maybe as an alternate default - but is not suitable as a normal default (plus that particular config consists of two combined effects, transparency & always on top, each with their own particular settings -- and their own defaults).

I tend to do this with a variety of windows from different apps on the fly. Often I can save or convert reference material to be viewed in a specific app, but if I can avoid having to spend that time, especially for small/quick projects, it's preferable to save time where possible. So being able to apply my "reference" preset quickly & easily to whatever window I may be viewing something in at any given moment, in the long run, would save me thousands of clicks.

Edit: I also just realized that with reference materials, often I may be viewing references in an app that I have a saved config for, that gets auto-applied, which would be my preferred config for that app during normal use. Then I could easily apply my "reference" preset, temporarily, in order to work on a specific task. I don't think that substantially complicates matters though, as overriding saved settings, temporarily, is already possible in WindowTop (by simply adjusting settings of an app that has a saved config, without re-saving), but it does further highlight the utility that a "presets" feature would provide.

So yeah, the point is to be able to apply various preferred configs with a minimal amount of manual repetition, to any window. It would save me lots of time and substantially reduce repetition by not having to go into individual effect submenus to adjust settings, when probably more than 90% of the time I'm repeating setting adjustments to reproduce 2 or 3 often used configurations, in newly installed apps, seldom used apps, or various other edge cases (edge cases which combined, make up a substantial portion of general desktop computing).

Even in cases where I decide to save a config for a given app, in most cases, presets would still save me time. Because I could apply one of my few, often used, presets, and hit save. Rather than having to go through multiple settings to reproduce that config for the thousandth time, before saving.

I see great utility in a preset system like this. Yes it certainly overlaps with existing save functionality, and it also overlaps with configurable defaults (a function which should be more comprehensive), yet it provides a great deal more flexibility than either of those overlapping functionalities currently offer on their own. I think it may be a mistake to think of presets as completely separate from saves. Because presets would make use of the same underlying functionality as saves (saved configurations), I think it makes more sense to think of it as extending the existing save functionality... making it more flexible, configurable, and responsive.

I don't think adding an "apply saved config" button even begins to approach the utility of the preset system I described. Most of the utility of presets stems from them not being tied to a specific window or app. While most of the benefit of the current save functionality stems from auto-applying configs to specific windows/apps. So making the auto-apply save optional, and adding a button to apply, would extend utility, in either of these directions, only negligibly. The situations where such a button would be useful for me, are very few, especially as compared to presets (saved configs that aren't tied to specific windows/apps), which is something I would use very often.

All that said... I do think that presets could work quite well as part of an advanced save editing feature, requiring manual config file editing, as described under that issue here.

@gileli121
Copy link
Member

gileli121 commented Sep 17, 2024

@ZenRevision
It sounds like you know what you are asking for and why.
Thanks for the feedback. I will consider your feedback when I make improvements around this functionality.
I am convinced that the "presets" feature may have good justification.

Also, I wrote to you that I have an existing development branch with an implementation to allow changing saved configurations.
It is a development branch that I have and suspended a year ago. I even originally planned to release it back in the day, but I decided that the features #313 & #133 are much more important, so I was working on it instead. so we have the PiP Crop feature instead of this one :)

Anyway, I have made some nice progress there, and I wanted you to take a look at it. It is the first time that I have shown a demo of it:

advanced.save.win.config.-.rules.webm

Can you share feedback about it and suggestions if you have any?
Thanks

@ZenRevision
Copy link
Author

Deleted my previous reply, because I had critically misunderstood something the first time I read your last reply. I see what you meant now though.

Yes, That Looks Awesome!

I notice it's missing Glass, probably because it's an older build (Glass is my favorite killer feature of WindowTop though, so I hope it doesn't get left behind).

That whole Rules system looks perfect though.

Some Thoughts:

So I'm assuming that when saving through the window menu, or with a hotkey, those saves would be automatically added to the Rules list shown in the demo. That would be great I think.

I would love to see a system just like that for setting defaults for all the effects. It seems like Defaults is a subheading that would fit perfectly under Rules too.

It also seems like Presets would fit perfectly under Rules as well.

Integration Concept:

Add Presets and Defaults, along with Saved Configs as submenus beneath the Rules menu.

So something like this:

  • Rules
    • Saved Window Settings
      • Here could be the save config editor shown in your demo above
    • Setting Presets
      • Here could be a preset editor that functions just like the save config editor above, but works with presets as I've described in previous posts
    • Setting Defaults
      • Here could be a defaults editor that also functions just like the save config editor above, but works with global defaults. So however any given effect's settings are adjusted here will be the default whenever that effect is activated normally

That Would be Beautiful!

Even if Presets could only be applied with hotkeys initially. Ideally presets could be added as an optional top level effect in the window menu at some point (as described in previous post above), with a submenu to select from saved presets. I realize that adding the window menu UI elements would take more time and work though, so even if they were just hotkey only, that would still be amazing!

@gileli121
Copy link
Member

gileli121 commented Sep 21, 2024

Sorry for the late reply.
These comments require more attention and time to address properly, and I have the time to do it now.

I notice it's missing Glass, probably because it's an older build (Glass is my favorite killer feature of WindowTop though, so I hope it doesn't get left behind).

Thanks for your feedback.
I thought Glass was a complete failure, so I did not invest any effort in including it in settings.
But after your feedback, I will also include it.

That whole Rules system looks perfect though.

Yes, I think that "Rules" is a much better definition of it.

So I'm assuming that when saving through the window menu, or with a hotkey, those saves would be automatically added to the Rules list shown in the demo. That would be great I think.

Yes exactly.
In addition, you can enable a feature by default with only the global settings of that feature. (unlike now, where it copies the global settings to local settings when you save the config)
You also have the option to set local settings and enable them by default for the feature and window.
Or, if you want, you can set local settings only for that feature and window without enabling it by default.

It also seems like Presets would fit perfectly under Rules as well.

Yes, "presets" is a similar idea but different.
It should be under the same "Rules" tab.
Anyway, I plan to finish the first phase with only what you saw in the video.
On next phase I may implement also the presets idea. But anyway, I will keep it in mind while I design the functionality and UI settings of it (so it will be easy to implement it later)

So something like this:

This is exactly what I have in mind.
Except for the last part of "Setting Defaults," we already have this in the advanced settings tab. Instead, I can provide a link to the advanced settings tab (the global defaults).
However, if you suggested it because the advanced settings tab does not look clean and you want it to be simple in one place, then I can see a valid argument here. But to handle it, I will improve the advanced settings to have a tree structure also (to make it cleaner), and then I think that it should be good enough, especially if I add a link to it in the rules tab.
Let me know what you think about it.

Even if Presets could only be applied with hotkeys initially. Ideally presets could be added as an optional top level effect in the window menu at some point (as described in previous post above), with a submenu to select from saved presets. I realize that adding the window menu UI elements would take more time and work though, so even if they were just hotkey only, that would still be amazing!

Yes, I agree.
Need to open a ticket for the part of adding it to the toolbar (assuming that in the first phase, it will work only with hotkeys)

@ZenRevision
Copy link
Author

Sounds great!

I thought Glass was a complete failure, so I did not invest any effort in including it in settings.
But after your feedback, I will also include it.

Oh no! Glass is amazing. As far as I'm aware, this is the only app that can make backgrounds transparent with blur, almost universally. There are projects that give explorer windows a glass effect, and there are apps for glass effect taskbar, start menu, and title bars. There is nothing else that even attempts to do a glass effect universally though (unless I've just missed it somehow).

Sure, it doesn't work so well in a lot of apps, but it works great it many! Notepad++, Sublime Text, Zettlr, Notepad4, Calculator, CMD, Everything (a really good file search utility), and the list goes on. There are minors issues is some of these apps, but no real showstoppers. Of course there are lots of apps that just don't work well with Glass too, like web browsers, image editors, video editors... but for most of those apps, glass would be distracting anyway. It is a killer feature already -- when I have some time, I'll make a separate issue with ideas for improving Glass further.

Except for the last part of "Setting Defaults," we already have this in the advanced settings tab. Instead, I can provide a link to the advanced settings tab (the global defaults).
However, if you suggested it because the advanced settings tab does not look clean and you want it to be simple in one place, then I can see a valid argument here. But to handle it, I will improve the advanced settings to have a tree structure also (to make it cleaner), and then I think that it should be good enough, especially if I add a link to it in the rules tab.
Let me know what you think about it.

Yeah, the main issue with defaults is that it is currently incomplete, in that not all effect setting defaults can be changed. So if editable defaults for all setting effects are added, that would be great, no matter where the default settings live.

@gileli121
Copy link
Member

@ZenRevision
Thanks for the feedback about the Glass.

Of course there are lots of apps that just don't work well with Glass too, like web browsers, image editors, video editors... but for most of those apps, glass would be distracting anyway.

This is why I thought that the feature was a failure.
I mainly considered the browser use case, for which you also confirmed that it is not needed or suitable.

I did not think about other use cases.

I am glad to hear that it works well for you on the other apps.
I know that nothing else has such a feature. This feature may be the most complicated code (its image algorithm) in the app, so if it works well for you in other apps, it is great to hear.

What hardware do you have (CPU and GPU)?
The feature may be unstable if the hardware is less powerful.
I am curious about your system hardware. That code knows how to utilize NVIDIA GPU using CUDA technology. If you have NVIDIA, it probably use the CUDA feature in the card to accelerate the performance

Yeah, the main issue with defaults is that it is currently incomplete, in that not all effect setting defaults can be changed. So if editable defaults for all setting effects are added, that would be great, no matter where the default settings live.

Are you talking about missing options to configure defaults for glass settings? Yes, it is missing. It was so hard to develop this algorithm that when I continued with UI implementation, I did minimum work there.

@ZenRevision
Copy link
Author

Main Workstation Specs:

  1. GPU: nVidia RTX3060 12GB (undervolted & overclocked -- core voltage curve for approx +200 Mhz & memory +1188 Mhz)
  2. CPU: Intel 12th Gen Core i7-12700F (the F means no integrated GPU)
  3. Memory: Crucial 64 GB DDR4 3200
  4. m.2 Storage: 2.5 TB -- 3x m.2 SSD = (1x 512 GB [system] & 2x 1 TB [via PCIEx4 m.2 adapter card])
  5. SATA Storage: 1.5 TB -- 1x SATA SSD 512 GB & 1x SATA HDD 1TB
  6. Motherboard & PSU: Not really sure -- Usually build my own systems, but this is a prebuilt HP Victus 15L with some awful OEM mainboard and power supply (500 watt). Bought it 2nd hand because it was only $250 which was a pretty good deal for the CPU and GPU and it is small enough to throw in my suitcase when I travel (and I travel constantly). Replaced the 2x8 memory with 2x32 and added the extra storage (only came with the one 512 GB m.2) Eventually I'll get around to replacing the case, motherboard and power supply, because this system could easily be made half the size with better thermals and much better performance (currently this system's performance suffers due to the, less than stellar, HP motherboard).

I did try disabling the GPU acceleration for Glass, just out of curiosity, and yeah, the performance was unbearable. I imagine it may work a little better with a more powerful CPU. I work with some local AI stuff and do some gaming, so, like many others, I'm pretty much always gonna have at least a semi-decent GPU. I guess it's unfortunate for AMD users that it can't use AMD GPUs though.

Defaults

Yes, I think Glass defaults should also be editable. Looking more closely, aside from Glass, most of the other defaults are editable there under advanced options. Seems the only other thing (aside from Glass defaults) is under "opacity feature" Click through is also missing from the defaults.

I do like the collapsible sections in your demo above, and think that is a better UI, and would fit well for defaults, under advanced options. It makes the list much more readable, and reduces scrolling.

@gileli121
Copy link
Member

gileli121 commented Sep 27, 2024

About glass stability, I will not be surprised at all if it works for you even more stable than in my computer.
My laptop has GTX 1050 TI. It is Dell, which I purchased in 2018. When I enable it, the mouse movement is not smooth.
Maybe back in the day, I wrote something that would work stable in the future when the standard hardware is more powerful :)

Yes, I know that GPU acceleration here is a big deal. I ported very heavy computation work to run in the GPU.

I do like the collapsible sections in your demo above, and think that is a better UI, and would fit well for defaults, under advanced options. It makes the list much more readable, and reduces scrolling.

You think exactly like me. I even planned that one day, the advanced settings page would be a tree, as in the demo video.

Yes, I think Glass defaults should also be editable. Looking more closely

I agree; I will add these options

Seems the only other thing (aside from Glass defaults) is under "opacity feature" Click through is also missing from the defaults.

Why do you need to enable the click-through feature by default? I know that it is missing, but I think that it is on purpose. I am afraid that users will do it without wanting to do it.

@ZenRevision
Copy link
Author

I can see how click through could be problematic if people enable by mistake. I generally will want click through enabled when using always on top, so I probably would set it as default. Even with click through enabled, one can still reach the WindowTop menu so it is not too difficult to disable the effect, or turn off click through. It's not that important though, and presets would be a much better solution anyway I think.

One option could be to just add a warning note next to the setting with emphasis, saying not to enable it there as default unless you're sure you know what you are doing, and/or maybe add another setting "enable expert options," with a warning about not enabling expert options unless you're sure you know what you're doing, and having the click through default setting not appear unless expert options are enabled. It's probably unnecessary though, as I think it's fine to just leave the click through setting out... especially if presets will be added eventually.

@gileli121
Copy link
Member

You have an answer for this need as hotkey that you can setup here:
image

This macro will enable always on top + click through.
Let me know if it solves your need

@ZenRevision
Copy link
Author

Oh yeah. I guess I missed that. Thanks, that does help a lot!

@gileli121 gileli121 mentioned this issue Oct 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants