notenregal

notenregal

Docker app from cabi24's Repository

Overview

A beautiful Victorian-themed sheet music library for organizing, viewing, and annotating your PDF collection. Features include PDF viewing with annotations (pen, highlighter, musical stamps), Regalpaket format for instant page turns, shelf organization, favorites, search, and mobile-friendly touch gestures.

Notenregal

A self-hosted sheet music library. Point it at a folder of PDFs to browse, read and annotate them in the browser.

License Docker Pulls Docker Image Size

Features

  • Read PDFs with zoom, fullscreen, keyboard (arrow keys, space) and swipe page turns
  • Convert a PDF to a Regalpaket: pages pre-rendered as images for instant page turns, with a two-page spread view
  • Annotate Regalpakete with a pen, highlighter, eraser and stamps (fermata, breath mark, accent, staccato, check, X, star, circle)
  • Organize music into shelves and favorites; search, sort by name, date or type, and switch between grid and list view
  • Upload and rename files from the browser
  • Password login

Quick start

docker run -d \
  --name notenregal \
  --restart unless-stopped \
  -p 3001:3001 \
  -v /path/to/your/music:/library \
  -v notenregal-data:/data \
  cabi24/notenregal

Open http://localhost:3001 and choose a password. If someone else could reach the port before you do, set NOTENREGAL_PASSWORD instead, so the password is in place from the first start.

With Docker Compose:

services:
  notenregal:
    image: cabi24/notenregal:latest
    container_name: notenregal
    restart: unless-stopped
    ports:
      - "3001:3001"
    # environment:
    #   - NOTENREGAL_PASSWORD=change-me
    volumes:
      - /path/to/your/music:/library
      - notenregal-data:/data

volumes:
  notenregal-data:

An Unraid template is in unraid/notenregal.xml.

Configuration

Variable Default Description
PORT 3001 Port the server listens on
LIBRARY_PATH /library Folder containing your PDFs and Regalpakete
DATA_PATH /data Folder for the password hash, sessions, shelves, favorites and annotations
NOTENREGAL_PASSWORD unset Initial password, at least 8 characters. Only used while no password exists; after that, change it in the app

Usage

Adding music. Upload PDFs with + Upload PDF, or copy them into the library folder and reload the page. Only files directly in the folder are listed, not files in subfolders.

Shelves and favorites. Create shelves in the sidebar. Right-click a piece to add it to a shelf, rename it, or mark it as a favorite.

Regalpakete. Open a PDF and click Make Regalpaket. This renders every page at 300 DPI and saves a .regal file (a zip of the page images plus the original PDF) next to the PDF. Shelves and favorites switch over to the new file. The original PDF is kept.

Annotations. Open a Regalpaket and click ✏ to show the annotation toolbar. Changes save automatically to annotations.json in the data folder.

Development

Requires Node.js 20 or later.

git clone https://github.com/cabi24/notenregal.git
cd notenregal
npm install
npm install --prefix client
npm run dev

This starts the Vite dev server on http://localhost:3000, which forwards API requests to the Express server on port 3001. With no environment variables set, the server keeps its data files in the repository root and the library in ./library.

To build:

npm run build                    # client only, into client/dist
docker build -t notenregal .     # full image

The client is React with Vite, using react-pdf to render PDFs. The server is a single Express app (server/index.js) that stores everything in JSON files; there is no database.

License

MIT. See LICENSE.

Download Statistics

5,748
Total Downloads

Related apps

Explore more like this

Explore all

Details

Repository
cabi24/notenregal
Last Updated2026-09-23
First Seen2026-01-05

Runtime arguments

Web UI
http://[IP]:[PORT:3001]
Network
bridge
Shell
sh
Privileged
false

Template configuration

Web UI PortPorttcp

Port for the web interface

Target
3001
Default
3001
Value
3001
Library PathPathrw

Path to your sheet music PDFs

Target
/library
Default
/mnt/user/media/sheetmusic
Value
/mnt/user/media/sheetmusic
App DataPathrw

Path for application data (auth, shelves, annotations)

Target
/data
Default
/mnt/user/appdata/notenregal
Value
/mnt/user/appdata/notenregal
Initial PasswordVariable

Optional. Sets the password on first start (min. 8 characters) instead of on first visit. Ignored once a password exists.

Target
NOTENREGAL_PASSWORD