您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Make Donload button click to save a description text file.
当前为
// ==UserScript== // @name Civitai Text Downloader // @namespace http://tampermonkey.net/ // @version 3 // @description Make Donload button click to save a description text file. // @author SenY // @match https://civitai.com/* // @icon https://civitai.com/favicon.ico // @grant none // @license BSD // ==/UserScript== (function() { 'use strict'; setInterval(function(){ document.querySelectorAll('*[href^="/api/download/"]').forEach(button => { if(!button.classList.contains("ctd-done")){ button.addEventListener("click", function(){ let _id = location.pathname.split("/")[2]; let file_id = button.getAttribute("href").split("/")[4]; fetch("https://civitai.com/api/v1/models/" + _id).then(x => x.json()).then(j => { let file = j.modelVersions.find(x => x.id == file_id); let link = document.createElement('a'); let text = [j.description]; if(file.trainedWords){ text = [file.trainedWords.join("\n") || document.URL]; } link.href = window.URL.createObjectURL(new Blob(text)); let filename = file.files.find(x => x).name || file_id + ".txt"; filename = filename.replace(/\.[a-z]*$/, ".txt") link.download = filename; link.click(); let image = file.images.find(x => x); if(image){ let xhr = new XMLHttpRequest(); let src = image.url; let suffix = "." + src.slice(src.lastIndexOf('.') + 1); suffix = ".png"; // URLの拡張子がjpegになってても実際にimage.civitai.comが返す画像はpngっぽいのでハードコーディングで決め打ち xhr.open('GET', src, true); xhr.responseType = "blob"; xhr.onload = function () { let dlLink = document.createElement("a"); const dataUrl = URL.createObjectURL(this.response); dlLink.href = dataUrl; filename = filename.replace(".txt", suffix) dlLink.download = filename; document.body.insertAdjacentElement("beforeEnd", dlLink); dlLink.click(); dlLink.remove(); setTimeout(function () { window.URL.revokeObjectURL(dataUrl); }, 1000); }; xhr.send(); } }); }); button.style.color = "#ffff00"; button.classList.add("ctd-done"); } }); }, 500); })();