Different Ways of Narrating with Curveship-js

Nick Montfort
Massachusetts Institute of Technology

Students are assigned to generate variations of an underlying story using a system designed for this purpose. The goals are (1) to use the core aspects of narrative, events and their representation; (2) to link narrative terms to concepts; and (3) to discover how events can be narrated in different, lively ways. The assignment requires instructor familiarity with my system, Curveship-js, but works well. Sharing and discussing the results enhances learning.

Learning Goals: 

  • Enhance students’ understanding of narrative theory
  • Introduces the formal process of coding
  • Facilitate creativity and the classroom discussion of different approaches
  • Open up questions about the nature of narrative and fiction

Original Assignment Context: Beginning of upper-level elective media studies course

Materials Needed: The Curveship-js framework (a system for narrative variation that does true text generation in a classic way), Curveship-js documentation, which includes: a guide to Curveship-js concepts, a “Getting Started” document, and a technical reference

Time Frame: ~3 weeks


Curveship allows students (and others) to tell the same underlying story in different ways, as long as they formally and precisely specify how to do so. I originally released the system in a Python version in 2011; that one is now called Curveship-py. More recently, I developed a JavaScript framework, Curveship-js, specifically for use in my Interactive Narrative class (21W.765 / 21L.489 / CMS.618 / CMS.845). One goal is to help students learn about narrative theory. I assign students to create a formal underlying representation of the content level (or story level), and then connect that with three different formal representations of expression (or narrative discourse). Both formulations of Curveship are systems for narrative variation that do true text generation in a classic way, starting from an abstract representation of content, planning the details of lexicalization and referring expressions, and finally realizing the surface text.

It is important to understand that while Curveship is a text generation system, it is a classic one, completely rule-based and symbolic. In fact, unless the system is asked to rearrange the telling of events at random, the output of the generator is deterministic: The same text will result each time. Curveship-js (as with its predecessor) is therefore very unlike a statistically-based large language model. Its purpose is not to generate fluent, cohesive text as a continuation of a prompt. It is, rather, a detailed model of narrative and of narrative theory.

While I taught with the Python version before 2020, students have used Curveship-js since then. They have been able to specify different orderings of events, time of narrating, narrator (or “I” of the story) and narratee (or “you” of the story). The ability to reorder events includes the ability to leave things out (ellipsis). Since 2021, the system was developed to enforce a strong distinction between content and expression. The naming of actors and things, and the particular verbs chosen to represent actions, all were represented at the expression level, so that different word choice and the use of dialect can be encoded as well.

Students are introduced to the idea of underlying content that can be expressed in different ways via some offhand examples as well as Raymond Queneau’s Exercises in Style, a book that includes ninety-nine vignettes, each representing a rather uninteresting plot told in very amusingly different ways. Before assigning this text generation project, we cover the basics of narrative theory, including the distinction between content and expression (equivalently, story and discourse). Students do several in-class exercises that anticipate this assignment; they are asked to write a narrative of their own choosing with certain constraints, then to vary it in a specific way. I also use Curveship-js in class to explain aspects of narrative theory and pointed students to the several examples that are available online.

The Assignment

Using Curveship-js, create a variable narrative with three (3) different narrator files (and corresponding HTML files) and no more than ten (10) events. You will need (7) seven files in total: two for each telling (one .js and one .html) and one story file (a .js file) to be shared between all the tellings.

Context and Purpose

This assignment is a creative exercise. There are no restrictions on topic, theme, or specific subject matter. Nothing about the story or discourse is specified, except its simplicity: There can be no more than ten events. Everything that participates in those events (actors and things) also needs to be represented. Because the representation of an event, in the simplest case, usually takes a single line, and it is not likely that there will be more than ten actors and things, each represented by a single line, the whole story file (with a little overhead) will probably not exceed 25 lines. The variable narratives composed for this assignment are not interactive, as the two creative assignments that I give after this one both are. But this assignment does require that students understand how to formally represent aspects of narrative.


Even the least interesting variable narratives show that students are indeed capable of narrating the same underlying story in several different ways. In every case, there is at least some aspect of the variation that gives a different sense or connotation. Students often do much better, finding extraordinary ways to create different narratives that share the same underlying events. In some of the best cases, the variation gives a completely different impression in each of the three cases, raising the question of what really happened. The variable narratives students devise are, invariably, fictional, so this gives us the opportunity to discuss that there is no “really” — we only know about fictional stories because of how they are expressed. The concept of the underlying story level is itself a useful fiction for writers, giving us the freedom to explore different tellings.

The exercise does enhance students’ understanding of narrative theory, helps them understand the formal process of coding, allows for creativity and the classroom discussion of different approaches, and leads us into questions about the nature of narrative and fiction.

Software and Skills Needed

Students have to have the willingness to modify computer programs and the patience to deal with formalizing their ideas — they do not have to be programmers or have programming background. Using Curveship-js involves representing data, but it does not, strictly speaking, require programming. No one has to write a for loop or a conditional statement, for instance. Because Curveship-js is a formal system, it can be unforgiving. Students have to be willing to proceed slowly in modifying examples and carefully consult the documentation I have written, which consists of a guide to Curveship-js concepts, a “Getting Started” document, and a technical reference. An instructor wishing to use this assignment will also have to patiently work to understand my system, which, although it is documented, does not have a community to support it.

Because many MIT students have strengths in math, science, and engineering, this exercise helps to show that such backgrounds can be relevant to humanistic and artistic work. The thinking that students do when they formally model phenomena in scientific and technical fields can apply to narrative. The assignment may be useful in other similar contexts, where students with significant technical background are seeking to see how their experience can apply and can assist their learning and creativity in other domains.

Whether or not other instructors choose to use Curveship-js specifically, I hope that our successful use of the system will embolden others to use fairly complex, domain-specific models, whether or not they are “AI” systems in today’s common usage of the term.

Availability of the Assignment

I make all of my syllabi (with assignments) available at my site, https://nickm.com, for others to read and adapt for their own purposes. Curveship has its own page with links to the Curveship-js download, examples, and documentation.