|
import gradio as gr |
|
import os |
|
from modelscope.pipelines import pipeline |
|
from modelscope.outputs import OutputKeys |
|
|
|
SECRET_TOKEN = os.getenv('SECRET_TOKEN', 'default_secret') |
|
|
|
pipe = pipeline(task='image-to-video', model='damo/Image-to-Video', model_revision='v1.1.0') |
|
|
|
def infer (image_in, secret_token): |
|
if secret_token != SECRET_TOKEN: |
|
raise gr.Error(f'Invalid secret token. Please fork the original space if you want to use it for yourself.') |
|
|
|
|
|
IMG_PATH = image_in |
|
output_video_path = pipe(IMG_PATH, output_video='output.mp4')[OutputKeys.OUTPUT_VIDEO] |
|
print(output_video_path) |
|
return output_video_path |
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown(""" |
|
<p> |
|
You are currently viewing a micro-service API meant to be used by robots.<br/> |
|
For the human UI, please check out the <a href="https://huggingface.co/spaces/fffiloni/MS-Image2Video">original Space by Sylvain Filoni</a>. |
|
</p> |
|
""") |
|
secret_token = gr.Text(label='Secret', max_lines=1, placeholder='secret') |
|
image_in = gr.Image( |
|
label = "Source Image", |
|
source = "upload", |
|
type = "filepath", |
|
elem_id = "image-in" |
|
) |
|
submit_btn = gr.Button("Submit") |
|
video_out = gr.Video(label = "Video Result", elem_id = "video-out") |
|
submit_btn.click(fn = infer, inputs = [image_in, secret_token], outputs = [video_out], api_name ="generate") |
|
|
|
demo.queue(max_size=6).launch() |