Encodarr

Encodarr is a self-hosted web application that encodes video files to a target format using distributed computing.

Why use Encodarr?

Easy to Setup

Encodarr bypasses the need to share media across the network by instead transmitting the file to be operated on to the Runners.
This means that Encodarr is much easier to setup than other solutions.

Cross-platform

Both the Controller and Runner can be cross-compiled for any system supported by the Go toolchain including Raspberry Pis and M1 Macs.

Installing

Container images are available from Docker Hub(Controller, Runner) and the GitHub Container Registry(Controller, Runner).

Pre-built executables are available via the Releases page.

Usage

Docker/Docker Compose

The latest Controller version can be run using the following docker run command:

docker run -d \
  --name Encodarr-Controller \
  -e TZ=Europe/London \
  -v <path to data>:/config:rw \
  -v <path to media>:/media:rw \
  -p 8123:8123 \
  --restart unless-stopped \
  --user 1000:1000 \
  brenekh/encodarr-controller:latest

or if you prefer Docker Compose:

version: "2.2"
services:
  encodarr-controller:
    image: brenekh/encodarr-controller:latest
    container_name: Encodarr-Controller
    environment:
      - TZ=Europe/London
    volumes:
      - <path to controller data>:/config:rw
      - <path to media>:/media:rw
    ports:
      - 8123:8123
    restart: unless-stopped
    user: "1000:1000"

The latest Runner version is similar.

Docker run:

docker run -d \
  --name Encodarr-Runner \
  -v <path to runner data>:/config:rw \
  -e TZ=Europe/London
  -e "ENCODARR_RUNNER_NAME=Runner 1" \
  -e ENCODARR_RUNNER_CONTROLLER_IP=<Controller IP> \
  -e ENCODARR_RUNNER_CONTROLLER_PORT=8123 \
  --restart unless-stopped \
  brenekh/encodarr-runner:latest

Docker Compose:

version: "2.2"
services:
  encodarr-runner:
    image: brenekh/encodarr-runner:latest
    container_name: Encodarr-Runner
    volumes:
      - <path to runner data>:/config:rw
    environment:
      - TZ=Europe/London
      - ENCODARR_RUNNER_NAME=Runner 1
      - ENCODARR_RUNNER_CONTROLLER_IP=<Controller IP>
      - ENCODARR_RUNNER_CONTROLLER_PORT=8123
    restart: unless-stopped

The Controller path to media and the corresponding mount inside the container can be anything you want and you can have as many as you want.
For example, /mnt/disk/tv:/tv:rw and /mnt/disk/movies:/movies:rw.

In addition, the paths to data that are mounted to /config in the container should be separate folders, ideally with full paths(/home/user/docker instead of ~/docker).

Startup Configuration

Startup values configured either through environment variables, or command line arguments.
All of the command line variants expect a value after a space (--port 8123).

Controller

ENCODARR_PORT, --port sets the port for the HTTP web server.
For containers, it is recommended to modify the external port (8124:8123) instead of setting this value.
(default: 8123)

ENCODARR_CONFIG_DIR, --config-dir sets the directory that the configuration files are saved to.
This includes the log file.
In a container, this is pre-set to /config.
(default: <platform user config directory>/encodarr/controller/config)

Runner

ENCODARR_CONFIG_DIR, --config-dir sets the directory that the configuration files are saved to.
This includes the log file.
In a container, this is pre-set to /config.
(default: <platform user config directory>/encodarr/runner-<time of runner startup>/config)

ENCODARR_TEMP_DIR, --temp-dir sets the directory that the media files are saved to when they are being worked on.
If you want to protect your flash memory(SSDs and SD Cards), you can set this to be on a hard drive.
(default: <platform user temp directory>)

ENCODARR_LOG_LEVEL, --log-level sets the level of output from the logging system to both the log file and the terminal output.
Possible values are: trace, debug, info, warn (or warning, they are identical), error, critical.
(default: info)

ENCODARR_RUNNER_NAME, --name sets the name to be shown in the Web UI when referring to this runner.
(default: <machine hostname>-<random number>)

ENCODARR_RUNNER_CONTROLLER_IP, --controller-ip sets the IP for connecting to the Controller.
(default: localhost)

ENCODARR_RUNNER_CONTROLLER_PORT, --controller-port sets the port for connecting to the Controller.
(default: 8123)

GitHub

https://github.com/BrenekH/encodarr