Clipboard Image Paste Firefox to Stable Diffusion

Allows pasting images from clipboard into file inputs on http://127.0.0.1:7860/

目前为 2024-08-03 提交的版本。查看 最新版本

// ==UserScript==
// @name         Clipboard Image Paste Firefox to Stable Diffusion
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Allows pasting images from clipboard into file inputs on http://127.0.0.1:7860/
// @match        http://127.0.0.1:7860/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    function handlePaste(e) {
        var clipboardData = e.clipboardData || window.clipboardData;
        var items = clipboardData.items;

        for (var i = 0; i < items.length; i++) {
            if (items[i].type.indexOf("image") !== -1) {
                var blob = items[i].getAsFile();
                var reader = new FileReader();
                reader.onload = function(event) {
                    var fileList = new DataTransfer();
                    fileList.items.add(dataURLtoFile(event.target.result, "pasted_image.png"));
                    e.target.files = fileList.files;
                    // Trigger change event
                    var changeEvent = new Event('change', { bubbles: true });
                    e.target.dispatchEvent(changeEvent);
                };
                reader.readAsDataURL(blob);
                e.preventDefault();
                break;
            }
        }
    }

    function dataURLtoFile(dataurl, filename) {
        var arr = dataurl.split(','),
            mime = arr[0].match(/:(.*?);/)[1],
            bstr = atob(arr[1]),
            n = bstr.length,
            u8arr = new Uint8Array(n);
        while (n--) {
            u8arr[n] = bstr.charCodeAt(n);
        }
        return new File([u8arr], filename, {type: mime});
    }

    function addPasteListener(fileInput) {
        fileInput.addEventListener('paste', handlePaste);
        fileInput.setAttribute('paste-enabled', 'true');
    }

    // Initial setup
    var fileInputs = document.querySelectorAll('input[type="file"]');
    fileInputs.forEach(addPasteListener);

    // Monitor for dynamically added file inputs
    var observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            if (mutation.type === 'childList') {
                mutation.addedNodes.forEach(function(node) {
                    if (node.nodeType === 1 && node.matches('input[type="file"]:not([paste-enabled])')) {
                        addPasteListener(node);
                    }
                });
            }
        });
    });

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址