Skip to content
This repository was archived by the owner on Sep 10, 2026. It is now read-only.

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenMovie

License: MIT

A self-hosted movie and TV resource automation system that brings recommendation browsing, resource search, subscription tracking, automatic downloading, file organization, and metadata scraping together in one place.

Inspired by MoviePilot, rewritten in Go + React, in pursuit of lightweight, high performance and zero external dependencies.

Features

Module Features
Discovery 13 built-in recommendation sources including TMDB popular/trending, Douban on-air/upcoming/Top250/weekly word-of-mouth, and the Bangumi calendar, with multi-dimensional filtering by genre / language / rating / year
Resource Search Parallel multi-site search with real-time results streamed over SSE, exact search by TMDB/Douban/Bangumi/IMDB ID, and 14 built-in site parsers
Subtitle Search A dedicated subtitle search channel, supporting Chinese / English / Japanese / Korean and bilingual subtitle detection
Subscription Management Three modes — RSS / search / mixed — best-version upgrade tracking episode by episode, plus a subscription sharing marketplace (share / follow / fork)
Automatic Download Supports qBittorrent, Transmission and custom HTTP downloaders (rTorrent, etc.), with torrent file selection, sequential download and seeding limits
Media Organization Background queue with real-time SSE progress, four modes — copy / move / hardlink / softlink — smart episode-number format recognition, and AI retry on failure
File Management Directory browsing, smart (media-aware) renaming, move/copy/delete, and storage usage statistics
Site Management 20+ built-in indexers, CookieCloud sync, site user data (upload / download / ratio / bonus), and site resource browsing
Metadata Scraping Automatic NFO generation plus poster/backdrop downloads, from both TMDB and Douban
Calendar View A monthly calendar showing air dates of subscribed episodes, with available / missing / completed status markers
Notification System Telegram / WeCom (Enterprise WeChat) / Webhook notification channels, with configurable templates
Scheduled Tasks 5 automation jobs: subscription refresh, download check, directory scan, site data sync, and data maintenance
AI Recommendations Integrates OpenAI to intelligently rank and recommend search results
Overseerr Integration Native support for Overseerr / Jellyseerr webhooks to create subscriptions automatically

Screenshots

Recommendations Search
Recommendations Search
Subscriptions Calendar
Subscriptions Calendar
Downloaders Media Organization
Downloaders Organization
File Management System Settings
Files Settings

Tech Stack

Backend — Go 1.22+, zero external dependencies (pure standard library)

  • net/http HTTP server
  • JSON file KV store (atomic writes)
  • In-process event bus (async/sync pub/sub)
  • Goroutine worker pool

Frontend — React 19 + TypeScript 5.9 + Ant Design 6

  • Vite 8 build
  • React Router v7
  • SSE real-time data streams

Quick Start

Requirements

  • Go 1.22+
  • Node.js 18+ (only for building the frontend)

Build

# Build the frontend
cd web
npm install
npm run build

# Build the backend
cd ..
go build -o openmovie ./cmd/server

Run

./openmovie

Listens on :8090 by default; just visit http://localhost:8090.

Environment Variables

Variable Default Description
OPENMOVIE_ADDR :8090 HTTP listen address
OPENMOVIE_DATA_DIR data Data storage directory

Development Mode

# Terminal 1: start the backend
OPENMOVIE_DATA_DIR=data-dev go run ./cmd/server

# Terminal 2: start the frontend (automatically proxies the API to the backend)
cd web
npm run dev

The frontend dev server runs at http://localhost:5173 and automatically proxies /api requests to the backend on :8090.

To specify the backend address:

OPENMOVIE_API=http://192.168.1.100:8090 npm run dev

Project Structure

OpenMovie/
├── cmd/server/main.go          # Entry point
├── internal/
│   ├── api/server.go           # HTTP routes + middleware
│   ├── domain/models.go        # Domain models (50+ types)
│   ├── event/bus.go            # Event bus
│   ├── module/                 # External module integrations
│   │   ├── downloader.go       # qBittorrent / Transmission / HTTP downloaders
│   │   ├── media_source.go     # TMDB / Douban / Bangumi APIs
│   │   ├── site.go             # Site search + parsing
│   │   ├── site_access.go      # CookieCloud / site authentication
│   │   └── site_indexer.go     # Built-in indexer definitions
│   ├── repository/store.go     # JSON KV store
│   └── usecase/service.go      # Business logic orchestration
├── web/                        # React frontend
│   ├── src/
│   │   ├── App.tsx             # Main app (routes + pages)
│   │   ├── types.ts            # TypeScript type definitions
│   │   └── index.css           # Global styles
│   └── package.json
├── data-dev/                   # Development seed data
│   ├── store/settings.json     # Example settings
│   ├── store/sites.json        # Example sites
│   ├── downloads/              # Download directory
│   └── library/                # Media library directory
└── docs/screenshots/           # Screenshots

Core Configuration

After the first run, configure everything through the "System Settings" page in the web UI. Main configuration items:

Directory configuration

  • downloadRoots — list of download directories
  • libraryRoots — list of media library directories
  • directoryPairs — directory pairs (download → media library mapping, supports specifying the transfer mode and storage type)

Site configuration

  • sites — site list (name, address, cookie, proxy, browser emulation, etc.)
  • siteCookieCloudIntervalMinutes — CookieCloud auto-sync interval

Subscription configuration

  • subscribeMode — subscription mode: rss / search / mixed
  • subscribeRefreshMinutes — subscription refresh interval
  • subscribeBestVersionRules — best-version upgrade rules

Search configuration

  • searchIndexerSites — indexer sites used for searching
  • searchResourcePages — number of pages per search

Rename formats

  • movieRenameFormat — movie rename format, e.g. {title} ({year})/{title} ({year})
  • tvRenameFormat — TV rename format, e.g. {title}/Season {season2}/{title} S{season2}E{episode2}

Security

  • apiToken — API access token
  • securityAllowLan — whether to allow LAN access

Proxy

  • proxyUrl — global HTTP proxy address

API

All API endpoints live under /api/v1/ and require Authorization: Bearer <token> or X-API-Token: <token> in the request headers.

Main endpoints:

GET    /api/v1/recommend          # Recommendations
GET    /api/v1/search             # Resource search
GET    /api/v1/search/stream      # SSE streaming search
GET    /api/v1/subscribes         # Subscription list
POST   /api/v1/subscribes         # Create subscription
GET    /api/v1/calendar            # Calendar
GET    /api/v1/downloads           # Download tasks
POST   /api/v1/downloads           # Add download
GET    /api/v1/transfers/queue     # Transfer queue
GET    /api/v1/transfers/events    # SSE transfer events
GET    /api/v1/sites               # Site list
GET    /api/v1/files/list          # File list
GET    /api/v1/settings            # System settings
GET    /api/v1/automation/jobs     # Scheduled jobs
GET    /api/v1/notifications       # Notification list
GET    /api/v1/health              # Health check

Acknowledgements


License

MIT License


中文

一个自托管的影视资源自动化管理系统,集推荐浏览、资源搜索、订阅追踪、自动下载、文件整理、元数据刮削于一体。

灵感来源于 MoviePilot,使用 Go + React 重写,追求轻量、高性能、零外部依赖。


功能一览

模块 功能
推荐浏览 TMDB 热门/趋势、豆瓣热播/即将上映/Top250/一周口碑、Bangumi 日历等 13 个内置推荐源,支持类型/语言/评分/年代多维筛选
资源搜索 多站点并行搜索 + SSE 实时流式返回,支持 TMDB/Douban/Bangumi/IMDB ID 精确搜索,内置 14 种站点解析器
字幕搜索 独立字幕搜索通道,支持中/英/日/韩/双语字幕检测
订阅管理 RSS / 搜索 / 混合三种模式,最佳版本逐集升级追踪,订阅分享市场(share / follow / fork)
自动下载 支持 qBittorrent、Transmission、自定义 HTTP 下载器(rTorrent 等),种子文件选择、顺序下载、做种限制
媒体整理 后台队列 + SSE 实时进度,copy / move / hardlink / softlink 四种模式,智能集数格式识别,失败 AI 重试
文件管理 目录浏览、智能重命名(媒体感知)、移动/复制/删除,存储用量统计
站点管理 20+ 内置索引器,CookieCloud 同步,站点用户数据(上传/下载/比率/魔力),站点资源浏览
元数据刮削 自动 NFO 生成 + 海报/背景图下载,TMDB / 豆瓣双源
日历视图 月度日历展示订阅剧集播出时间,已有/缺失/已完成状态标记
通知系统 Telegram / 企业微信 / Webhook 通知渠道,可配置模板
定时任务 订阅刷新、下载检查、目录扫描、站点数据同步、数据维护 5 个自动化任务
AI 推荐 接入 OpenAI 对搜索结果智能排序推荐
Overseerr 集成 原生支持 Overseerr / Jellyseerr Webhook 自动创建订阅

截图

推荐 搜索
推荐 搜索
订阅 日历
订阅 日历
下载器 媒体整理
下载器 整理
文件管理 系统设置
文件 设置

技术栈

后端 — Go 1.22+,零外部依赖(纯标准库)

  • net/http HTTP 服务器
  • JSON 文件 KV 存储(原子写入)
  • 进程内事件总线(async/sync pub/sub)
  • Goroutine 工作池

前端 — React 19 + TypeScript 5.9 + Ant Design 6

  • Vite 8 构建
  • React Router v7
  • SSE 实时数据流

快速开始

环境要求

  • Go 1.22+
  • Node.js 18+(仅构建前端)

构建

# 构建前端
cd web
npm install
npm run build

# 构建后端
cd ..
go build -o openmovie ./cmd/server

运行

./openmovie

默认监听 :8090,访问 http://localhost:8090 即可。

环境变量

变量 默认值 说明
OPENMOVIE_ADDR :8090 HTTP 监听地址
OPENMOVIE_DATA_DIR data 数据存储目录

开发模式

# 终端 1:启动后端
OPENMOVIE_DATA_DIR=data-dev go run ./cmd/server

# 终端 2:启动前端(自动代理 API 到后端)
cd web
npm run dev

前端开发服务器运行在 http://localhost:5173,自动代理 /api 请求到后端 :8090

如需指定后端地址:

OPENMOVIE_API=http://192.168.1.100:8090 npm run dev

项目结构

OpenMovie/
├── cmd/server/main.go          # 入口
├── internal/
│   ├── api/server.go           # HTTP 路由 + 中间件
│   ├── domain/models.go        # 领域模型(50+ 类型)
│   ├── event/bus.go            # 事件总线
│   ├── module/                 # 外部模块集成
│   │   ├── downloader.go       # qBittorrent / Transmission / HTTP 下载器
│   │   ├── media_source.go     # TMDB / Douban / Bangumi API
│   │   ├── site.go             # 站点搜索 + 解析
│   │   ├── site_access.go      # CookieCloud / 站点认证
│   │   └── site_indexer.go     # 内置索引器定义
│   ├── repository/store.go     # JSON KV 存储
│   └── usecase/service.go      # 业务逻辑编排
├── web/                        # React 前端
│   ├── src/
│   │   ├── App.tsx             # 主应用(路由 + 页面)
│   │   ├── types.ts            # TypeScript 类型定义
│   │   └── index.css           # 全局样式
│   └── package.json
├── data-dev/                   # 开发种子数据
│   ├── store/settings.json     # 示例配置
│   ├── store/sites.json        # 示例站点
│   ├── downloads/              # 下载目录
│   └── library/                # 媒体库目录
└── docs/screenshots/           # 截图

核心配置

首次运行后通过 Web 界面「系统设置」页面配置,主要配置项:

目录配置

  • downloadRoots — 下载目录列表
  • libraryRoots — 媒体库目录列表
  • directoryPairs — 目录对(下载 → 媒体库映射,支持指定传输模式和存储类型)

站点配置

  • sites — 站点列表(名称、地址、Cookie、代理、浏览器仿真等)
  • siteCookieCloudIntervalMinutes — CookieCloud 自动同步间隔

订阅配置

  • subscribeMode — 订阅模式:rss / search / mixed
  • subscribeRefreshMinutes — 订阅刷新间隔
  • subscribeBestVersionRules — 最佳版本升级规则

搜索配置

  • searchIndexerSites — 搜索使用的索引器站点
  • searchResourcePages — 每次搜索页数

重命名格式

  • movieRenameFormat — 电影重命名格式,如 {title} ({year})/{title} ({year})
  • tvRenameFormat — 电视剧重命名格式,如 {title}/Season {season2}/{title} S{season2}E{episode2}

安全

  • apiToken — API 访问令牌
  • securityAllowLan — 是否允许局域网访问

代理

  • proxyUrl — 全局 HTTP 代理地址

API

所有 API 端点位于 /api/v1/ 下,需要在请求头携带 Authorization: Bearer <token>X-API-Token: <token>

主要端点:

GET    /api/v1/recommend          # 推荐列表
GET    /api/v1/search             # 资源搜索
GET    /api/v1/search/stream      # SSE 流式搜索
GET    /api/v1/subscribes         # 订阅列表
POST   /api/v1/subscribes         # 创建订阅
GET    /api/v1/calendar            # 日历
GET    /api/v1/downloads           # 下载任务
POST   /api/v1/downloads           # 添加下载
GET    /api/v1/transfers/queue     # 传输队列
GET    /api/v1/transfers/events    # SSE 传输事件
GET    /api/v1/sites               # 站点列表
GET    /api/v1/files/list          # 文件列表
GET    /api/v1/settings            # 系统设置
GET    /api/v1/automation/jobs     # 定时任务
GET    /api/v1/notifications       # 通知列表
GET    /api/v1/health              # 健康检查

致谢


许可证

MIT License

About

Self-hosted media automation for discovery, search, subscriptions, downloads and organization | 自托管影视资源自动化管理系统

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages