Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import openai | |
| import requests | |
| from PIL import Image | |
| from io import BytesIO | |
| import textwrap | |
| def create_dalle_prompts(story_title, paragraph): | |
| return f"Illustration of '{story_title}' - {textwrap.shorten(paragraph, width=50)}" | |
| def generate_image(api_key, prompt): | |
| openai.api_key = api_key | |
| response = openai.Image.create( | |
| prompt=prompt, | |
| n=1, | |
| size="1024x1024" | |
| ) | |
| image_url = response['data'][0]['url'] | |
| response = requests.get(image_url) | |
| image = Image.open(BytesIO(response.content)) | |
| return image | |
| def generate_story_and_images(name, story_title, story_type, api_key): | |
| openai.api_key = api_key | |
| if story_type == "for children": | |
| prompt_content = f"In a mystical kingdom, a brave adventurer named {name} discovers a magical object. Narrate their whimsical and heartwarming tale based on the title: '{story_title}'." | |
| else: | |
| prompt_content = f"In an odd city, {name} stumbles upon a series of bizarre events linked to the title '{story_title}'. Describe their hilariously absurd adventure." | |
| messages = [ | |
| {"role": "system", "content": "You are a magical storyteller."}, | |
| {"role": "user", "content": prompt_content} | |
| ] | |
| response = openai.ChatCompletion.create( | |
| model="gpt-3.5-turbo", | |
| messages=messages | |
| ) | |
| story = response.choices[0].message['content'] | |
| # Split story into four paragraphs | |
| paragraphs = story.split('\n')[:4] | |
| # Create DALLE prompts for each paragraph | |
| dalle_prompts = [create_dalle_prompts(story_title, para) for para in paragraphs] | |
| images = [generate_image(api_key, prompt) for prompt in dalle_prompts] | |
| return story, dalle_prompts, *images | |
| iface = gr.Interface( | |
| fn=generate_story_and_images, | |
| inputs=[ | |
| gr.components.Textbox(label="Enter name (Example: Ella)"), | |
| gr.components.Textbox(label="Enter story title (Example: The Enchanted Locket)"), | |
| gr.components.Radio(["for children", "absurd"], label="Story Type"), | |
| gr.components.Textbox(label="OpenAI API Key", type="password") | |
| ], | |
| outputs=[ | |
| "text", | |
| "text", | |
| gr.components.Image(label="Image 1", type="pil"), | |
| gr.components.Image(label="Image 2", type="pil"), | |
| gr.components.Image(label="Image 3", type="pil"), | |
| gr.components.Image(label="Image 4", type="pil") | |
| ], | |
| live=True | |
| ) | |
| iface.launch() | |