One of the most interesting things about Breathe (https://breathe-story.com/), the ghost story I created in collaboration with Editions at Play (Visual Editions and Google Creative Labs Sydney), and the Ambient Literature team, is its use of conditional text. Conditional text — text that alters in response to data that is pulled into the story via APIs — is embedded throughout Breathe. Now that the story has been out in the world for a few weeks it’s become clear to me that most readers are aware of only a small amount of the conditional text present in the story — those uncanny moments when the ghosts seem to know where you are as you read.
On the one hand, this is great; we wanted the conditional text to be as subtle as possible, to work smoothly within the story. On the other hand, it’s kind of sad; only the most dedicated reader, who returns to the story in multiple locations around the world, whatever the weather, over the course of an entire year, will experience all the story’s potential permutations.
When we were working to create the story, we considered a broad range of potential APIs we could use to create conditional text that would be personalised to every reader before we settled on location, time, and weather. Each API has several variations. For example, while location can provide street or city names, it can also include places, i.e. “nearest café” or “nearest train station.” The time API can pull in the time in numbers or words, i.e. “night,” or season, i.e. “winter,” while the weather API alters the text in relation to the temperature wherever the reader might be.
In an earlier, much longer, version of the story we experimented with pulling news headlines into the text. That version included the story of a second Syrian character, another ghost anxious to communicate with the main character Flo. But, as we tried to set rules for the type of headlines I was after, making this work proved to be very tricky. For example, the following render text created in August 2017:
In your city <CurrentPlace type=”administrative_area_level_2″ />, in your street: <CurrentPlace type=”route” />. Outside this room. Too much. All the bad headlines <News category=”Politics” sentiment=”negative” />, all the disasters: <News country=”UserLocation” News category=”weather” sentiment=”negative” />, the world on edge: <News title_contains=”Syria” country=”UserLocation” sentiment=”negative” /> – everyone finds it difficult.
produced this conditional text for the team member who was working on it in Australia, allowing for a time window on the headlines of 3 days:
In your city Sydney, in your street: Bourke St. Outside this room. Too much. All the bad headlines This Is the Bleakest Moment for America in My Lifetime, all the disasters: Severe weather warning as WA’s biggest cold front of winter sweeps in, the world on edge: [no results error] – everyone finds it difficult.
or this conditional text, allowing for a time window of 10 days:
In your city Sydney, in your street: Bourke St. Outside this room. Too much. All the bad headlines This Is the Bleakest Moment for America in My Lifetime, all the disasters: USDA has begun censoring use of the term ‘climate change’, emails reveal, the world on edge: UN: Nearly 50,000 stranded at Jordan-Syria border – everyone finds it difficult.
Neither example is workable, both would jar any reader out of the story. We dropped the news API and the story took a different direction, but I’d really love to create a piece that uses dynamic and conditional text to render real-time news within the context of work of fiction.
Anyone want to work on that with me?
You can read Breathe at https://breathe-story.com/.
— Kate Pullinger