├── CHANGELOG.md ├── Dockerfile ├── LICENSE ├── README.md ├── docker-compose.yml └── example.env /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # UHF Server - Changelog 2 | 3 | ## 1.4.0 4 | 5 | - UHF Server can now detect commercials. Set the `--enable-commercial-detection` argument when invoking the 6 | command line tool or enable the commercial detection checkbox in the macOS or Windows GUI. This commercial 7 | detection takes place when a scheduled recording finishes and it can take several minutes to complete. This 8 | functionality is compatible with UHF 1.67.0 (iOS) and 1.55.0 (tvOS). 9 | 10 | ## 1.3.0 11 | 12 | - The GUI for Windows and macOS now includes an option to automatically launch the server at system startup. 13 | - Improved error reporting when starting the server in the Windows and macOS apps. 14 | - The server now starts automatically when launching the Windows and macOS apps. 15 | - Recordings now use the program name and date as the file name. 16 | - Fixed a performance issue in the server that caused degraded performance when multiple recordings finished. 17 | 18 | ## 1.2.0 19 | 20 | - The GUI for Windows and macOS now display the IP address the server is running on. 21 | - The GUI now informs about new updates available. 22 | - Prevented FFmpeg from opening a blank window in Windows while recording. 23 | - Prevented machine from going idle while the server is running. 24 | - Fixed detection of FFmpeg errors. 25 | - Fixed error notifications. 26 | - Improved ffmpeg retry logic. 27 | 28 | ## 1.1.0 29 | 30 | - Fixed macOS permissions issue. 31 | - Improved performance while recording a stream. 32 | 33 | ## 1.0.0 34 | 35 | - Initial release. 36 | - Configurable recordings directory, port and server password. 37 | - GUI compatibility: macOS arm64, Windows x64. 38 | - CLI compatibility: Linux x64, Linux arm64. 39 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:25.04 2 | 3 | # Avoid prompts during package installation 4 | ENV DEBIAN_FRONTEND=noninteractive 5 | 6 | # Install required dependencies 7 | RUN apt-get update && apt-get install -y \ 8 | curl \ 9 | ffmpeg \ 10 | unzip \ 11 | ca-certificates \ 12 | && apt-get clean \ 13 | && rm -rf /var/lib/apt/lists/* 14 | 15 | # Create directory for recordings 16 | RUN mkdir -p /recordings 17 | 18 | # Create directory for db 19 | RUN mkdir -p /var/lib/uhf-server 20 | 21 | # Set working directory 22 | WORKDIR /app 23 | 24 | # Install UHF server 25 | RUN curl -sL https://link.uhfapp.com/setup.sh > setup.sh && \ 26 | chmod +x setup.sh && \ 27 | bash setup.sh && \ 28 | rm setup.sh 29 | 30 | # Expose default port 31 | EXPOSE ${PORT} 32 | 33 | # Set healthcheck 34 | HEALTHCHECK --interval=60s --timeout=10s --start-period=5s --retries=3 \ 35 | CMD curl -f http://localhost:${PORT}/server/stats || exit 1 36 | 37 | # Default command 38 | CMD ["bash"] -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2025 Short Wavelength Applications Ltd. All rights reserved. 2 | 3 | Redistribution and use in source and binary forms, with or without modification, 4 | are prohibited without the prior written permission of Short Wavelength Applications Ltd. 5 | 6 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS" AND ANY EXPRESS OR IMPLIED 7 | WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 8 | AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 9 | OWNER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 10 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 11 | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 12 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 13 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 14 | ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UHF Server Docker Setup 2 | 3 | This directory contains Docker configuration files to easily run the UHF DVR Server. 4 | 5 | ## Requirements 6 | 7 | - Docker and Docker Compose installed on your system 8 | - Sufficient disk space for recordings 9 | 10 | ## Quick Start 11 | 12 | 1. Clone this repository or download these files 13 | 2. Run the server with default settings: 14 | 15 | ```bash 16 | docker-compose up -d 17 | ``` 18 | 19 | This will: 20 | - Build the Docker image with all dependencies 21 | - Start the UHF Server on port 8000 22 | - Store recordings in a `./recordings` directory 23 | 24 | ## Configuration 25 | 26 | You can customize the server by setting environment variables: 27 | 28 | ```bash 29 | # Set custom port and recordings directory 30 | PORT=9000 RECORDINGS_DIR=/path/to/recordings docker-compose up -d 31 | 32 | # Add password protection 33 | PORT=8000 RECORDINGS_DIR=/path/to/recordings PASSWORD=mysecretpassword docker-compose up -d 34 | ``` 35 | 36 | ### Available Options 37 | 38 | - `PORT`: Server port (default: 8000) 39 | - `RECORDINGS_DIR`: Path to store recordings (default: ./recordings) 40 | - `PASSWORD`: Optional password protection 41 | 42 | 43 | ## Logs and Troubleshooting 44 | 45 | View logs: 46 | ```bash 47 | docker-compose logs -f 48 | ``` 49 | 50 | ## Stopping the Server 51 | 52 | ```bash 53 | docker-compose down 54 | ``` 55 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | uhf-server: 3 | build: 4 | context: . 5 | dockerfile: Dockerfile 6 | container_name: uhf-server 7 | restart: unless-stopped 8 | ports: 9 | - "${PORT:-8000}:${PORT:-8000}" 10 | volumes: 11 | - ${RECORDINGS_DIR:-./recordings}:/recordings 12 | environment: 13 | - PORT=${PORT:-8000} 14 | - PASSWORD=${PASSWORD:-} # Optional password protection 15 | command: uhf-server --port ${PORT:-8000} --recordings-dir /recordings ${PASSWORD:+--password ${PASSWORD}} --enable-commercial-detection 16 | stop_grace_period: 30s 17 | -------------------------------------------------------------------------------- /example.env: -------------------------------------------------------------------------------- 1 | # UHF Server Configuration 2 | # Copy this file to .env and modify as needed 3 | 4 | # Server port 5 | PORT=8000 6 | 7 | # Path to recordings directory (relative or absolute) 8 | RECORDINGS_DIR=./recordings 9 | 10 | # Optional password protection 11 | # PASSWORD=mysecretpassword --------------------------------------------------------------------------------