All apps · 0 apps
OpenEasyX
Docker app from Raccommode's Repository
Overview
Readme
View on GitHubOpen EasyX
Open EasyX is one private, self-hosted application for discovering, downloading, organizing, browsing, and playing media: one Node server, one React application, one Docker container, and one media volume.
What is included
- performer discovery and source association;
- automatic and manual download queues;
- isolated partial downloads in
media/.downloads, with restart-from-zero recovery; - an indexed video and photo library with favorites, history, progress, previews, and statistics;
- direct live-cam aggregation and playback from installed source plugins;
- local subtitle transcription and translation;
- an official, built-in plugin store;
- additional plugin repositories from GitHub, Gitea, Forgejo, GitLab, or any compatible HTTP(S), SSH, or Git remote;
- integrated browser login for plugins that need an authenticated session.
No bridge, iframe, or second application runs behind Open EasyX.
Screenshots
One optimized navigation and media library

Built-in and community plugin stores

Start with Docker Compose
mkdir -p data media plugins-external
docker compose up -d
Open http://localhost:3210. The default Compose project starts one container named open-easyx.
Completed media is organized below /media/<performer>/<source>/. Active transfers stay below /media/.downloads and are never exposed to the library. On restart, interrupted transfers are discarded and queued again from zero.
Local development
Requirements: Node.js 22.5 or newer, Git, FFmpeg, and the downloader helpers used by the plugins you enable.
npm install
npm run dev
Run the full validation suite with:
npm run check
Plugins and stores
Plugins are grouped in the UI by what they add:
- Sources & discovery — identity search, source discovery, scraping, and download resolution;
- Live cam — live directories and stream resolution;
- Features & addons — library hooks and other local features.
The official store lives in plugins/ and cannot be removed. In Plugins → Repositories, an administrator can install another Git repository URL. Open EasyX validates and clones it into /data/plugin-repositories, loads plugins from either its root or plugins/, and lets the administrator update or remove that repository later.
See docs/PLUGINS.md for the SDK contract, or start a store from the public Open EasyX Community Plugins template.
Persistent paths
| Container path | Purpose |
|---|---|
/data |
databases, sessions, plugin repository checkouts, thumbnails, subtitles, and models |
/media |
completed media library plus private .downloads staging |
/plugins |
optional legacy read-only local plugin folder |
Important environment variables include PUID, PGID, EASYX_SCAN_INTERVAL_MINUTES, EASYX_WHISPER_MODEL, EASYX_TRANSLATION_MODEL, and EASYX_LOG_LEVEL.
Container publishing
Every push and pull request runs tests, TypeScript, the production web build, a Docker build, and runtime checks. Successful pushes publish multi-architecture images to ghcr.io/raccommode/open-easyx with latest, branch, tag, and commit SHA tags.
Responsible use
Only download, retain, and view material you are legally authorized to access. Third-party plugins execute trusted server-side code; review their source before installation.
License
Install OpenEasyX on Unraid in a few clicks.
Find OpenEasyX 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.
Requirements
Related apps
Explore more like this
Explore allDetails
ghcr.io/raccommode/open-easyx:latestRuntime arguments
- Web UI
http://[IP]:[PORT:3210]- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Open EasyX web interface and API port. Keep this accessible only on a trusted LAN or through an authenticated reverse proxy. Container port: 3210.
- Target
- 3210
- Default
- 3210
- Value
- 3210
Stores databases, sessions, plugin repository checkouts, thumbnails, subtitles, logs, and downloaded AI models. Back up and protect this path.
- Target
- /data
- Default
- /mnt/user/appdata/open-easyx
- Value
- /mnt/user/appdata/open-easyx
Stores the completed media library and private .downloads staging directory used for active transfers.
- Target
- /media
- Default
- /mnt/user/OpenEasyX
- Value
- /mnt/user/OpenEasyX
Optional legacy directory containing trusted external plugin folders. The built-in plugin store and added Git repositories are stored under Data instead.
- Target
- /plugins
- Default
- /mnt/user/appdata/open-easyx/plugins
- Value
- /mnt/user/appdata/open-easyx/plugins
Host user ID used for files written to Data and Media. Unraid's nobody user is UID 99.
- Default
- 99
- Value
- 99
Host group ID used for files written to Data and Media. Unraid's users group is GID 100.
- Default
- 100
- Value
- 100
Minutes between automatic media-library scans. The minimum effective value is 1 minute.
- Target
- EASYX_SCAN_INTERVAL_MINUTES
- Default
- 10
- Value
- 10
Whisper model used for local subtitle transcription. Larger models require more memory, storage, and processing time.
- Target
- EASYX_WHISPER_MODEL
- Default
- small
- Value
- small
Hugging Face model used for local subtitle translation.
- Target
- EASYX_TRANSLATION_MODEL
- Default
- facebook/nllb-200-distilled-600M
- Value
- facebook/nllb-200-distilled-600M
Subtitle processing chunk length in seconds. Open EasyX constrains this value between 120 and 1800.
- Target
- EASYX_SUBTITLE_CHUNK_SECONDS
- Default
- 600
- Value
- 600
Application log level, for example fatal, error, warn, info, debug, trace, or silent.
- Target
- EASYX_LOG_LEVEL
- Default
- info
- Value
- info
Timezone used by the container, for example America/Toronto.
- Target
- TZ
- Default
- America/Toronto
- Value
- America/Toronto