MCPcopy Index your code
hub / github.com/cropflre/nowen-video

github.com/cropflre/nowen-video @v1.2.6

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.2.6 ↗ · + Follow
5,642 symbols 13,620 edges 472 files 3,401 documented · 60%

Browse by type

Functions 4,383 Types & classes 1,256 Endpoints 3
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

🎬 nowen-video

Your personal home media center — lightweight, self-hosted, NAS-friendly.

Go React SQLite Docker License

简体中文Quick StartFeaturesConfigurationDesktop App


A lightweight home media server built with Go + React, similar to Jellyfin / Emby, optimized for NAS deployment. Single binary + SQLite, one-click Docker startup, zero configuration required.

🖥️ Desktop client is available with MKV / HEVC / HDR / Dolby Vision / DTS / Atmos zero-transcode playback → see desktop/README.md

📸 Screenshots

screenshot1 screenshot2

✨ Features

  • 🎬 Media library — auto scan (MKV/MP4/AVI/MOV/WebM/TS/RMVB/...), FFprobe metadata, external subtitles, NFO compatibility (Kodi/Emby/Jellyfin), real-time file watching
  • 📺 Smart playback — direct play for browser-compatible formats, on-demand HLS transcoding for the rest, ABR adaptive bitrate, keyboard shortcuts, Picture-in-Picture, bookmarks
  • Hardware acceleration — auto-detected Intel QSV / VAAPI / NVIDIA NVENC, software fallback, transcode cache reuse
  • 🎨 Multi-source scraping — Provider Chain: TMDb → Douban → TheTVDB → Bangumi → Fanart.tv → AI fallback
  • 📂 Series & collections — auto detection of S01E01, 1x01, 第01集, EP01, Episode 01; movie collections from TMDb
  • 🔤 Subtitles — external (SRT/ASS/SSA/VTT/SUB/IDX/SUP) + embedded extraction, online search, AI ASR generation
  • 👨‍👩‍👧‍👦 Multi-user — JWT auth, per-user history & favorites, playlists, parental controls, daily watch quota, content rating
  • 🧠 AI assistant — natural language search, recommendation reasons, metadata enhancement, smart rename, scene detection (chapters/highlights)
  • 📡 Emby API compatibility — Infuse / Kodi / Emby native clients work out of the box (140+ endpoints)
  • 💻 Cast — DLNA / Chromecast device discovery and control
  • 📊 Analytics — watch time stats, daily charts, admin dashboard
  • 📁 File manager — browse / import / rename / batch scrape, AI-assisted rename, audit log
  • 🔗 Sharing & tagging — share links with password & expiry, custom tags, bulk move, match rules
  • 💓 Pulse feed — community activity stream, likes & comments
  • 🛡️ Security — JWT, bcrypt, CORS, security headers, rate limiting, access log
  • 🌐 i18n — Chinese / English / Japanese
  • 🪶 Lightweight — single binary + SQLite (WAL), Alpine Docker image, healthcheck, PUID/PGID

🚀 Quick Start

1. Docker (recommended)

git clone https://github.com/your-repo/nowen-video.git
cd nowen-video
docker-compose up -d

Visit http://your-host:8080 — default admin: admin / admin123

2. NAS deployment (Synology / QNAP / Unraid)

Edit docker-compose.yml:

services:
  nowen-video:
    image: nowen-video:latest
    container_name: nowen-video
    ports:
      - "8080:8080"
    environment:
      - PUID=1000                                    # match your host user
      - PGID=1000
      - NOWEN_SECRETS_JWT_SECRET=change-me-please    # IMPORTANT
      - TZ=Asia/Shanghai
    volumes:
      - ./data:/app/data                             # database & config
      - ./cache:/app/cache                           # transcode cache
      - /volume1/Media:/media:ro                     # YOUR media folder
    devices:
      - /dev/dri:/dev/dri                            # optional: HW accel
    restart: unless-stopped
Env / Param Default Description
PUID / PGID 1000 Run as this UID/GID (must match your media folder permissions)
TZ UTC Timezone
NOWEN_APP_PORT 8080 HTTP port
NOWEN_SECRETS_JWT_SECRET (required) JWT signing secret — must be changed
NOWEN_APP_DATA_DIR /app/data Data dir (DB + uploads)
NOWEN_LOGGING_LEVEL info debug / info / warn / error
/dev/dri device Pass through Intel/AMD GPU for hardware transcoding

3. Build from source

Requires Go 1.22+, Node.js 20+, FFmpeg.

go mod tidy
cd web && npm install && cd ..

# dev
make dev          # backend
make dev-web      # frontend (another terminal)

# production
make build
./bin/nowen-video

⚙️ Configuration

Configuration is loaded in this order (later overrides earlier):

1. Built-in defaults     → run with zero config
2. config.yaml           → main file (legacy flat or new nested)
3. config/*.yaml         → per-module split files
4. NOWEN_* env vars      → e.g. NOWEN_APP_PORT=8080

Common split files under config/:

File Purpose
app.yaml port, debug, paths, FFmpeg location
database.yaml SQLite path, WAL, connection pool
secrets.yaml JWT secret, third-party API keys (⚠️ do not commit)
logging.yaml level, format, rotation
cache.yaml transcode cache directory & cleanup
ai.yaml LLM provider config (OpenAI / DeepSeek / Qwen / Ollama)

Note: Hardware acceleration / concurrency / transcode preset / CPU limits are auto-tuned at startup and are no longer exposed as config.

AI provider examples

# OpenAI
ai: { provider: openai,   api_base: https://api.openai.com/v1,                  model: gpt-4o-mini }
# DeepSeek
ai: { provider: deepseek, api_base: https://api.deepseek.com/v1,                model: deepseek-chat }
# Qwen
ai: { provider: qwen,     api_base: https://dashscope.aliyuncs.com/compatible-mode/v1, model: qwen-turbo }
# Ollama (local)
ai: { provider: ollama,   api_base: http://localhost:11434/v1,                  model: llama3 }

🏗️ Tech Stack

Backend Go 1.22 · Gin · GORM + SQLite (WAL) · Zap · Viper · gorilla/websocket · fsnotify · FFmpeg

Frontend React 18 · TypeScript · Vite · Tailwind CSS · Zustand · HLS.js · React Router · Framer Motion

Deploy Docker (Alpine 3.19) · docker-compose

🗺️ Roadmap

  • v0.1 – v0.9 Core playback, scraping, multi-user, AI assistant, file manager, Pulse, sharing, tags
  • v0.9.5 Full Emby API compatibility layer (Infuse / Kodi / Emby native clients)
  • 🔄 v1.0 ABR seamless bitrate switching, FFmpeg throttling, mobile responsive, PWA, test coverage > 60%, Prometheus metrics
  • 🚀 v1.1+ Native mobile apps, 4K/HDR, WebDAV, distributed transcoding, AV1, plugin marketplace

💬 Community

  • QQ group: 1093473044
  • Issues: please open a GitHub issue

☕ Sponsor

If this project helps you, consider buying the author a coffee / keyboard / bug-fix 🙏

WeChat Sponsor QR

Drug's WeChat sponsor QR — "Buy the author a keyboard / fix a bug"

📜 License

Released under the GNU General Public License v3.0.

You may freely run, study, modify and distribute this software. Any derivative work distributed externally must also be released under GPL-3.0 with the original copyright notice preserved. The software is provided "as is", without warranty of any kind.

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Method 2,701
Function 1,682
Struct 672
Interface 412
Class 158
TypeAlias 9
FuncType 3
Route 3
Enum 2

Languages

Go65%
TypeScript23%
Kotlin9%
Rust2%
Python1%

Modules by API surface

web/src/types/index.ts177 symbols
internal/service/scanner.go92 symbols
internal/service/metadata.go90 symbols
internal/service/preprocess.go77 symbols
internal/handler/v2_handlers.go65 symbols
internal/model/model.go62 symbols
android/app/src/main/java/com/nowen/video/data/remote/NowenApiService.kt57 symbols
internal/service/file_manager.go55 symbols
internal/service/scan_postprocess.go54 symbols
internal/service/metadata_provider.go53 symbols
internal/repository/repo_media.go53 symbols
internal/service/media.go52 symbols

For agents

$ claude mcp add nowen-video \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page