def METHOD_NAME(self, packet) -> None:
    if isinstance(packet, FramePacket):
        bgr_frame = packet.decode()
        rgb_frame = bgr_frame[..., ::-1]
        frame = np.dstack((rgb_frame, np.full(bgr_frame.shape[:2], 255, dtype=np.uint8)))
        viewer.log_image(packet.name, frame)
    if type(packet) == IMUPacket:
        viewer.log_imu(*packet.get_imu_vals())
    elif type(packet) == PointcloudPacket:
        if packet.colorize_frame is not None:
            bgr_frame = packet.colorize_frame
            rgb_frame = bgr_frame[..., ::-1]
            frame = np.dstack((rgb_frame, np.full(bgr_frame.shape[:2], 255, dtype=np.uint8)))
            viewer.log_image(f'color', frame)
            viewer.log_points(packet.name, packet.points.reshape(-1, 3) / 1000, colors=rgb_frame.reshape(-1, 3))
        else:
            viewer.log_points(packet.name, packet.points.reshape(-1, 3) / 1000)
    vis_bbs = []
    for i, obj in enumerate(self.objects):
        if type(obj) == VisBoundingBox:
            vis_bbs.append(obj)
        elif type(obj) == VisDetections:
            pass
        elif type(obj) == VisText:
            pass
        elif type(obj) == VisTrail:
            pass
        elif type(obj) == VisLine:
            pass
        elif type(obj) == VisCircle:
            pass
        elif type(obj) == VisMask:
            pass
    if 0 < len(vis_bbs):
        rects = [vis_bb.bbox.clip().denormalize(frame.shape) for vis_bb in vis_bbs]
        # Convert from (pt1,pt2) to [x1,y1,x2,y2]
        rects = [np.array([*rect[0], *rect[1]]) for rect in rects]
        # BGR to RGB
        colors = [np.array(vis_bb.color)[..., ::-1] for vis_bb in vis_bbs]
        labels = [vis_bb.label for vis_bb in vis_bbs]
        print(rects)
        viewer.log_rects(
            f"{packet.name}/Detections",
            rects=rects,
            rect_format=RectFormat.XYXY,
            colors=colors,
            labels=labels
        )
    self.reset()