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()