一键将下载模型介绍和图片。
// ==UserScript==
// @name Civitai模型下载辅助
// @namespace https://gf.qytechs.cn/zh-CN/users/904778-blueccoffee
// @version 1.5
// @description 一键将下载模型介绍和图片。
// @author AIGC知识库
// @match https://civitai.com/models/*
// @grant GM_download
// @license GNU
// ==/UserScript==
(function() {
'use strict';
function downloadMarkdownAndImage(text, fileName) {
const blob = new Blob([text], { type: 'text/markdown' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = fileName + '.md';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
URL.revokeObjectURL(url);
}
function extractFileInfo() {
const fileInfo = {};
// 提取文件名
const fileNameElement = document.querySelector('h1.mantine-Text-root');
if (fileNameElement) {
fileInfo.fileName = fileNameElement.innerText.trim();
}
// 提取介绍内容
const introductionElement = document.querySelector('div.mantine-Spoiler-content');
if (introductionElement) {
fileInfo.introduction = introductionElement.innerText.trim();
}
// 提取图片网址
const imageElement = document.querySelector('img.mantine-7aj0so');
if (imageElement) {
fileInfo.imageUrl = imageElement.src;
}
// 提取元数据信息
const metadataElement = document.querySelector('table.mantine-Table-root');
if (metadataElement) {
const rows = metadataElement.querySelectorAll('tr');
rows.forEach((row) => {
const keyElement = row.querySelector('td:nth-child(1) div.mantine-Text-root');
const valueElement = row.querySelector('td:nth-child(2) div.mantine-Text-root');
if (keyElement && valueElement) {
const key = keyElement.innerText.trim();
const value = valueElement.innerText.trim();
if (key === 'Trigger Words') {
fileInfo.triggerWords = value;
} else if (key === '源地址') {
fileInfo.sourceAddress = value;
} else if (key === '名称') {
fileInfo.name = value;
}
}
});
fileInfo.metadata = metadataElement.innerText.trim();
}
return fileInfo;
}
function addButton() {
// 添加【下载】按钮
const downloadButton = document.createElement('button');
downloadButton.innerText = '下载';
downloadButton.style.position = 'fixed';
downloadButton.style.top = '10px';
downloadButton.style.right = '60px'; // 调整位置,留出悬浮窗的空间
downloadButton.style.zIndex = '9999';
downloadButton.addEventListener('click', async () => {
const fileInfo = extractFileInfo();
// 创建Markdown文本
let markdownText = `---
Type:
Trigger: ${fileInfo.triggerWords}
note:
src: ${fileInfo.sourceAddress}
name: ${fileInfo.name}
---\n\n`;
markdownText += `# ${fileInfo.fileName}\n\n`;
markdownText += `## 介绍\n\n${fileInfo.introduction}\n\n`;
// 下载图片并将其添加到Markdown文本中
const imageData = await fetch(fileInfo.imageUrl).then(response => response.blob());
const imageFileName = fileInfo.fileName.replace(/[^a-zA-Z0-9-_]/g, '_'); // 替换非法字符
const imageBlob = new Blob([imageData], { type: 'image/png' });
const imageLink = document.createElement('a');
imageLink.href = URL.createObjectURL(imageBlob);
imageLink.download = `${imageFileName}.png`;
document.body.appendChild(imageLink);
imageLink.click();
document.body.removeChild(imageLink);
URL.revokeObjectURL(imageLink.href);
markdownText += `\n\n`;
// 添加元数据信息到Markdown文本中
markdownText += `## 元数据\n\n${fileInfo.metadata}\n\n`;
// 下载Markdown文件
downloadMarkdownAndImage(markdownText, fileInfo.fileName);
});
document.body.appendChild(downloadButton);
// 添加【关于】按钮
const aboutButton = document.createElement('button');
aboutButton.innerText = '关于';
aboutButton.style.position = 'fixed';
aboutButton.style.top = '10px';
aboutButton.style.right = '10px';
aboutButton.style.zIndex = '9999';
aboutButton.addEventListener('click', () => {
// 创建悬浮窗
const overlay = document.createElement('div');
overlay.style.position = 'fixed';
overlay.style.top = '50%';
overlay.style.left = '50%';
overlay.style.transform = 'translate(-50%, -50%)';
overlay.style.backgroundColor = 'rgba(255, 255, 255, 0.9)';
overlay.style.padding = '20px';
overlay.style.borderRadius = '8px';
overlay.style.zIndex = '9999';
overlay.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.3)';
overlay.style.maxWidth = '400px';
overlay.style.maxHeight = '80vh';
overlay.style.overflowY = 'auto';
// 创建覆盖层
const overlayCover = document.createElement('div');
overlayCover.style.position = 'fixed';
overlayCover.style.top = '0';
overlayCover.style.left = '0';
overlayCover.style.width = '100%';
overlayCover.style.height = '100%';
overlayCover.style.backgroundColor = 'rgba(0, 0, 0, 0.5)'; // 透明黑色背景
overlayCover.style.zIndex = '9998'; // 设置较低的z-index,确保覆盖悬浮窗
document.body.appendChild(overlayCover);
overlayCover.addEventListener('click', () => {
// 当用户点击覆盖层时,移除悬浮窗和覆盖层
document.body.removeChild(overlay);
document.body.removeChild(overlayCover);
});
// 模拟异步加载悬浮窗内容
fetch('https://raw.githubusercontent.com/Guyungy/AIGC-knowbase/main/civitai.md') // 替换为实际网页URL
.then(response => response.text())
.then(html => {
overlay.innerHTML = html;
// 在悬浮窗内容加载完毕后,添加点击事件
overlay.addEventListener('click', (event) => {
if (!overlay.contains(event.target)) {
document.body.removeChild(overlay);
}
});
})
.catch(error => {
overlay.innerHTML = '加载悬浮窗内容时出现错误。';
});
document.body.appendChild(overlay);
});
document.body.appendChild(aboutButton);
}
// 添加按钮
addButton();
})();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址