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}
  • {file}
' #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}
    + {vid_file}
' 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"]}
{json_out["description"]}
' #print (r.json()) if vid_file.endswith(".mp4"): vid_list.append(json_out["label"]) sync_list.append(vid_file) # print(vid_file) label_html=f'''{label_html} ''' #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} ''' 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'''
Your Interactive Twitter Card Embed Link is:
{t_link}

''') 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)