您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Download model, preview, model description by one-click
当前为
// ==UserScript== // @name LiblibAI Helper // @namespace http://tampermonkey.net/ // @version 0.1 // @description Download model, preview, model description by one-click // @author Sleepy & NewBing // @match https://www.liblib.art/modelinfo/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // Create a MutationObserver to monitor DOM changes var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.type === 'childList') { var generateButton = document.querySelector('.ModelActionCard_runPic__0I9wi'); if (generateButton && !document.querySelector('.one-click-download')) { var downloadButton = document.createElement('div'); downloadButton.innerHTML = '一键下载'; downloadButton.className = 'one-click-download'; downloadButton.onclick = autoDownload; generateButton.parentNode.insertBefore(downloadButton, generateButton.nextSibling); observer.disconnect(); } } }); }); observer.observe(document.body, { childList: true, subtree: true }); function autoDownload() { var version = getSelectedTabName(); var modelName = document.querySelector('.ModelInfoHead_title__p5txd').innerText; modelName += "_" + version downloadModel(); saveAsHTML(modelName); // saveAsMarkdown(modelName); saveAsPlainText(modelName); downloadImages(modelName) } function getSelectedTabName() { // 获取所有的tab var tabs = document.querySelectorAll('.ant-tabs-tab'); // 遍历所有的tab for (var i = 0; i < tabs.length; i++) { // 检查tab是否被选中 if (tabs[i].classList.contains('ant-tabs-tab-active')) { // 获取tab的标题 var title = tabs[i].textContent; return title; // 返回标题 } } } function downloadModel() { var downloadButton = document.querySelector('.ModelActionCard_inner__XBdzk'); if (downloadButton) { downloadButton.click(); } } async function downloadImages(modelName) { var images = document.querySelectorAll('img'); var count = 0; // 添加一个新的变量来计数需要下载的图片 if (images.length > 0) { for (var i = 0; i < images.length; i++) { // 只处理src属性是URL的img元素 if (images[i].src.startsWith('http')) { var response = await fetch(images[i].src); var blob = await response.blob(); var url = window.URL.createObjectURL(blob); var link = document.createElement('a'); link.href = url; link.download = modelName + (count === 0 ? '' : '_preview_' + count) + '.png'; // 使用count而不是i link.style.display = 'none'; document.body.appendChild(link); // 使用 setTimeout 函数来延迟点击事件 await new Promise(resolve => setTimeout(function() { link.click(); document.body.removeChild(link); window.URL.revokeObjectURL(url); resolve(); }, 1000)); // 这里的 1000 是延迟的毫秒数,你可以根据需要调整这个值 count++; // 每下载一张图片,就增加count的值 } } } } /* function downloadImages(modelName) { var images = document.querySelectorAll('.flex img'); if (images.length > 0) { fetch(images[0].src) .then(response => response.blob()) .then(blob => { var url = window.URL.createObjectURL(blob); var link = document.createElement('a'); link.href = url; link.download = modelName + '.png'; link.click(); }); for (var i = 1; i < images.length; i++) { fetch(images[i].src) .then(response => response.blob()) .then(blob => { var url = window.URL.createObjectURL(blob); var link = document.createElement('a'); link.href = url; link.download = modelName + '_preview_' + i + '.png'; window.setTimeout(function() { link.click(); window.URL.revokeObjectURL(url); }, 0); }); } } }*/ function selectReadme() { var mainElement = document.querySelector('.mantine-AppShell-main'); return mainElement.querySelector('[class^="ModelDescription_desc"]'); } function saveAsHTML(modelName) { var descriptionElement = selectReadme(); if (descriptionElement) { var htmlText = descriptionElement.innerHTML; var blob = new Blob([htmlText], {type: 'text/html'}); var url = window.URL.createObjectURL(blob); var link = document.createElement('a'); link.href = url; link.download = modelName + '.html'; link.style.display = 'none'; document.body.appendChild(link); console.log('Attempting to download HTML file:', link.download); link.click(); document.body.removeChild(link); } else { console.log('Description element not found.'); } } function saveAsMarkdown(modelName) { var descriptionElement = selectReadme(); if (descriptionElement) { var markdownText = convertHtmlToMarkdown(descriptionElement.innerHTML); var blob = new Blob([markdownText], {type: 'text/markdown'}); var url = window.URL.createObjectURL(blob); var link = document.createElement('a'); link.href = url; link.download = modelName + '.md'; link.style.display = 'none'; document.body.appendChild(link); console.log('Attempting to download markdown file:', link.download); link.click(); document.body.removeChild(link); } else { console.log('Description element not found.'); } } function saveAsPlainText(modelName) { var descriptionElement = selectReadme(); if (descriptionElement) { var plainText = descriptionElement.innerText; var blob = new Blob([plainText], {type: 'text/plain'}); var url = window.URL.createObjectURL(blob); var link = document.createElement('a'); link.href = url; link.download = modelName + '.txt'; link.style.display = 'none'; document.body.appendChild(link); console.log('Attempting to download text file:', link.download); link.click(); document.body.removeChild(link); } else { console.log('Description element not found.'); } } function convertHtmlToMarkdown(html) { // This is a very basic implementation and might not work for all HTML. // Consider using a library like Turndown for a more robust solution. var tempDiv = document.createElement('div'); tempDiv.innerHTML = html; return tempDiv.innerText; } })();