File size: 4,771 Bytes
375f1f1 b1a16c3 375f1f1 a4aa269 375f1f1 |
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 |
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
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)])
models_plus_tags.append([model.id,process_tags(model.cardData.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=[]
listTemp=[]
listAllModels=['all',0,[]]
new_tag=True
for ent in models_plus_tags:
listAllModels[1]+=1
listAllModels[2].append(ent[0])
for tagClas in ent[1]:
new_tag=True
for tag in listTemp:
if tag[0] == tagClas:
tag[1]+=1
tag[2].append(ent[0])
new_tag=False
if new_tag:
listTemp.append([tagClas,1,[ent[0]]])
tags_plus_models.append(listAllModels)
for t in listTemp:
if t[1]>=min and t[1]!=len(models_plus_tags):
tags_plus_models.append(t)
return tags_plus_models
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=models,fav_models=fav_models):
output=["FAV",0,[]]
for m in fav_models:
if m in models:
output[1]+=1
output[2].append(m)
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 , models_plus_tags = find_model_list("John6666", ["stable-diffusion-xl"], "", "last_modified", 2000)
#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()
if list_fav[1]>0:
tags_plus_models.insert(1,list_fav)
models_plus_tags=update_tag(models_plus_tags,list_fav)
#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
|