# QueueCube QueueCube is a web frontend for [mpv](https://github.com/mpv-player/mpv). It allows you to remotely manage mpv's playqueue as well as the ability to search YouTube via a locally running [Invidious](https://github.com/iv-org/invidious) instance. ![queuecube user interface](screenshots/queuecube.png) ## Running The easiest way to run QueueCube is by using Docker. An MPV instance is created in the Docker container, so all you have to do is make it so the MPV instance can access your host's soundcard. On Linux, this is accomplished by mapping the PulseAudio socket to the container: ``` volumes: - ~/.config/pulse/cookie:/root/.config/pulse/cookie - /var/run/user/1000/pulse:/var/run/pulse ``` ### Building the Docker image ``` docker build -t queuecube:latest . ``` If not using docker-compose, create an instance of the container by using `docker create` using the volume mapping specified above for mapping the PulseAudio socket: ``` docker create -p 8080:3000 -v /run/user/1000/pulse:/var/run/pulse -v ~/.config/pulse/cookie:/root/.config/pulse/cookie --name queuecube queuecube:latest ``` On some systems, you may need to add `--security-opt seccomp=unconfined` to allow containerized processes to write to your host's PulseAudio socket. Once running, you should be able to access the UI via http://localhost:8080. ### Video QueueCube supports video as well. Just set the environment variable `ENABLE_VIDEO=1`. #### Video + Docker When running in a Docker container, there are a few extra steps needed to make this work. First, make sure you're passing in `/dev/dri` as a volume in the container. Since mpd is capable of rendering directly to the GPU, this would be the most performant. ``` volumes: - /dev/dri:/dev/dri ``` as well as the X11 socket: ``` - /tmp/.X11-unix:/tmp/.X11-unix ``` In order to be able to interact with the X session from the Docker container, you may also need to explicitly allow connections to the host via: ``` $ xhost +local: ``` Since the container will also need to be able to access the GPU device, it may be required to run the container in "privileged" mode: ``` privileged: true ``` (or `--privileged`). On Podman rootless, it seems to be enough to just run it with the "unconfined" security profile (`seccomp=unconfined`).