bethecloud's picture
Update app.py
06945c0
raw
history blame
2.27 kB
import os
import gradio as gr
from modelscope.pipelines import pipeline
from modelscope.outputs import OutputKeys
import requests
import tempfile
import boto3
from botocore.exceptions import NoCredentialsError
# Hardcoded S3 keys
s3_access_key = "juj22qxqxql7u2pl6nomgxu3ip7a"
s3_secret_key = "j3uwidtozhboy5vczhymhzkkjsaumznnqlzck5zjs5qxgsung4ukk"
s3_endpoint = "https://gateway.storjshare.io"
# Initialize Storj with boto3
s3 = boto3.client(
"s3",
endpoint_url=s3_endpoint,
aws_access_key_id=s3_access_key,
aws_secret_access_key=s3_secret_key,
)
p = pipeline("text-to-video-synthesis", "damo/text-to-video-synthesis")
async def generate_video(text_input: str, duration: int) -> (str, str):
test_text = {'text': text_input, 'duration': duration}
output_video_path = p(test_text,)[OutputKeys.OUTPUT_VIDEO]
# Upload to Storj
with open(output_video_path, "rb") as f:
video_key = os.path.basename(output_video_path)
s3.upload_fileobj(f, "huggingface-demo", video_key)
# Generate signed URL for uploaded video
try:
storj_video_url = s3.generate_presigned_url(
"get_object",
Params={"Bucket": "huggingface-demo", "Key": video_key},
ExpiresIn=3600,
)
except NoCredentialsError:
print("Credentials not available")
return None
# Download the video from Storj to a temporary file
response = requests.get(storj_video_url, stream=True)
response.raise_for_status()
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as temp_file:
for chunk in response.iter_content(chunk_size=8192):
temp_file.write(chunk)
local_video_path = temp_file.name
return local_video_path, storj_video_url
storj_theme = gr.Theme.from_hub("bethecloud/storj_theme")
iface = gr.Interface(
fn=generate_video,
inputs=[
gr.inputs.Textbox(lines=3, label="Input text"),
gr.inputs.Slider(minimum=1, maximum=60, step=1, default=5, label="Duration (seconds)")
],
outputs=[
gr.outputs.Video(label="Generated Video"),
gr.outputs.Textbox(label="Storj Video URL")
],
title="Text to Video to Storj",
theme=storj_theme
)
iface.launch(share=True, debug=True)