Spaces:
Running
Running
Commit
•
2a43fc6
1
Parent(s):
65351e7
Update app.py
Browse files
app.py
CHANGED
@@ -6,14 +6,7 @@ from slugify import slugify
|
|
6 |
import gradio as gr
|
7 |
import uuid
|
8 |
from typing import Optional
|
9 |
-
|
10 |
-
from selenium import webdriver
|
11 |
-
from webdriver_manager.chrome import ChromeDriverManager
|
12 |
-
from selenium.webdriver.common.by import By
|
13 |
-
from selenium.webdriver.support.ui import WebDriverWait
|
14 |
-
from selenium.webdriver.support import expected_conditions as EC
|
15 |
-
|
16 |
-
driver = webdriver.Chrome(ChromeDriverManager().install())
|
17 |
|
18 |
|
19 |
def get_json_data(url):
|
@@ -148,35 +141,54 @@ def upload_civit_to_hf(profile: Optional[gr.OAuthProfile], url, progress=gr.Prog
|
|
148 |
raise gr.Error("something went wrong")
|
149 |
return "Model uploaded!"
|
150 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
151 |
def check_civit_link(profile: Optional[gr.OAuthProfile], url):
|
152 |
info, _ = process_url(url, download_files=False)
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
element = WebDriverWait(driver, 10).until(
|
163 |
-
EC.presence_of_element_located((By.XPATH, xpath_expression))
|
164 |
-
)
|
165 |
-
|
166 |
-
# Extract the href attribute
|
167 |
-
href = element.get_attribute("href")
|
168 |
|
169 |
-
# Extract the part after 'https://huggingface.co/'
|
170 |
-
extracted_part = href.replace("https://huggingface.co/", "")
|
171 |
-
|
172 |
-
except Exception as e:
|
173 |
-
print("Element not found or error occurred:", e)
|
174 |
-
|
175 |
-
finally:
|
176 |
-
driver.quit()
|
177 |
-
|
178 |
-
return extracted_part == profile.name
|
179 |
-
|
180 |
def swap_fill(profile: Optional[gr.OAuthProfile]):
|
181 |
if profile is None:
|
182 |
return gr.update(visible=True), gr.update(visible=False)
|
@@ -226,11 +238,11 @@ with gr.Blocks(css=css) as demo:
|
|
226 |
)
|
227 |
#is_author = gr.Checkbox(label="Are you the model author?", info="If you are not the author, a disclaimer with information about the author and the CivitAI source will be added", value=False)
|
228 |
instructions = gr.HTML("")
|
229 |
-
submit_button_civit = gr.Button("Upload model to Hugging Face")
|
230 |
output = gr.Textbox(label="Output progress")
|
231 |
|
232 |
demo.load(fn=swap_fill, outputs=[disabled_area, enabled_area])
|
233 |
-
submit_source_civit.change(fn=check_civit_link, inputs=[submit_source_civit], outputs=[instructions])
|
234 |
submit_button_civit.click(fn=upload_civit_to_hf, inputs=[submit_source_civit], outputs=[output])
|
235 |
|
236 |
demo.queue()
|
|
|
6 |
import gradio as gr
|
7 |
import uuid
|
8 |
from typing import Optional
|
9 |
+
import json
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
|
11 |
|
12 |
def get_json_data(url):
|
|
|
141 |
raise gr.Error("something went wrong")
|
142 |
return "Model uploaded!"
|
143 |
|
144 |
+
|
145 |
+
def get_creator(username):
|
146 |
+
url = f"https://civitai.com/api/trpc/user.getCreator?input=%7B%22json%22%3A%7B%22username%22%3A%22{username}%22%2C%22authed%22%3Atrue%7D%7D"
|
147 |
+
headers = {
|
148 |
+
"authority": "civitai.com",
|
149 |
+
"accept": "*/*",
|
150 |
+
"accept-language": "en-BR,en;q=0.9,pt-BR;q=0.8,pt;q=0.7,es-ES;q=0.6,es;q=0.5,de-LI;q=0.4,de;q=0.3,en-GB;q=0.2,en-US;q=0.1,sk;q=0.1",
|
151 |
+
"content-type": "application/json",
|
152 |
+
"cookie": f"{os.environ["COOKIE_INFO"]}",
|
153 |
+
"if-modified-since": "Tue, 22 Aug 2023 07:18:52 GMT",
|
154 |
+
"referer": f"https://civitai.com/user/{username}/models",
|
155 |
+
"sec-ch-ua": "\"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"114\", \"Google Chrome\";v=\"114\"",
|
156 |
+
"sec-ch-ua-mobile": "?0",
|
157 |
+
"sec-ch-ua-platform": "macOS",
|
158 |
+
"sec-fetch-dest": "empty",
|
159 |
+
"sec-fetch-mode": "cors",
|
160 |
+
"sec-fetch-site": "same-origin",
|
161 |
+
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
|
162 |
+
}
|
163 |
+
response = requests.get(url, headers=headers)
|
164 |
+
|
165 |
+
return json.loads(response.text)
|
166 |
+
|
167 |
+
def extract_huggingface_username(username):
|
168 |
+
data = get_creator(username)
|
169 |
+
links = data.get('result', {}).get('data', {}).get('json', {}).get('links', [])
|
170 |
+
|
171 |
+
for link in links:
|
172 |
+
url = link.get('url', '')
|
173 |
+
if url.startswith('https://www.huggingface.co/'):
|
174 |
+
return url.split('/')[-1]
|
175 |
+
|
176 |
+
return None
|
177 |
+
|
178 |
+
|
179 |
+
|
180 |
def check_civit_link(profile: Optional[gr.OAuthProfile], url):
|
181 |
info, _ = process_url(url, download_files=False)
|
182 |
+
hf_username = extract_huggingface_username(info['creator'])
|
183 |
+
if(not hf_username):
|
184 |
+
no_username_text = 'Oops, your CivitAI profile seems to not have information about your Hugging Face account. Please visit <a href="https://civitai.com/user/account">https://civitai.com/user/account</a> and include it there<br><img src="https://i.imgur.com/hCbo9uL.png" />'
|
185 |
+
return no_username_text, gr.update()
|
186 |
+
if(profile.name != hf_username):
|
187 |
+
unmatched_username_text = 'Oops, the Hugging Face account in your CivitAI profile seems to be different than the one your are using here. Please visit <a href="https://civitai.com/user/account">https://civitai.com/user/account</a> and update it there<br><img src="https://i.imgur.com/hCbo9uL.png" />'
|
188 |
+
return unmatched_username_text, gr.update()
|
189 |
+
else:
|
190 |
+
return '', gr.update(interactive=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
191 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
192 |
def swap_fill(profile: Optional[gr.OAuthProfile]):
|
193 |
if profile is None:
|
194 |
return gr.update(visible=True), gr.update(visible=False)
|
|
|
238 |
)
|
239 |
#is_author = gr.Checkbox(label="Are you the model author?", info="If you are not the author, a disclaimer with information about the author and the CivitAI source will be added", value=False)
|
240 |
instructions = gr.HTML("")
|
241 |
+
submit_button_civit = gr.Button("Upload model to Hugging Face", interactive=False)
|
242 |
output = gr.Textbox(label="Output progress")
|
243 |
|
244 |
demo.load(fn=swap_fill, outputs=[disabled_area, enabled_area])
|
245 |
+
submit_source_civit.change(fn=check_civit_link, inputs=[submit_source_civit], outputs=[instructions, submit_button_civit])
|
246 |
submit_button_civit.click(fn=upload_civit_to_hf, inputs=[submit_source_civit], outputs=[output])
|
247 |
|
248 |
demo.queue()
|