Instagram’s desktop web player feels deliberately hostile.
It buries actual HTML5 player controls behind invisible overlay masks, resets your volume every time a new video starts, autoplays Reels whether you want them to start or not, and keeps dozens of old Reels running in memory as you scroll.
If you just want a normal video player with persistent volume, functional seek bars, and actual memory management, I created a userscript called Instahancer that fixes most of these annoyances.
Here is a straightforward walk-through of what the script does, how to set it up, and how to tweak it using Tampermonkey or similar extensions.
What Instahancer does
Instahancer is a JavaScript userscript.
It patches four main problem areas on instagram.com: player controls, Reels playback, background memory consumption, and grid links for saved content.
Each fix works independently, so you don't need to fiddle with complex settings just to get volume control working.
Installation
- Grab a userscript extension like Tampermonkey, Violentmonkey, or Greasemonkey.
- Open the raw script URL.
- Confirm the Install user script prompt.
- Go to https://www.instagram.com/reels/. The script automatically handles page load events and starts working right away.
The script pulls in its settings panel UI (GM_config) automatically via the @require directive. If you prefer to install things manually, just paste the script contents directly into a new script tab in your extension manager and hit save.
Native video controls and persistent volume
Instagram uses click-blocking overlays that prevent you from using standard HTML5 controls.
Instahancer sets those overlay elements to pointer-events: none.
This small change makes the native pause buttons, volume scrubbers, and seek bars clickable again.
Volume management overrides HTMLMediaElement.volume and muted.
Instead of defaulting to muted or maximum volume on every new reel, videos open at your preferred level.
A couple of extra controls round out the player:
- Autoplay blocking: Stops the video from playing automatically until you click on it.
- Looping prevention: Pauses the video when it reaches the end instead of looping infinitely.
- Layout unlock: Removes the strict width constraints so videos fit your browser window better.
RAM saver and navigation tweaks for reels
When you scroll through Reels for a while, your browser tab often turns into a memory hog. Instahancer runs a background check every two seconds while you're on /reels/.
If a video is scrolled more than 1000 pixels above your viewport, the script pauses it and strips its src tags.
This completely releases the media buffer from RAM while keeping your place in the feed.
It also changes default click behavior: clicking directly on a Reel toggles play/pause instead of redirecting you to the post page.
Directly openable links for likes and saved posts
When browsing your liked or saved posts, Instagram normally loads content through its internal routing overlays. Instahancer converts those grid tiles into standard HTML links that you can middle-click or right-click to open in new tabs. It resolves shortcodes directly from the image metadata (ig_cache_key), falling back to a React fiber tree walk if the metadata is missing.
If you've been frustrated by Instagram's player behavior on desktop, this is a focused fix rather than a broad overhaul. Install it, set your volume, and the native controls do the rest.
The source, issue tracker, and any updates live on GitHub at https://github.com/schalkburger/instahancer/ — check there first if the script stops working after an Instagram change, and open an issue if you hit something the maintainer hasn't seen yet.
