Omnibus's picture
Update player.py
05f20f7
raw history blame
No virus
7.56 kB
import gradio as gr
from huggingface_hub import HfApi, list_files_info, get_full_repo_name
import requests
import json
import os
from PIL import Image
import urllib.request
import uuid
uid=uuid.uuid4()
token = ""
source_dataset = "jbilcke-hf/ai-tube-index"
api = HfApi(token=token)
token_self = os.environ['HF_TOKEN']
def find_dataset(author=""):
s_ist = (api.list_datasets(author=author,search="ai-tube"))
#print(api.whoami())
channels=[]
videos=[]
for space in s_ist:
try:
channels.append(space.id)
except Exception:
pass
return (gr.Dropdown(label="Channels", choices=[s for s in channels],interactive=True))
def load_vid(channel):
out_html=""
label_html=""
vid_list=[]
sync_list=[]
try:
file_box = [info.path for info in list_files_info(f'{channel}', repo_type="dataset")]
ai_tube_box = [info.path for info in list_files_info(f'{source_dataset}', repo_type="dataset")]
for file in file_box:
if file.startswith("prompt_"):
prompt_slug = file.split("prompt_",1)[1].split(".",1)[0]
out_html=f'{out_html}<pre> • {file}</pre>'
#print(prompt_slug)
for vid_file in ai_tube_box:
try:
vid_slug=vid_file.split("videos/",1)[1].split(".",1)[0]
#print(vid_slug)
try:
if vid_slug == prompt_slug:
out_html=f'{out_html}<pre> + {vid_file}</pre>'
if vid_file.endswith(".json"):
r = requests.get(f'https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/raw/main/videos/{vid_slug}.json')
#r = requests.get(f'https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/blob/main/videos/00b4bcda-7b4a-40f8-9833-e490425a7b91.mp4')
json_out=r.json()
label_html=f'{label_html}{json_out["label"]}<br>{json_out["description"]}<br>'
#print (r.json())
if vid_file.endswith(".mp4"):
vid_list.append(json_out["label"])
sync_list.append(vid_file)
#<source src="https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/{vid_file}" type="video/mp4">
print(vid_file)
label_html=f'''{label_html}
<video src="https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/{vid_file}" controls>
</video>'''
#uid = uuid.uuid4()
#file = open(f'{name}/{f_name}','wb')
#file.write(r.content)
except Exception as e:
print (f'error:: {e}')
pass
except Exception:
pass
except Exception as e:
print(e)
return(out_html,gr.Dropdown(label="Videos",type="index", choices=[s for s in vid_list],interactive=True),sync_list)
def show_vid(vid_file,list_hid):
print(vid_file)
print(list_hid)
vid_list=[]
for i,ea in enumerate(list_hid):
vid_list.append(ea)
label_html=""
#vid_slug=vid_file.split("videos/",1)[1].split(".",1)[0]
label_html=f'''{label_html}
<video src="https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/{vid_list[int(vid_file)]}" controls>
</video>'''
return label_html
##############################################
#def build_space(t_space,t_title,t_description=None,t_name=None,t_redirect=None,t_image=None,t_image_url=None,token=None):
def build_space(index_sel, vid_file, t_name=None, token=None):
if token == None or token == "":
token=token_self
vid_src = vid_file[int(index_sel)]
print(vid_src)
vid_slug=vid_src.split("videos/",1)[1].split(".",1)[0]
print(vid_slug)
#json_in = f'https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/blob/main/videos/{vid_slug}.json'
video_in = f'https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/{vid_slug}.mp4'
thumb_in = f'https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/{vid_slug}.webp'
r = requests.get(f'https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/raw/main/videos/{vid_slug}.json')
json_out=r.json()
t_name="ai-tube-test1"
t_title = json_out["label"]
t_description = json_out["description"]
t_image = json_out["thumbnailUrl"]
f_name = json_out["id"]
if t_description == None or t_description == "":
t_description = f'Embedded App'
#if t_redirect == None or t_redirect =="":
t_redirect = "https://jbilcke-hf-ai-tube.hf.space/"
#if t_name == None or t_name =="":
#print (t_space)
#t_name = t_space.split("//",1)[1]
#print (t_name)
#t_name = t_name.strip(".hf.space")
#print (f't_name::{t_name}')
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)
try:
repo_url = api.create_repo(
repo_id=model_id,
repo_type="space",
space_sdk="static",
private=False,
exist_ok=True,
)
except Exception as e:
return gr.HTML(f"""{str(e)}""")
try:
api_url = f'https://huggingface.co/api/spaces/{model_id}'
#t_iframe = t_space
t_link = f"https://{repo_name.replace('/','-').replace('_','-')}.static.hf.space/{f_name}.html"
########## norm
with open("template_front.html", "r") as f:
app = f.read()
app = app.replace("$space", video_in)
app = app.replace("$title", t_title)
app = app.replace("$description", t_description)
app = app.replace("$image", thumb_in)
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=f"{f_name}.html",
repo_id=repo_name,
token=token,
repo_type="space",
)
os.remove("ai.html")
return gr.HTML(f'''<center>Your Interactive Twitter Card Embed Link is:<br><a href="{t_link}" target="_blank">{t_link}</a><br>
<center><br>''')
except Exception as e:
return gr.HTML(f"""{str(e)}""")
#########################################
with gr.Blocks() as app:
with gr.Row():
channel = gr.Dropdown()
videos = gr.Dropdown()
button = gr.Button("Build")
output = gr.HTML()
label_output = gr.HTML()
links_output = gr.HTML()
list_hid=gr.JSON(visible=False)
app.load(find_dataset,None,channel)
channel.change(load_vid,channel,[output,videos,list_hid])
videos.change(show_vid,[videos,list_hid],[label_output])
button.click(build_space,[videos,list_hid],links_output)
app.launch(show_api=False,share=False)