Added api support and also support for 2fa with recovery codes.
Posts by spupuz
-
-
Hey man all fine so far?
-
OK let me know if all is fine, and what's your feedback, and in case for any other issue Open an issue in github

-
log if necessary (still some error in logs), but webGUI load ( I do not know hog to log user/Password)
You should get a first login and password setup page so, my suggestion is do a
to delete volumes and do a
to restart and go to http:/!ip:port
You should get the first login setup
-
So happy it worked let me know if you like it and any deedback
-
-
Display More
done, same error.
all the logs:
notice that backend_vibenvr-backend.log is empty, and my kernell is not old is new and promox:
This error affects the engine (not the database) and is the same permission issue:
What's happening:
- Uvicorn (the Python web server) tries to start
- Python's asyncio needs to create an internal "self-pipe" using
- The pve kernel blocks this system call for security reasons
- The engine crashes and Docker restarts it in a loop (you can see repeated attempts every ~3 seconds)
Summary:
Component Error Cause PostgreSQL Kernel blocks Unix socket creation Engine Kernel blocks socketpair syscall Both are caused by security restrictions in the pve kernel.
✅ Solution
The user needs to add
to all containers in
:
Code
Display Moreyaml db: image: postgres:15-alpine privileged: true # ... engine: image: spupuz/vibenvr-engine:latest privileged: true # ... backend: image: spupuz/vibenvr-backend:latest privileged: true # ...Then restart:
🔧 If privileged mode still doesn't work
The issue is at the host system level (pve kernel). The user should try:
Code
Display Morebash # Test if Docker can create sockets docker run --rm alpine sh -c "apk add python3 && python3 -c 'import socket; socket.socketpair()'" # If it fails even with privileged, try enabling unprivileged user namespaces: sudo sysctl -w kernel.unprivileged_userns_clone=1 # Make it permanent echo "kernel.unprivileged_userns_clone=1" | sudo tee /etc/sysctl.d/99-userns.conf sudo sysctl --system -
cab you try with these parameters:
Code
Display Moredb: image: postgres:15-alpine security_opt: - seccomp:unconfined - apparmor:unconfined # ... engine: image: spupuz/vibenvr-engine:latest security_opt: - seccomp:unconfined - apparmor:unconfined # ... backend: image: spupuz/vibenvr-backend:latest security_opt: - seccomp:unconfined - apparmor:unconfined # ...
or if this does not work then test with: -
-
still error:
Code
Display MoreNetwork vibenvr_vibe-network Creating Network vibenvr_vibe-network Created Container vibenvr-engine Creating Container vibenvr-db Creating Container vibenvr-engine Created Container vibenvr-db Created Container vibenvr-backend Creating Container vibenvr-backend Created Container vibenvr-frontend Creating Container vibenvr-frontend Created Container vibenvr-db Starting Container vibenvr-engine Starting Container vibenvr-db Started Container vibenvr-engine Started Container vibenvr-db Waiting Container vibenvr-db Error dependency db failed to start dependency failed to start: container vibenvr-db is unhealthy *** ERROR #1 *** END OF LINElog: vibeNVR.zip
Used last docker compose and properly configured the .env?
-
raulfg3 were you able to make it work?
-
try this and provide output of command docker logs vibenvr-dbCode
Display More# Production Docker Compose - Uses pre-built images from Docker Hub # Use this when you want to run VibeNVR without building from source services: frontend: image: spupuz/vibenvr-frontend:latest container_name: vibenvr-frontend ports: - "${VIBENVR_FRONTEND_PORT:-8080}:80" volumes: - ${VIBENVR_DATA:-vibenvr_data}:/data networks: - vibe-network depends_on: - backend restart: always backend: image: spupuz/vibenvr-backend:latest container_name: vibenvr-backend ports: - "${VIBENVR_BACKEND_PORT:-5005}:5000" volumes: - ${VIBENVR_DATA:-vibenvr_data}:/data # - /etc/localtime:/etc/localtime:ro # Removed for cross-platform compatibility, use TZ environment: - DATABASE_URL=postgresql://vibenvr:vibenvrpass@db:5432/vibenvr - TZ=Europe/Rome - SECRET_KEY=${SECRET_KEY:-vibe_secure_key_9823748923748923_change_in_prod} - WEBHOOK_SECRET=${WEBHOOK_SECRET:-vibe_secure_key_9823748923748923_change_in_prod} depends_on: db: condition: service_healthy engine: condition: service_started restart: always command: > sh -c "mkdir -p /data/logs && chmod 777 /data/logs && touch /data/logs/backend.log && uvicorn main:app --host 0.0.0.0 --port 5000 2>&1 | tee -a /data/logs/backend.log" networks: - vibe-network # security_opt: # - seccomp:unconfined # Uncomment on older hosts/kernels (e.g. Synology, QNAP) if you see PermissionError engine: image: spupuz/vibenvr-engine:latest container_name: vibenvr-engine ports: - "5001:5001" volumes: - ${VIBENVR_DATA:-vibenvr_data}:/var/lib/vibe/recordings # - /etc/localtime:/etc/localtime:ro # Removed for cross-platform compatibility, use TZ environment: - BACKEND_URL=http://vibenvr-backend:5000 - TZ=Europe/Rome # Hardware Acceleration Settings - HW_ACCEL=true # Enabled for local GPU usage - HW_ACCEL_TYPE=${HW_ACCEL_TYPE:-auto} # auto, nvidia, intel, amd - WEBHOOK_SECRET=${WEBHOOK_SECRET:-vibe_secure_key_9823748923748923_change_in_prod} # GPU Device Passthrough (uncomment what applies to your system) # For Intel/AMD (VAAPI) on Linux: devices: - /dev/dri:/dev/dri # For NVIDIA (requires nvidia-container-toolkit): # deploy: # resources: # reservations: # devices: # - driver: nvidia # count: 1 # capabilities: [gpu] restart: always command: > sh -c "mkdir -p /var/lib/vibe/recordings/logs && touch /var/lib/vibe/recordings/logs/engine.log && python -u main.py 2>&1 | grep --line-buffered -v 'SEI type 764' | tee -a /var/lib/vibe/recordings/logs/engine.log" networks: - vibe-network # security_opt: # - seccomp:unconfined # Uncomment on older hosts/kernels (e.g. Synology, QNAP) if you see PermissionError db: image: postgres:15-alpine container_name: vibenvr-db environment: - POSTGRES_USER=vibenvr - POSTGRES_PASSWORD=vibenvrpass - POSTGRES_DB=vibenvr volumes: - ${VIBENVR_DB_DATA:-vibenvr_db_data}:/var/lib/postgresql/data healthcheck: test: [ "CMD-SHELL", "pg_isready -U vibenvr" ] interval: 5s timeout: 5s retries: 10 start_period: 30s networks: - vibe-network restart: always # security_opt: # - seccomp:unconfined # Uncomment on older hosts/kernels (e.g. Synology, QNAP) if you see PermissionError volumes: vibenvr_data: vibenvr_db_data: networks: vibe-network: driver: bridgeI have added a delay and more retry for db setup / startup let me know
-
log:
Code
Display Moredocker compose up -d ... Network vibenvr_vibe-network Creating Network vibenvr_vibe-network Created Container vibenvr-engine Creating Container vibenvr-db Creating Container vibenvr-engine Created Container vibenvr-db Created Container vibenvr-backend Creating Container vibenvr-backend Created Container vibenvr-frontend Creating Container vibenvr-frontend Created Container vibenvr-db Starting Container vibenvr-engine Starting Container vibenvr-engine Started Container vibenvr-db Started Container vibenvr-db Waiting Container vibenvr-db Error dependency db failed to start dependency failed to start: container vibenvr-db is unhealthy *** ERROR #1 *** END OF LINE
try this and provide output of command docker logs vibenvr-dbCode
Display More# Production Docker Compose - Uses pre-built images from Docker Hub # Use this when you want to run VibeNVR without building from source services: frontend: image: spupuz/vibenvr-frontend:latest container_name: vibenvr-frontend ports: - "${VIBENVR_FRONTEND_PORT:-8080}:80" volumes: - ${VIBENVR_DATA:-vibenvr_data}:/data networks: - vibe-network depends_on: - backend restart: always backend: image: spupuz/vibenvr-backend:latest container_name: vibenvr-backend ports: - "${VIBENVR_BACKEND_PORT:-5005}:5000" volumes: - ${VIBENVR_DATA:-vibenvr_data}:/data # - /etc/localtime:/etc/localtime:ro # Removed for cross-platform compatibility, use TZ environment: - DATABASE_URL=postgresql://vibenvr:vibenvrpass@db:5432/vibenvr - TZ=Europe/Rome - SECRET_KEY=${SECRET_KEY:-vibe_secure_key_9823748923748923_change_in_prod} - WEBHOOK_SECRET=${WEBHOOK_SECRET:-vibe_secure_key_9823748923748923_change_in_prod} depends_on: db: condition: service_healthy engine: condition: service_started restart: always command: > sh -c "mkdir -p /data/logs && chmod 777 /data/logs && touch /data/logs/backend.log && uvicorn main:app --host 0.0.0.0 --port 5000 2>&1 | tee -a /data/logs/backend.log" networks: - vibe-network # security_opt: # - seccomp:unconfined # Uncomment on older hosts/kernels (e.g. Synology, QNAP) if you see PermissionError engine: image: spupuz/vibenvr-engine:latest container_name: vibenvr-engine ports: - "5001:5001" volumes: - ${VIBENVR_DATA:-vibenvr_data}:/var/lib/vibe/recordings # - /etc/localtime:/etc/localtime:ro # Removed for cross-platform compatibility, use TZ environment: - BACKEND_URL=http://vibenvr-backend:5000 - TZ=Europe/Rome # Hardware Acceleration Settings - HW_ACCEL=true # Enabled for local GPU usage - HW_ACCEL_TYPE=${HW_ACCEL_TYPE:-auto} # auto, nvidia, intel, amd - WEBHOOK_SECRET=${WEBHOOK_SECRET:-vibe_secure_key_9823748923748923_change_in_prod} # GPU Device Passthrough (uncomment what applies to your system) # For Intel/AMD (VAAPI) on Linux: devices: - /dev/dri:/dev/dri # For NVIDIA (requires nvidia-container-toolkit): # deploy: # resources: # reservations: # devices: # - driver: nvidia # count: 1 # capabilities: [gpu] restart: always command: > sh -c "mkdir -p /var/lib/vibe/recordings/logs && touch /var/lib/vibe/recordings/logs/engine.log && python -u main.py 2>&1 | grep --line-buffered -v 'SEI type 764' | tee -a /var/lib/vibe/recordings/logs/engine.log" networks: - vibe-network # security_opt: # - seccomp:unconfined # Uncomment on older hosts/kernels (e.g. Synology, QNAP) if you see PermissionError db: image: postgres:15-alpine container_name: vibenvr-db environment: - POSTGRES_USER=vibenvr - POSTGRES_PASSWORD=vibenvrpass - POSTGRES_DB=vibenvr volumes: - ${VIBENVR_DB_DATA:-vibenvr_db_data}:/var/lib/postgresql/data healthcheck: test: [ "CMD-SHELL", "pg_isready -U vibenvr" ] interval: 5s timeout: 5s retries: 10 start_period: 30s networks: - vibe-network restart: always # security_opt: # - seccomp:unconfined # Uncomment on older hosts/kernels (e.g. Synology, QNAP) if you see PermissionError volumes: vibenvr_data: vibenvr_db_data: networks: vibe-network: driver: bridge -
I don't have this problems in 5 different installation I will look at it but I'm not able to reproduce it.
-
uncomment these line above in the following docker compose
Code
Display More# Production Docker Compose - Uses pre-built images from Docker Hub # Use this when you want to run VibeNVR without building from source services: frontend: image: spupuz/vibenvr-frontend:latest container_name: vibenvr-frontend ports: - "${VIBENVR_FRONTEND_PORT:-8080}:80" volumes: - ${VIBENVR_DATA:-vibenvr_data}:/data networks: - vibe-network depends_on: - backend restart: always backend: image: spupuz/vibenvr-backend:latest container_name: vibenvr-backend ports: - "${VIBENVR_BACKEND_PORT:-5005}:5000" volumes: - ${VIBENVR_DATA:-vibenvr_data}:/data # - /etc/localtime:/etc/localtime:ro # Removed for cross-platform compatibility, use TZ environment: - DATABASE_URL=postgresql://vibenvr:vibenvrpass@db:5432/vibenvr - TZ=Europe/Rome - SECRET_KEY=${SECRET_KEY:-vibe_secure_key_9823748923748923_change_in_prod} - WEBHOOK_SECRET=${WEBHOOK_SECRET:-vibe_secure_key_9823748923748923_change_in_prod} depends_on: db: condition: service_healthy engine: condition: service_started restart: always command: > sh -c "mkdir -p /data/logs && chmod 777 /data/logs && touch /data/logs/backend.log && uvicorn main:app --host 0.0.0.0 --port 5000 2>&1 | tee -a /data/logs/backend.log" networks: - vibe-network # security_opt: # - seccomp:unconfined # Uncomment on older hosts/kernels (e.g. Synology, QNAP) if you see PermissionError engine: image: spupuz/vibenvr-engine:latest container_name: vibenvr-engine ports: - "5001:5001" volumes: - ${VIBENVR_DATA:-vibenvr_data}:/var/lib/vibe/recordings # - /etc/localtime:/etc/localtime:ro # Removed for cross-platform compatibility, use TZ environment: - BACKEND_URL=http://vibenvr-backend:5000 - TZ=Europe/Rome # Hardware Acceleration Settings - HW_ACCEL=true # Enabled for local GPU usage - HW_ACCEL_TYPE=${HW_ACCEL_TYPE:-auto} # auto, nvidia, intel, amd - WEBHOOK_SECRET=${WEBHOOK_SECRET:-vibe_secure_key_9823748923748923_change_in_prod} # GPU Device Passthrough (uncomment what applies to your system) # For Intel/AMD (VAAPI) on Linux: devices: - /dev/dri:/dev/dri # For NVIDIA (requires nvidia-container-toolkit): # deploy: # resources: # reservations: # devices: # - driver: nvidia # count: 1 # capabilities: [gpu] restart: always command: > sh -c "mkdir -p /var/lib/vibe/recordings/logs && touch /var/lib/vibe/recordings/logs/engine.log && python -u main.py 2>&1 | grep --line-buffered -v 'SEI type 764' | tee -a /var/lib/vibe/recordings/logs/engine.log" networks: - vibe-network # security_opt: # - seccomp:unconfined # Uncomment on older hosts/kernels (e.g. Synology, QNAP) if you see PermissionError db: image: postgres:15-alpine container_name: vibenvr-db environment: - POSTGRES_USER=vibenvr - POSTGRES_PASSWORD=vibenvrpass - POSTGRES_DB=vibenvr volumes: - ${VIBENVR_DB_DATA:-vibenvr_db_data}:/var/lib/postgresql/data healthcheck: test: [ "CMD-SHELL", "pg_isready -U vibenvr" ] interval: 5s timeout: 5s retries: 5 networks: - vibe-network restart: always # security_opt: # - seccomp:unconfined # Uncomment on older hosts/kernels (e.g. Synology, QNAP) if you see PermissionError volumes: vibenvr_data: vibenvr_db_data: networks: vibe-network: driver: bridge -
which version of omv and kernel do you have?
-
-
Code
Display More# Production Docker Compose - Uses pre-built images from Docker Hub # Use this when you want to run VibeNVR without building from source services: frontend: image: spupuz/vibenvr-frontend:latest container_name: vibenvr-frontend ports: - "${VIBENVR_FRONTEND_PORT:-8080}:80" volumes: - ${VIBENVR_DATA:-vibenvr_data}:/data networks: - vibe-network depends_on: - backend restart: always backend: image: spupuz/vibenvr-backend:latest container_name: vibenvr-backend ports: - "${VIBENVR_BACKEND_PORT:-5005}:5000" volumes: - ${VIBENVR_DATA:-vibenvr_data}:/data # - /etc/localtime:/etc/localtime:ro # Removed for cross-platform compatibility, use TZ environment: - DATABASE_URL=postgresql://vibenvr:vibenvrpass@db:5432/vibenvr - TZ=Europe/Rome - SECRET_KEY=${SECRET_KEY:-vibe_secure_key_9823748923748923_change_in_prod} - WEBHOOK_SECRET=${WEBHOOK_SECRET:-vibe_secure_key_9823748923748923_change_in_prod} depends_on: db: condition: service_healthy engine: condition: service_started restart: always command: > sh -c "mkdir -p /data/logs && chmod 777 /data/logs && touch /data/logs/backend.log && uvicorn main:app --host 0.0.0.0 --port 5000 2>&1 | tee -a /data/logs/backend.log" networks: - vibe-network engine: image: spupuz/vibenvr-engine:latest container_name: vibenvr-engine ports: - "5001:5001" volumes: - ${VIBENVR_DATA:-vibenvr_data}:/var/lib/vibe/recordings # - /etc/localtime:/etc/localtime:ro # Removed for cross-platform compatibility, use TZ environment: - BACKEND_URL=http://vibenvr-backend:5000 - TZ=Europe/Rome # Hardware Acceleration Settings - HW_ACCEL=true # Enabled for local GPU usage - HW_ACCEL_TYPE=${HW_ACCEL_TYPE:-auto} # auto, nvidia, intel, amd - WEBHOOK_SECRET=${WEBHOOK_SECRET:-vibe_secure_key_9823748923748923_change_in_prod} # GPU Device Passthrough (uncomment what applies to your system) # For Intel/AMD (VAAPI) on Linux: devices: - /dev/dri:/dev/dri # For NVIDIA (requires nvidia-container-toolkit): # deploy: # resources: # reservations: # devices: # - driver: nvidia # count: 1 # capabilities: [gpu] restart: always command: > sh -c "mkdir -p /var/lib/vibe/recordings/logs && touch /var/lib/vibe/recordings/logs/engine.log && python -u main.py 2>&1 | grep --line-buffered -v 'SEI type 764' | tee -a /var/lib/vibe/recordings/logs/engine.log" networks: - vibe-network db: image: postgres:15-alpine container_name: vibenvr-db environment: - POSTGRES_USER=vibenvr - POSTGRES_PASSWORD=vibenvrpass - POSTGRES_DB=vibenvr volumes: - ${VIBENVR_DB_DATA:-vibenvr_db_data}:/var/lib/postgresql/data healthcheck: test: [ "CMD-SHELL", "pg_isready -U vibenvr" ] interval: 5s timeout: 5s retries: 5 networks: - vibe-network restart: always volumes: vibenvr_data: vibenvr_db_data: networks: vibe-network: driver: bridge -
-
Hi everyone,
I wanted to share a project I’ve been working on called VibeNVR. It’s a simple, privacy-respecting local NVR designed to be fast and easy to set up without any cloud dependencies.
Why I built this:
As an OMV user, I’ve always valued keeping my data local and my system lean. I found that many existing NVR solutions were either too heavy for modest hardware or felt a bit dated. I decided to experiment with AI and "vibe coding" to see if I could create something modern and efficient that fits perfectly into a self-hosted environment.
Key Features:
- Simple & Fast: Quick setup so you can start recording in minutes.
- Privacy-First: 100% local. No cloud, no unexpected phoning home.
- Lightweight: Designed to run efficiently without hogging system resources.
- Flexible: Records what you need, where you want it.
This is still a project born out of experimentation, so I’d love to get some feedback from this community. If you’re looking for a no-fuss way to manage your cameras on your OMV setup, give it a try!
GitHub Repository: https://github.com/spupuz/VibeNVR
If you find it useful, a star on GitHub would be greatly appreciated! I’m looking forward to hearing your thoughts or answering any questions you might have.
Cheers!