Video Enhancer Color Grading (Always On)

Applies a saturation(1.3) filter to all HTML5 videos.

スクリプトをインストールするには、Tampermonkey, GreasemonkeyViolentmonkey のような拡張機能のインストールが必要です。

You will need to install an extension such as Tampermonkey to install this script.

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyUserscripts のような拡張機能のインストールが必要です。

このスクリプトをインストールするには、Tampermonkeyなどの拡張機能をインストールする必要があります。

このスクリプトをインストールするには、ユーザースクリプト管理ツールの拡張機能をインストールする必要があります。

(ユーザースクリプト管理ツールは設定済みなのでインストール!)

このスタイルをインストールするには、Stylusなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus などの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus tなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

(ユーザースタイル管理ツールは設定済みなのでインストール!)

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name        Video Enhancer Color Grading (Always On)
// @version     1.1
// @description Applies a saturation(1.3) filter to all HTML5 videos.
// @match       *://*/*
// @grant       GM_addStyle
// @run-at      document-start
// @namespace https://greasyfork.org/users/1402168
// ==/UserScript==

(function() {
    'use strict';

    const saturationFilter = 'video { filter: saturate(1.3) !important; }';

    GM_addStyle(saturationFilter);

    const styleElement = document.createElement('style');
    styleElement.textContent = saturationFilter;

    const originalAttachShadow = Element.prototype.attachShadow;
    Element.prototype.attachShadow = function(init) {
        const shadowRoot = originalAttachShadow.call(this, init);
        shadowRoot.appendChild(styleElement.cloneNode(true));
        return shadowRoot;
    };

    function applyToExistingShadows(rootNode) {
        rootNode.querySelectorAll('*').forEach(el => {
            if (el.shadowRoot) {
                el.shadowRoot.appendChild(styleElement.cloneNode(true));
                // Recurse in case of nested shadow DOMs
                applyToExistingShadows(el.shadowRoot);
            }
        });
    }

    document.addEventListener('DOMContentLoaded', () => {
        applyToExistingShadows(document.documentElement);
    });
})();