【StableDiffusion】2024.6.4 亲测成功,无魔法 Civitai 镜像,国内下载 Civitai 模型的方法

一、废话不说,直接开始

废话:请注意,这个插件不是万能的,有一些模型无法下载,大概能下载 70% 左右的模型

1.github下载插件

https://github.com/tzwm/sd-webui-model-downloader-cn/tree/main

这个步骤不用我多说了吧…
如果会用 git 的话,直接到 extension 目录下:

输入cmd,回车,打开cmd,

在这里插入图片描述

运行 git 命令

git clone --depth 1 https://github.com/tzwm/sd-webui-model-downloader-cn.git

在这里插入图片描述

2.下载之后的插件在这里

对比一下大小吧,别下载失败了

在这里插入图片描述

二、改源码

1.为什么改源码?

经过我的测试,这个源码一进行预览,就会报错,爆得满屏都是 error
我不确定这是否是源码本身的问题,有可能是我本地网络环境的问题

TIPS:到这个步骤的时候,你可以尝试一下,按照 github 上开发者的方法,能不能正常预览和下载 civitai 上面的模型
如果不行的话,就照我下面说的做吧

2.改!

2.1
进入 sd-webui-model-downloader-cn\scripts 目录

在这里插入图片描述
在这里插入图片描述

2.2
用 IDE 打开这个 model-downloader-cn.py 文件

在这里插入图片描述
2.3
把这整个文件直接全部删除,把我下面的代码黏贴进去 (别忘了把末尾的 CSDN 的文字水印去掉…)

import modules.scripts as scripts
from modules.paths_internal import models_path, data_path
from modules import script_callbacks, shared
from PIL import Image
import numpy as np
import gradio as gr
import requests
import os
import re
import subprocess
import threadingAPI_URL = "https://api.tzone03.xyz/"
ONLINE_DOCS_URL = API_URL + "docs/"
RESULT_PATH = "tmp/model-downloader-cn.log"
VERSION = "v1.1.4"def check_aria2c():try:subprocess.run("aria2c", stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)return Trueexcept FileNotFoundError:return Falsedef process_image(url):response = requests.get(url, stream=True)image = Image.open(response.raw)return imagedef get_model_path(model_type):co = shared.cmd_optspj = os.path.joinMODEL_TYPE_DIR = {"Checkpoint": ["ckpt_dir", pj(models_path, 'Stable-diffusion')],"LORA": ["lora_dir", pj(models_path, 'Lora')],"TextualInversion": ["embeddings_dir", pj(data_path, 'embeddings')],"Hypernetwork": ["hypernetwork_dir", pj(models_path, 'hypernetworks')],# "AestheticGradient": "",# "Controlnet": "", #controlnet-dir"LoCon": ["lyco_dir", pj(models_path, 'LyCORIS')],"VAE": ["vae_dir", pj(models_path, 'VAE')],}dir_list = MODEL_TYPE_DIR.get(model_type)if dir_list == None:return Noneif hasattr(co, dir_list[0]) and getattr(co, dir_list[0]):return getattr(co, dir_list[0])else:return dir_list[1]def request_civitai_detail(url):pattern = r'https://civitai\.com/models/(.+)'m = re.match(pattern, url)if not m:return False, "不是一个有效的 civitai 模型页面链接,暂不支持"req_url = API_URL + "civitai/models/" + m.group(1)res = requests.get(req_url)if res.status_code >= 500:return False, "呃 服务好像挂了,理论上我应该在修了,可以进群看看进度……"if res.status_code >= 400:return False, "不是一个有效的 civitai 模型页面链接,暂不支持"if res.ok:return True, res.json()else:return False, res.textdef resp_to_components(resp):if resp is None:return [None, None, None, None, None, None, None, None, None, None]img = resp["version"]["image"]["url"]if img:img = process_image(img)trained_words = resp["version"].get("trainedWords", [])if not trained_words:trained_words = ["girl"]trained_words_str = ", ".join(trained_words)updated_at = resp["version"].get("updatedAt", "N/A")return [resp["name"],resp["type"],trained_words_str,resp["creator"]["username"],", ".join(resp["tags"]),updated_at,resp["description"],img,resp["version"]["file"]["name"],resp["version"]["file"]["downloadUrl"],]def preview(url):ok, resp = request_civitai_detail(url)if not ok:return [resp] + resp_to_components(None) + [gr.update(interactive=False)]has_download_file = Falsemore_guides = ""if resp["version"]["file"]["downloadUrl"]:has_download_file = Truemore_guides = f',点击下载按钮\n{resp["version"]["file"]["name"]}'return [f"预览成功{more_guides}"] + resp_to_components(resp) + \[gr.update(interactive=has_download_file)]def download(model_type, filename, url, image_arr):if not (model_type and url and filename):return "下载信息缺失"target_path = get_model_path(model_type)if not target_path:return f"暂不支持这种类型:{model_type}"if isinstance(image_arr, np.ndarray) and image_arr.any() is not None:image_filename = filename.rsplit(".", 1)[0] + ".jpeg"target_file = os.path.join(target_path, image_filename)if not os.path.exists(target_file):image = Image.fromarray(image_arr)image.save(target_file)target_file = os.path.join(target_path, filename)if os.path.exists(target_file):return f"已经存在了,不重复下载:\n{target_file}"cmd = f'curl -o "{target_file}" "{url}" 2>&1'if check_aria2c():cmd = f'aria2c -c -x 16 -s 16 -k 1M -d "{target_path}" -o "{filename}" "{url}" 2>&1'result = subprocess.run(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding="UTF-8")status_output = ""if result.returncode == 0:status_output = f"下载成功,保存到:\n{target_file}\n{result.stdout}"else:status_output = f"下载失败了,错误信息:\n{result.stdout}"return status_outputdef request_online_docs():banner = "## 加载失败,可以更新插件试试:\nhttps://github.com/tzwm/sd-webui-model-downloader-cn"footer = "## 交流互助群\n![](https://oss.talesofai.cn/public/qrcode_20230413-183818.png?cc0429)"try:res = requests.get(ONLINE_DOCS_URL + "banner.md")if res.ok:banner = res.textres = requests.get(ONLINE_DOCS_URL + "footer.md")if res.ok:footer = res.textexcept Exception as e:print("sd-webui-model-downloader-cn 文档请求失败")return banner, footerdef on_ui_tabs():banner, footer = request_online_docs()with gr.Blocks() as ui_component:gr.Markdown(banner)with gr.Row() as input_component:with gr.Column():inp_url = gr.Textbox(label="Civitai 模型的页面地址,不是下载链接",placeholder="类似 https://civitai.com/models/28687/pen-sketch-style")with gr.Row():preview_btn = gr.Button("预览")download_btn = gr.Button("下载", interactive=False)with gr.Row():result = gr.Textbox(# value=result_update,label="执行结果",interactive=False,# every=1,)with gr.Column() as preview_component:with gr.Row():with gr.Column() as model_info_component:name = gr.Textbox(label="名称", interactive=False)model_type = gr.Textbox(label="类型", interactive=False)trained_words = gr.Textbox(label="触发词", interactive=False)creator = gr.Textbox(label="作者", interactive=False)tags = gr.Textbox(label="标签", interactive=False)updated_at = gr.Textbox(label="最近更新时间", interactive=False)with gr.Column() as model_image_component:image = gr.Image(show_label=False,interactive=False,)with gr.Accordion("介绍", open=False):description = gr.HTML()with gr.Row(visible=False):filename = gr.Textbox(visible=False,label="model_filename",interactive=False,)download_url = gr.Textbox(visible=False,label="model_download_url",interactive=False,)with gr.Row():gr.Markdown(f"版本:{VERSION}\n\n作者:@tzwm\n{footer}")def preview_components():return [name,model_type,trained_words,creator,tags,updated_at,description,image,]def file_info_components():return [filename,download_url,]preview_btn.click(fn=preview,inputs=[inp_url],outputs=[result] + preview_components() + \file_info_components() + [download_btn])download_btn.click(fn=download,inputs=[model_type] + file_info_components() + [image],outputs=[result])return [(ui_component, "模型下载", "model_downloader_cn_tab")]script_callbacks.on_ui_tabs(on_ui_tabs)

2.4
保存,退出,重启 StableDiffusion 的 WEB UI

三、试试?

1.试试就试试

1.1
随便找一个 civitai 上面的模型,按照 github 原作者的说明进行操作(也就是复制 url)

在这里插入图片描述
1.2
黏贴,预览,成功的话点击“下载”
请注意,点击下载之后不会有任何反应,如何判断模型是否已经开始下载了呢?
打开 任务管理器,看看网络是不是开始快速占用了!

在这里插入图片描述

开始下载啦

在这里插入图片描述

四、没啦,祝你今天开心.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/22289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring boot集成通义千问大模型实现智能问答

Spring boot集成通义千问大模型实现智能问答 背景 我在用idea进行java开发时发现了通义灵码这款免费的智能代码补全插件,用了一段时间了,感觉很不错。就想着在自己的项目中也能集成通义千问大模型实现智能回答,毕竟对接openai需要解决网络问…

SQL注入-时间盲注

SQL时间盲注(Time-based Blind SQL Injection),又叫延时注入,是一种SQL注入攻击技术,用于在无法直接获取查询结果或查看响应内容变化的情况下,通过引入时间延迟来推断数据库的信息;时间盲注依赖…

什么是真正的高效阅读,高效阅读的方法和技巧

一、教程描述 查理芒格说他认识的厉害的人没有一个不读书的,为什么我们也读书却成不了厉害的那个人呢?所以这绝对不是书的问题,而是人的问题。阅读应该带有目的性,要帮我们解决实际问题。如果读一本书只是读完它,那读…

如何理解与学习数学分析——第一部分——数学分析概观

第1 部分:数学分析概观(Studying Analysis) 1. 数学分析之面目(What is Analysis like?) 本章说明了分析中的定义、定理和证明。 它介绍了一些符号,并解释了如何使用数学分析中的这些数学符号和数学词汇、以及应该把它们读成什么。它指出了这种类型的…

CANDela studio的State

State主要用来查看,点击State Groups,可以看到session和security下面有多少个会话和security level,所以删除和新建都不能在这里操作。 Dependencies没有安装插件,看不到图形不要紧,点击下面那个图标,就能编…

【好物推荐】夏日肌肤守护者:护肤皂

随着夏日的到来,高温、潮湿和紫外线成为了肌肤的三大挑战。在这个季节里,护肤不仅仅是为了美观,更是对肌肤健康的一种保护。在众多护肤产品中,护肤皂因其清洁力强、使用方便等特点,成为了夏季护肤的得力助手。今天&…

【Java基础】字符集

【Java基础】字符集 0. 预备知识1.计算机中的存储规则2. Unicode、UTF-83. 为什么出现乱码4. 如何防止产生乱码 0. 预备知识 字符集(Character Set)是多个字符的集合,它规定了字符在计算机中的编码方式。 字符集的定义与作用 字符集是各种…

11 - 员工奖金(高频 SQL 50 题基础版)

11- 员工奖金 -- join和left join的区别 -- 如果是join则右侧的数据有的就插,没的就啥也不干,交白卷,也不留null -- 但是left join让右侧数据在没有对应数据时补上了null select e.name,b.bonus from Employee e left join bonus b on e.empI…

SpringBoot 统一返回格式

目录 一、为什么要统一返回? 二、全局异常处理代码 三、统一返回对象代码 四、使用方法 五、结果展示 一、为什么要统一返回? 在Spring Boot应用中,为了保持API接口的响应格式统一,通常会采用全局异常处理和自定义返回对象的方…

Java进制转换

进制介绍 二进制:0B开头,0-1 八进制:0开头,0-7 十进制:0-9 十六进制:0x开头,0-9和A-F public class Binary{public static void main(String[] args){//二进制 10int n10B1010//十进制 1010int…

[协议]TCP协议

TCP,UDP协议工作在传输层 TCP基于连接; UDP基于非连接 TCP三次握手 UDP:不能保证丢包,传输稳定性不如TCP;

场外期权怎么做?

对于中国的投资者而言,场外期权交易目前主要由特定的券商提供,并且仅对机构开放。个人投资者无法直接参与此类交易,但可以通过与这些券商合作的机构公司进行询价和下单。场外期权交易涉及一系列严谨的步骤,以下是其基本流程&#…

QT中将资源文件(image、qss、qm等)封装到静态库中,程序该如何引用静态库中的资源文件

1、静态库 2、主程序中使用第三方库中的资源文件 核心代码: int main(int argc, char *argv[]) {QApplication a(argc, argv

【C++】优先级队列仿函数

目录 一.priority_queue的使用 二.仿函数 三、priority_queue的模拟实现 首先,我们先来了解一下什么是优先级队列 priority_queue,翻译为优先级队列,是一种容器适配器 底层容器可以是任何标准容器类模板,也可以是其他特定设计…

面试一个多月,我上岸了!

大家好,我是枫哥,🌟阿里云技术专家、📝资深面试官、🌹Java跳槽网课堂创始人。拥有多年一线研发经验,曾就职过科大讯飞、美团网、平安等公司。目前组建的团队,专注Java技术分享,一对一…

PromptPort:为大模型定制的创意AI提示词工具库

PromptPort:为大模型定制的创意AI提示词工具库 随着人工智能技术的飞速发展,大模型在各行各业的应用越来越广泛。而在与大模型交互的过程中,如何提供精准、有效的提示词成为了关键。今天,就为大家介绍一款专为大模型定制的创意AI…

九、从0开始卷出一个新项目之瑞萨RZN2L生产烧录固件(jflash擦写读外挂flash)

目录 七、生产烧录固件(jflash擦/写/读外挂flash) 7.1 flash母片读写 7.2 jflash擦/写/读外挂flash 九、从0开始卷出一个新项目之瑞萨RZN2L 七、生产烧录固件(jflash擦写读外挂flash) 七、生产烧录固件(jflash擦/写/读外挂flash) 7.1 flash母片读写 略 7.2 jflash擦/写/读…

【Java】使用 BeanUtils.copyProperties 11个坑(注意事项)

目录 背景 坑1:类型不匹配 坑2:属性名称不一致 坑3:BeanUtils.copyProperties 是浅拷贝 坑4:Null 值覆盖 坑5:注意引入的包 坑6:Boolean 类型数据 is 开头属性的坑 坑7:查不到字段引用 …

【Linux】常用基本指令汇总

前言: 本章将介绍Linux操作系统常用的基本指令,另外,使用这些指令编辑一个shell脚本,方便大家理解使用。 目录 常用指令whoamipwdls关于iNode的解释验证标识文件的方式 cdtouchmkdir(重要)treemdir指令 &a…

Jmeter断言、关联、脚本录制

Jmeter断言 断言:让程序自动判断预期结果和实际结果是否一致 提示: Jmeter在请求的返回层面有个自动判断机制(响应状态码 2xx:成功,4xx/5xx:失败)但是请求成功了,并不代表结果一定正确,因此需要检测机制…