Lingarr

Lingarr

Official

Docker app from grtgbln's Repository

Overview

Lingarr is an application that leverages translation technologies to automatically translate subtitle files to your desired target language. With support for both LibreTranslate, DeepL and AI Lingarr offers a flexible solution for all your subtitle translation needs.

Lingarr: Subtitle Translation Made Easy

Version Docker Pulls License Discord

Lingarr is an application that leverages translation technologies to automatically translate subtitle files to your desired target language. With support for multiple translation services including LibreTranslate, DeepL, and various AI providers, Lingarr offers a flexible solution for all your subtitle translation needs.

https://github.com/user-attachments/assets/be753d77-ca53-4867-adea-363145613d2b

🌟 Multiple Translation Service Support

Lingarr now offers multiple services for automated translation:

Choose the service that best fits your needs.

Usage

Docker Image Tags

Lingarr provides multi-architecture Docker images that automatically select the correct platform:

Tag Description Architectures
latest Latest stable release amd64 arm64
1.2.3 Specific version amd64 arm64
main ⚠️ Development build from main branch amd64 arm64

Note: As of 1.0.3 all images support both AMD64 (Intel/AMD) and ARM64 (Raspberry Pi, Apple Silicon) architectures. Docker will automatically pull the correct architecture for your system.

Available Registries

Lingarr Docker images are available from multiple registries:

Registry Image
GitHub Container Registry ghcr.io/lingarr-translate/lingarr:latest
Docker Hub docker.io/lingarr/lingarr:latest

Setting up Lingarr

By default, Lingarr uses MySQL however, PostgreSQL and SQLite are also supported. Note that Lingarr starts quickly, if migrations fail, using a healthcheck combined with depends_on is recommended.

services:
  lingarr:
    image: ghcr.io/lingarr-translate/lingarr:latest # or lingarr/lingarr:latest
    container_name: lingarr
    restart: unless-stopped
    environment:
      - ASPNETCORE_URLS=http://+:9876
      - DB_CONNECTION=mysql
      - DB_HOST=lingarr-db
      - DB_PORT=3306
      - DB_DATABASE=lingarr
      - DB_USERNAME=lingarr
      - DB_PASSWORD=your-password # provide a password
    ports:
      - "9876:9876"
    volumes:
      - /path/to/media/movies:/movies
      - /path/to/media/tv:/tv
      - /path/to/config:/app/config
    networks:
      - lingarr
    depends_on:
      lingarr-db:
        condition: service_healthy

  lingarr-db:
    image: mariadb:latest
    container_name: lingarr-db
    restart: unless-stopped
    environment:
      - MYSQL_DATABASE=lingarr
      - MYSQL_USER=lingarr
      - MYSQL_PASSWORD=your-password # provide a password
      - MYSQL_ROOT_PASSWORD=your-password # provide a root password
    volumes:
      - /path/to/db:/var/lib/mysql # define a volume to persist the database
    networks:
      - lingarr
    healthcheck:
      test: "mariadb $$MYSQL_DATABASE -u$$MYSQL_USER -p$$MYSQL_PASSWORD -e 'SELECT 1;'"
      interval: 10s
      timeout: 5s
      retries: 5

networks:
  lingarr:
    external: true

Setting up Lingarr using Docker CLI

Follow the following steps to set up Lingarr via Docker CLI

# Create the network
docker network create lingarr

# Start MariaDB
docker run -d \
  --name lingarr-db \
  --restart unless-stopped \
  -e MYSQL_DATABASE=lingarr \
  -e MYSQL_USER=lingarr \
  -e MYSQL_PASSWORD=your-password \
  -e MYSQL_ROOT_PASSWORD=your-root-password \
  -v /path/to/db:/var/lib/mysql \
  --network lingarr \
  mariadb:latest

# Start Lingarr
docker run -d \
  --name lingarr \
  --restart unless-stopped \
  -p 9876:9876 \
  -e ASPNETCORE_URLS=http://+:9876 \
  -e DB_CONNECTION=mysql \
  -e DB_HOST=lingarr-db \
  -e DB_PORT=3306 \
  -e DB_DATABASE=lingarr \
  -e DB_USERNAME=lingarr \
  -e DB_PASSWORD=your-password \ # provide a password
  -v /path/to/media/movies:/movies \
  -v /path/to/media/tv:/tv \
  -v /path/to/config:/app/config \
  --network lingarr \
  ghcr.io/lingarr-translate/lingarr:latest # or use: lingarr/lingarr:latest

Lingarr environment variables

These variables can be used

Environment Variable Description
ASPNETCORE_URLS=http://+:9876 The internal port that Lingarr will listen on inside the container.
MAX_CONCURRENT_JOBS=1 Sets the amount of jobs that can run concurrently, defaults to 1.
DB_CONNECTION=mysql Specifies the database connection type. Options are mysql, postgresql or sqlite.
DB_HOST=Lingarr.Mysql The hostname for the MySQL database (required when using mysql or postgresql).
DB_PORT=3306 The port for the MySQL database (required when using mysql or postgresql).
DB_DATABASE=Lingarr The name of the database (required when using mysql or postgresql).
DB_USERNAME=Lingarr The username for the database (required when using mysql or postgresql).
DB_PASSWORD=Secret1234 The password for the database (required when using mysql or postgresql).
DB_HANGFIRE_SQLITE_PATH=/app/config/Hangfire.db The path of the sqlite database file for Hangfire, when sqlite connection is used

Additional settings can be found here that can be set as environment variables to persist settings for each reinstall

Setting up LibreTranslate

This step is optional if you are using a translation service other than LibreTranslate.

  LibreTranslate:
    container_name: LibreTranslate
    image: libretranslate/libretranslate:latest
    restart: unless-stopped
    environment:
      - LT_LOAD_ONLY=en,nl  # Important, replace with your preferred languages
    ports:
      - 5000:5000
    volumes:
      - /path/to/config:/home/libretranslate/.local/share/argos-translate
    networks:
      - lingarr
    healthcheck:
      test: ["CMD-SHELL", "./venv/bin/python scripts/healthcheck.py"]

Setting up LibreTranslate using Docker CLI

Create necessary directories and set permissions:

mkdir -p /apps/libretranslate/{local,db}
chmod -R 777 /apps/libretranslate

Run LibreTranslate Docker container:

docker run -d \
  --name LibreTranslate \
  -p 5000:5000 \
  -v /path/to/libretranslate/db:/app/db \[Settings.MD](Settings.MD)
  -v /path/to/libretranslate/local:/home/libretranslate/.local \
  libretranslate/libretranslate \
  --disable-web-ui \
  --load-only=en,nl     # Important, replace with your preferred languages

LibreTranslate environment variables

Parameter Function
LT_LOAD_ONLY Allows you to add source languages by their iso code
LT_DISABLE_WEB_UI Enables or disables a Google translate like web ui

Running Lingarr as non-root

When running Docker containers, you can optionally specify which user should run the container process using the user flag. This is useful for:

  • Security: Running containers as non-root users
  • Permissions: Ensuring files created by the container have the correct ownership on your host system

Docker Compose syntax:

user: "1000:1000"  # UID:GID

Docker CLI syntax:

--user 1000:1000  # UID:GID

API Integration

Lingarr provides a RESTful API that allows you to integrate subtitle translation capabilities into your applications. You can find the complete API documentation, including a Swagger definition of all available endpoints at the Lingarr API Documentation

🤝 Contributing:

We welcome contributions to Lingarr! Whether it's bug reports, feature requests, or code contributions, please feel free to help out.

Please read our Contributing Guidelines for development setup, coding standards, and requirements for submit pull requests.

🙏 Credits:

Icons: Lucide
Subtitle Parsing: AlexPoint
Translation Services: libretranslate
GTranslate: GTranslate

🙏 Special thanks:

For supporting open source:
selfh.st by Ethan
r/selfhosted
FrankieBBBB

Install Lingarr on Unraid in a few clicks.

Find Lingarr in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Lingarr Review the template variables and paths Click Install

Requirements


        Requires an optional separate MySQL database container if using MySQL as the database.
        

        Requires an optional separate LibreTranslate container if using self-hosted LibreTranslate as the translation service.
    

Download Statistics

457,125
Total Downloads
44,441
This Month
48,292
Avg / Month

Total Downloads Over Time

Loading chart...

Related apps

Details

Repository
lingarr/lingarr:latest
Last Updated2026-05-26
First Seen2025-01-23

Runtime arguments

Web UI
http://[IP]:[PORT:8080]/
Network
bridge
Privileged
false

Template configuration

Web UI PortPorttcp

Container Port: 8080

Target
8080
Default
8080
Value
8080
Radarr - Movie PathPath

Path to movies. The target path MUST match with the target path for Radarr.

Radarr - URLVariable

Radarr URL

Target
RADARR_URL
Default
http://localhost:7878
Value
http://localhost:7878
Radarr - API KeyVariable

Radarr API Key

Target
RADARR_API_KEY
Sonarr - TV Show PathPath

Path to TV shows. The target path MUST match with the target path for Sonarr.

Sonarr - URLVariable

Sonarr URL

Target
SONARR_URL
Default
http://localhost:8989
Value
http://localhost:8989
Sonarr - API KeyVariable

Sonarr API Key

Target
SONARR_API_KEY
Database TypeVariable

Database type

Target
DB_CONNECTION
Default
sqlite|mysql
MySQL - HostVariable

MySQL host. Remove if not using MySQL.

Target
DB_HOST
MySQL - PortVariable

MySQL port. Remove if not using MySQL.

Target
DB_PORT
Default
3306
Value
3306
MySQL - DatabaseVariable

MySQL database. Remove if not using MySQL.

Target
DB_DATABASE
Default
LingarrMysql
Value
LingarrMysql
MySQL - UsernameVariable

MySQL username. Remove if not using MySQL.

Target
DB_USERNAME
MySQL - PasswordVariable

MySQL password. Remove if not using MySQL.

Target
DB_PASSWORD
Translation Service - TypeVariable

Translation service type

Target
SERVICE_TYPE
Default
libretranslate|openai|anthropic|localai|deepl|google|bing|microsoft|yandex
Translation Service - Source LanguagesVariable

A minified JSON array of source languages for translation.

Target
SOURCE_LANGUAGES
Default
[{"name":"English","code":"en"},{"name":"Dutch","code":"nl"}]
Value
[{"name":"English","code":"en"},{"name":"Dutch","code":"nl"}]
Translation Service - Target LanguagesVariable

A minified JSON array of target languages for translation.

Target
TARGET_LANGUAGES
Default
[{"name":"Dutch","code":"nl"},{"name":"English","code":"en"}]
Value
[{"name":"Dutch","code":"nl"},{"name":"English","code":"en"}]
AI PromptVariable

AI prompt. Remove if not using an AI system.

Target
AI_PROMPT
Default
Translate the following text from the source language to the target language:
Value
Translate the following text from the source language to the target language:
LibreTranslate - URLVariable

LibreTranslate URL. Remove if not using LibreTranslate.

Target
LIBRETRANSLATE_URL
Default
https://libretranslate.com
Value
https://libretranslate.com
OpenAI - API KeyVariable

OpenAI API Key. Remove if not using OpenAI.

Target
OPENAI_API_KEY
OpenAI - ModelVariable

OpenAI model. Remove if not using OpenAI.

Target
OPENAI_MODEL
Default
gpt-4o
Value
gpt-4o
Anthropic - API KeyVariable

Anthropic API Key. Remove if not using Anthropic.

Target
ANTHROPIC_API_KEY
Anthropic - ModelVariable

Anthropic model. Remove if not using Anthropic.

Target
ANTHROPIC_MODEL
Default
claude-2
Value
claude-2
Anthropic - API VersionVariable

Anthropic API version. Remove if not using Anthropic.

Target
ANTHROPIC_VERSION
LocalAI - URLVariable

LocalAI URL. Remove if not using LocalAI.

Target
LOCAL_AI_ENDPOINT
Default
http://localhost:8080
Value
http://localhost:8080
LocalAI - API KeyVariable

LocalAI API Key. Remove if not using LocalAI.

Target
LOCAL_AI_API_KEY
LocalAI - ModelVariable

LocalAI model. Remove if not using LocalAI.

Target
LOCAL_AI_MODEL
DeepL - API KeyVariable

DeepL API Key. Remove if not using DeepL.

Target
DEEPL_API_KEY
Config PathPath

Path to config files

Target
/app/config
Default
/mnt/user/appdata/lingarr/config
Value
/mnt/user/appdata/lingarr/config
PGIDVariable
Default
100
Value
100
PUIDVariable
Default
099
Value
099
Max Concurrent JobsVariable

Maximum number of concurrent translation jobs

Target
MAX_CONCURRENT_JOBS
Default
1
Value
1