File size: 2,449 Bytes
8866644
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import os
import folder_paths

import comfy.sd
import comfy.diffusers_load
from .tokenizer import MiaoBiTokenizer

class MiaoBiCLIPLoader:
    @classmethod
    def INPUT_TYPES(s):
        return {
            "required": {
                "clip_name": (folder_paths.get_filename_list("clip"),),
            }
        }

    RETURN_TYPES = ("CLIP",)
    FUNCTION = "load_mbclip"
    CATEGORY = "ExtraModels/MiaoBi"
    TITLE = "MiaoBi CLIP Loader"

    def load_mbclip(self, clip_name):
        clip_type = comfy.sd.CLIPType.STABLE_DIFFUSION
        clip_path = folder_paths.get_full_path("clip", clip_name)
        clip = comfy.sd.load_clip(
            ckpt_paths=[clip_path],
            embedding_directory=folder_paths.get_folder_paths("embeddings"),
            clip_type=clip_type
        )
        # override tokenizer
        clip.tokenizer.clip_l = MiaoBiTokenizer()
        return (clip,)


class MiaoBiDiffusersLoader:
    @classmethod
    def INPUT_TYPES(cls):
        paths = []
        for search_path in folder_paths.get_folder_paths("diffusers"):
            if os.path.exists(search_path):
                for root, subdir, files in os.walk(search_path, followlinks=True):
                    if "model_index.json" in files:
                        paths.append(os.path.relpath(root, start=search_path))

        return {
            "required": {
                "model_path": (paths,),
                }
            }

    RETURN_TYPES = ("MODEL", "CLIP", "VAE")
    FUNCTION = "load_mbcheckpoint"
    CATEGORY = "ExtraModels/MiaoBi"
    TITLE = "MiaoBi Checkpoint Loader (Diffusers)"

    def load_mbcheckpoint(self, model_path, output_vae=True, output_clip=True):
        for search_path in folder_paths.get_folder_paths("diffusers"):
            if os.path.exists(search_path):
                path = os.path.join(search_path, model_path)
                if os.path.exists(path):
                    model_path = path
                    break
        unet, clip, vae = comfy.diffusers_load.load_diffusers(
            model_path,
            output_vae = output_vae,
            output_clip = output_clip,
            embedding_directory = folder_paths.get_folder_paths("embeddings")
        )
        # override tokenizer
        clip.tokenizer.clip_l = MiaoBiTokenizer()
        return (unet, clip, vae)

NODE_CLASS_MAPPINGS = {
    "MiaoBiCLIPLoader": MiaoBiCLIPLoader,
    "MiaoBiDiffusersLoader": MiaoBiDiffusersLoader,
}