File size: 2,130 Bytes
82e33f9
a546c80
 
 
 
82e33f9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a546c80
 
82e33f9
 
 
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

import gradio as gr
from transformers import pipeline
from gtts import gTTS
from io import BytesIO
from PIL import Image, ImageDraw, ImageFont
from IPython.display import Audio

# Create a text generation pipeline with GPT-2
story_generator = pipeline("text-generation", model="EleutherAI/gpt-neo-1.3B")

# Set the context for the storyteller
messages = [{"role": "system", "content": "You are a magical storyteller, creating wonderful tales for kids. Make them imaginative and full of joy!"}]

# Define the Storyteller function
def StorytellerGPT(tell_story):
    messages.append({"role": "user", "content": tell_story})

    # Generate story using Hugging Face's GPT-2
    story_reply = story_generator(tell_story, max_length=100, num_return_sequences=1)[0]['generated_text']

    messages.append({"role": "assistant", "content": story_reply})

    # Convert text to speech
    tts = gTTS(text=story_reply, lang='en', slow=False)
    audio_io = BytesIO()
    tts.save(audio_io)
    audio_io.seek(0)

    # Convert text to image
    image = generate_dynamic_image(story_reply)
    
    return story_reply, Audio(data=audio_io.read(), autoplay=True), image

# Function to generate a dynamic image based on the story text
def generate_dynamic_image(story_text):
    # Create a blank image
    image = Image.new("RGB", (500, 300), (255, 255, 255))
    draw = ImageDraw.Draw(image)
    
    # Use a truetype font file, replace "arial.ttf" with the path to your font file
    font = ImageFont.truetype("arial.ttf", 20)
    
    # Write the story text on the image
    lines = [story_text[i:i+40] for i in range(0, len(story_text), 40)]
    y_position = 10
    for line in lines:
        draw.text((10, y_position), line, font=font, fill=(0, 0, 0))
        y_position += 30

    return image

# Create the Gradio Interface
demo = gr.Interface(
    fn=StorytellerGPT,
    inputs="text",
    outputs=["text", "audio", "image"],
    title="πŸ“– Storytelling Magic",
    description="A magical storyteller app for kids! Type a sentence, and let the app create an enchanting story for you."
)

# Launch the Gradio Interface
demo.launch()