The idea for this project was to create a chat application where you have your words twisted by a famous TV show character. It would be fun to lose control of how your words get delived to people. Have your words twisted and take the group conversation in a completely unanticipated direction.
I started off with basing the chats on a more "friends" show style conversation. Because ofcourse 10 seasons weren't enough. I scraped the friends transcripts from here using cheerio. And trained a new model on RunwayML on those transcripts.
Going futher, I do plan to replicate the same experience with other shows too. Where the users can choose which kind of conversation they would like to be a part of.
Try out the chat here- Set a topic for the chat and invite your friends by sharing the link
Eg: I gave it a prompt of Joey saying "I am not feeling well today."
Once I hosted the model, I could communicate with it via it's REST API.
- The person initiating the chat sets the topic for the chat eg: "The one where __________"
- The host then invites other friends using the link.
- They all land on a screen where they are asked to choose the character which would twist their words and also enter their own name.
- Let the twisted chat begin.
Behind the scenes
- If a user called "Mary" has picked "Monica" all her texts will be redone by monica.
- Before sending the prompt to runway the server replaces all the personal names with the respective character names. Eg: If another user Tom picked Joey "Mary: I hate Tom and Tom's cat" becomes "Monica: I hate Joey and Joey's cat" where Tom has picked Joey.
- The response from runway is modified in the opposite way. ie replacing character names with the respective users before it gets sents to all the clients. eg: "Monica: I hate Joey and Joey's cat" becomes "Mary: I hate Tom and Tom's cat" becomes
- The server for the app is made using NodeJS and SocketIO
- The client is made on VueJS and the routing is handled by vue-router
The server maintains a reference to all chat rooms. A Chatroom has the following structure
|-- Topic |-- Messages | |- [{ | user:'Tom', | character:'Joey', | message:'Hi' | }] |- onlineUsers | |- [{ | socket: | user:'Tom', | character:'Joey' | }]
It communicates with the sockets and runway
npm install
npm run serve
npm run build
npm run lint