Spaces:
Sleeping
Sleeping
Download app.py from vjchamp/PromptStory: direct link, hf CLI and curl.
- Browser
- Download file 7.12 kB
-
https://huggingface.co/spaces/vjchamp/PromptStory/resolve/main/app.py
- Command line
-
hf download hf://spaces/vjchamp/PromptStory/app.py
-
curl -L -o app.py https://huggingface.co/spaces/vjchamp/PromptStory/resolve/main/app.py
7.12 kB
| import random | |
| import gradio as gr | |
| def generate_story(character, setting, mood, genre, length): | |
| # Normalize genre input | |
| genre = genre.strip().lower() | |
| genre = genre.replace(" d", "-") | |
| genre = genre.replace(".", "") | |
| # Genre aliases | |
| genre_aliases = { | |
| "romantic": "romance", | |
| "rom-com": "romance", | |
| "scifi": "sci-fi", | |
| "sci fi": "sci-fi", | |
| "science-fiction": "sci-fi", | |
| "mistery": "mystery", | |
| "fantacy": "fantasy", | |
| } | |
| genre = genre_aliases.get(genre, genre) | |
| # Banks | |
| sensory_details = [ | |
| "the air carried a faint smell of rain", | |
| "soft footsteps echoed nearby", | |
| "a warm breeze brushed past", | |
| "shadows shifted quietly", | |
| "the light flickered in a strange rhythm", | |
| "an unfamiliar stillness filled the space", | |
| "distant voices blended into the wind" | |
| ] | |
| emotional_beats = [ | |
| "a strange pull tugged at their chest", | |
| "their heartbeat stuttered for a moment", | |
| "a quiet tension wrapped around them", | |
| "their breath caught in their throat", | |
| "something inside them softened unexpectedly", | |
| "a spark of curiosity lit up their expression" | |
| ] | |
| dialogue_starters = [ | |
| "\"I didn’t expect to see you here,\" someone murmured.", | |
| "\"Are you lost?\" a voice asked from behind.", | |
| "\"Strange day, isn’t it?\" a stranger said softly.", | |
| "\"You felt it too, didn’t you?\" came the whisper." | |
| ] | |
| # Genre banks | |
| genre_hooks = { | |
| "romance": [ | |
| f"{character} hadn’t meant to linger in {setting}, but something in the {mood} atmosphere slowed their steps.", | |
| f"There was a softness in {setting} that {character} couldn’t explain—not today, not with their heart feeling so {mood}." | |
| ], | |
| "horror": [ | |
| f"The silence in {setting} felt wrong, the kind that presses against your skin until you shiver.", | |
| f"{character} felt a {mood} heaviness in the air—thick, watching, waiting." | |
| ], | |
| "mystery": [ | |
| f"The day began normally in {setting}, until {character} noticed something that didn’t belong.", | |
| f"There was a puzzle hidden in the {mood} quiet of {setting}, and {character} could sense it shifting." | |
| ], | |
| "fantasy": [ | |
| f"In {setting}, the air shimmered faintly—as if the world remembered a secret.", | |
| f"{character} sensed ancient {mood} magic waking beneath the ground." | |
| ], | |
| "sci-fi": [ | |
| f"The neon lights of {setting} flickered, glitching like corrupted code.", | |
| f"{character} felt a {mood} pulse ripple through the tech-laced air." | |
| ], | |
| "adventure": [ | |
| f"{setting} stretched before {character}, alive with {mood} possibility.", | |
| f"The path ahead glittered with dust and sunlight, calling {character} forward." | |
| ], | |
| } | |
| genre_middles = { | |
| "romance": [ | |
| f"They noticed someone watching them with a smile that warmed the space between them.", | |
| f"A gentle laugh reached {character}, pulling their attention toward a stranger whose presence softened everything." | |
| ], | |
| "horror": [ | |
| f"A soft scraping noise followed them—too close, too deliberate.", | |
| f"Shadows seemed to breathe, shifting just beyond their line of sight." | |
| ], | |
| "mystery": [ | |
| f"A detail others ignored caught {character}'s eye—small, but wrong.", | |
| f"Someone slipped an object into their hand before vanishing into the crowd." | |
| ], | |
| "fantasy": [ | |
| f"A creature of light emerged, watching {character} with knowing eyes.", | |
| f"A map etched in floating runes appeared before them." | |
| ], | |
| "sci-fi": [ | |
| f"A rogue signal pinged through their neural implant.", | |
| f"The ground trembled as a holographic distortion whispered data into their mind." | |
| ], | |
| "adventure": [ | |
| f"A hidden trail revealed itself after a gust of wind swept the dust aside.", | |
| f"A stranger handed them a weathered map, eyes gleaming with challenge." | |
| ], | |
| } | |
| genre_endings = { | |
| "romance": [ | |
| "The moment settled softly between them—warm, promising, beautifully uncertain.", | |
| "Something new began blooming quietly in their heart, a feeling too real to ignore." | |
| ], | |
| "horror": [ | |
| "The darkness didn’t answer, but it breathed—waiting for the next step.", | |
| "The unease lingered long after the echoes faded, refusing to let go." | |
| ], | |
| "mystery": [ | |
| "The final clue sat heavy in their palm, raising more questions than answers.", | |
| "A quiet realization crept in: the real mystery was only beginning." | |
| ], | |
| "fantasy": [ | |
| "Magic pulsed around them, whispering that their destiny had only just awakened.", | |
| "The world shifted slightly, as if bowing to the path they were now bound to follow." | |
| ], | |
| "sci-fi": [ | |
| "The system hummed with new data, hinting at a future they had yet to uncover.", | |
| "Reality flickered once—an invitation to step beyond what they knew." | |
| ], | |
| "adventure": [ | |
| "With a steady breath, they stepped forward, ready for whatever came next.", | |
| "The horizon stretched open, full of promise, full of the stories waiting to be lived." | |
| ], | |
| } | |
| if genre not in genre_hooks: | |
| genre = "mystery" | |
| hook = random.choice(genre_hooks[genre]) | |
| middle = random.choice(genre_middles[genre]) | |
| ending = random.choice(genre_endings[genre]) | |
| sensory = random.choice(sensory_details) | |
| emotion = random.choice(emotional_beats) | |
| dialogue = random.choice(dialogue_starters) | |
| if length == "short": | |
| story = f"{hook} {sensory}. {middle} {emotion}. {ending}" | |
| elif length == "medium": | |
| story = ( | |
| f"{hook} {sensory}. " | |
| f"{middle} {dialogue} " | |
| f"{emotion}. " | |
| f"{ending}" | |
| ) | |
| else: # long | |
| scene1 = f"{hook} {sensory}. {emotion}." | |
| scene2 = f"{middle} {dialogue}" | |
| scene3 = f"{ending}" | |
| story = f"{scene1}\n\n{scene2}\n\n{scene3}" | |
| return story | |
| # -------------------------- | |
| # GRADIO APP | |
| # -------------------------- | |
| def gradio_story(character, setting, mood, genre, length): | |
| return generate_story(character, setting, mood, genre, length) | |
| ui = gr.Interface( | |
| fn=gradio_story, | |
| inputs=[ | |
| gr.Textbox(label="Character Name"), | |
| gr.Textbox(label="Setting"), | |
| gr.Textbox(label="Mood"), | |
| gr.Radio(["romance", "fantasy", "mystery", "adventure", "sci-fi", "horror"], label="Genre"), | |
| gr.Radio(["short", "medium", "long"], label="Story Length") | |
| ], | |
| outputs=gr.Textbox(label="Generated Story", lines=20), | |
| title="AI Story Generator", | |
| description="Generate stories with emotions, sensory detail, and genre styling.", | |
| ) | |
| ui.launch() | |