您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Click the Download button to save the json file and images.
当前为
// ==UserScript== // @name Civitai Text Downloader Mod // @name:ja Civitai Text Downloader Mod // @namespace http://tampermonkey.net/ // @version 5.2.2 // @description Click the Download button to save the json file and images. // @description:ja Downloadボタンをクリックするとjsonファイルと画像が保存されます。 // @author Takenoko3333 // @match https://civitai.com/models/* // @icon https://civitai.com/favicon.ico // @grant none // @license BSD // ==/UserScript== (function() { 'use strict'; setInterval(function(){ document.querySelectorAll('main a[type^="button"]:not([href])').forEach(button => { if(!button.classList.contains("ctd-done")){ button.addEventListener("click", function(){ let _id = location.pathname.split("/")[2]; const codeElements = document.querySelectorAll('table code'); let file_id = null; codeElements.forEach((element, index) => { if (element.textContent === '@') { if (codeElements[index + 1]) { file_id = codeElements[index + 1].textContent; } } }); const spanElements = document.querySelectorAll('table span'); let strength = null; spanElements.forEach((element, index) => { if (/^Strength:/.test(element.textContent)) { strength = element.textContent.split(":")[1].trim(); console.log(strength) } }); 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 = { "description": "", "sd version": "Unknown", "activation text": "", "preferred weight": 0, "notes": document.URL }; if (/^SD 1/.test(file.baseModel)) { text["sd version"] = "SD1"; } else if (/^SD 2/.test(file.baseModel)) { text["sd version"] = "SD2"; } else if (/^SDXL/.test(file.baseModel) || /^Pony/.test(file.baseModel)) { text["sd version"] = "SDXL"; } else if (/^SD 3/.test(file.baseModel)) { text["sd version"] = "SD3"; } if(j.description && j.description.textContent){ text.description = j.description.textContent; } if(file.trainedWords){ text["activation text"] = file.trainedWords.join(" "); } if(strength){ text["preferred weight"] = strength; } text = [JSON.stringify(text)]; link.href = window.URL.createObjectURL(new Blob(text)); let filename = file.files.find(x => x).name || file_id + ".json"; filename = filename.replace(/\.[a-z]*$/, ".json") 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(".json", 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); })();