Stories We Tell


Stories We Tell, by Naomi Shah

Experiment 3: Creation and Computation
Github link:




Project Description:

Stories are structured casualties. Strings of words form pages of sentences, recalling a past, painting a thought or envisioning a future. ‘Stories We Tell’ is an exploration into such microfiction narratives.


As you turn the knob, sentences change, new meaning emerges and new stories are created.

The combinations and permutations selected by users provide insight into experiences, thoughts, moods and even the worldview of a user when they string together seemingly disparate sentences to create coherence.





Project Context:

As a consumer of non-fiction books, cinema and graphic novels, I have always been fascinated with exploring ways in which newer stories emerge. Since the beginning of Creation and Computation, I have wanted to experiment with the migration of videos and stories to more interactive spaces, using participatory methods to engage with audiences to device ways in which they can become active users. This is my first attempt at generating stories through code.


I took inspiration in prose and storytelling from a crowd-sourced micro-fiction storytelling platform called Terribly Tiny Tales. Based out of India, this platform creates stories catering to the shrinking attention span of readers by limiting their stories to just 2000 characters. Creating succinct and engaging microfiction narratives which often sounds poetic, the ambiguity of the stories drew me towards engaging and interpreting them when I was younger. This was the starting point of inspiration for my project, exploring how I might adapt this into the ‘This and That’ format for Experiment 3.


More Inspiration:

A source of inspiration was from a game called ‘Pitchstorm’, which I recently purchased from Kickstarter. This is a party game that puts players in the position of unprepared writers, pitching movie ideas to the world’s worst executives. Through combinations and permutations of the 164 character and plot cards that are randomly drawn, players must create the premises for a movie. As a player, I enjoyed the random dealings of character and plot cards that created the possibilities of diverse stories, throwing players into a frenzy as they try concocting larger worlds from the minimal sentences on the cards.  I had the chance to play this game while building this project, which gave me some insights into the next steps of the project beyond the MVP.


I came across plenty of resources that allow users to engage in creating stories using prompts, guidelines or random generators. Another inspiration was The TVTropes Story Generator, a website that gives users a bunch of elements to use as inspiration to build their stories. Random sentences are assigned to certain elements of the narrative such as Setting, Plot, Narrative Device, Hero, Villain, Character As Device, Characterization Device. By hitting the refresh button, another set of random sentences are generated.


Similarly, the Amazing Story Generator is a book that allows users to combine the three different elements of setting, character and plot to mix and match and create unique a story ideas.


Hardware Used:

1 Breadboard

1 Arduino Micro

1 USB cable

4 10k Potentiometers

4 differently coloured knobs

M/M Jumper Wires


Other Materials Used:

1 Cardboard Box

2 Rubber Bands


Software Used:


Arduino IDE










Considering this was my first solo coding assignment, I was intimidated by the task . However, it gave me the opportunity to assess everything I had learnt (and had not learnt) to apply myself to this project. I found myself needing revision in the basic concepts of arrays, booleans and map functions, and having only myself as a resource as I was building this project out of the OCAD environment and back in my native environment. Because I am in the sleepy coastal town of Goa, resources are hard to find, and the challenges were different while building the project in this environment.  I realised I stumbled a lot, spent and in the process of trial and error, and I built my project.


My project was technically simple. I wanted to use 4 potentiometers, each assigned to a different category of sentences. The potentiometer would then be used to ‘scroll’ between different sentences. I tackled the Arduino and P5JS categories separately, and then combined the two using the p5.serialcontrol app.


I started by first writing down the sentences for each category, which I felt were open-ended enough to complement any combination of sentences to form random stories.  



That night in the kitchen,

It was a bright day in the garden

The walls of the fortress were high



She felt scared by what stood before her

She felt peace in that moment

She had a lump in her throat



She took a knife and shoved it into his stomach

And ran her fingers through her hair

She pet the back of her iguana



‘I am not going to let you get the better of me’ she yells.

‘It’s a new beginning’, she said.

‘Don’t let me down’ she whispered.


Wiring the potentiometers to the Arduino and writing the code for 4 potentiometers instead of one was simple. However, everytime I ran the code, the values from 0 to 1023 would not show up in the serial monitor and instead displayed a series of special characters. It took me a while to realise that the problem occured everytime I would charge my laptop, owing to an earthing problem in my home.  



img_20181223_154816 img_20181223_154820


For P5.js, I started off by first doing several coding train tutorials to understand how to piece together my project. At first, I created a local JSON file, with the intention of increasing the number of sentences for each category at a later stage. However, I eventually added the sentences into global arrays for each of the four categories: Location, Emotion, Action and Dialogue. I chose three sentences for each category and mapped each sentence to a range, for example sentence 1 has a range from 0-300, sentence two has a range from 300-600 etc, all the way up to 1023  which is the analog range the potentiometer returns to the Arduino.


I created a slider to scroll through each category using booleans to make sure that I was calling the data correctly. Once this was successfully achieved, I then set up the port and the serial control connection between Arduino and P5.js. This created some complications, and ‘p5.SerialPort is not a constructor’ was an error that the programs would throw up from time to time. One by one, I scanned every line and identified the errors, big and small before all the errors had vanished.  I was almost sure that my code would not work, but when it eventually did I was ecstatic.




I then spent some time designing the page with some basic HTML and CSS, giving it a clean and minimal aesthetic to package it to completion.




I re-purposed a packaging box to become the controller for ‘Stories We Tell’. I was lucky to have some carpenters at my disposal who assisted me while using the power tools to drill 4 holes into the cardboard. Through these holes would emerge the 4 colored knobs which the user would use to control various aspects of the micro fiction narrative. The four knobs were purchased from Creatron before my departure from Toronto. The knobs and text on the screen are designed to be color-coordinated, allowing users to distinguish quickly, which knobs correspond to which elements on the screen.


img_20181224_223555 img_20181224_223759 img_20181224_224039











img_20181224_235830    img_20181224_235932


Future Possibilities

An obvious next step for this project would be to populate each story category (Location, Action, Emotion, Dialogue) with several more sentences, ideally hundreds to encourage endless possibilities for generating unique stories.


While building this project, I had several ideas that developed along the way, all revolving around the core principle of scrolling through random, unconnected and disparate sentences to string together something that exhibits clarity and coherence. In this case, the sum of all the individual storytelling elements is greater than its individual parts, generating stories that demonstrates a user’s experience, worldview, thought, or mood. With variations made and layers added to this project, listed below are some potential future possibilities I would like to explore further:


Brainstorming tool for filmmakers and writers

Ideal for filmmakers or writers, ‘Stories We Tell’ could be a tool to jump-start a brainstorming session for fresh short stories, novels, scripts, screenplays, or improv sessions. Added layers of complexity to this project could involve users being encouraged to either convert their microfiction narratives into more long-form narratives, or perhaps generate a pitch for their microfiction narratives. Other variations of this could involve different kinds of elements within stories such as genre, characters, conflict, resolution, etc.


Stories created by children, for other children

As children increasingly take to the digital world for purposes ranging from entertainment to education, this could be a tool to encourage cognitive abilities and creativity among children by allowing them to create their own stories. The tool can be tweaked to become more visually heavy, relying on illustrations or images much more to appeal to a younger demographic. Children can create their own stories, save them, share  them with their friends and read stories created by others, all via the same platform.


Design research tool using storytelling for researchers

If the sentences and the categories that contain them were to be modified to suit a specific context, this tool could be used as a design research tool, where story making and story building can be used by researchers, clients and other participants to make sense of complex, interconnected situations. Narratives generated by simply rotating the knob and choosing seemingly disparate sentences that can be built into a story, can help shed light on the way people perceive themselves and their environment. This could also be useful prior to survey development, allowing researcher to gauge emotions and issues related to a situation, and then ask about it further through one-on-one interviews.




3.4: Boolean Variables – p5.js Tutorial. (2015, September 10). Retrieved from

7.3: Arrays of Objects – p5.js Tutorial. (2017, October 10). Retrieved from

Long story short. (n.d.). Retrieved from

Pitchstorm. (n.d.). Retrieved from

Story Generator. (n.d.). Retrieved from

Storytelling. (n.d.). Retrieved from

Train, T. C. (2015, October 30). 10.3: What is JSON? Part II – p5.js Tutorial. Retrieved from