thisVID.com Native Player (HTML5) and download

Replace video player with HTML5 native player (also enables download of videos)

// ==UserScript==
// @name         thisVID.com Native Player (HTML5) and download
// @namespace    _pc
// @version      2.1
// @license      MIT
// @description  Replace video player with HTML5 native player (also enables download of videos)
// @author       verydelight
// @match        *://thisvid.com/videos/*
// @icon         https://www.thisvid.com/favicon.ico
// @compatible   Firefox Tampermonkey
// @grant        none
// ==/UserScript==
(function() {
	'use strict';
	function insertVideo() {
		const videoElement = document.querySelector('video.fp-engine');
		if (!videoElement) return;
		const videoUrl = videoElement.src;
		const posterUrl = document.querySelector('.video-holder img').src;
		const newVideoElement = document.createElement('video');
		newVideoElement.poster = posterUrl;
		newVideoElement.src = videoUrl;
		newVideoElement.controls = true;
		newVideoElement.style.width = '100%';
		const videoHolder = document.querySelector('.video-holder');
		if (videoHolder) {
			videoHolder.innerHTML = '';
			videoHolder.appendChild(newVideoElement);
			newVideoElement.play();
		}
	}
	const targetNode = document.getElementById('kt_player');
	if (targetNode) {
		const observer = new MutationObserver((mutationsList) => {
			for (const mutation of mutationsList) {
				if (mutation.type === 'childList') {
					const videoElement = targetNode.querySelector('video');
					if (videoElement) {
						insertVideo();
						observer.disconnect();
					}
				}
			}
		});
		observer.observe(targetNode, { childList: true, subtree: true });
		//console.log('MutationObserver is monitoring for <video> elements within kt_player');
	} else {
		//console.error('The element with ID "kt_player" was not found.');
	}
})();