2025-06-11 20:27:42 -07:00
2025-06-11 20:27:42 -07:00
2025-05-12 20:27:09 -07:00
2025-02-23 11:14:02 -08:00
2025-03-02 18:54:17 -08:00
2025-02-23 19:32:32 -08:00
2025-03-02 18:54:17 -08:00
2025-04-24 16:24:22 -07:00
2025-02-23 11:45:40 -08:00

QueueCube

QueueCube is a web frontend for mpv.

It allows you to remotely manage mpv's playqueue as well as the ability to search YouTube via a locally running Invidious instance.

queuecube user interface

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).

Description
A simple web interface for remotely controlling an MPV instance
Readme 1.2 MiB
Languages
TypeScript 47.6%
Swift 46%
Nix 4.1%
Shell 0.7%
Dockerfile 0.5%
Other 1.1%