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

news2024/12/24 21:33:09

一、废话不说,直接开始

废话:请注意,这个插件不是万能的,有一些模型无法下载,大概能下载 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 threading


API_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 True
    except FileNotFoundError:
        return False

def process_image(url):
    response = requests.get(url, stream=True)
    image = Image.open(response.raw)
    return image

def get_model_path(model_type):
    co = shared.cmd_opts
    pj = os.path.join
    MODEL_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 None

    if 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.text


def 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 = False
    more_guides = ""
    if resp["version"]["file"]["downloadUrl"]:
        has_download_file = True
        more_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_output


def 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.text

        res = requests.get(ONLINE_DOCS_URL + "footer.md")
        if res.ok:
            footer = res.text
    except Exception as e:
        print("sd-webui-model-downloader-cn 文档请求失败")

    return banner, footer


def 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.coloradmin.cn/o/1789093.html

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

相关文章

用框架思维学Java:集合概览

集合这个词,耳熟能详,从小学一年级开始,每天早上做操时都会听到这两个字: 高中数学又学习到了新的集合: 那么Java中的集合是什么呢? 一,前言 1,什么是Java集合 数学集合是Java集…

110、python-第四阶段-7-Socket服务端开发

服务端代码: 启动客户端工具 netAssist.exe,连接socket服务,如下,进行通信

echarts学习:基本使用和组件封装

前言 我在工作中使用echarts较少,这就导致每次使用时都要从头再来,这让我很头疼。因此我决心编写一系列文章将我参与工作后几次使用echarts所用到的知识记录下来,以便将来可以快速查阅。 一、基本使用 像我一样的新手,想要入门e…

【方法论】钟澄国家杰青 鲸吞法 写文献综述、大论文框架必备

Xlab2020的个人空间-Xlab2020个人主页-哔哩哔哩视频 老师指南 就是1号文件有了后,也就是【】概括了之后,我们会运行下程序(程序我会让学生share)。然后程序会执行这么一个操作,复制下【】内容,然后在第二个…

在Windows11系统上搭建SFTP服务器

利用OpenSSH搭建SFTP服务器 下载安装部署OpenSSH创建一个测试账户测试链接为SFTP用户配置根目录下载安装部署OpenSSH 参考链接 部署完启动服务要使用管理员模式。 net start sshd创建一个测试账户 使用PC的微软账户是访问不了SFTP的。 需要使用被微软账户覆盖掉的系统账户和…

ATA-3080C功率放大器的基本原理是什么

功率放大器是一种电子设备,用于将输入信号的功率增加到更高的水平,以便驱动负载或输出设备。它在许多应用中都起着重要作用,包括音频放大、无线通信、雷达系统和工业控制等。 功率放大器的基本原理可以通过两个关键概念来解释:放大…

【机器学习】机器学习与推荐系统在电子商务中的融合应用与性能优化新探索

文章目录 引言机器学习与推荐系统的基本概念机器学习概述监督学习无监督学习强化学习 推荐系统概述基于内容的推荐协同过滤混合推荐 机器学习与推荐系统的融合应用用户行为分析数据预处理特征工程 模型训练与评估模型训练模型评估 个性化推荐基于用户的协同过滤基于商品的协同过…

汇凯金业:开盘买入还是收盘时买入好

在股票交易中,选择在开盘时还是收盘时进行买入操作,取决于投资者的策略和市场状况。以下是两种策略的优缺点及其适用情境: 开盘时买入 优点: 快速入场:如果夜间或开盘前出现了重大利好消息,及时在开盘时…

CRM客户关系管理系统功能概览

CRM客户关系管理系统是一款集成了多种功能的客户管理工具,旨在帮助企业高效地管理客户关系,提升销售业绩。以下是该系统的功能模块及描述: 一、待办事项 今日需联系客户:提供客户列表,支持多条件查询,包括客…

唯众智联网(AIoT)应用开发教学实训解决方案

一、引言 随着信息技术的飞速发展,物联网(IoT)和人工智能(AI)技术逐渐融合,形成了智联网(AIoT)这一新兴领域。智联网通过智能化设备、传感器、云计算等技术手段,实现了数…

对接专有钉钉(浙政钉)登陆步骤

背景 因为项目需要对接浙政钉,我想应该和之前对接阿里云的钉钉登陆钉钉登陆类似,就上网搜索看看,出现了个专有钉钉的概念,就一时间搞不清楚,钉钉,专有钉钉,浙政钉的区别,后续稍微理…

三维重建,谁才是顶流?

3DGS技术是近年来计算机视觉领域最具突破性的研究成果之一。它不仅在学术界引起了广泛关注,成为计算机视觉、SLAM等领域的研究热点,而且每天都有大量基于Gaussian Splatting的新研究问世。此外,3DGS技术在商业应用方面也取得了显著进展&#…

PPT设置为本框的默认格式以及固定文本框

调整文本框固定位置 双击文本框之后勾选如下三个位置 设置文本框为默认 在调整好文本框的基本性质后,设置为默认即可

2024最新python入门教程|python安装|pycharm安装

前言:在安装PyCharm之前,首先需要明确PyCharm是一款功能强大的Python集成开发环境(IDE),由JetBrains公司开发。PyCharm旨在通过提供智能代码补全、语法高亮、代码检查、快速导航和重构等丰富的编码辅助工具&#xff0c…

BypassD: Enabling fast userspace access to shared SSDs——论文泛读

ASPLOS 2024 Paper 论文阅读笔记整理 问题 现代存储设备,如Optane NVMe SSD,提供几微秒的超低延迟和每秒数千GB的高带宽,导致内核软件I/O堆栈是开销的主要来源。例如,Optane SSD可以在4𝜇s内返回4KB块,而…

金融风控模型论文定制服务_研究生博士生毕业论文_小论文_中文核心_CCF_EI会议_AI_人工智能_机器学习

金融风控论文定制服务范围 论文复现案例包括但不限于: 1.个人信贷风控模型 1.1.German Credit德国信用数据集风控模型 1.2.Give me some credit风控模型 1.3.lending club风控信贷模型(美国最大P2P平台,目前已转线上银行) 1…

针对AlGaN/GaN高电子迁移率晶体管的显式表面电势计算和紧凑电流模型

来源:An Explicit Surface Potential Calculation and Compact Current Model for AlGaN/GaN HEMTs(EDL 15年) 摘要 在本文中,我们提出了一种新的紧凑模型,用于基于费米能级和表面电位的显式解来描述AlGaN/GaN高电子迁移率晶体管。该模型计算…

Matlab2010安装注册+激活(保姆级教程)

目录 一、软件安装 二、软件激活 三、软件测试 Matlab2010压缩包: 链接:https://pan.baidu.com/s/1bX4weZ0nC-4zlDLUiSKcRQ?pwdxljj 提取码:xljj 一、软件安装 1.解压所给压缩包,目录双击setup.exe打开. (如果用户名为中文则会遇到这个…

使用Flutter开发APP的问题

在使用Flutter进行APP开发时,尽管Flutter提供了许多优势和便利,但也存在一些常见问题和挑战。以下是开发过程中可能遇到的问题以及应对方法,通过充分理解和应对这些问题,可以更好地利用Flutter的优势,开发出高质量的跨…

儿童护眼灯买什么牌子质量好又实惠?儿童品牌台灯质量前十的款式

儿童护眼灯买什么牌子质量好又实惠?在当今时代,电子设备在我们的日常生活中扮演着越来越重要的角色。然而,长时间使用这些设备可能会增加眼睛疲劳和近视的风险。为了解决这一问题,护眼台灯应运而生,并逐渐成为许多家庭…