A utility to "Picture In Picture" any user-selected area of a window

It doesn't have to be picture-in-picture necessarily (doesn't have to make use of PiP APIs, etc.), that's just the easiest way to describe what I have in mind.

There are times when I want to monitor a long-running process but want to move away from the window. One particular website I use shows toast style messages in the bottom right of the browser window. It would be wonderful if I could make a selection of an area of a window (like taking a screenshot, but it remains dynamic), and that selection would be popped out into its own floating window with move/resize similar to PiP. Then I could bounce around to other apps, windows, etc. and keep an eye on the process. Another great use case (I may actually use this even more than the initial request!) is to keep a customer support chat section of a tab constantly visible. Surely I'm not the only one who's tabbed away from a chat and left a customer support waiting (unless my volume was up and there are alert sounds :laughing:)

This is a different request than the example of a floating menu that opens a browser (as shown here); this would need to be opened on demand from an already open window, and just showing a selection of the window.

Here is a chrome extension that allows you to PiP an entire browser tab. I'll also send a feature request to that developer to see if they can easily make those windows croppable. That would be sufficient for my needs most of the time, but I can see this being much more universally usable (outside of just Chrome or browsers, in general).

I can imagine BTT being the best platform for this sort of tool because of its already tight integration and awareness of windows, visibility, floating UIs, etc. @Andreas_Hegenberg, does this seem feasible with the BTT infrastructure?

Thanks!
Andy

Not exactly the same, but if you want to keep an eye on a tab or a any window at any time, try this action.

image

It's not perfect, but it's pretty good. Hard to find something like this outside of BTT. :slightly_smiling_face:

Thanks! Indeed, it's not quite what I was looking for, but I may still have some use cases for this; thanks for pointing it out. I added that action with the trigger from right-clicking a window's orange (minimize) button. While it did float a window, it was a little glitchy when moving between apps (it would disappear then jump back into view).

I'm thinking the most "legitimate" way to implement this feature could be via ScreenCaptureKit. Capturing a portion of the screen and streaming that into a resizable, floating, croppable, possibly semi-transparent window. It may be a nice Swift learning project for me (but how many times have I thought that before :laughing:).

1 Like

That's why I said, "It's not perfect, but it's pretty good".

And I still hope that Andreas will eventually find a way to do better. Who knows :smiley:

I think I could quite easily add a non-interactive version of the "Pin / Unpin" window action with a resizable window. This should be doable in a less glitchy way. (That action is based on ScreenCaptureKit)

I'm not sure if it allows to select portions of a window, but I'll have a look

1 Like

What does "non-interactive" mean? Like a screenshot?

with the current action your can move your mouse into the recorded window and it automatically brings the real window to front so you can interact with it, that's what makes it a bit glitchy

Thanks @Andreas_Hegenberg! I was perusing the docs and WWDC22 videos, and it initially talks about only being able to capture display, app, or window only (so I assumed this would have to capture a full window and then do the cropping processing on the destination/output side of things). But then! A brief moment in this video mentioned sourceRect, so it may be possible after all, though because of my unfamiliarity I'm not sure if it's easier to use that or just go with the first option anyway and let a user pick a window, start capturiung it in full, then select what part of the window to actually output.

For me a non-interactive version is totally fine! If clicking on it (or a button within it) took me to the source window, that would be great, but I mostly just want it as a visual cue, like a periscope always peeking at a particular area to let me know when I need to go back and interact in the actual window. The way you've implemented the clipboard manager is great! It seems very reliably resizable, movable, and floated on top even as I jump between apps/windows. I don't know the infrastructure of that, but could a screencapture output be displayed in a similarly structured window?

From the user's point of view, the pinned window is the "real window". And "interactivity" is useful. You wouldn't be you if you couldn't do this even better. Do you realize that I'm praising you right now? :innocent:

Ahh! I see what you mean now, @Andreas_Hegenberg! I like the idea of a separate window that acts like a clone window that's movable/resizable independent of the source that it's mirroring, as opposed to pinning the original window (though that action still has its place, of course!).

Little update: 4.236 now allows to create a resizable non-interactive "stream" of any window using the "Pin Focused Window" action. It doesn't allow to select specific regions yet.

2 Likes

Oh this looks lovely! :star_struck: And that demo is very smooth and responsive. I'm excited to try out this step. Thanks for sharing the update in this thread.

Maybe an easy way to allow looking at a specific region would be to just allow that "stream" to be zoomable. Then you could just zoom in. I think I'll try that.

It's now zoomable (when selected in the action settings) in v4.240, and I think it works pretty well!

1 Like

Awesome idea! I'll check this out, but when trying to update ("Check For Regular Updates" in the menu bar), I'm getting:
image

I'm currently on 4.236 (24588)

weird, seems to work fine here. Did you check just now?

Yeah, same after restarting BTT. Later I can try restarting my computer and then checking for an update.

Ah I found the update channel that has a broken update definition. Will fix in a minute.

Got it! This is very cool. I think this will come in handy many times! I found I could zoom via ⌥ + scroll. Are there other ways? Also, how feasible would it be to make the streamed window have configurable opacity? I tried it on the background color, but it didn't apply.

It's totally usable as it is, but would it be possible to reshape the streamed window without changing its aspect ratio? Essentially to crop it down? It seems as though the aspect ratio is set at the time the stream is created. Then, I can zoom into the place of interest, but I can't re-shape to that area of interest without skewing the image. I'm not sure if that made sense what I'm describing. If not, let me know and I'll provide a screen capture.

Thank you so much for implementing this!

currently it can be zoomed by opt scroll and by pinching (for pinching the window must be activated by clicking on it first)

I’ll add an opacity setting and a click through mode. I think I can force the window to keep a specific aspect ratio.