Sugamdeol's picture
Update app.py
0483ea7 verified
raw
history blame
2.24 kB
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)