File size: 4,826 Bytes
90618af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3716bc3
90618af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3201557
a333e01
90618af
 
 
 
 
c24321f
 
 
90618af
 
 
 
 
 
 
 
 
 
 
 
 
cee55ef
 
90618af
 
 
 
 
3201557
90618af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
from blacklist import bad_tags,bad_models,fav_models
models = []
models_plus_tags=[]
tags_plus_models=[]


def list_uniq(l):
    return sorted(set(l), key=l.index)

def find_model_list(author: str="", tags: list[str]=[], not_tag="", sort: str="last_modified", limit: int=30, force_gpu=False, check_status=False, bad_models=bad_models):
    from huggingface_hub import HfApi
    api = HfApi()
    default_tags = ["diffusers"]
    if not sort: sort = "last_modified"
    models = []
    models_plus_tags=[]
    try:
        model_infos = api.list_models(author=author, task="text-to-image",
                                       tags=list_uniq(default_tags + tags), cardData=True, sort=sort, limit=limit)
    except Exception as e:
        print(f"Error: Failed to list models.")
        print(e)
        return models
    print(model_infos[0].DatasetInfo)
    for model in model_infos:
        
        if not model.private and not model.gated:
            loadable = True
            if not_tag and not_tag in model.tags or not loadable: continue
            if model.id not in bad_models :
                models.append(model.id)
                models_plus_tags.append([model.id,process_tags(model.tags)])
            if len(models) == limit: break
    return models , models_plus_tags

def process_tags(tags,bad_tags=bad_tags):
    t1=True
    new_tags=[]
    for tag in tags:
        if tag not in bad_tags:
            if tag == 'en':
                t1=False
            if t1 :
                new_tags.append(tag)
    return new_tags

def clas_tags(models_plus_tags,min):
    tags_plus_models=[]
    output=[]
    new_tag=True
    for ent in models_plus_tags:
        for tagClas in ent[1]:
            new_tag=True
            for tag in tags_plus_models:
                if tag[0] == tagClas:
                    tag[1]+=1
                    tag[2].append(ent[0])
                    new_tag=False
            if new_tag:
                tags_plus_models.append([tagClas,1,[ent[0]]])
    for t in tags_plus_models:
        if t[0]=='diffusers' :
            t[0]='all'
            output.append(t)
        else :
            if t[1]>=min and t[1]!=len(models_plus_tags):
                output.append(t)
    return output
def orga_tag(tags_plus_models):
    output=[]
    while(len(output)<len(tags_plus_models)):
        max=0
        for tag in tags_plus_models:
            if tag[1]>max:
                if tag not in output:
                    max=tag[1]
                    tagMax=tag
        output.append(tagMax)
    return output
def tag_new(models,limit=40):
    output=["NEW",0,[]]
    if limit>len(models):
        limit=len(models)
    for i in range(limit):
        output[1]+=1
        output[2].append(models[i])
    return output
    
def tag_fav(models,fav_models):
    print(fav_models)
    output=["FAV",0,[]]
    for m in fav_models:
        if m in models:
            output[1]+=1
            output[2].append(m)
        else:
            print(m+" not found ")
    print(models)
    return output

def update_tag(models_plus_tags,list_new_tag):
    for m_new in list_new_tag[2]:
        for m in models_plus_tags:
            if m_new == m[0]:
                m[1].append(list_new_tag[0])
    return models_plus_tags
    
    
from operator import itemgetter

#models = find_model_list("Yntec", [], "", "last_modified", 20)
models = find_model_list("John6666", ["stable-diffusion-xl"], "", "last_modified", 2000)
models_plus_tags = models.copy() # or deepcopy
#tags_plus_models = orga_tag(clas_tags(models_plus_tags,2))
tags_plus_models = orga_tag(clas_tags(sorted(models_plus_tags, key=itemgetter(0)),2))
list_new=tag_new(models,40)
models_plus_tags=update_tag(models_plus_tags,list_new)
tags_plus_models.insert(1,list_new)
list_fav=tag_fav(models,fav_models)
if list_fav[1]>0:
    tags_plus_models.insert(1,list_fav)
    models_plus_tags=update_tag(models_plus_tags,list_fav)
print(models_plus_tags[0])

#models.extend(find_model_list("John6666", ["stable-diffusion-xl"], "", "last_modified", 200))

#models.extend(find_model_list("John6666", [], "", "last_modified", 20)) # The latest 20 models will be added to the models written above.

# Examples:
#models = ['yodayo-ai/kivotos-xl-2.0', 'yodayo-ai/holodayo-xl-2.1'] # specific models
#models = find_model_list("Yntec", [], "", "last_modified", 20) # Yntec's latest 20 models
#models = find_model_list("Yntec", ["anime"], "", "last_modified", 20) # Yntec's latest 20 models with 'anime' tag
#models = find_model_list("Yntec", [], "anime", "last_modified", 20) # Yntec's latest 20 models without 'anime' tag
#models = find_model_list("", [], "", "last_modified", 20) # latest 20 text-to-image models of huggingface
#models = find_model_list("", [], "", "downloads", 20) # monthly most downloaded 20 text-to-image models of huggingface