mangapixer

mangapixer

Docker app from dixit92's Repository

Overview

MangaPixer is a self-hosted comic and manga server with a fast web reader for desktop, tablet and phone. It is folder-native: point it at your existing folders of .cbz and .cbr archives and it shows them exactly as they are organized on disk - no renaming, no metadata to curate, and your media is only ever read. Features per-user reading progress and read marks, continue reading and new-chapter rows, single, double-page and vertical (webtoon) reading with right-to-left support, favorites, search, private libraries, and server-side image resizing that keeps line art and screentones clean on every screen. Accounts are created by an admin; there are no default credentials, no telemetry, and no calls to the internet unless you turn on the optional update check.

Install on Unraid

There are two ways to run MangaPixer on Unraid:

  • The Unraid template (deploy/unraid/mangapixer.xml): install it from the Docker tab like any other Unraid app. This is the simplest route.
  • The Unraid Compose file (deploy/compose.unraid.yaml): for people who manage their containers with Compose.

Both use the same image and the same layout, which differs from the canonical Docker setup like this:

Canonical (compose.yaml) Unraid (compose.unraid.yaml)
State Three named Docker volumes One host folder, /mnt/user/appdata/MangaPixer, mounted at /config
File ownership UID/GID 1000 by default PUID/PGID so files belong to your Unraid user
Port 127.0.0.1:8080 (loopback only) 6266, published on all interfaces, so the app is reachable from your LAN
Image Pulled from GHCR (or built from a clone with the build overlay) Pulled from GHCR

The hardening is the same everywhere: read-only container filesystem, a tmpfs for /tmp, no-new-privileges, and bounded container logs.

Install from the template

MangaPixer is not listed in Community Applications yet. Until it is, add the template by hand. From the Unraid terminal, download it into your user templates folder:

wget -O /boot/config/plugins/dockerMan/templates-user/my-MangaPixer.xml \
  https://raw.githubusercontent.com/dixit92/mangapixer/main/deploy/unraid/mangapixer.xml

Then:

  1. Open the Unraid Docker tab.
  2. Click Add Container.
  3. In the Template dropdown, choose MangaPixer.
  4. Fill in:
    • PUID and PGID: Check your Unraid user's ID with ls -ln /mnt/user/appdata. Defaults are 99 (nobody) and 100 (users).
    • Media: set the host path to your comics or manga share (for example /mnt/user/Manga); it is mounted read-only at /media/manga. For another share, select Add another Path and use a sibling container path such as /media/comics, also read-only. Never mount one share inside another (for example one at /media and another at /media/comics): Docker would have to create a folder inside your first share.
  5. Click Apply.
  6. The container starts. Once it is running, visit http://<unraid-ip>:6266 and create the first admin on the welcome screen. Then register your libraries with root paths such as /media/manga, as in step 6 of the Docker guide.

The template runs the latest image, so it follows each release. To upgrade, use Unraid's update action for the container on the Docker tab (apply update when Unraid reports one, or Force update). Database upgrades take a safety snapshot first, as described in Install with Docker.

Once MangaPixer is listed in Community Applications, you will be able to install it from the Apps tab without the download step.

Install with Compose

This route needs docker compose on the Unraid host (usually from a Compose plugin).

Step 1: get the Compose file and choose a version

Copy deploy/compose.unraid.yaml from the repository to a folder on the server, for example /mnt/user/appdata/MangaPixer-compose/, or clone the repository there. The file pulls ghcr.io/dixit92/mangapixer:<version> when the container starts, so nothing needs to be built or copied by hand.

Set MANGAPIXER_VERSION to the release you want (see the Releases page). If it is unset, the file falls back to latest, which moves with every release.

export MANGAPIXER_VERSION=1.22.1

To run an unreleased build instead, clone the repository on the server and add deploy/compose.build.yaml to the -f list in step 4; Compose then builds the image from the clone. pwsh ./scripts/Package-Release.ps1 on another machine still produces a loadable .tar if you prefer to build elsewhere and docker load it.

Step 2: set PUID and PGID

The container starts as root, sets the owner of /config and its data, cache and scratch subfolders to PUID:PGID on every start, and then runs the server as that user. Set these two variables to the user and group that should own the appdata folder on the host. Check the numbers with:

ls -ln /mnt/user/appdata

Many Unraid systems use 99 (nobody) and 100 (users) for shares. If you leave the variables unset, the defaults are 1000/1000.

Step 3: add your media shares

The media lines in compose.unraid.yaml are commented-out examples. Rather than editing the tracked file, put your real paths in an override file next to it, compose.unraid.override.yaml:

services:
  mangapixer:
    environment:
      PUID: "99"
      PGID: "100"
    volumes:
      - /mnt/user/Manga:/media/manga:ro
      - /mnt/user/Comics:/media/comics:ro
  • Always add :ro so each share is read-only inside the container. The server never writes into your media, and the read-only mount makes the operating system enforce that too.
  • Mount shares under /media, where the library Browse… picker starts.
  • Compose merges the override only when you pass it with -f (next step). Compose does not pick this file name up on its own.

You do not need a media-root variable for the mounts to work. You pick each library's folder in the web UI, and the picker's starting folder is controlled by MangaPixer__Storage__MediaRoot (default /media).

Step 4: start the container

From the folder that holds both files:

docker compose -f compose.unraid.yaml -f compose.unraid.override.yaml up -d

(From a repository clone, use deploy/compose.unraid.yaml and deploy/compose.unraid.override.yaml; the repository's .gitignore excludes the override file.)

Check it:

curl http://localhost:6266/health

It answers Healthy. If port 6266 is already taken, change the left-hand number of the port mapping. The server always listens on 8080 inside the container.

Step 5: first-run setup and libraries

Open http://<unraid-ip>:6266. There is no default account. Create the first admin on the Welcome to MangaPixer screen, then register and scan your libraries. Use root paths like /media/manga. The steps are the same as steps 5 and 6 of the Docker guide.

Port 6266 is published on every interface, but the server itself only speaks plain HTTP. If you plan to reach it from outside your LAN, put it behind a reverse proxy with HTTPS, and consider binding the port to a specific address.

What ends up in appdata

/mnt/user/appdata/MangaPixer/
├── data/
│   ├── mangapixer.db          database (plus -wal / -shm files while running)
│   ├── keys/                 sign-in cookie keys (owner-only permissions)
│   ├── logs/                 daily log files, 7 kept
│   ├── backups/              rotating-*, pre-migration-*, pre-restore-* snapshots
│   └── thumbnails/           cover thumbnails
├── cache/                    page image cache (1 GiB budget, disposable)
└── scratch/                  temporary work folders (disposable)

Your normal appdata backup covers all of it. The data/backups/rotating-*.db files are consistent snapshots taken by the server, so they are safe to restore from even if your appdata backup ran while the container was up. See Backup and restore.

To keep the rotating snapshots off the cache pool, for example on an archive share on the array, add a path mapping such as /mnt/user/archive/mangapixer-backups to /backups (read/write, owned by your PUID:PGID), then choose Custom folder /backups in Administration > Backup settings. If the share is not available, backups pause and the admin page shows Backup location unavailable; they never fall back to appdata. The pre-migration and pre-restore snapshots stay in data/backups.

If you want the page cache off the array, mount another path and point MangaPixer__Storage__CacheRoot at it (see Configuration).

Upgrading a Compose install

Set MANGAPIXER_VERSION to the new version, run the same command with pull instead of up -d, then up -d again. Compose recreates the container with the new image, and /config is kept. Database schema upgrades take a pre-migration-*.db snapshot first, as described in Install with Docker.

Media gallery

1 / 4

Install Mangapixer on Unraid in a few clicks.

Find Mangapixer 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 Mangapixer Review the template variables and paths Click Install

Requirements

Your comics or manga as .cbz / .zip or non-solid .cbr / .rar archives in a share. Solid archives (including every .cb7 / .7z) are listed but cannot be read yet.

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/dixit92/mangapixer:latest
Last Updated2026-09-24
First Seen2026-09-24

Runtime arguments

Web UI
http://[IP]:[PORT:8080]/
Network
bridge
Shell
bash
Privileged
false
Extra Params
--read-only --tmpfs /tmp:rw,noexec,nosuid,size=256m --security-opt=no-new-privileges:true --log-driver local --log-opt max-size=20m --log-opt max-file=5

Template configuration

Web UI PortPorttcp

Host port for the web UI. The server listens on 8080 inside the container.

Target
8080
Default
6266
Value
6266
AppdataPathrw

Where MangaPixer keeps its database, backups, thumbnails and page cache. Back this folder up.

Target
/config
Default
/mnt/user/appdata/MangaPixer
Value
/mnt/user/appdata/MangaPixer
MediaPathro

A share with your comics or manga, mounted read-only (for example /mnt/user/Manga). For more shares, use Add another Path with a sibling container path such as /media/comics, read-only - never mount one share inside another. In the web app, register each one as a library (for example /media/manga).

Target
/media/manga
PUIDVariable

User ID that owns the appdata folder (99 = nobody on most Unraid systems; check with ls -ln /mnt/user/appdata).

Default
99
Value
99
PGIDVariable

Group ID that owns the appdata folder (100 = users on most Unraid systems).

Default
100
Value
100
Data RootVariable

Database, sign-in keys, logs, backups and thumbnails, inside the appdata folder. Leave as is.

Target
MangaPixer__Storage__DataRoot
Default
/config/data
Value
/config/data
Cache RootVariable

Page image cache (disposable), inside the appdata folder. Leave as is.

Target
MangaPixer__Storage__CacheRoot
Default
/config/cache
Value
/config/cache
Scratch RootVariable

Temporary work files (disposable), inside the appdata folder. Leave as is.

Target
MangaPixer__Storage__ScratchRoot
Default
/config/scratch
Value
/config/scratch