John6666 commited on
Commit
49431cb
·
verified ·
1 Parent(s): f6aa72c

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +4 -3
  2. civitai_to_hf.py +36 -10
app.py CHANGED
@@ -21,8 +21,8 @@ with gr.Blocks(theme="NoCrypt/miku@>=1.2.2", fill_width=True, css=css, delete_ca
21
  with gr.Row():
22
  search_civitai_sort = gr.Radio(label="Sort", choices=CIVITAI_SORT, value=CIVITAI_SORT[0])
23
  search_civitai_period = gr.Radio(label="Period", choices=CIVITAI_PERIOD, value="Month")
24
- search_civitai_limit = gr.Slider(label="Limit", minimum=1, maximum=100, step=1, value=100)
25
- search_civitai_page = gr.Slider(label="Page", minimum=1, maximum=100, step=1, value=1)
26
  with gr.Row(equal_height=True):
27
  search_civitai_query = gr.Textbox(label="Query", placeholder="flux", lines=1)
28
  search_civitai_tag = gr.Dropdown(label="Tag", choices=get_civitai_tag(), value=get_civitai_tag()[0], allow_custom_value=True)
@@ -70,6 +70,7 @@ with gr.Blocks(theme="NoCrypt/miku@>=1.2.2", fill_width=True, css=css, delete_ca
70
  fn=download_civitai,
71
  inputs=[dl_url, civitai_key, hf_token, uploaded_urls, newrepo_id, newrepo_type, is_private, is_info],
72
  outputs=[uploaded_urls, urls_md, urls_remain],
 
73
  )
74
  gr.on(
75
  triggers=[search_civitai_submit.click, search_civitai_query.submit, search_civitai_user.submit],
@@ -78,7 +79,7 @@ with gr.Blocks(theme="NoCrypt/miku@>=1.2.2", fill_width=True, css=css, delete_ca
78
  search_civitai_period, search_civitai_tag, search_civitai_user, search_civitai_limit, search_civitai_page, search_civitai_gallery, state],
79
  outputs=[search_civitai_result, search_civitai_desc, search_civitai_submit, search_civitai_query, search_civitai_gallery,
80
  search_civitai_result_checkbox, search_civitai_result_info, state],
81
- queue=True,
82
  show_api=False,
83
  )
84
  search_civitai_result.change(select_civitai_item, [search_civitai_result, state], [search_civitai_desc, search_civitai_json], queue=False, show_api=False)\
 
21
  with gr.Row():
22
  search_civitai_sort = gr.Radio(label="Sort", choices=CIVITAI_SORT, value=CIVITAI_SORT[0])
23
  search_civitai_period = gr.Radio(label="Period", choices=CIVITAI_PERIOD, value="Month")
24
+ search_civitai_limit = gr.Number(label="Limit", minimum=1, maximum=100, step=1, value=100)
25
+ search_civitai_page = gr.Number(label="Page", info="If 0, retrieve all pages", minimum=0, maximum=10, step=1, value=1)
26
  with gr.Row(equal_height=True):
27
  search_civitai_query = gr.Textbox(label="Query", placeholder="flux", lines=1)
28
  search_civitai_tag = gr.Dropdown(label="Tag", choices=get_civitai_tag(), value=get_civitai_tag()[0], allow_custom_value=True)
 
70
  fn=download_civitai,
71
  inputs=[dl_url, civitai_key, hf_token, uploaded_urls, newrepo_id, newrepo_type, is_private, is_info],
72
  outputs=[uploaded_urls, urls_md, urls_remain],
73
+ queue=True,
74
  )
75
  gr.on(
76
  triggers=[search_civitai_submit.click, search_civitai_query.submit, search_civitai_user.submit],
 
79
  search_civitai_period, search_civitai_tag, search_civitai_user, search_civitai_limit, search_civitai_page, search_civitai_gallery, state],
80
  outputs=[search_civitai_result, search_civitai_desc, search_civitai_submit, search_civitai_query, search_civitai_gallery,
81
  search_civitai_result_checkbox, search_civitai_result_info, state],
82
+ queue=False,
83
  show_api=False,
84
  )
85
  search_civitai_result.change(select_civitai_item, [search_civitai_result, state], [search_civitai_desc, search_civitai_json], queue=False, show_api=False)\
civitai_to_hf.py CHANGED
@@ -153,28 +153,54 @@ CIVITAI_PERIOD = ["AllTime", "Year", "Month", "Week", "Day"]
153
 
154
 
155
  def search_on_civitai(query: str, types: list[str], allow_model: list[str] = [], limit: int = 100,
156
- sort: str = "Highest Rated", period: str = "AllTime", tag: str = "", user: str = "", page: int = 1):
157
  user_agent = get_user_agent()
158
  headers = {'User-Agent': user_agent, 'content-type': 'application/json'}
159
  base_url = 'https://civitai.com/api/v1/models'
160
- params = {'sort': sort, 'period': period, 'limit': int(limit), 'page': int(page),'nsfw': 'true'}
161
  if len(types) != 0: params["types"] = types
162
  if query: params["query"] = query
163
  if tag: params["tag"] = tag
164
  if user: params["username"] = user
 
165
  session = requests.Session()
166
  retries = Retry(total=5, backoff_factor=1, status_forcelist=[500, 502, 503, 504])
167
  session.mount("https://", HTTPAdapter(max_retries=retries))
 
168
  try:
169
- r = session.get(base_url, params=params, headers=headers, stream=True, timeout=(7.0, 30))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  except Exception as e:
171
  print(e)
172
- return None
173
- else:
174
- if not r.ok: return None
175
  json = r.json()
176
- if 'items' not in json: return None
177
- items = []
178
  for j in json['items']:
179
  for model in j['modelVersions']:
180
  item = {}
@@ -194,10 +220,10 @@ def search_on_civitai(query: str, types: list[str], allow_model: list[str] = [],
194
  item['md'] += f'''Model URL: [https://civitai.com/models/{j["id"]}](https://civitai.com/models/{j["id"]})<br>Model Name: {item["name"]}<br>
195
  Creator: {item["creator"]}<br>Tags: {", ".join(item["tags"])}<br>Base Model: {item["base_model"]}<br>Description: {item["description"]}'''
196
  items.append(item)
197
- return items
198
 
199
 
200
- def search_civitai(query, types, base_model=[], sort=CIVITAI_SORT[0], period=CIVITAI_PERIOD[0], tag="", user="", limit=100, page=1, gallery=[], state={}):
201
  civitai_last_results = {}
202
  set_state(state, "civitai_last_choices", [("", "")])
203
  set_state(state, "civitai_last_gallery", [])
 
153
 
154
 
155
  def search_on_civitai(query: str, types: list[str], allow_model: list[str] = [], limit: int = 100,
156
+ sort: str = "Highest Rated", period: str = "AllTime", tag: str = "", user: str = "", page: int = 1, progress=gr.Progress(track_tqdm=True)):
157
  user_agent = get_user_agent()
158
  headers = {'User-Agent': user_agent, 'content-type': 'application/json'}
159
  base_url = 'https://civitai.com/api/v1/models'
160
+ params = {'sort': sort, 'period': period, 'limit': int(limit), 'nsfw': 'true'}
161
  if len(types) != 0: params["types"] = types
162
  if query: params["query"] = query
163
  if tag: params["tag"] = tag
164
  if user: params["username"] = user
165
+ if page != 0: params["page"] = int(page)
166
  session = requests.Session()
167
  retries = Retry(total=5, backoff_factor=1, status_forcelist=[500, 502, 503, 504])
168
  session.mount("https://", HTTPAdapter(max_retries=retries))
169
+ rs = []
170
  try:
171
+ if page == 0:
172
+ progress(0, desc="Searching page 1...")
173
+ print("Searching page 1...")
174
+ r = session.get(base_url, params=params | {'page': 1}, headers=headers, stream=True, timeout=(7.0, 30))
175
+ rs.append(r)
176
+ if r.ok:
177
+ json = r.json()
178
+ next_url = json['metadata']['nextPage'] if 'metadata' in json and 'nextPage' in json['metadata'] else None
179
+ i = 2
180
+ while(next_url is not None):
181
+ progress(0, desc=f"Searching page {i}...")
182
+ print(f"Searching page {i}...")
183
+ r = session.get(next_url, headers=headers, stream=True, timeout=(7.0, 30))
184
+ rs.append(r)
185
+ if r.ok:
186
+ json = r.json()
187
+ next_url = json['metadata']['nextPage'] if 'metadata' in json and 'nextPage' in json['metadata'] else None
188
+ else: next_url = None
189
+ i += 1
190
+ else:
191
+ progress(0, desc="Searching page 1...")
192
+ print("Searching page 1...")
193
+ r = session.get(base_url, params=params, headers=headers, stream=True, timeout=(7.0, 30))
194
+ rs.append(r)
195
+ except requests.exceptions.ConnectTimeout:
196
+ print("Request timed out.")
197
  except Exception as e:
198
  print(e)
199
+ items = []
200
+ for r in rs:
201
+ if not r.ok: continue
202
  json = r.json()
203
+ if 'items' not in json: continue
 
204
  for j in json['items']:
205
  for model in j['modelVersions']:
206
  item = {}
 
220
  item['md'] += f'''Model URL: [https://civitai.com/models/{j["id"]}](https://civitai.com/models/{j["id"]})<br>Model Name: {item["name"]}<br>
221
  Creator: {item["creator"]}<br>Tags: {", ".join(item["tags"])}<br>Base Model: {item["base_model"]}<br>Description: {item["description"]}'''
222
  items.append(item)
223
+ return items if len(items) > 0 else None
224
 
225
 
226
+ def search_civitai(query, types, base_model=[], sort=CIVITAI_SORT[0], period=CIVITAI_PERIOD[0], tag="", user="", limit=100, page=1, gallery=[], state={}, progress=gr.Progress(track_tqdm=True)):
227
  civitai_last_results = {}
228
  set_state(state, "civitai_last_choices", [("", "")])
229
  set_state(state, "civitai_last_gallery", [])