def METHOD_NAME(self, data):
    if np.array_equal(data, self.last_frame):
        return
    if data.size != self._config["pixel_count"] * 3:
        raise Exception(
            f"Invalid buffer size. {data.size} != {self._config['pixel_count'] * 3}"
        )
    # Get the config values to variables
    starting_addr = self._config["starting_addr"]
    # Convert data to rgb tuple
    colors = [(int(r), int(g), int(b)) for r, g, b in data]
    # Create array for messages
    messages = []
    # Go though all the pixels
    for i in range(self._config["pixel_count"]):
        # Get the rgb values from the colors array
        r, g, b = colors[i % len(colors)]
        if self._config["send_type"] == "One_Argument":
            send_data = OscMessageBuilder(
                self.__generate_path(address=starting_addr + i)
            )
            send_data.add_arg([r / 255, g / 255, b / 255])
            messages.append(send_data)
        elif self._config["send_type"] == "Three_Arguments":
            # this one needs editing + saving the device after EVERY restart (atm) for some reason
            send_data = OscMessageBuilder(
                self.__generate_path(address=starting_addr + i)
            )
            send_data.add_arg(r / 255)
            send_data.add_arg(g / 255)
            send_data.add_arg(b / 255)
            messages.append(send_data)
        elif self._config["send_type"] == "Three_Addresses":
            send_data_r = OscMessageBuilder(
                self.__generate_path(address=starting_addr + (i * 3))
            )
            send_data_r.add_arg(r / 255)
            send_data_g = OscMessageBuilder(
                self.__generate_path(address=starting_addr + (i * 3) + 1)
            )
            send_data_g.add_arg(g / 255)
            send_data_b = OscMessageBuilder(
                self.__generate_path(address=starting_addr + (i * 3) + 2)
            )
            send_data_b.add_arg(b / 255)
            messages.append(send_data_r)
            messages.append(send_data_g)
            messages.append(send_data_b)
        elif self._config["send_type"] == "All_To_One":
            if len(messages) == 0:
                send_data = OscMessageBuilder(
                    self.__generate_path(address=starting_addr)
                )
                send_data.add_arg([r / 255, g / 255, b / 255])
                messages.append(send_data)
            else:
                send_data = messages[0]
                send_data.add_arg([r / 255, g / 255, b / 255])
                messages[0] = send_data
    for message in messages:
        try:
            self._client.send(message.build())
        except AttributeError:
            self.activate()
            continue
    self.last_frame = np.copy(data)