Spaces:
Running
Running
import streamlit as st | |
from huggingface_hub import HfApi | |
import os | |
import json | |
from datetime import datetime | |
# Initialize the Hugging Face API with the token | |
api = HfApi(token=os.getenv("HF_API_TOKEN")) | |
def generate_metadata(video_name, title, description, uploader, file_location): | |
return { | |
"fileName": video_name, | |
"title": title, | |
"description": description, | |
"uploader": uploader, | |
"uploadTimestamp": datetime.now().isoformat(), | |
"fileLocation": file_location, | |
"views": 0, | |
"likes": 0 | |
} | |
def upload_video_to_hf(video_file, video_name, title, description, uploader): | |
# Save the video temporarily to a file | |
video_path = os.path.join("temp", video_name) | |
json_name = f"{os.path.splitext(video_name)[0]}-index.json" | |
json_path = os.path.join("temp", json_name) | |
# Ensure the temp directory exists | |
if not os.path.exists("temp"): | |
os.makedirs("temp") | |
# Write the video content to a file | |
with open(video_path, "wb") as f: | |
f.write(video_file.read()) | |
# Upload the video to Hugging Face | |
file_location = f"videos/{video_name}" | |
api.upload_file( | |
path_or_fileobj=video_path, | |
path_in_repo=file_location, | |
repo_id="vericudebuget/ok4231", | |
repo_type="space", | |
) | |
# Generate and upload metadata JSON | |
metadata = generate_metadata(video_name, title, description, uploader, file_location) | |
with open(json_path, "w") as f: | |
json.dump(metadata, f, indent=2) | |
api.upload_file( | |
path_or_fileobj=json_path, | |
path_in_repo=f"metadata/{json_name}", | |
repo_id="vericudebuget/ok4231", | |
repo_type="space", | |
) | |
return metadata | |
# Streamlit app interface | |
st.title("Upload your video") | |
st.markdown("---") | |
# File uploader for video input | |
uploaded_video = st.file_uploader("Choose video file", type=["mp4", "avi", "mov"]) | |
if uploaded_video: | |
# Show the video details form | |
with st.form("video_details"): | |
st.write("Video Details") | |
title = st.text_input("Title", placeholder="Enter video title") | |
description = st.text_area("Description", placeholder="Enter video description") | |
uploader = st.text_input("Uploader Name", placeholder="Enter your name") | |
# Upload button within the form | |
submit_button = st.form_submit_button("Upload Video") | |
if submit_button: | |
if not title or not uploader: | |
st.error("Please fill in the title and uploader name.") | |
else: | |
with st.spinner("Uploading video and generating metadata..."): | |
metadata = upload_video_to_hf( | |
uploaded_video, | |
uploaded_video.name, | |
title, | |
description, | |
uploader | |
) | |
st.success("Upload completed successfully!") | |
st.json(metadata) | |
else: | |
st.info("Please upload a video file to begin.") |