ACMX2 is distributed as a Podman container for Linux. This makes installation simple and avoids dependency issues, but it requires an NVIDIA GPU.
Before running ACMX2, your system must have:
- Linux (x86_64)
- NVIDIA GPU
- NVIDIA proprietary drivers installed on the host
- Podman
- NVIDIA Container Toolkit (for Podman)
- X11 or XWayland
- Webcam device (
/dev/video0) for camera input - Audio input device (microphone)
β οΈ Important This build uses NVIDIA CUDA. It will not run on AMD or Intel GPUs.
podman pull ghcr.io/lostjared/acmx2:latestcd podman
chmod +x run-acmx2.sh./run-acmx2.shThe script:
- Enables NVIDIA GPU acceleration
- Passes through camera and audio devices
- Opens the ACMX2 interface window on your desktop
This container includes NVIDIA CUDA libraries.
Use of the container is subject to the NVIDIA Deep Learning Container License: https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license
By pulling or running this container, you agree to NVIDIAβs license terms.
Verify:
nvidia-smipodman pull ghcr.io/lostjared/acmx2:latest
cd podman
./run-acmx2.shacidcam-gpu is a high-performance, real-time video manipulation engine designed to push the boundaries of psychedelic glitch art. Part of the ACMX2 and libmx2 ecosystem, it offloads complex glitch filters to NVIDIA GPUs, enabling fluid, high-resolution visual transformations at 60+ FPS. Requires you have OpenCV 4 compiled with CUDA support.
The original project brought a massive library of "glitch" filters to digital artists. However, as resolutions climbed to 4K and filter stacks became more complex, CPU-based processing hit a bottleneck.
acidcam-gpu solves this by:
- Parallelizing the Chaos: Using custom CUDA kernels to process millions of pixels simultaneously.
- Language: C++20
- Parallel Computing: NVIDIA CUDA (Optimized for RTX 2070)
- Graphics API: OpenGL / SDL (Hardware-accelerated rendering)
- Format Support: Native MX2 MXMOD 3D model parsing for real-time geometry glitching.
This project is built specifically for the NVIDIA ecosystem to leverage:
- Shared Memory: Fast on-chip memory to speed up neighborhood-based filters.
- Massive Throughput: Harnessing thousands of CUDA cores to apply multiple glitch layers in a single pass.
- Zero-Copy Interop: High-speed texture sharing between CUDA and OpenGL.
- Visual User Interface Simple to use User interface
- Command line tool Command line tool
This project is developed and tested on Bazzite Linux using Arch Linux containers via Distrobox.
- NVIDIA GPU: RTX 20-series or newer.
- Drivers: NVIDIA Proprietary Drivers (v535+).
- Environment: Arch Linux (with
cuda,opencv(compiled with CUDA support),sdl2,sdl2-ttf/sdl2-mixer,glm,cmake,gcc(g++),qt6(for the interface) installed viapacman).
#!/bin/sh
git clone https://github.com/lostjared/libmx2.git
cd libmx2/libmx
mkdir build && cd build
cmake .. -DEXAMPLES=OFF -DOPENGL=ON
make -j$(nproc)
sudo make install
cd ../../../
git clone https://github.com/lostjared/acidcam-gpu.git
cd acidcam-gpu/MXWrite
mkdir build1 && cd build1
cmake .. && make -j$(nrpoc) && sudo make install
cd ../..
cd acidcam-gpu
mkdir build && cd build
cmake ..
make -j$(nproc) && sudo make install
cd ../../
cd ACMX2
mkdir build && cd build
cmake .. -DAUDIO=ON
make -j$(nproc) && sudo make install
cd ../interface
mkdir build && cd build
qmake6 ..
make -j $(nproc)
cp -rf ../data/ .
cd ../../
echo "completed..."Early Example (as a GIF)
https://lostsidedead.biz/activity/shader.pack.2025.12.07.zip
https://lostsidedead.biz/activity/models.2025.12.08.zip
This guide covers the setup and usage of the ACMX2 / Acidcam-GPU development environment on Bazzite. It details how to build the container, manage file paths, and ensure full hardware access (NVIDIA GPU, Webcam, and X11 Display).
Before launching the container, you must establish a specific folder structure on your Bazzite host. This ensures your code is persistent and files can be easily transferred.
Open a terminal on your host and run:
# Create a "scratch pad" for transferring files (videos, models, loose shaders)
mkdir -p ~/container_shareFolder purposes:
~/container_share
Shared volume. Files placed here are visible to both the host and the container.
Navigate to the directory containing your Containerfile and build the image. We tag it as dev to match the launch script.
podman build -t acmx2-cuda-opencv:dev -f Containerfile .Use this script to launch the container. It handles the complex flags required for GPU, Webcam, and X11/Wayland compatibility.
Create a file named acn20run.sh on your host:
#!/bin/bash
xhost +local:docker
set -euo pipefail
IMAGE="ghcr.io/lostjared/acmx2:latest"
# 1. Get Host Audio Paths
PULSE_SOCKET="/run/user/$(id -u)/pulse/native"
PULSE_COOKIE="$HOME/.config/pulse/cookie"
HOST_SHARE="$HOME/container_share"
if command -v xhost >/dev/null 2>&1; then
xhost +si:localuser:root >/dev/null 2>&1 || true
fi
# 2. Check if cookie exists
if [ ! -f "$PULSE_COOKIE" ]; then
echo "Warning: Pulse Cookie not found at $PULSE_COOKIE"
fi
# 3. Ensure the share directory exists on host
mkdir -p "$HOST_SHARE"
exec podman run -it \
--security-opt=label=disable \
--net=host \
--cap-add=SYS_NICE \
--cap-add=SYS_RESOURCE \
--device nvidia.com/gpu=all \
--device /dev/video0 \
--device /dev/snd \
-e DISPLAY="${DISPLAY:-}" \
-e QT_QPA_PLATFORM=xcb \
-e XDG_RUNTIME_DIR=/tmp/xdg \
-e PULSE_SERVER=unix:/tmp/pulse-socket \
-e PULSE_COOKIE=/tmp/pulse-cookie \
-v "$PULSE_SOCKET":/tmp/pulse-socket \
-v "$PULSE_COOKIE":/tmp/pulse-cookie \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v "$HOST_SHARE":/root/share \
"$IMAGE" bash -lc '
mkdir -p /tmp/xdg
chmod 700 /tmp/xdg
# Double check audio inside before launching
echo "Checking audio connection..."
pactl info || echo "pactl failed, continuing anyway..."
exec /opt/src/acidcam-gpu/ACMX2/interface/build/interface
'Make it executable:
chmod +x acmx2-run.sh- Run
./interface
-
External assets (models, videos)
- Copy files to
~/container_shareon the host. - Access them in the container from:
/root/share/test_video.mp4
- Copy files to
- Binaries / render output
Copy output files to/root/shareinside the container.
They will appear in~/container_shareon the host.
Error:
Could not open camera index: 0
Fix:
Check available devices:
ls /dev/video*If your camera is /dev/video2, update the --device flag in run.sh.
Error:
qt.qpa.xcb: could not connect to display
Fix:
Ensure the following line exists in run.sh:
xhost +local:Re-run ./run-acmx2.sh to refresh permissions.
Files created inside the container are owned by root.
Fix ownership on the host:
sudo chown -R $USER:$USER ~/ACMX2This setup is designed to keep your development workflow fast and reproducible while maintaining full access to GPU acceleration, camera devices, and graphical output.
