Write stories that
play like apps.
The creator guide to Storyomi — OmiScript, the Simulated OS, and how to take a story from a blank chapter to a published, played visual novel.
StartGetting StartedFrom a blank dashboard to a published chapter in about ten minutes — account, first scene, playtest, publish.OmiScriptOmiScriptThe core language guide — the sigils behind scenes, narration, dialogue, choices, jumps and endings.OmiScriptVariables & ConditionalsTrack state, branch your story, and personalise dialogue — session vs persistent variables, operators, and conditions.SimOSSimulated OSBuild the phone — messenger chats, social feeds, premium subscriptions, calls and voicemail.Assets & SpritesAssets & SpritesUpload backgrounds, CGs and character sprites, then reference them by logical name in your script.ExamplesExamplesCopy-paste patterns for the most common structures — swap in your own character and asset names.GuidesBest PracticesHow to structure, pace and branch a story that players finish — plus the alpha limitations to design around.GuidesPublishingChapters, publishing to browse, scheduled releases and the analytics that show you how readers found you.
A full chapter, start to finish
Everything a scene needs — background, dialogue, a choice, a branch, and an ending. Steal it as your first chapter, then replace the names.
chapter_one.omi
OmiScript
## The Message // Register 'stranger' in Studio → Characters, 'city_night' in Assets → Backgrounds, // and '$met_stranger' (boolean) in Studio → Variables before running this script. @bg city_night // Narration — no speaker, shown as prose overlay "It was 2 AM when the phone buzzed." // Dialogue — speaker must be registered in Studio → Characters player: "Who texts at this hour?" stranger: "Turn around." // Choice gate — player picks one branch; the engine waits here ? "What do you do?" - "Turn around slowly" player: "My hands are shaking." stranger: "Smart choice." // Session variable assignment — saved with save slots $met_stranger = true -> The Reveal - "Ignore it" player: "Probably spam." "She put the phone down. Big mistake." -> Bad End ## The Reveal @bg alley_night "The figure stepped into the light." // Conditional — branches on a session variable value ? if $met_stranger: stranger: "I knew you'd come." ? else: stranger: "You shouldn't be here." stranger: "We need to talk. Not here." // @end — chapter complete, engine loads the next published chapter @end ## Bad End @bg city_night "Three hours later, she was gone." // @fin ends the entire story, not just the chapter @fin
Storyomi Creator Docs
Back to Storyomi