top of page

'If you leave it up to the audience, they can kill you'

‘If you leave it up to the audience, they can kill you’ is an interactive artwork that explores how distance and anonymity affects how we interact and communicate online.

'If you leave it up to the audience, they can kill you'

About the Project

‘If you leave it up to the audience, they can kill you’ is an interactive artwork that invites viewers to nurture or destroy a rose through the power of their words. Audience members interact by sending the rose a message via an online interface styled as a social media site. Messages that carry a positive sentiment result in a drop of water being released to the rose from an IV line, whereas messages carrying a negative sentiment will trigger the release of poison to the rose. Over time, the rose will flourish or die as a combined result of the audiences’ comments.

Image of visitors interacting with artwork at The Island, Bristol. Image credit: Artist

The artwork is a contemporary reimagining of Marina Abramovic’s 1974 performance piece ‘Rhythm 0’, a 6 hour performance piece during which time the artist stood still and invited the audience to do whatever they liked to her. She had laid out 72 items on a table, including a rose, feather, perfume, as well as a scalpel, a gun and a bullet. Abramovic stated that the purpose of the performance was to discover ‘how far the public would go’. She later stated, ‘What I learned was that ... if you leave it up to the audience, they can kill you’.

Image link: 

‘If you leave it up to the audience, they can kill you’ is a contemporary reimagining of ‘Rhythm 0’ contextualised in today’s hyper-connected world. It is inspired by the psychology of online behaviour and the emergence of collective behaviours such as ‘trolling’ and celebrity culture. It explores how distance and anonymity affects how we interact and communicate online, and seeks to highlight and question the power of the public to nurture or destroy.


I began by creating an MVP of the project using a Pi Zero W, two leds, the Twitter API and the Python library ‘Tweepy’ which has built-in sentiment analysis. My script listened for Tweets to certain users, cleaned the body of the tweets and then analysed its sentiment. It would then trigger either the red or green led to light up, depending on the sentiment of the message.

Images showing the initial setup for the MVP using a Pi Zero W and two leds

Shortly after making the MVP, free access to the Twitter API was revoked. The solution was to create a Twitter-style website which sends messages to an MQTT server on I worked with my collaborator Rod Dickinson who focused on the HTML and CSS layout and design while I adapted the code on the Raspberry Pi to listen to new messages on the MQTT feed and perform sentiment analysis using the NLTK library.

Twitter-style web interface. Credit: Artist

# import the necessary modules
import random
from paho.mqtt import client as mqtt_client
from nltk.sentiment import SentimentIntensityAnalyzer
import json
import RPi.GPIO as io
import board
import time

# define the pins for the water and poison pump
waterPump = 27
poisonPump = 22

# set pump pins as outputs
io.setup(waterPump, io.OUT)
io.setup(poisonPump, io.OUT)

# define the MQTT info
broker = ''
port = 1883
topic = "sarahselby/feeds/rose_piece"
# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{random.randint(0, 100)}'
username = 'sarahselby'
password = 'xxxxx'
sia = SentimentIntensityAnalyzer()

# function to be called when 
def activateLed(sentiment):

	print("activateLed function called")

	# get the global pump variables to use within function
	global waterPump
	global poisonPump

	# check whether the sentiment of the message was above zero (positive)
	if sentiment > 0:
		# turn water pump on for 0.3 seconds
		io.output(waterPump, True)
		print("Positive message recieved, water pump activated")
		io.output(waterPump, False)
	# if sentiment was below zero (negative)...
	elif sentiment < 0:
		# turn poison pump on for 0.3 seconds
		io.output(poisonPump, True)
		print("Negative message recieved, poison pump activated")
		io.output(poisonPump, False)

# connect to mqtt
def connect_mqtt():
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
            print("Failed to connect, return code %d\n", rc)

    client = mqtt_client.Client(client_id)
    client.username_pw_set(username, password)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client

# recieve message
def on_message(client, userdata, message):
    mqtt_dict = json.loads(message.payload.decode()) 
    msg = mqtt_dict["msg"]
    # do sentiment analysis

# do sentiment analysis
def analyse_sentiment(msg):
	# get polarity scores using NLTK library
    sia_score = sia.polarity_scores(msg)
    # check if compound (combined) score indicates a positive or negative message
    if sia_score["compound"] > 0:
        print("result = positive")
        print("result = negative")
    # call function to activate the pumps

def run():
    client = connect_mqtt()
    client.on_message = on_message #attach function to callback

if __name__ == '__main__':

Updated code using and NLTK to analyse messages to the rose. Source:

Previously I had attempted to make this artwork using solenoid valves to control the flow of the water to the rose. These were ineffective due to the lack of pressure supplied by the IV bags. I instead opted for peristaltic pumps, which are not reliant on pressure and work by using a motor to push liquid along a tube. I used a DC motor powered version instead of a stepper motor as exact quantity is not paramount for this project and the cost difference was significant. I used relays to control the motors as Pi pins output 3.3v as my motors operate at 5v. They would also likely draw more power than the Pi is able to supply, so requires a separate power source.

Peristaltic pump mechanism. Image source:

To create the base and structure, I used MakerCase as it allows for rapid prototyping and measurement adjustments. I first cut the files using cardboard to check size and fit, before opting for 3mm white acrylic to create the final structure. I designed the supports for the IV poles using Tinkercad before 3D printing them.

Laser cutting 3d base. Image credit: Artist

bottom of page