返回首頁 

Greasy Fork is available in English.

Video Enhancement Control Panel

Advanced video sharpening and enhancement with real-time controls


Installer ce script?
// ==UserScript==// @name         Video Enhancement Control Panel// @namespace    http://tampermonkey.net/// @version      1.2// @description  Advanced video sharpening and enhancement with real-time controls// @match        *://*/*// @grant        GM_registerMenuCommand// @grant        GM_setValue// @grant        GM_getValue// @grant        GM_addStyle// @license      MIT// ==/UserScript==(function() {'use strict';// Configurationconst DEFAULT_ENABLED = true;const DEFAULT_CONTRAST = 1.0;const DEFAULT_SATURATION = 1.0;// Shared panel variablelet enhancementPanel = null;// Create enhancement control panelfunction createEnhancementPanel() {// If panel already exists, just show itif (enhancementPanel) {enhancementPanel.style.display = 'block';return enhancementPanel;}// Create panel containerconst panel = document.createElement('div');panel.id = 'video-enhancement-panel';panel.innerHTML = `<div class="panel-header">Video Enhancement Controls</div><div class="panel-content"><div class="control-group"><label>Sharpening:</label><input type="checkbox" id="sharpening-toggle"></div><div class="control-group"><label>Contrast:</label><input type="range" id="contrast-slider" min="0.5" max="2.0" step="0.1" value="${DEFAULT_CONTRAST}"><span id="contrast-value">${DEFAULT_CONTRAST}</span></div><div class="control-group"><label>Saturation:</label><input type="range" id="saturation-slider" min="0.0" max="2.0" step="0.1" value="${DEFAULT_SATURATION}"><span id="saturation-value">${DEFAULT_SATURATION}</span></div><div class="panel-actions"><button id="save-settings">Save</button><button id="close-panel">Close</button></div></div>`;// Add stylesGM_addStyle(`#video-enhancement-panel {position: fixed;top: 20px;right: 20px;width: 300px;background: white;border: 2px solid #333;border-radius: 8px;z-index: 10000;box-shadow: 0 4px 6px rgba(0,0,0,0.1);font-family: Arial, sans-serif;}#video-enhancement-panel .panel-header {background: #f0f0f0;padding: 10px;font-weight: bold;text-align: center;}#video-enhancement-panel .panel-content {padding: 15px;}#video-enhancement-panel .control-group {margin-bottom: 15px;display: flex;align-items: center;}#video-enhancement-panel label {flex: 1;margin-right: 10px;}#video-enhancement-panel input[type="range"] {flex: 2;margin-right: 10px;}#video-enhancement-panel .panel-actions {display: flex;justify-content: space-between;}#video-enhancement-panel button {padding: 5px 10px;cursor: pointer;}`);// Append to bodydocument.body.appendChild(panel);// Setup event listenerssetupPanelEventListeners(panel);// Store referenceenhancementPanel = panel;return panel;}// Setup event listeners for the panelfunction setupPanelEventListeners(panel) {// Get control elementsconst sharpeningToggle = panel.querySelector('#sharpening-toggle');const contrastSlider = panel.querySelector('#contrast-slider');const contrastValue = panel.querySelector('#contrast-value');const saturationSlider = panel.querySelector('#saturation-slider');const saturationValue = panel.querySelector('#saturation-value');const saveButton = panel.querySelector('#save-settings');const closeButton = panel.querySelector('#close-panel');// Initialize control statessharpeningToggle.checked = GM_getValue('videoEnhancementEnabled', DEFAULT_ENABLED);contrastSlider.value = GM_getValue('videoContrast', DEFAULT_CONTRAST);contrastValue.textContent = contrastSlider.value;saturationSlider.value = GM_getValue('videoSaturation', DEFAULT_SATURATION);saturationValue.textContent = saturationSlider.value;// Real-time preview for contrastcontrastSlider.addEventListener('input', () => {contrastValue.textContent = contrastSlider.value;processVideos();});// Real-time preview for saturationsaturationSlider.addEventListener('input', () => {saturationValue.textContent = saturationSlider.value;processVideos();});// Sharpening togglesharpeningToggle.addEventListener('change', () => {processVideos();});// Save buttonsaveButton.addEventListener('click', () => {GM_setValue('videoEnhancementEnabled', sharpeningToggle.checked);GM_setValue('videoContrast', parseFloat(contrastSlider.value));GM_setValue('videoSaturation', parseFloat(saturationSlider.value));processVideos();});// Close buttoncloseButton.addEventListener('click', () => {panel.style.display = 'none';});}// Create SVG filterfunction createSharpeningFilter() {const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');svg.setAttribute('style', 'display:none');const filter = document.createElementNS('http://www.w3.org/2000/svg', 'filter');filter.setAttribute('id', 'video-enhancement-filter');const feConvolveMatrix = document.createElementNS('http://www.w3.org/2000/svg', 'feConvolveMatrix');feConvolveMatrix.setAttribute('order', '3');feConvolveMatrix.setAttribute('kernelMatrix', '1 -1 1 -1 -1 -1 1 -1 1');filter.appendChild(feConvolveMatrix);svg.appendChild(filter);return svg;}// Apply filter to videofunction applyVideoFilter(video, contrast, saturation, isEnabled) {if (isEnabled) {video.style.filter = `url(#video-enhancement-filter) contrast(${contrast}) saturate(${saturation})`;video.videoEnhancementApplied = true;} else {video.style.filter = '';video.videoEnhancementApplied = false;}}// Main function to process videosfunction processVideos() {const isEnabled = GM_getValue('videoEnhancementEnabled', DEFAULT_ENABLED);const contrast = GM_getValue('videoContrast', DEFAULT_CONTRAST);const saturation = GM_getValue('videoSaturation', DEFAULT_SATURATION);const videos = document.querySelectorAll('video');videos.forEach(video => {applyVideoFilter(video, contrast, saturation, isEnabled);});}// Initializationfunction init() {// Append SVG filter to documentdocument.body.appendChild(createSharpeningFilter());// Initial video processingprocessVideos();// MutationObserver to handle dynamically added videosconst observer = new MutationObserver(processVideos);observer.observe(document.body, { childList: true, subtree: true });// Register Tampermonkey menu commandsGM_registerMenuCommand('Open Video Enhancement Panel', () => {createEnhancementPanel();});GM_registerMenuCommand('Toggle Video Enhancement', () => {const currentState = GM_getValue('videoEnhancementEnabled', DEFAULT_ENABLED);GM_setValue('videoEnhancementEnabled', !currentState);processVideos();});GM_registerMenuCommand('Reset to Default Settings', () => {GM_setValue('videoEnhancementEnabled', DEFAULT_ENABLED);GM_setValue('videoContrast', DEFAULT_CONTRAST);GM_setValue('videoSaturation', DEFAULT_SATURATION);processVideos();});}// Run initializationinit();})();