Getting Opera's Picture In Picture To Actually Work

Opera has had a native Picture In Picture mode built into its engine for years now, but it remains one of those features that works perfectly until it doesn't. The browser will often silently fail to render the PiP window without throwing an error message. That lack of feedback is what makes troubleshooting it such a pain. I spent about three hours last month dealing with a client who couldn't get PiP to trigger on a particular stream despite having tested it on every other browser. The issue turned out to be nothing dramatic — just a settings conflict layered over another. Before you start pulling things apart, you need to understand how Opera's PiP actually triggers. It responds to two separate calls from websites: the standard HTML5 Picture-in-Picture API and Opera's own custom gesture-based implementation. If you right-click a video and select "Picture in Picture," you're hitting the custom handler. If a site has added its own PiP button, it may be calling the browser API directly. These two paths sometimes behave differently, which is why one might work and the other doesn't on the same page. The most common reason PiP fails is hardware acceleration being turned off or misconfigured. Check under Settings, then Advanced, then System. Make sure "Use hardware acceleration when available" is toggled on. Restart the browser after changing this. It sounds basic, but I've seen this miss at least a third of the cases where PiP suddenly stops responding across all sites.

Another frequent culprit is extensions. Adblockers, privacy tools, and even some gesture-based extensions can intercept or block the PiP call before it reaches the browser layer. Go to opera://extensions/ and disable everything except the essentials. Test PiP on a video page. If it starts working, re-enable extensions one by one until you find the offender. In my experience, uBlock Origin is usually the one causing trouble here, particularly when its element hiding rules are too aggressive. There is also the matter of website-level flags and policies. Some sites, particularly streaming platforms, intentionally disable the PiP API or wrap their players in shadow DOM structures that prevent the browser from accessing the video element at all. This is not a bug in Opera. If the video player does not expose its media element properly, no amount of tweaking will fix it. You can verify this by opening Developer Tools, navigating to the Console, and typing document.querySelector('video'). If it returns null, the page isn't exposing a video element and PiP is blocked by design. I ran into a particularly annoying case recently where Opera would open the PiP window but it remained completely black. No video, no audio, just a blank window. The site in question was using a custom MSE (Media Source Extensions) player rather than a standard HTML5 video tag. Opera's PiP implementation historically has trouble with MSE content because the browser expects a direct video element reference. The workaround I ended up using was enabling the flag at opera://flags/#enable-experimental-web-platform-features and setting it to enabled. It's not a guaranteed fix, but it helped in this scenario. Another option that sometimes works is using the website's native mobile embed URL, which typically falls back to a simpler video player that the PiP system can handle.

Clearing the cache and cookies for the specific site can also resolve PiP issues that stem from stale or corrupted session data. This is especially relevant if PiP worked previously on a site and then stopped after an update or a change to the page layout. Navigate to that site, open the lock icon in the address bar, and clear site data. Reload the page and try again. If you want a more robust PiP experience regardless of the browser's native capabilities, third-party solutions exist. Programs like Picture-in-Picture for Chrome (which also works with Opera since it's Chromium-based) can inject a PiP layer at the system level rather than relying on the browser's implementation. These tools capture whatever is rendering on screen and wrap it in a floating window. They tend to work more reliably with problematic sites, though they consume additional system resources because they're doing the compositing externally. The main limitation of Opera's native PiP that nobody talks about enough is that it only supports one PiP window at a time. If you trigger a second PiP while one is already active, the first one closes. This is baked into the Chromium renderer layer and Opera has not provided any way to override it. If your workflow involves watching multiple streams simultaneously in floating windows, you're out of luck with the native feature.

Get the Full Details

How to Fix Picture-in-Picture (PIP) Not Working on YouTube (2025) - YouTube
How to Fix Picture-in-Picture (PIP) Not Working on YouTube (2025) - YouTube

Another hard limitation is that PiP does not persist across browser sessions. Close Opera and the PiP window is gone. There is no setting to change this behavior. It is by design, not a bug, and you won't find a flag to make it otherwise. For the vast majority of cases, the sequence that resolves the problem is: check hardware acceleration, disable extensions, clear site data for the affected page, and test with Developer Tools open to see whether the video element is actually accessible. This covers probably 85 percent of the failures I encounter. The remaining cases are usually either site-level blocks or edge cases involving MSE or DRM-protected content, neither of which you can force through configuration alone.