AutoStoryGen refuses to let the blank page win

It turns missing story inputs into a first pass, then keeps the draft moving.

8 min read · elder-plinius/AutoStoryGen

A writer's desk where an empty story brief on the left turns into a stack of outline cards and a half-written chapter on the right. The image explains the project's central idea: missing inputs are not treated as failure, but as material the system can fill in and route forward.
AutoStoryGen does not stop at incomplete inputs. It turns them into the start of a working draft.

Three weeks ago, I did not plan to build any tools especially in offensive security scope. In one day, I was just… frustrated. Sitting in my room at 2 AM, running the same manual prompts over and over

Onurcan Genç, Author, PromptShot / Elder Plinus Engine · OSINT Team blog
Key Takeaways

Most writing tools punish hesitation. AutoStoryGen does the opposite. Leave a field blank, and the app asks the model to make an educated guess rather than forcing you to stop and think harder.

That is a small UX decision, but it changes the product. The app stops behaving like a form and starts behaving like an editorial assistant.

WSJ-style hedcut portrait of elder-plinius based on a verified GitHub avatar reference, shown against a sparse editor's desk background. The portrait connects the tool to its maker and frames the project as a personal experiment rather than a polished platform.

How the app fills the blanks

The core of the repo lives in `app.py`. That file handles state, validation, prompt construction, and the decision to ask the model for a missing variable instead of failing fast.

if ":" in variable:
    key, value = variable.split(":", 1)

The architecture is simple on purpose. The interesting behavior happens at the validation step, where missing inputs are turned into usable creative context.

That little parser matters. The code appears to split the model's response on the first colon and use the pieces to update fields, which is fast, readable, and brittle at the same time. If the response format shifts, the whole handoff can wobble.

The more interesting idea is that AutoStoryGen treats genre and community as useful metadata. A subreddit, a community, or a niche label is not just a tag. It becomes a shortcut for tone, pacing, and audience expectations.

Why Flash is the right engine

The main model wrapper uses Gemini 1.5 Flash, and that choice makes sense. This kind of tool lives or dies on iteration speed. Users are not waiting for one monumental response. They are asking for a few tight passes that can keep the story moving.

I was scrolling through a colleague's pull request -- about 40 commits spanning two weeks of work -- and I found myself genuinely impressed. Not just by the code, but by the narrative arc hiding inside those commit messages.

bbtc3453, Developer of GitStory · DEV Community

The comparison is the story

ProjectInputOutputWhat it does differently
AutoStoryGenA rough premise and partial story metadataOutline, character setup, and chapter draftFills missing context before drafting
GitStoryGitHub commit historyNarrative summaries and story stylesTurns software change logs into prose
Project AutopilotTechnical articles and markdown filesSocial content and workflow outputRuns as an event-driven automation layer
AutoResearchClawA research topicPaper-oriented research workflowPushes toward a full research pipeline

AutoStoryGen sits in a useful middle ground. It is more editorial than a commit-to-story tool, and less ambitious than a full research agent. The payoff is focus. It solves one messy phase of creative work, then gets out of the way.

What breaks first

A close-up of a single input line being pressed through a narrow mechanical slot, with a tiny mismatch causing the line to bend. The image explains the fragility of string-based parsing and why a small format change can disrupt the handoff between model output and app state.
The prototype is quick to read and quick to break. That trade-off is visible in the parsing layer.

There is no unit-test safety net in the codebase, and there is no heavy build system either. That is not a flaw so much as a signal. This is a script-first prototype built to prove an interaction pattern.

The bigger lesson is that the prompt is the product surface here. AutoStoryGen shows how far a thin Streamlit shell can go when the orchestration is clear and the model handoff is fast.