Novel Generator

Zhu Lian
5 min readAug 15, 2017

Create your world with your own rules and generate a novel from it.

Why a novel generator?

I was not able to find any relevant novels or stories generator. In fact I found two interesting projects: one permits to generate sherlock holmes kind of novels and works quite well, but works only for this kind of stories. (https://github.com/myflyinglemur/NaNoGenMo2016) and an other one: https://github.com/Zarkonnen/SpaceGen, A pulp SF universe generator. Which is very interesting but it was not enough for my needs. So that’s why from few years ago I started to think about principles to generate a novel. In short terms: I need a world and an algorithm to process a story from it.

Principle:

Here is the main principle how works the novel generator:

Graph represents the world of the story, the novel is generated from the execution of a path.The path is randomly choosen but it must respect condition setted up by the user. In some points that’s similar to an expert system by executing rules when conditions are verified.

A tool to create your world

  • At first, the user creates a world by making a directed graph. Each node can be a narrative event.
  • The user defines comatible links between nodes, to make a coherent world. If the graph contains a loop, it will be an infinite story.
  • At each node, you can modify the global memory, and set some condition about this global memory. For example: In a node you can set: Memory add: Money*10 In another node you can set the condition (Money>5) to execute the node.

World’s story visualization

If your world begins to be consequent, you can export to CmapTools, which is a useful free software.

Linguistic aspect

If you have a loop in your world’s story, some nodes will be repetitive. So to describe the same thing you need to vary your vocabulary. “The sun was rising / A new day was beginning” By using “/” The program will randomly choose one of them. It will be more convenient than using two nodes to do that. You can define variables to simulate the use of pronouns for example. You can also add a chapter keyword that will increase chapters automatically at each node the program enters.

Novel generation

After building your world, you can generate your novel. You first choose a start point then set a maximum length for your novel:

Then generate a story, that means the program will choose a path in your world. You can reset this path to create a completely new story or continue the previous story by setting a longer length.

Goal, progress

The main goal is to have a working portable application (Win/Mac/Linux) that can do the features previously detailed. And I would like to make a novel generator as simple as possible to use. Right now I’ve already done a first version. It’s a java application, because I’m confortable with this language and it’s portable. This earlier version is maybe not very user friendly, so I’m working on it. But I can use it to create a world’s story, visualizing it with CmapTools and generate short novels. So the main goal is almost already raised. But I plan also to make an android version and later a web portal version.

Does it work?

I’m far from a professional writer and I design my world’s story in French so the generated novels are in French. I got some good results, I generate infinite stories because I put a loop in my story’s graph. You can grow your world and continue to generate the novel from the last stop. You can save the progress of the story. You don’t need to restart a new story at each time you evolve your world. I think it’s one of the best feature with the ability to visualize your world. Have a global view of your world’s story is also useful because it’s easy to get lost. Few months ago, I started to design a world then I stopped and forget everything about it, then I would like to continue it. By viewing the graph of the world, it helped a lot. You can also see nodes that have no links, loops… So to conclude, the principle seems to work. But it’s not magic, just a tool, a framework to generate unique novels from a world.

Standardization

I propose an XML vocabulary for novel generation. In a XML file you will have the world’s story and the progress of the current story.

--

--