StoryScan

Docker app from Unknowncall's Repository

Overview

A stunning web-based disk analyzer for Unraid that transforms storage exploration into a visual experience. Interactive treemaps, powerful search and filtering, top 10 space hogs, directory comparison, historical size tracking, and dark mode support. Finally, a disk analyzer that's as beautiful as it is functional.

StoryScan

A beautiful, modern web-based disk usage visualizer designed for Unraid and other systems. Inspired by DaisyDisk, StoryScan provides an elegant interface to explore and understand your disk usage with interactive treemap visualizations.

Features

  • Beautiful UI: Modern, gradient-rich design with smooth animations
  • Interactive Treemap: D3.js-powered visualization that lets you drill down into directories
  • Dark Mode: Full dark mode support with smooth transitions
  • Multi-Directory Support: Scan and switch between multiple configured directories
  • Real-time Stats: See total size, file count, and folder count at a glance
  • Responsive: Works on desktop, tablet, and mobile devices
  • Docker Ready: Easy deployment with Docker and docker-compose

Quick Start

Using Docker Compose (Recommended)

  1. Clone this repository:
git clone <repository-url>
cd storyscan
  1. Edit docker-compose.yml to configure your directories:
environment:
  - SCAN_DIRECTORIES=/data/media,/data/downloads,/data/backups
volumes:
  - /mnt/user/media:/data/media:ro
  - /mnt/user/downloads:/data/downloads:ro
  - /mnt/user/backups:/data/backups:ro
  1. Start the container:
docker-compose up -d
  1. Access the web interface at http://localhost:3000

Using Docker Run

docker build -t storyscan .

docker run -d \
  --name storyscan \
  -p 3000:3000 \
  -e SCAN_DIRECTORIES=/data/media,/data/downloads \
  -v /mnt/user/media:/data/media:ro \
  -v /mnt/user/downloads:/data/downloads:ro \
  storyscan

Configuration

Environment Variables

  • SCAN_DIRECTORIES: Comma-separated list of directories to scan (default: /data)

Example:

SCAN_DIRECTORIES=/data/media,/data/downloads,/data/backups

Volume Mounts

Mount your directories as read-only (:ro) for safety:

volumes:
  - /host/path:/container/path:ro

The container paths should match what you specify in SCAN_DIRECTORIES.

Unraid Installation

  1. In Unraid, go to Docker tab

  2. Click Add Container

  3. Configure as follows:

    • Name: storyscan
    • Repository: storyscan (or your registry)
    • Network Type: bridge
    • Port: 3000 → 3000
    • Path 1: /mnt/user/media → /data/media (read-only)
    • Path 2: /mnt/user/downloads → /data/downloads (read-only)
    • Variable: SCAN_DIRECTORIES = /data/media,/data/downloads
  4. Click Apply and access at http://your-unraid-ip:3000

Development

Prerequisites

  • Node.js 20+
  • npm or yarn

Local Development

  1. Install dependencies:
npm install
  1. Create a .env.local file:
SCAN_DIRECTORIES=/Users/yourname/Documents,/Users/yourname/Downloads
  1. Run the development server:
npm run dev
  1. Open http://localhost:3000

Build for Production

npm run build
npm start

Technology Stack

  • Next.js 14: React framework with App Router
  • TypeScript: Type-safe development
  • Tailwind CSS: Utility-first styling
  • D3.js: Powerful treemap visualizations
  • Framer Motion: Smooth animations
  • Lucide React: Beautiful icons

Screenshots

Coming soon

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Details

Repository
ghcr.io/unknowncall/storyscan:latest
Last Updated2026-10-16
First Seen2025-11-09

Runtime arguments

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

Template configuration

File PathPathrw

Host path to scan. Map your Unraid share(s) here.

Target
/media-server
Value
/mnt/user/Media Server/
Database StoragePathrw

Persistent storage for the SQLite database (historical scan data). Map to a location on your Unraid server to preserve history across container updates.

Target
/app/data
Value
/mnt/user/appdata/storyscan/
SCAN_DIRECTORIESVariable

Comma-separated list of directories inside the container to scan.

Default
/media-server
Value
/media-server
SCAN_CRON_ENABLEDVariable

Enable automatic background scanning on a schedule. Set to false to disable.

Default
true
Value
true
SCAN_INTERVAL_HOURSVariable

Hours between automatic scans. Accepts decimals (0.5 = 30 min). Set to 0 to disable.

Default
6
Value
6
SCAN_ON_STARTVariable

Run an initial scan immediately when the container starts.

Default
true
Value
true
SCAN_CRON_EXPRESSIONVariable

Optional: override with a custom cron expression (e.g. '0 3 * * *' for 3am daily). Leave empty to use SCAN_INTERVAL_HOURS.

TREEMAP_MAX_NODESVariable

Maximum number of items to render in the treemap.

Default
20000
Value
20000
TREEMAP_MAX_DEPTHVariable

Maximum folder depth to display in the treemap.

Default
5
Value
5
TREEMAP_LIGHT_THRESHOLDVariable

Item count below which no filtering is applied.

Default
5000
Value
5000
TREEMAP_MODERATE_THRESHOLDVariable

Item count threshold for moderate filtering.

Default
15000
Value
15000
TREEMAP_AGGRESSIVE_THRESHOLDVariable

Item count threshold for aggressive filtering.

Default
50000
Value
50000
WebUIPorttcp

Port for the web interface.

Target
3000
Default
3455
Value
3455