๐ŸŽฌ nowen-video

Your personal home media center โ€” lightweight, self-hosted, NAS-friendly.

Go React SQLite Docker License

็ฎ€ไฝ“ไธญๆ–‡ โ€ข Quick Start โ€ข Features โ€ข Configuration โ€ข Desktop 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](./desktop/README.md) ## ๐Ÿ“ธ Screenshots ![screenshot1](1.png) ![screenshot2](2.png) ## โœจ 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 - ๐Ÿ›ก๏ธ **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) ```bash 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`: ```yaml 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:/data # database & config - ./cache:/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` | `/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**. ```bash 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 ```yaml # 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, 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](./LICENSE). 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.