Spaces:
Running
Running
File size: 3,519 Bytes
1e350c6 e986028 b7eb9c8 e986028 1e350c6 b7eb9c8 f9a94e1 673c700 e986028 e8b2b98 e986028 1e350c6 e986028 f9a94e1 e986028 1e350c6 e986028 1e350c6 e986028 dc76dee e986028 1e350c6 e986028 1e350c6 e986028 1e350c6 e986028 0f09deb e986028 f9a94e1 e986028 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
import os
import streamlit as st
import torch
try:
from diffusers import CogVideoXImageToVideoPipeline
pipeline_available = True
except ImportError as e:
pipeline_available = False
st.error("Failed to import CogVideoXImageToVideoPipeline.")
st.write(f"Debug info: {e}")
# Streamlit interface
st.title("Image to Video with Hugging Face")
st.write("Upload an image and provide a prompt to generate a video.")
# Check if the pipeline is available before proceeding
if not pipeline_available:
st.error("The required pipeline is unavailable. Please ensure you have the correct version of the diffusers library.")
else:
# File uploader for the input image
uploaded_file = st.file_uploader("Upload an image (JPG or PNG):", type=["jpg", "jpeg", "png"])
prompt = st.text_input("Enter your prompt:", "A little girl is riding a bicycle at high speed. Focused, detailed, realistic.")
# Cache migration step
st.write("Migrating the cache for model files...")
try:
from transformers.utils import move_cache
move_cache()
st.write("Cache migration completed successfully.")
except Exception as e:
st.error(f"Cache migration failed: {e}")
st.write("Proceeding without cache migration...")
if uploaded_file and prompt:
try:
st.write(f"Uploaded file: {uploaded_file.name}")
st.write(f"Prompt: {prompt}")
# Save uploaded file
st.write("Saving uploaded image...")
with open("uploaded_image.jpg", "wb") as f:
f.write(uploaded_file.read())
st.write("Uploaded image saved successfully.")
# Load the image
from diffusers.utils import load_image
st.write("Loading image...")
image = load_image("uploaded_image.jpg")
st.write("Image loaded successfully.")
# Initialize the pipeline
st.write("Initializing the pipeline...")
pipe = CogVideoXImageToVideoPipeline.from_pretrained(
"THUDM/CogVideoX1.5-5B-I2V",
torch_dtype=torch.bfloat16,
cache_dir="./huggingface_cache",
force_download=True # Ensure fresh download
)
st.write("Pipeline initialized successfully.")
# Enable optimizations
pipe.enable_sequential_cpu_offload()
pipe.vae.enable_tiling()
pipe.vae.enable_slicing()
# Generate video
st.write("Generating video... This may take a while.")
video_frames = pipe(
prompt=prompt,
image=image,
num_videos_per_prompt=1,
num_inference_steps=50,
num_frames=81,
guidance_scale=6,
generator=torch.Generator(device="cuda").manual_seed(42),
).frames[0]
st.write("Video generated successfully.")
# Export video
st.write("Exporting video...")
from diffusers.utils import export_to_video
video_path = "output.mp4"
export_to_video(video_frames, video_path, fps=8)
st.write("Video exported successfully.")
# Display video
st.video(video_path)
except Exception as e:
st.error(f"An error occurred: {e}")
st.write(f"Debug info: {e}")
else:
st.write("Please upload an image and provide a prompt to get started.")
|