Spaces:
Runtime error
Runtime error
import gradio as gr | |
import requests | |
from PIL import Image, ImageDraw, ImageFont | |
import textwrap | |
import os | |
# Function to download image based on prompt | |
def download_image(prompt, index): | |
url = f"https://pollinations.ai/p/{prompt}" | |
response = requests.get(url) | |
image_filename = f'generated_image_{index}.jpg' | |
with open(image_filename, 'wb') as file: | |
file.write(response.content) | |
return image_filename | |
# Function to add text to image | |
def add_text_to_image(image_path, text): | |
img = Image.open(image_path) | |
draw = ImageDraw.Draw(img) | |
font = ImageFont.load_default() # Load default font | |
# Wrap text for multiple lines | |
lines = textwrap.fill(text, width=40) | |
draw.text((10, 10), lines, font=font, fill="white") | |
img_with_text = f'text_added_{image_path}' | |
img.save(img_with_text) | |
return img_with_text | |
# Function to visualize each line of the story | |
def visualize_story_lines(story): | |
lines = story.split('\n') # Split story into lines | |
images_with_text = [] | |
for idx, line in enumerate(lines): | |
prompt = line.replace(" ", "_") # Adjust prompt formatting | |
img_file = download_image(prompt, idx) | |
img_with_text = add_text_to_image(img_file, line) # Add line text to image | |
images_with_text.append(img_with_text) | |
return images_with_text # Return list of images with text | |
# Gradio interface with state management | |
def visualize_story_images(story, img_index): | |
images = visualize_story_lines(story) | |
if 0 <= img_index < len(images): | |
return images[img_index] # Return the image based on index | |
return None | |
# Create a function for navigation | |
def navigate_story(story, img_index): | |
images = visualize_story_lines(story) | |
if img_index < len(images): | |
return images[img_index] | |
return images[-1] # Return the last image if index exceeds | |
# Gradio interface setup | |
story_input = gr.inputs.Textbox(lines=10, placeholder="Enter your story here...") | |
image_output = gr.outputs.Image(type="pil") | |
iface = gr.Interface( | |
fn=visualize_story_images, | |
inputs=[story_input, gr.inputs.Slider(minimum=0, maximum=9, step=1, label="Image Index")], | |
outputs=image_output, | |
live=True | |
) | |
iface.launch(share=True) |