Cruncharr

Cruncharr

Docker app from EasyMedia's Repository

Overview

Cruncharr is a self-hosted companion for keeping your personal anime media library organized. It gives you a clean, *arr-style web interface with catalog and library tracking, a release calendar, activity history, and Sonarr integration so everything lines up with the collection you already manage. Multi-architecture image (amd64 and arm64). Set PUID/PGID to match the owner of your appdata and media shares so the container can write to them.

Cruncharr

A self-hosted companion for organizing and maintaining your personal anime media library — a headless backend with a REST API plus a single-page web interface.

Quick Deploy

Option 1: Docker Run (Recommended)

# Create directories
mkdir -p Cruncharr/config Cruncharr/downloads Cruncharr/widevine

# Run the container
docker run -d \
  --name cruncharr \
  -p 8585:8585 \
  -v $(pwd)/Cruncharr/config:/config \
  -v $(pwd)/Cruncharr/downloads:/downloads \
  -v $(pwd)/Cruncharr/widevine:/widevine \
  ghcr.io/mediavybz/cruncharr:latest

# Access the web interface
open http://localhost:8585

Option 2: Docker Compose

version: '3.8'

services:
  cruncharr:
    image: ghcr.io/mediavybz/cruncharr:latest
    container_name: cruncharr
    ports:
      - "8585:8585"
    volumes:
      - ./config:/config
      - ./downloads:/downloads
      - ./widevine:/widevine
    environment:
      - CRUNCHYROLL_CONFIG_PATH=/config/cruncharr.yaml
    restart: unless-stopped
docker-compose up -d

First Time Setup

  1. Open the web interface at http://your-server:8585
  2. Sign in with your account credentials
  3. Configure settings:
    • Library directory: /downloads (inside container)
    • Temp directory: /tmp/cruncharr
    • Endpoints: use defaults (recommended)
    • Audio languages: ja-JP (Japanese) by default
    • Subtitles: en-US (English) by default
    • Adjust these in Settings, then click Save

Volume Mounts

Path Purpose Required
/config Settings, tokens, catalog/activity history Yes
/downloads Your media library files Yes
/widevine Optional device files, if your source requires them Optional

Hardware Acceleration (GPU)

The image ships a full-GPU ffmpeg build (NVIDIA NVENC/CUDA, Intel QSV, AMD VAAPI/AMF, Vulkan). It is used by the Sync HW Accel option (Settings → Muxing). The dropdown lists only the GPUs currently available to the container — if you don't pass a GPU in, only "None (CPU)" appears.

Intel / AMD (VAAPI, QSV, AMF) — pass the render device:

    devices:
      - /dev/dri:/dev/dri
    group_add:
      - "video"
      - "render"

NVIDIA (NVENC/CUDA) — requires the NVIDIA Container Toolkit on the host:

    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

After (re)creating the container, open Settings → Muxing → Sync HW Accel and the detected GPU(s) will be listed (e.g. NVIDIA (CUDA) or Intel / AMD (VAAPI) (/dev/dri/renderD128)).

The runtime image is Debian-based; ffmpeg is a BtbN GPL build. NVIDIA encode needs the host driver injected by the NVIDIA Container Toolkit — the image alone does not bundle the driver.

Configuration

Config File

Create config/cruncharr.yaml:

crunchyroll:
  email: "your@email.com"
  password: "yourpassword"
  use_beta_api: true
  stream_endpoint:
    endpoint: tv/android_tv
    use_default: true
    video: true
    audio: true
download:
  output_dir: /downloads
  temp_dir: /tmp/cruncharr
  filename: "${seriesTitle} - S${season}E${episode} [${height}p]"
  quality_video: best
  quality_audio: best
  dub_languages:
    - ja-JP  # Default: Japanese only
  soft_subs:
    - en-US  # Default: English only
  simultaneous_downloads: 2
  simultaneous_processing_jobs: 2
queue:
  persist_queue: false
  auto_download: false
history:
  enabled: true
  remove_missing_episodes: true

Building from Source

git clone https://github.com/mediavybz/Cruncharr.git
cd Cruncharr
docker build -t cruncharr .
docker run -d -p 8585:8585 -v ./config:/config -v ./downloads:/downloads cruncharr

API Endpoints

The backend exposes a REST API at http://localhost:8585/api/v1/:

  • GET /api/v1/auth/status - Auth status
  • POST /api/v1/auth/login - Sign in with credentials
  • GET /api/v1/queue - Activity queue
  • POST /api/v1/queue - Add to queue
  • GET /api/v1/series/search?query=QUERY - Search catalog
  • GET /api/v1/series/{id}/episodes - Get episodes
  • GET /api/v1/config - Get configuration
  • POST /api/v1/config - Update configuration

Features

  • Web interface: Single-page app at / - search the catalog, browse episodes, manage activity, configure settings
  • Sign-in: Account login with automatic token refresh
  • Library: Select episodes with multi-track support and concurrent processing with progress tracking
  • Queue: Add episodes to a queue, optional automatic processing, activity management
  • History: Track your catalog, Sonarr integration, refresh series data
  • Calendar: View upcoming release schedule
  • Endpoints: Configurable device endpoints (Android TV, Web, Console) with working defaults
  • Languages: Select audio and subtitle languages (default: Japanese audio, English subtitles)
  • Muxing: Automatic muxing with ffmpeg/mkvtoolnix, MP4/MP3 output options
  • Hardware acceleration: Full-GPU ffmpeg (NVENC/CUDA, QSV, VAAPI/AMF, Vulkan); GPU picker for sync that lists only the devices passed into the container
  • Themes: Multiple selectable UI themes (Dark, Light, Cinematic, AMOLED, Nebula, Seerr) with a centralized design-token system
  • Settings: Full settings panel with library, queue, history, notifications, and appearance options
  • Notifications: Webhook support for completion/failure events

Troubleshooting

No Audio Track

  • Check that dub_languages in config includes the item's audio language
  • Default is ja-JP only - add more languages in Settings if needed

Sign-in Issues

  • Delete config/token.json to force a fresh sign-in
  • Check that the stream endpoint "Use Default" is enabled

Reset All Settings

  • Stop the container
  • Delete config/cruncharr.yaml
  • Restart the container - it will recreate with defaults

Device Files

  • Some sources require device_private_key.pem and device_client_id_blob.bin in the widevine/ directory

Security

Cruncharr is built for private, self-hosted use (your LAN, or behind a reverse proxy). Before exposing it more widely:

  • API key. The API is unauthenticated by default. If the container is reachable from an untrusted network, set the CRUNCHARR_API_KEY env var — every /api/* request must then present it via the X-Api-Key header, Authorization: Bearer <key>, or (only for the browser Server-Sent-Events stream, which cannot send headers) the ?apiKey= query param. The web interface prompts for the key once and stores it locally. Health checks stay exempt.
  • TLS. The container serves plain HTTP. Terminate HTTPS at a reverse proxy (Caddy / nginx / Traefik) if it leaves your host.
  • Credentials at rest. Your account login and any Sonarr/proxy keys live in config/cruncharr.yaml in plaintext (file mode 600) — the same model as Sonarr/Radarr. Protect the /config volume accordingly. The config API never returns secrets (they read back as [configured]), and credentials are never written to logs.
  • CORS. Cross-origin API access defaults to http://localhost:8585; override with the CORS_ORIGINS env var (comma-separated) if you serve the UI elsewhere.
  • Outbound calls are guarded. Webhook URLs are rejected if they resolve to private/loopback/link-local addresses (SSRF protection); catalog images are proxied and cached server-side only from the source's own image host over HTTPS.

Credits

This project is based on the original Crunchy-Downloader desktop application by Crunchy-DL. All core logic and media processing is ported from the upstream source, as required by its license.

License

MIT License - See upstream LICENSE for full text.

Install Cruncharr on Unraid in a few clicks.

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

Requirements

Internet access and an account with your source service. Some sources may require the matching device files to be placed in the /widevine path.

Related apps

Details

Repository
ghcr.io/mediavybz/cruncharr:latest
Last Updated2026-07-06
First Seen2026-07-01

Runtime arguments

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

Template configuration

WebUI PortPorttcp

HTTP port for the Cruncharr web interface.

Target
8585
Default
8585
Value
8585
ConfigPathrw

Stores settings, catalog, activity history and logs.

Target
/config
Default
/mnt/user/appdata/Cruncharr
Value
/mnt/user/appdata/Cruncharr
MediaPathrw

Where your library files are written and organized.

Target
/downloads
Default
/mnt/user/Media/Anime
Value
/mnt/user/Media/Anime
Device FilesPathrw

Optional path for source device files, if your source requires them.

Target
/widevine
Default
/mnt/user/appdata/Cruncharr/widevine
Value
/mnt/user/appdata/Cruncharr/widevine
PUIDVariable

User ID the container runs as. Match the owner of your config and media shares.

Default
99
Value
99
PGIDVariable

Group ID the container runs as.

Default
100
Value
100
API Key (optional)Variable

Optional: require this key to access the interface. Leave blank to disable.

Target
CRUNCHARR_API_KEY
Account Email (optional)Variable

Optional: pre-fill your source account email. Can also be set in the web interface.

Target
CRUNCHYROLL_EMAIL
Account Password (optional)Variable

Optional: pre-fill your source account password. Can also be set in the web interface.

Target
CRUNCHYROLL_PASSWORD
Webhook URL (optional)Variable

Optional: webhook for activity notifications.

Target
CRUNCHYROLL_WEBHOOK_URL