import os
import sys
import cv2
import uuid
from PIL import Image
import gradio as gr
from pathlib import Path
from huggingface_hub import (create_repo,get_full_repo_name,upload_file,CommitOperationAdd,HfApi)
token_self = os.environ['HF_TOKEN']
def build_space(t_name,t_space,t_title,t_description,t_redirect,t_image=None,t_image_url=None,token=None):
uid = uuid.uuid4()
model_id=t_name
#model_id="omnibus/fff"
if token==None or token=="":
token = token_self
else:
token = token
pass
api = HfApi(token=token)
repo_name = get_full_repo_name(model_id=model_id, token=token)
if t_redirect==None or t_redirect=="":
t_redirect=t_space
else:
t_redirect=t_redirect
pass
try:
print(t_space.rsplit('.hf', 1)[-1])
if t_space.rsplit('.hf', 1)[-1] == ".space":
repo_url = api.create_repo(
repo_id=model_id,
repo_type="space",
space_sdk="static",
private=False,
)
print(f"""Space Built at {repo_name}""")
else:
model_id=None
repo_name=None
t_space=None
t_image=None
t_image_url=None
api=None
pass
return gr.HTML.update(f"""Invalid Direct URL: must be a Huggingface Space
Be sure URL is in lowercase""")
except Exception as e:
return gr.HTML.update(f"""{str(e)}""")
if t_image_url != None and t_image_url != "" and t_image==None:
t_image=t_image_url
print(f"Using image URL {t_image}")
pass
elif t_image != None:
img1 = Image.open(t_image)
img1.thumbnail((500,500), Image.Resampling.LANCZOS)
img1.save(f'tmpim-{uid}.png')
output_pro=cv2.imread(f'tmpim-{uid}.png')
cv2.imwrite(f"./img-{uid}.png",output_pro)
try:
api.upload_file(
path_or_fileobj=f"./img-{uid}.png",
path_in_repo="card_im.png",
repo_id=repo_name,
token=token,
repo_type="space",
)
t_image = f"https://{repo_name.replace('/','-').replace('_','-')}.hf.space/card_im.png"
os.remove(f"./img-{uid}.png")
print(f"Image Uploaded to: {t_image}")
except Exception as e:
return gr.HTML.update(f"""{str(e)}""")
pass
else:
print("Default Image")
t_image="https://huggingface.co/spaces/portal/bin/resolve/main/ai_demo_card.png"
pass
try:
api_url = f'https://huggingface.co/api/spaces/{model_id}'
t_iframe = t_space
t_link = f"https://{repo_name.replace('/','-').replace('_','-')}.hf.space/ai.html"
t_space = f"https://{repo_name.replace('/','-').replace('_','-')}.hf.space/back.html"
with open("template/ai.html", "r") as f:
app = f.read()
app = app.replace("$space", t_space)
app = app.replace("$title", t_title)
app = app.replace("$description", t_description)
app = app.replace("$image", t_image)
app = app.replace("$redirect", t_redirect)
with open("ai.html", "w") as f:
f.write(app)
api.upload_file(
path_or_fileobj="ai.html",
path_in_repo="ai.html",
repo_id=repo_name,
token=token,
repo_type="space",
)
os.remove("ai.html")
with open("template/front.html", "r") as f:
app = f.read()
app = app.replace("$iframe", t_iframe)
with open("front.html", "w") as f:
f.write(app)
api.upload_file(
path_or_fileobj="front.html",
path_in_repo="index.html",
repo_id=repo_name,
token=token,
repo_type="space",
)
os.remove("front.html")
with open("template/back.html", "r") as f:
app = f.read()
app = app.replace("$iframe", t_iframe)
# 3. save the new app.py file
with open("back.html", "w") as f:
f.write(app)
api.upload_file(
path_or_fileobj="back.html",
path_in_repo="back.html",
repo_id=repo_name,
token=token,
repo_type="space",
)
os.remove("back.html")
return gr.HTML.update(f'''