D日記

モーションアーティストの技術ブログだよ。日常も書くよ。

MENU

【AfterEffects】ブレンドモードを上下キーで変更するスクリプト(Script to change blend mode with up and down keys)

経緯

AE作業中、ブレンドモードを手軽に上下キーで試したいのに、いちいちプルダウンメニューから選ぶのがめんどくさくて...

ツール動作

コード

下記を「AEScript_applyBlendMode.jsx」などの名前で適当なフォルダに保存して、AfterEffectsで実行。
AE2024で確認済み。

(function applyBlendMode(thisObj) {
    function buildUI(thisObj) {
        var blendModes = [
            { name: "通常", mode: BlendingMode.NORMAL },
            { name: "ディザ合成", mode: BlendingMode.DISSOLVE },
            { name: "暗く", mode: BlendingMode.DARKEN },
            { name: "乗算", mode: BlendingMode.MULTIPLY },
            { name: "カラー焼き込み", mode: BlendingMode.COLOR_BURN },
            { name: "線形焼き込み", mode: BlendingMode.LINEAR_BURN },
            { name: "明るく", mode: BlendingMode.LIGHTEN },
            { name: "スクリーン", mode: BlendingMode.SCREEN },
            { name: "覆い焼きカラー", mode: BlendingMode.COLOR_DODGE },
            { name: "覆い焼き(リニア)", mode: BlendingMode.LINEAR_DODGE },
            { name: "オーバーレイ", mode: BlendingMode.OVERLAY },
            { name: "ソフトライト", mode: BlendingMode.SOFT_LIGHT },
            { name: "ハードライト", mode: BlendingMode.HARD_LIGHT },
            { name: "差の絶対値", mode: BlendingMode.DIFFERENCE },
            { name: "排除", mode: BlendingMode.EXCLUSION },
            { name: "色相", mode: BlendingMode.HUE },
            { name: "彩度", mode: BlendingMode.SATURATION },
            { name: "カラー", mode: BlendingMode.COLOR },
            { name: "輝度", mode: BlendingMode.LUMINOSITY },
            { name: "加算", mode: BlendingMode.ADD },
            { name: "減算", mode: BlendingMode.SUBTRACT }
        ];

        var blendModeNames = [];
        for (var i = 0; i < blendModes.length; i++) {
            blendModeNames.push(blendModes[i].name);
        }

        var windowTitle = "Blend Mode Changer";
        var win = (thisObj instanceof Panel) ? thisObj : new Window("palette", windowTitle, undefined, { resizeable: true });
        win.orientation = "column";
        win.alignChildren = ["fill", "fill"];

        var listBox = win.add("listbox", undefined, blendModeNames, { multiselect: false });
        listBox.preferredSize = [200, 300];

        // `onChange`イベントを使用してリアルタイムで反映
        listBox.onChange = function() {
            if (listBox.selection) {
                applyBlendMode(blendModes[listBox.selection.index].mode);
                app.refresh(); // ビューポートを強制的に更新
            }
        };

        win.add("button", undefined, "Close").onClick = function() {
            win.close();
        };

        win.layout.layout(true);
        return win;
    }

    var w = buildUI(thisObj);
    if (w instanceof Window) {
        w.center();
        w.show();
    }

    function applyBlendMode(blendMode) {
        var activeComp = app.project.activeItem;
        if (activeComp && activeComp instanceof CompItem) {
            var selectedLayers = activeComp.selectedLayers;
            if (selectedLayers.length > 0) {
                app.beginUndoGroup("Change Blend Mode");
                for (var i = 0; i < selectedLayers.length; i++) {
                    selectedLayers[i].blendingMode = blendMode;
                }
                app.endUndoGroup();
                app.refresh();
            } else {
                alert("レイヤーが選択されていません。");
            }
        } else {
            alert("アクティブなコンポジションがありません。");
        }
    }
})(this);

スクリプト管理のおすすめツール

たくさんのツールの管理ができて便利で、めちゃ使わせてもらってます!!
Terrible Junk Show様!感謝感謝!!

booth.pm

既出バグ

今のところはなし