ROLECALLContent
Content

Visual Novel Editor

Everything you create and cast

The Visual Novel Editor

The editor is where a visual novel gets built: the cast, the places, the script, the media, and the shape of the story. It is one page with a tab strip, and it saves as you work.

This page is the reference for the editor. For what a visual novel is, how the four types differ, and what a reader sees when they play one, see Visual Novel.

The editor is in Beta. It is complete enough to build and publish a story with, and parts of it are still moving.


Getting in

FromWhat happens
Create Visual Novel in the Library create menuStarts a new draft
Visual Novel in the Library sidebar or the dockStarts a new draft
A visual novel in your LibraryOpens that story
/create/visual-novelStarts a new draft, every time

A visual novel is attached to a character card. That card is what carries it into Discovery and into a reader's library, and it is why the editor URL for an existing story carries a character id.

Open an existing story from your Library rather than from the address bar. The bare editor URL always starts a new untitled draft, so visiting it to look at something you already made leaves a spare draft behind.


The toolbar

ControlWhat it does
Playtime badgeThe estimated length of a playthrough, from the number of playable nodes
ImportTakes a .vnpack back in. Warns first if you have unsaved changes, because importing opens a different story
ExportSaves, then downloads the whole project as a .vnpack. Never blocked by readiness
StatusDraft, Published, Removed. Choosing Published runs the publish checks
PreviewShows the side preview panel. Available on Overview, Story, Runtime, and Assets
ShareSaves and copies the story's public link
TestSaves and plays the story from the start, inside the editor
SaveSaves now

The title strip on the left carries the story's name and a save pill reading Unsaved, Saving..., or Saved. After an import it also reports art upload progress, because the pictures arrive after the rest of the pack.


Saving

Autosave fires about two seconds after you stop typing. Save saves immediately, and leaving the page with unsaved work warns you first.

Two buttons save before they run, because both read the saved draft rather than what is on your screen: Test, and Play from here on a card. Unsaved edits are saved first, so what you play is what you were looking at.

If the same story was saved somewhere else since your tab opened it, in another window or by Orison, your next save is refused instead of overwriting that version. A banner appears above the tabs and nothing saves from that tab again until you reload. This is deliberate: the alternative is the editor choosing which copy survives. Copy anything you still need out of the tab, then reload.


The tabs

TabWhat you do there
OverviewTitle, type, rating, description, the model's standing instructions, run defaults, genre tags, cover
CastEveryone who appears, their sprites and expressions, and their relationship meters
LocationsEvery place, its backgrounds and audio, and where the story opens
StoryThe script, read and edited as a document
FlowThe same story as a node canvas
StateThe flags and counters the story declares
RuntimeReadiness, the relationship system, and the scene editor
AssetsItems, objectives, map, music, theme, menus, minigames

Overview

The left rail holds the cover, uploaded or generated, and the counters:

CounterReads
CastMembers
NodesNodes in the story
TestedRoutes ticked as played, over routes the story has
LocsLocations
TimeEstimated playtime

A published story also shows Plays and Finished here.

The right column is a stack of cards:

CardWhat goes in it
IdentityThe title, and the tagline a reader sees on the card. The tagline counter turns amber as you approach the limit
ClassificationThe type (Dating Sim, Visual Novel, CYOA, Kinetic Novel) and the rating (All Hours, Late Night, After Dark)
DescriptionWho the story is about, their world, the stakes
AI PromptStanding instructions for the model, for the whole story
Run DefaultsThe preset and lorebooks a run starts with
Genre TagsGenres for browsing. At least one is needed to publish

AI Prompt goes in ahead of everything else, before the first message, and stays there every turn. Keep it short and imperative. It competes with the scene for the model's attention, and a long one crowds out the beat you are trying to play.

Run Defaults are applied when a run starts and left alone after that, so a reader can still change them and a run in progress is never touched. The preset field defaults to Whatever the player already uses. Naming one here is the difference between every reader playing your story the way you tuned it and every reader playing it on whatever they used last.

Beside the form is a Discovery Preview: the card as a reader will meet it, with the type badge, the playtime, the tagline, and the tags.


Cast

The roster strip runs along the top, every member as a thumbnail, the selected one lit. A search box and a role filter appear once the cast grows past a handful. Groups orders the roster and gathers members under headings of your own, and a group can declare the expressions everyone in it should have, with a coverage count so you can see who is missing one.

Below the strip, two panels.

The sprite panel holds the main sprite and the expression grid. You can upload, generate from a prompt seeded by the character, or strip a background with a tolerance and edge-softness control. Three bulk actions save most of the work:

ActionWhat it does
Share SlotsGives every other cast member the same expression slots
Upload ManyMatches a pile of files to existing slots by filename
Generate AllDraws the whole default expression set from the main sprite

Files that match nothing land in Unplaced, where Suggest asks a helper model which expression each one looks like. Suggestions are named, not applied: nothing uploads until you accept it.

The detail panel holds who the character is.

FieldNotes
Cast IDThe name the rest of the story refers to. See below
Display NameWhat a reader sees
RoleProtagonist, Love Interest, NPC, or Narrator
GroupWhich roster heading they sit under
Hidden CharacterKeeps them out of sight until the story reveals them
Prose fieldsAppearance, Personality, Backstory, Motivations, Speech Pattern, Quirks, Secrets. Each opens into a full-size editor
RelationshipsProse, for the model
Relationship MetersThe numbers, per character

Renaming a Cast ID rewrites the whole story: staging, conditions, gifts, objectives, beats, and both sides of every relationship. The editor checks the new id is free before it does it. This is the only safe way to rename one.

Relationship Meters are where a character's numbers start, and what each one means: what it tops out at, the smallest and largest move it allows, its icon and colour, and what raises and lowers it. Meters another character already declares can be copied in one click. The story-wide half of the system lives under Runtime.

For what makes a cast member work, expressions especially, see Cast Members.


Locations

Starting Setup is the first scene: the opening message a reader lands on, the location, the background variant, and the opening music. If your opening staging names a character or a place that no longer exists, the panel says so and offers to move the staging onto the scene or clear it.

The location roster works like the cast roster, groups included, with an Upload many tile that sends each file to the location its filename matches and lists whatever it could not place.

For the selected location:

SectionWhat is in it
BackgroundThe default image, uploaded or generated
VariantsAlternate backgrounds, each with an optional Shows when condition built the same way conditions are built everywhere else
IdentityName, group, and the description the model reads
Connected LocationsWhich places are reachable from here. Connections are made both ways for you

A variant with no condition is not orphaned: it still shows when a scene names it, or when the story sets it outright.

See Locations for what each field is for.


Story

The Story tab is your script. It reads top to bottom like a screenplay, and it is also where you edit: every card on the page is the node itself, not a preview of one.

It edits the same story the Flow tab draws. Either view writes the whole thing.

The four kinds of node

NodeWhat it is
Plot PointA moment you write, bound to a scene
ScenarioA stretch the model plays out until one of its ways out is met
ChoiceA question put to the reader, with options
EndingWhere a route stops

A fifth kind, the condition node, still exists in older stories and is drawn here as gated rows under the transition that leads into it. You cannot add a new one from this tab; conditions belong on the ways out of an ordinary node.

How the document is laid out

The walk starts at the beginning and follows the story depth first. Every node appears exactly once, at the first place the walk reaches it. A later reference to a node already drawn is a jump pill rather than a second card, so a loop or a converging route never duplicates a scene.

Branches are inline. Where a node has more than one way out, the first continues down the page and the others follow underneath.

A transition to the card immediately below is next. A target drawn elsewhere is a jump. A node that leads to itself is stay. A node that ends the story is an ending.

The Reading Path bar

The bar across the top names the route you are reading, as pills, with the transition taken between each pair. Where the earlier node had more than one way on, a chevron opens the alternatives, and picking one re-lays the document below that fork only. A long route collapses its middle; click the gap to open it.

The bar also carries:

ControlWhat it does
path N of MWhere this route sits among the enumerated routes. not a full route means what you are reading does not end on an ending
testedWhether this route carries a tested mark. Click to tick or untick it by hand
all pathsEvery route from the start to an ending
in FlowLights this route on the Flow canvas

All paths

The dropdown lists every route from the start to an ending, grouped by ending, sortable by ending or by length, and filterable by node label, choice text, or a state variable named in a condition. Each row can be ticked as tested or made the route you are reading.

Two sections at the bottom earn their keep:

  • No ending. Routes that loop forever, and cycles nothing leaves, each with a jump to the node that loops back. This is usually a mistake rather than a design.
  • Tested, route gone. Marks whose route the story no longer has, with a button to clear each one.

Enumeration stops at a cap and says so, and the Tested counter on Overview counts against the same capped total.

Tested marks

A tick means someone played that route start to end. Test mode ticks routes by itself; see below.

Marks live with the story, so they travel with export and import. A mark survives edits to the nodes on its route, because it is keyed by the route rather than by the words on it. A structural change that removes the route leaves the mark in the Tested, route gone list rather than deleting it. Nothing is unticked silently.

The outline and the story map

The Outline on the left lists every node in reading order, grouped by chapter once you have chapters, with endings and loose nodes after them. Nodes the walk never reaches are the Unreachable group; drag one onto a target pill or an insert slot to wire it in, or remove it from the story.

The Story Map on the right is a minimap: one bar per card, with purple arcs for the jumps, dashed where a jump goes backwards. Hovering an arc names both ends, clicking selects the target. On narrow screens the map hides and the outline stays.

The cards

Collapsed, a card shows its type, its name, its choice options with their destinations, where it is set and who is in it, and a dot if it has problems.

Expanded, it is the whole node. The type is a select, and changing it clears whatever the new type cannot use. The node id is editable in the header, and renaming repoints every reference to it. The card menu offers Set as start, Duplicate, Play from here, Show on the Flow canvas, and removal.

What the body holds depends on the type:

  • A Plot Point binds a scene, says what happens in it, and stages the place and the people.
  • A Scenario carries the prompt for the model and lists the ways it can end, first that fits wins. It also shows the state it may read and write.
  • A Choice carries the question and its options, each with an optional gate, effects, a hidden prompt for the model, and a face to wear while the reader considers it. Options drag to reorder and there is a fallback row for when none is visible.
  • An Ending carries its end card, its route grouping, and whether it is the canonical ending. It also lists how many paths reach it. To continue a story past an ending, convert it to a Plot Point from the card menu.

Every card also carries Feel (a mood), how hard the model should lean on it, and notes for the model.

Ways out

Each way out is a row: the cue that fires it, an optional gate on the state, an optional set of effects, and where it goes. Rows drag to reorder, which is the order they are tried in. The footer adds another way out as next, stay, a jump to an existing node, or an ending.

Target pills say what they point at: a name for the card below, a purple pill with a scroll arrow for a node drawn elsewhere, a green pill for an ending, stay here for a self-loop, and an amber dashed where? for one that is not wired yet. Clicking a pill opens a picker that can also make the node it needs.

Chapters

A chapter is editorial grouping and nothing else. The runtime never reads one and the model is never told about them. Headings appear where the chapter changes, marked continued when the walk returns to one it left, and each card can be moved between chapters from its own disclosure.

Insert slots

Between cards, Insert here adds a node on that transition rather than leaving it loose. Dragging an unreachable node onto a slot connects it there.

Show in Flow

in Flow switches to the Flow tab with the route lit and everything else dimmed, framed on the route, with a strip naming it and a Clear button.


Flow

The Flow tab is the same story as a node canvas: a card per node, a port per way out, and edges you draw between them. It is where conditions and model-chosen branches are authored.

The rail on the left holds three things: your Scenes, which drag onto the canvas or open for editing; Problems, each row framing the node it is about; and a Legend for the edge colours.

The canvas. Drag to pan, shift-drag to rubber-band a selection, and ctrl-click or cmd-click to add to it. Selecting an edge and pressing Delete unwires that way out; it does not delete a node. With two or more nodes selected an arrange bar appears with alignment and spacing, and a delete that tells you links into those nodes will be cleared. There is no undo for the graph, so the confirmation is the safety net.

The marquee carries a health chip, Auto-arrange, Fit, and JSON export and import. Importing JSON replaces the graph, so it asks first.

The inspector on the right edits the selected node: its name, its type, its scene, its beat fields, and its ways out. It can set the node as the start, duplicate it, fold a condition node into the node before it, open the same node in the Story tab, or start a test run there.

Node cards use the same words the Story tab uses: Plot Point, Choice, Condition, Scenario, Ending. Edges are coloured by kind, and an edge that points at a node that no longer exists is red.

On a narrow screen the canvas is replaced by an outline of the same graph, one tappable row per node with its ways out listed underneath.


State

Every flag and counter the story declares, with every place each one is read or written, and the only way to remove one.

Declare a name with its kind and its starting value. A name that is used but never declared is called out in amber, because a condition on it can never be true. A name that is declared and used nowhere is called out too.

Deleting a name that is still in use asks first, and says how many references will be left pointing at a name the story no longer declares. Those conditions stop firing and nothing else reports it, which is exactly why the usage list is there.

Renaming is deliberately not offered here. Relationships have their own editor on the Cast tab.


Runtime

Readiness

A visual novel plays in one of two ways, and the panel at the top says which one yours is in.

AI-Directed needs no graph at all. The narrator invents movement and choices from your cast, places, and beats. This is the mode while scenes and graph nodes are both empty.

Authored Path is the other mode, and it has five checks:

CheckWhat it wants
Scene createdThe path begins with a scene that exists
Start scene connectedThe first node points at that scene
Ending node addedAt least one node is an Ending
Reachable endingAn ending can actually be reached from the start
Connections validEvery scene and branch target still exists

Readiness gates publishing. It does not gate export, so a story mid-build can still be backed up.

The relationship system

The story-wide half of relationships lives here: the overall sympathy meter and what it is called, and the difficulty presets that set how large a move can be. The per-character half, where each character starts, is on the Cast tab beside the character it describes.

The scene editor

While the story is still AI-Directed, Build An Authored Path opens the scene editor. A scene holds its id and name, its location and background variant, its sprite staging, any scripted dialogue, and the AI context that says what should happen in it.

Once the story has a scene or a node, that button is no longer shown, and it is not needed: the story is authored on the Story tab and on Flow from then on, and a scene is opened from the card that binds it or from the scene list on the Flow rail.

Export and import

Export bundles the whole project, media included, as a .vnpack. It saves first and then bundles, and a media-heavy story can take a minute. Incomplete scenes and half-finished graph work are included exactly as they are, so an export is a safety copy at any stage.

Import takes a .vnpack back. Art arrives after the rest, so a freshly imported story fills in its pictures for a moment after it opens, and the title strip reports how far along that is.


Assets

Assets holds everything the story owns that is not cast, place, or script. Sections that hold a list show their count in the strip.

SectionWhat is in it
DirectorWhether the story allows generated scene images, which treatments it allows, how often, which locations are safe as backgrounds, and the art direction and negative prompt they carry
ItemsGifts, key items and collectibles: icon, description, tags, category, rarity, per-recipient metrics, and whether an item is single use
ObjectivesGoals and their prompts: priority, how one is completed, how it can be lost, whether it is hidden until triggered, and what completing or failing it changes
MapThe map image and its hotspots, or a grid fallback, and where the map can be opened from
MusicTracks with their category, volume, and looping, added one at a time or as a list of URLs. Shared music can be imported, credits included
ThemeThe look of the player interface: colours, fonts, dialogue box and choice styles, transitions, with a live preview. Emotion inference is configured here too
MinigamesThe minigames the story can call, and their per-type settings

Director is the story's half of the Visual Director. It sets the bounds. A reader turns it on for their own run from Scene Commands in the pause menu, where the Interpreter lives too. A story that does not allow Director visuals never generates one, however a reader has their scene set.

The theme's accent colour is mirrored onto the story's character card, so the library card and the chat chrome match the story.

With Preview on, this tab shows a real stage rather than a card, so a theme can be judged against a background, a character, and an expression of your choosing.


Testing your story

Test mode plays your story as a reader would, inside the editor, and lets you edit the beat you are standing on without leaving the run. While a session is open the editor is paused: the tabs come back when you exit.

Starting a session

FromStarts at
Test in the toolbarThe beginning
Play from here on a Story cardThat beat
Play from here in the Flow inspectorThat beat

All three save first. Sessions are numbered and recorded in the story, so a session survives a refresh.

A run that starts at a beat begins with that beat's own opening if it has one, and with nothing invented if it does not. Flags, counters, and relationships still start where the story says they start: the request is a position, not a state.

The stage

The stage is the real player page in a frame, not a copy of it. What you see is what a reader sees, rails and bars included, because it is the same page.

PresetSize
My windowHowever much room the editor has
Tablet 768768 by 1024
Phone 390390 by 844

A device preset turns on its side with the rotate button. The frame is scaled down to fit and never scaled up, because a phone shown larger than a phone is not a phone; the corner reports the size and the scale.

The session bar

ControlWhat it does
Session and takeWhich session this is, and which take if you have branched
Step readoutThe step, the turns played, and the node the run stands on
Undo turnDrops the last turn and the move it made
Force exitTakes a way out by hand, whether or not its gate is open. The list marks which can fire now
RestartDrops this run and opens another from the same place
Start fromDrops this run and opens one at any node you pick
Exit testLeaves test mode. The test chats are deleted

The trace

The left column is every landing the run has made, in order, numbered. Each step shows the way out taken, its gate, its effects, and any condition nodes crossed on the way. Steps are marked healed when an option pointed at a node the story no longer has, forced when you took it by hand, and model jump when the model named a node no way out led to.

Clicking an earlier step rewinds the run there and cuts the transcript to match. Hovering a step offers insert scene before, which puts a new Plot Point on the transition the run arrived by, and branch here, which forks the run into a new take.

When a node has been landed on several times the panel says so outright, which is how a loop announces itself.

Below the trace is the state: every flag, counter, and relationship with its current value and the step it last changed at, and the current node's automatic variables, which are its visit count, its turn count, and the way the run last left it. Any way out can be gated on those.

The node card

The right column is the node the run stands on, reduced to what matters while testing: its prompt, its notes for the model, and its ways out. Each way out is marked with whether it can fire for the state the run is in right now, which is the quickest way to find a gate that never opens.

Edits here reach the story and the running scene at once, so the next turn reads the edited node, and the words you changed are marked while the run is live.

Below the card, what the model saw this turn lists the beat as the model received it: the node, its feel, how hard to lean on it, and every way out it was offered. A run that reads badly is usually explained here.

Notes on this run is free text that saves onto this run's tested mark.

Tested paths

A session that started at the beginning and reached an ending along a listed route ticks that route by itself, and says so. A session that started at a beat never ticks one, because it did not play the beats before it. An ending reached with a Force exit on the way, or by a jump the story does not list, is reported rather than ticked, and you can tick it by hand if you meant it.

Loops are collapsed when matching, so walking a node twice does not stop a route from being recognised.

If you have the story open in another tab, that tab picks up the new mark rather than treating it as someone else's edit.

Leaving

Exit test ends the session and deletes its chats, takes included, and so do Restart, Start from, and opening a node in Story. Test chats are hidden from your library and from the scenes list, and a real play never resumes one.


Publishing

A visual novel is published as a character, through the same dialog.

Five things are checked before the dialog opens, and the editor switches to the tab that needs work:

BlockerWhere
Add a titleOverview
Add at least one cast memberCast
Add at least one locationLocations
Add a plot point or a scenarioStory
Finish the authored pathRuntime

The last one is the readiness checklist above. A story in AI-Directed mode passes it by having no authored path to finish.

Two more things are checked inside the dialog:

  • At least one genre tag. A story with none cannot be published.
  • The safety review, the same automated review every character goes through. A rejection explains itself, and a review that fails to run offers a retry.

The dialog is also where the story is made public or kept private.


Keyboard

The editor binds no global shortcuts. There is no keyboard save, and no undo for the graph.

What is bound is local:

WhereKeyEffect
Flow canvasDelete or BackspaceUnwires the selected link
Flow canvasShift and dragSelects a rectangle of nodes
Flow canvasCtrl or Cmd and clickAdds to the selection
A node id, a chapter name, an expression nameEnterCommits
The same fieldsEscapeReverts
A collapsed cardEnter or SpaceOpens it
Any dropdown or pickerEscapeCloses it

Orison in the editor

Understudies.

Orison can work on the story with you from this page. It knows which tab you are on and what you have selected, and it can create a scene, stage a character in one, add a line to one, attach a scene to a node, and delete a scene nothing uses.

Its edits land in the editor the same way yours do, so they are yours to save or discard. If it changes the story on the server while you have unsaved work, the editor says so rather than quietly reloading underneath you.