import gradio as gr import requests import io from PIL import Image as img from moviepy.editor import ImageSequenceClip import numpy as np google_html = ''' ''' # Setting up the API URL and headers API_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-dev" def query(payload, api_key): headers = {"Authorization": f"Bearer {api_key}"} response = requests.post(API_URL, headers=headers, json=payload) return response.content def generate_video(video_description, api_key): # Setting up the list to store images image_list = [] # Fetching the images based on the description image_bytes = query({ "inputs": "Create 9 sequential images with 1:1 aspect ratio for every one of images of a " + video_description, }, api_key) # Opening the image using PIL image = img.open(io.BytesIO(image_bytes)) # List of coordinates to crop the image into 9 parts coordinates = [ (0, 340, 0, 340), (340, 680, 0, 340), (680, 1020, 0, 340), (0, 340, 340, 680), (340, 680, 340, 680), (680, 1020, 340, 680), (0, 340, 680, 1020), (340, 680, 680, 1020), (680, 1020, 680, 1020), ] # Cropping the parts and converting them to numpy arrays and adding them to image_list for i, (x1, x2, y1, y2) in enumerate(coordinates): cropped_image = image.crop((x1, y1, x2, y2)) image_array = np.array(cropped_image) # Converting the image to a numpy array image_list.append(image_array) # Repeating the images to get more frames for the video image_list_extended = image_list * 10 # Repeating 10 times to get a longer video # Creating the video from the list using moviepy clip = ImageSequenceClip(image_list_extended, fps=2) # Saving the video to a file output_path = "/tmp/output_video.mp4" clip.write_videofile(output_path, codec="libx264") return output_path def main(video_description, api_key): if not api_key: return "Please Enter your Hugging Face API key." # Creating the video based on the input description video_path = generate_video(video_description, api_key) # Returning the video download link to the user return "The video has been created, you can download it now:", gr.File(video_path) # Gradio interface with gr.Interface(fn=main, inputs=[gr.HTML(google_html),gr.Textbox(label="Enter video description"), gr.Textbox(label="Enter your Hugging Face API key")], outputs=[gr.Textbox(), gr.File()]) as demo: demo.launch()