Categories
Personal Work

Amazon

Yeaaaah I can’t talk about that. Dang, it was really cool though!

Categories
Personal Work

Future Colossal

Yeaaaah I can’t talk about that. Dang, it was really cool though!

Categories
Personal Work

Mindseed

MINDSEED

Abstract

Mindseed is an experiment that uses virtual reality and machine learning tools to facilitate the generation of new ideas through visualization, language, immersive experience, and play. I see the future of the project as a digital framework that uses virtual reality, a web platform, and natural language processing to create a world where you can plant, grow, and harvest your ideas.

You can watch a video of the project presentation at ITP’s thesis week below.

Thesis Presentation Video:

TECHNICAL DETAILS

Hardware: PC, Oculus Quest 2, HTC Vive
Software: Unreal Engine 4, React, ThreeJS, Python, Heroku, Tensorflow, MongoDB, Spacy
Development time: 4 Months

Introduction

For my thesis, I built a prototype to assist myself with my creative process. We all know what a struggle it is to come up with ideas. They take time, patience, and inspiration. Imagine if we could make the process of coming up with an idea more entertaining and engaging. What if we could find a way to grow ideas as if we were growing plants or trees. Through these past 14 weeks, I’ve found a way to prototype this notion. Mindseed is a digital framework that uses virtual reality, a web platform, and natural language processing to create a world where you can plant, grow, and harvest your ideas.

Personal Statement

 So, I’ve been saving ideas for a while. I started using online platforms to record them in 2017, including google drive, keep, notes, and even emails, slowly building a personal archive of my thoughts. Since then, I’ve relied on this archive to develop new projects and recently, to think about my thesis project. I started my thesis exploration by frequently reviewing this archive and adding new ideas to it. 

After some time, I realized many of these concepts were connected, and some became much more interesting when I mixed parts and pieces of them together.I enjoyed this process of mixing concepts, and I was excited by some of the results. so I asked myself,  How I can translate this experiment with language into a digital experience? How can it benefit our creative process?

Research

Creativity is one of our most valuable skills, and our creative process is an essential part of innovation. This interest in innovation and problem-solving has led to the development of ideation methods and techniques like brainstorming and cheatstorming; It has fueled the success of collaboration tools such as Miro and inspired experimentation with online sites like Ideas.AI.Tools like these directly impact how we process information, engage with our ideas, and structure our creative process. 

Until recently our handheld screens and computer monitors have been the most utilized medium to interact with our data. As valuable as they can be, sometimes we feel detached from our digital information because it seems disembodied and shapeless. Today, we have new ways to visualize and experience our data. With the rise of technologies like mixed reality and machine learning, we can think of creating experiences that allow a more profound sense of embodiment, user personalization, and immersion.

I chose virtual reality to create an immersive experience with a more embodied sense of interaction. Inside this digital environment, we can experiment with any audiovisual representation to give life to our visual metaphors. On the other hand, using Natural language processing we have created tools that use semantic analysis and text generation to create meaningful communications that sometimes appear human. Mindseed is an experiment that uses virtual reality and machine learning tools to facilitate the generation of new ideas, using data visualization, language, immersive experience, and play.

Design / Production / Implementation

 The project has a simple premise: an idea is a seed. You plant your seed through a website by typing in a sentence that summarizes it. For example, “A website that helps people better understand their personal data. The website takes care of planting your seed and gives you back a set of coordinates indicating where you can find it later, once it has had the chance to grow. 

You then go into the VR world, where you enter the “Forest of Ideas.” Each of the ideas you planted earlier has become a full-grown fruit tree, with each fruit as a concept that makes up your idea. You can find the tree you planted with the coordinates you were given earlier, or you can walk around the forest and explore. 

 You go around the forest, picking around fruits from the ideas you like. When you feel you have enough, you mix them up and get a new seed to plant. This unique idea inherits some of the concepts you used to make it and will grow into an entire idea after some time.

You’ll receive a text message later on confirming when your new seedling has grown into a tree, as well as its coordinates and an id number for you to track it later.

Since this is all connected to a database, you’ll be able to mix different generations of ideas and track how they are related to each other. In further iterations, this will allow you to create a map of the roots that connect your thoughts.

Through my research, I found creative people prefer to generate ideas in solitary and later share these ideas with others. This is why I decided to incorporate multiplayer into the VR experience, allowing users to share limited interaction in the same space. Mindseed allows for individual reflection and also for cooperative play.

User Experience

There is a website where people can plant their ideas. It is currently functional, hosted online. The interface is simple; you type in your idea, choose a color for your seed, and then watch an animation of your seed being planted. You will also receive a set of coordinates. These are the coordinates of your tree inside the VR world.

The forest experience, where we can interact with our ideas, is made for VR. Additionally, it is also accessible to people who don’t have a VR headset and use a computer. It consists of two parts: A tutorial where someone can become familiarized with the controls, the environment, and how to interact with their ideas. The second part is the Forest, where you can explore alone or with others.

It took 14 weeks to develop Mindseed. The framework consists of three parts. The Frontend is the website where users can type in their ideas and see their seeds grow. The Backend takes care of processing the information, serving as a bridge between the website and the VR forest, making the experience of planting an idea seamless and synchronized. It also makes the simulated world seem continuously evolving, keeping track of each idea’s growth process.

User Experience

Onboarding

Mindseed has an onboarding experience that consists of a lobby where the user can learn how to move around, use the controls, and learn the dynamics of how to grow an idea. You can see a short video below.

Web Platform

You plant an idea.

Multiplayer VR

You plant a seed for a new idea from other ideas.

Text message notification

Your new idea is ready.

Multiplayer VR

Profit.

Some results from the more fine-tuned algorithm:

  • A project that uses random oscillating patterns to create frame-by-frame animations in 3D.
  • A custom built sound controller that uses wind energy to mine cryptocurrency.
  • A permanent installation for Berlin’s Futurism exhibition that explores prized possession in their native habitat.
  • An interacive installation that facilitates collabortation between a human and a puddle of alcohol.
  • A dancer’s body is extended and manipulated as a tool to quantify the world.

Process

Below you can see a video with a timeline of the development process, as well as some inspiration for the project.

Conclusions and Next Steps

The process took several iterations, user testing, breaking, and building.

And it was the process that truly had me excited. Figuring out how to use these tools to generate unexpected text was surprisingly fun. Playing with all these VR dynamics, introducing smoke, and light truly felt magical. And seeing the project evolve from something that looked like a rough idea I wrote down into something so personal and relatable, makes me want to develop it even further into the future.

  1. BE CREATIVE ALONE. BE CREATIVE TOGETHER – My research has led me to believe that coming up with ideas benefit from a solitary process. However, collective and constructive feedback can make a seed grow and evolve into true innovation.
  2. TIME AS A BRIDGE – While we strive for seamless real-time communication, we sometimes forget the value of time as an essential part of our processes. Time is not something we should eliminate, but rather something we should work with to give our metaphors more power.
  3. GO FOR THE LOW HANGING FRUIT – Our world is full of sensors and information. Make the most out of the information you have available to make the experience evolve with the person using it.
  4. LANGUAGE IS PLAY
    Our language determines how we think, how we communicate, and what we create. We should think of language as a playful artifact, a poetic machine, and the center of our creative ideation process.
  5. WE CHANGE. OUR IDEAS CHANGE.  We should be able to track these ideas and connect them with our past thoughts.  What better way to connect with ourselves than collaborating with our past to build our future!

For the next steps, I want to make the forest something you can mold into your own, a memory palace where you can freely explore your ideas and organize them spatially. I also believe each tree and fruit should look unique and recognizable, similar to the idea of a phenotype that expresses an inner trait. Appearance should have meaning. Through this process, several people have expressed their interest in using Mindseed. I want to further develop this into an experiment that can be experienced by more people.

Categories
Personal Work

100 days of 3D

100 Days of 3D

A daily exercise in 3D modelling, texturing, animation, and everything in between.

You can see them on Instagram by following this link.


Hardware: Windows PC
Software: Adobe Suite, Blender, Unreal Engine
Development time: 100 days


Please follow this link to see 100 days of 3D!

Categories
Real Time Social Spaces

First Dive into ThreeJS

Creating an environment

Our task this week was to start from Aidan Nelson’s template, which includes the files for a threeJS template that “allows multiplayer three.js scenes with integrated audio/video capabilities. It uses a node server running socket.io to provide multiplayer functionality as well as WebRTC signaling.” After you download and run the npm run start command inside the root folder, a browser window should open and ask for permission to access your browser camera and mic. After you comply you should see your head(fortunately) popping on the surface of a Cube-like character.

It is pretty much as simple and effective as possible to get you up and running with multiplayer capabilities (after you’ve hosted it online), with the main components being scene.js and environment.js. What I did was instantiate a bunch of the spheres that came with the template (5000), and then set up six lights to rotate around the center. I also changed my main shape to the sphere as well. Below you can see some of the tests I made, as well as the GitHub repository, and a couple of questions that still remain.


Questions:

  • How to import and use Three.js objects such as water and sky?
    • I downloaded Water.js and set it inside my js/libs folder, and I made another one inside my assets/objects folder to try it out there too. I then tried importing it in my environment.js and scene.js, but failed to import the object with import { Water } from ./assets/objects/Water.js due to the following error " Cannot use an import statement outside of a module."
  • While testing three.js by itself, and also checking the network tab in chrome dev tools, I didn’t get to see where most of the loading delay for the frontend was happening. Suppose I would want to make a loading bar, what data would I measure? How can I establish a percentage of how much has loaded? Or does it all just kind of have to be faked with asynchronously loading animations/loading bars?

Categories
Real Time Social Spaces

RTSS_P5LiveMedia

Yell to be seen

This quick sketch came as a solution for something I noticed during several zoom meetings I’ve had: some people like to talk too much. As a solution, I came up with a sketch in which your camera feed appears invisible until you start speaking. The more you talk, the more others can see you and the higher up you appear on the screen. It’s meant to be used for a group of people who wish to have a balanced conversation in terms of participation.

Categories
Computational Approaches to Narrative

CAtN Final

Introduction

Two weeks ago, I came up with an idea that functioned more as a momentary placebo amidst finals and all the underlying chaos. I wanted accomplish some kind of way to give a more “magic realism” feel to a particular series of news reports (I initially thought of NYTimes). However, after bouncing around the idea in my head several times I decided it was not a something I was willing to test and possibly fail about due to time. I wanted to make an experiment that led me to something fun, and even an idea that might lead me somewhere else.

In any case, I decided to maintain the Magical Realism element. After taking a look at @MagicRealismBot in Twitter, as well as reading this interview with their creators Ali and Chris Rodley, the idea became clear. I recommend reading the interview, it is entertaining to see the mindset and the process behind such an effective and endearing tool.

I thought about some comments made in class about using GPT-2 to help with thesis process (Neta and Nicole?). In any case, I thought it would be fun to give some of the articles I usually read in one of my favorite New Media online platform, Creative Applications Network, a bit of a twist. Specifically, the way in which the website displays the entries for each article made it easier. I’ll explain in more detail below.

Process

Creative Applications Network

You can follow along this notebook I made in Google Collab. I decided to scrape all of the blog entries from the blog. By blog entry I mean the short pieces of text you see below. Every blog article had one. After scraping the 147 entries, I made a CSV file out of them so I could take a better look.

I noticed most of the entries (or at least the ones I was interested in) followed a similar pattern. “X project” is a “Y adjective to make it sound innovative” “Z New Media name” “Whatever it did”. I made a small diagram of it below.

Right away I thought this type of one-line format (after cleaning up the data a bit) would mix perfectly with Magic Realism Bot’s posts. (weird saying it that way) To clarify, the cleanup involved removing the names of the work, and of the artists. So I took all of those and formatted them into a format acceptable by spacy and the Markov chain algorithm. I wanted to make a script for it. This involved making a script that received a CSV file with one column of text and a name and outputs a new file with a ‘name’, ‘index’, ‘total’, and ‘text ‘ as column headers. All of this is in the notebook. I then proceeded to scrape tweets from the MagicRealismBot on Twitter.

Magic Realism Bot

I will not go into much detail about how I scraped it, since it is on the notebook. However, I just want to make clear I obtained about 3200 tweets, which I took a screenshot of below.

Spacy, Tracery and the fun part

After having both of my sources, I joined them into one CSV file. I processed the file using Spacy and Allison’s guide for a corpus-driven narrative generation. The whole thing was about 4800 entries.

I also used a copy of Allison’s notebook. With Allison’s notebook, I was able to use spacy. Spacy gave me my entities, as well as actions, verbs, objects, etc… which I used as an input for Tracery.

I made a couple of tests to see how it would go. And I think it went pretty well.

AND MY FAVORITE (which sadly I got too excited to remember to even screenshot):

“An interactive installation that facilitates collaboration between a human and a puddle of alcohol.”

Other remarkable examples:

A bisexual fisherman falls in love with the use of CCTV.

A professor reads a poem about an arduino that can destroy metaphysics.

A new life as a performance.

A theologian discovers that Wikipedia does not exist.

The dancer’s body is extended and manipulated as a tool to quantify the world.

An interactive installation and performance inspired by light rays traveling in a latent space of situations.

A project explores possible alternatives of how we experience the materiality of nature through the mediums of fiction.

Exploring behavior-based design systems that are self-aware, mobile, and self-structure / assemble.

To compensate for the lack of material I had from the Blog, I had to duplicate those entries several times, as well as some of the examples shown before. By the end it came out to a 3200(MRbot) vs. 1600 entries.(creativeappsnet + handpicked generated).

Output?

So I came around this talk by Kate Compton (creator of Tracery) who gave the most enlightening talk about procedural generation, and it occurred to me I did not want to leave the output of this experiment only in text.

So through this VR experiment I wanted to include several elements I became captivated by during the semester….such as the sense of waiting present in Epitaph, or the idea of spatial(enviromental) storytelling in Bitsy. Also, I felt some of these ideas were brilliant, and on a computer screen I seemed to get distracted with my other 127 tabs.

So ideally, you would be able to walk to other beams of light which generate text with other parameter values. ( If I was to use GPT-2 for example, each beam on a row would contain +0.1 in the temperature parameter). You would be able to pick up some of these and keep them.

EDIT: Worked!

Categories
Time

HORIZONTE – Time Final

My project is called Horizonte, a horizon clock that adjusts it’s color and light patterns in real-time according to its location and the current time of day. The clock itself is a device that provides a WiFi access point for remote configuration, and an autonomous network-based update feature, which allows the user to customize the clock’s parameters. I wanted to stray away from the sense of being precise, a rather lazy, and non-invasive way of letting you know what part of the day it is. The clock gradually shifts from one stage of the day to the next, taking around 5- 20 minutes to shift depending on the event, location, and date.

The project uses an API that is based on the SuncalcJS library to acquire the time for each particular ‘sun event’ in the day, such as Dawn, Sunset, etc… For this particular project, at this stage at least, I am dealing with events that happen between Dawn and Dusk. Why? These are the first and last stages of sunlight, and if you are a fan of ” From Dusk till Dawn”, those are vampire-safe times.

Hardware Used

Power requirements

  • I used a 5V, 10A power supply for both the Arduino and the lights. Same as this one.

Software

  • Arduino IDE
  • NodeJS
  • Suncalc
  • Blender
  • Illustrator
  • Unreal Engine 4 (for visualizations)

Initial Proposal

Initial mockup idea

User Interaction

UI Re-design

FULL PROCESS

I mainly focused on gradients, however I also tried different approaches, as you can also see below.

Testing different lighting properties with the strips.

I quickly found myself struggling to acquire the control I needed, and after a week or two of trying to make my own gradients based off of Adafruit’s limited examples, I was running out of time to get the other things going. After looking for a while I ran into FastLED, a Neopixel control library developed for Arduino which boasts to be better than the original library. Their examples were very varied, complete, and allowed me to find a couple of useful scripts which I took apart to make my own. Specifically, I heavily relied on the ColorPalette example and the nblendPaletteTowardPalette function found in the docs. The code implemented in the clock goes through nine different gradients, transitioning in and out of them during the day.

The main function takes the following parameters:

  • A current time measure in order to determine which sun event should be activated
  • The start time for the current day loop. It resets at midnight.
  • each of the sun events in millis().
void ChangePalettePeriodically_bottom(unsigned long startMillis,
                                      unsigned long currentMillis,
                                      long interval1,
                                      long interval2,
                                      long interval3,
                                      long interval4,
                                      long interval5,
                                      long interval6,
                                      long interval7,
                                      long interval8,
                                      long interval9
                                     ) {
Gradient using FastLED
Seeing the individual sections on the two strips

In terms of wiring and connections, it was pretty straightforward. I used an Arduino MKR 1010 since it had an esp32. From previous research, I knew it had more ram than the Arduino Nano, which was my other option. I hooked a couple of 470-ohm resistances to the input line of each Neopixel Strip. I also added two 470 microfarads capacitors in series. The Adafruit Uberguide for powering Neopixels suggests a 1000 microfarad capacitor, however, I did not have one. All of this was powered by a 5V, 10A power supply. Here’s the schematic below.

Horizonte Schematic

Color

First Gradient display made with Miro

In order to represent the horizon, or at least my view of it, I would have to decide on a color palette to use. I started out doing something like the image below, which gave me a general sense of where to go.

Gradient and sky mood board in Miro

The API, the request, the data

After having seen Tom Igoe’s Connected Devices and Networked Interaction class last semester, I felt fairly confident that making my own API was the way to go in order to access the data at any given time from any device and also to control it. Manipulating the data and processing it before sending it to any device was a priority. I decided to make it in NodeJS since I wanted to keep the possibility of incorporating JS into the web client open. I also mounted it on Heroku, which probably isn’t the best option for continuous communication such as WebSockets but works fine for HTTP requests. As I said before, even though my idea was to keep it as real-time as possible the idea of being a couple of seconds or even minutes off track didn’t mean much. The API consists of two routes: /sun and /now. /sun ill return all of the times for each sun event according to UTC. /now will return the current time.

The data is presented as a JSON file. So everytime we make a request, the server writes an updated JSON file which is sent to the Arduino. You can see the JSON formatted below.

Server console log

To made the request to the server I used the WiFi Web Client example from the Arduino IDE, and later saved it as a JSON using the ArduinoJson library.

Arduino Serial Log connecting to the hotspot, receiving the data, and updating it’s value to the current time.

This allowed me to access each key-value in the JSON easily, and save it to set the parameters in our Neopixels lights function. Below you can see a glimpse of how it went for saving the data for Dawn. I later expanded this to include an SD card in order to save the dat and access it later in case I did not have an internet connection. Mostly as a fail-proof asset.


int dawnR, dawnG, dawnB;
long dawnMillis;
JSONVar myDataObject;

JSONVar apiSunTimesRequest(JSONVar myDataObject) {
  // assemble the path for the GET message:
  String path = "/sun";

  // send the GET request
  Serial.println("making GET request");
  httpclient.get(path);

  // read the status code and body of the response
  int statusCode = httpclient.responseStatusCode();
  String response = httpclient.responseBody();
  Serial.print("Status code: ");
  Serial.println(statusCode);
  Serial.print("/sun Response: ");
  Serial.println(response);

  //Write the Data to the SD Card
  writeToSD(response);

  // parse the string into a JSONVar object:
  myDataObject = JSON.parse(response);

  dawnMillis = myDataObject["dawn"]["time"]["ms"];
  
  // Set the color for each event
  dawnR = myDataObject["dawn"]["color1"]["r"];
  dawnG = myDataObject["dawn"]["color1"]["g"];
  dawnB = myDataObject["dawn"]["color1"]["b"];
   
    return  myDataObject;
  }
}

apiSunTimesRequest(myDataObject);

Form

I went though several iterations in order to get to a form which satisfied my thirst for a minimal horizon representation. I used blender in order to get a dimensionality and feel for what a wanted, and later used Illustrator in order to create the necessary shapes to later cut the shape with wood.

I quickly discarded the circle idea, and rather went for a more “horizon” kind of look. Such as this one taken by NASA:

https://www.abc.net.au/news/image/4688718-3x2-940x627.jpg

When I was satisfied with my 3D model, I decided to makes some illustrator sketches to start building the form . The construction would consist of several wooden layers attached together to achieve the required volume. The ‘Front Side’ , or show side, would have no markings on it, the remaining layers would be the main structure. These would be cut with laser to acquire the best precision possible, and would also allow me to design the frame in order to contain the components out of view.

I also started drawing out possible angles and the necessary depth of the volume, translating into how many layers of wood I would need. I decided on six layers of wood, each with a depth of 6mm. As you can see below, my idea was to make a 45 degree angle in the middle layers in order to place the lights on top

Very illustrative explanation of the position of the lights on the device. Side view above and front view below.
Initial measurements and making Pythagoras proud.
Final calculations.

So at first I just played around with the shape of each of the layers on top of each other:

Playing around.
Displaying each individual layer below the whole structure.

Getting a feel on how I would fit the components inside. As a minimum, the leanest slice would at least have to have 2.6 cms, So that was the measure I used as the scale for the other slices.

Thought about some text on it. Well, maybe not.
Getting there. You can see the cuts for this prototype below.
First attempts failed.
First attempts failed.

After several failed cuts, designs, and a lot of illustrator, I finally arrived at the design below, which divided each of the 5 “out-of-view” pieces to be cut into three separate pieces, each one with a hole for wooden dowels.

The current prototype design.
Current prototype exploded view display.
Current prototype exploded view display.

Production

The Strips

The strips come in a silicon enclosure, so I cut it off to have more access to the strip itself. The enclosure is so nice I actually felt sad about having to cut it. Besides, it cost a lot.

Both strips spread out.
The silicone enclosure is so nice.
Cutting the strips!

I then made a little jig in order to be able to keep my lights a distance away while I still worked on them from my computer. See it below:

Lighting jig solder.
The lighting jig in action.

The structure

First approaches:

Failed design:

Testing the different angles for my lights’ placement using the router table.
Failed print #2
Not as accurate as planned….
Observe the 45 degree angle on the right vs the uncut version on the left.

After 3 different failed cuts, I arrived at this design. Look at that beauty:

So smooth.
This time I kept the pieces together. I would glue them and then take them away.
Clearing the path inside.
Some glue to keep it all together.
It stands by it’s own. Proud parent here.

Putting it all together

I pasted the strips on the device using double-sided tape, and also sent the connecting cables inside the frame to the Arduino compartment as you can see below.

The power,GND, and input cables crawling into the frame.
Fitting the cables from the lights to the Arduino through the frame.
IT LOOKS GOOD!
Gorgeous, the strips fit perfectly. Maybe I should trim the cables though.
Drilling the hole for the power supply plug.
All of it fits snuggly into place.
Debugging the device.

Finishing it up

So….How does it look?

Horizonte.

HUGE THANKS TO:

  • Jeff Feddersen
  • Benjamin Light
  • Schuyler Devos

API Website/ Server : https://horizonte-api.herokuapp.com/

Github API Repository: https://github.com/lacouture100/Horizonte-API

API Website/ Server : https://horizonte-api.herokuapp.com/

Github API Repository: https://github.com/lacouture100/Horizonte-API

Github project Repository: https://github.com/lacouture100/ITP-Time/tree/master/MidTerm

Categories
Personal Work

Luminaria

Luminaria


Hardware: Oculus Quest 2
Software: Unity3D, Python, C#
Development time: 3 days


Luminaria is a playful experiment that uses several natural language processing techniques to generate random combination of ideas related to the art and tech world. I used a python script to scrape every blog post on the Creative Applications Network website and over 3000 tweets from the amazing MagicRealismBot in order to use Markov chain algorithms and Tracery to forge new interesting combinations of text. You can read more about the process, including code and examples below.

.

Process

Creative Applications Network

You can follow along with this notebook I made in Google Collab. I decided to gather all of the blog entry abstracts from the blog. You can identify them in the image below as the short abstracts of text you see below each title. After scraping the 147 entries, I made a CSV file out of them so I could take a better look.

I noticed most of the entries (or at least the ones I was interested in) followed a similar pattern. “X Name” is a “Y adjective” “Z New Media project”. I made a small diagram of it below.

Right away I thought this type of one-line format (after cleaning up the data a bit) would mix perfectly with Magic Realism Bot’s posts. So I took all of those and formatted them into a format acceptable by Spacy and to be processed with the Markov chain algorithm. I then proceeded to scrape tweets from the MagicRealismBot on Twitter.

Magic Realism Bot

I will not go into much detail about how I scraped it, since it is commented in the notebook. I obtained about 3200 tweets, which I took a screenshot of below.

Spacy, Tracery and the fun part

After having both my sources, I joined them into one CSV file. I processed the file using Spacy and Allison Parrish’s guide for corpus-driven narrative generation. The whole collection was about 4800 entries.

I also used a copy of Allison’s notebook. Using Spacy I identified entities, as well as actions, verbs, objects, and other linguistic items, which I used as input for Tracery.

I made a couple of tests to see how it would go. You can see some of the results below

You can see some of my favorites below:

“An interactive installation that facilitates collaboration between a human and a puddle of alcohol.”

Other remarkable examples:

A bisexual fisherman falls in love with the use of CCTV.

A professor reads a poem about an arduino that can destroy metaphysics.

A new life as a performance.

A theologian discovers that Wikipedia does not exist.

The dancer’s body is extended and manipulated as a tool to quantify the world.

An interactive installation and performance inspired by light rays traveling in a latent space of situations.

A project explores possible alternatives of how we experience the materiality of nature through the mediums of fiction.

Exploring behavior-based design systems that are self-aware, mobile, and self-structure / assemble.

To compensate for the lack of material I had from the Blog, I had to duplicate those entries several times, as well as some of the examples shown before. By the end it came out to a 3200(MRbot) vs. 1600 entries.(creativeappsnet + handpicked generated).

Output?

I came around this talk by Kate Compton (creator of Tracery) who lead the most enlightening discussion about procedural generation, and it dawned on me that I did not want to leave the output of this experiment only in text.

Through this VR experiment, I included several elements I became captivated by earlier this year. Such as the sense of waiting present in Epitaph, or the idea of spatial and environmental storytelling in Bitsy. I felt some of these generated ideas were brilliant in their own way, and deserved more attention that could not be afforded through a computer screen.

Ideally, each of these beams of light generate a set of ideas that vary in parameter values. Ideally, all of them could span a large area of the generation latent space. You would be able to walk to other beams of light and pick up some of these and keep them.

You can see how the quick prototype looked below.

Categories
Computational Approaches to Narrative

NaNoGenMo

…or 55 places the sun won’t shine on

This assignment is meant to be an entry to the National Novel Generation Month contest. The premise is quite simple: use code to generate a novel of 50k+ words, and submit the novel and code. I will explain in more detail below. As finals are kind of creeping in, I found humor and comfort in this project. Honestly, I never expected it to be so entertaining and exceptionally comical in a not so obvious way (my roommates did not share the feeling). I wanted my NaNoGenMo (National Novel Generation Month) entry to have a magical realism style to it. In a sense, I took this project as a building block towards my final project, and I shall publish a blog post on that next week.

In any case, I decided to use train GPT-2 on a corpus of text that consisted of several short stories from Jorge Luis Borges, such as “The Aleph”, in addition to two novels from Gabriel Garcia Marquez : “A hundred years of solitude” and “Love in times of cholera”. I also attempted adding work from Isabel Allende, as well as Jose Saramago. I had only read these authors in spanish before, and though I found Allende captivating in english as well, it did not feel the same. With Saramago, on the other hand, once I added “Blindness” to the mix the resulting text seemed quite violent. I might use it for my final, however for this long text it seemed unnecessary.


After tuning the model to my taste, (you can find my notebook on the Github repository) I decided to produce several short stories with the same starting prompt: “The sun had not shone on that part of the town for many years.” and cut them off at 55. I later proceeded to fix the style (too many random “/n” popped in the middle of a sentence) using the Atom editor to replace these characters with a standard “space” character. I also trimmed extra words at the end of each small story until I reached a punctuation mark. That way they would appear to be tidier, more of a short story, and less like the author fainted mid-sentence.

In the GitHub repository you’ll find a compiledText.txt which contains the corpus. Novel.pdf contains “55 places the sun won’t shine on”, and you can also see the google collab notebook and the zipped trained model. I leave you with some extracts from the novel:

====================

4

The sun had not shone on that part of the town for many years. The marble houses were on fire. In an instant panic spread through the places where gringos were hiding, dragging their feet and bent over by their neighbors, and the panic became a dragon’s tail as one compact wave ran against another which was spinning in the opposite direction to the direction of the others.  At nightfall the survivors were lying face down on the ground, covered with a compact universe of tiny yellow flowers, and the only animal that could think of after all was a maneater. They slept in rectangular arrangements, facing each other in silence. On Friday the same men slept in identical arrangements under the same palm roof, but one night they slept in the same place, under the same bed, and on Saturday they were on the point of perishing under the lash of death. By dawn, they had killed two birds. They had killed a mule and a calf. They each had killed a mule and a calf. It seemed impossible to imagine the number of possible consequences.

====================

====================

22

The sun had not shone on that part of the town for many years. On the following day, however, the inhabitants of Macondo woke up in a kind of angelic stupor that had them ringed by earrings, bracelets, and rings made of bone in order to guess distances and render aid in the building of the church. The inhabitants of Macondo who stayed in the Community until the end of the year 1894 were on the verge of forgetting their sense of social well-being because they could not sleep and felt tormented by the notion of parchments rotting with the irremediable plague of insomnia. José Arcadio Buendía, without giving up his science, continued his work as if it were the only thing left in the whole town, the decisive in that respect owing not to the natural forces but to the supernatural proliferation of the village. 

======================