A modern, fast debrid client with integrated media discovery, Usenet streaming, and seamless playback.
- Features
- Supported Services
- Installation
- Docker Deployment
- Configuration
- Feature Details
- API Reference
- Contributing
- License
- Real-Debrid - Premium link generator and torrent downloading
- TorBox - Torrent and Usenet downloading service
- AllDebrid - Multi-hoster and torrent service
- Premiumize - Cloud downloading and streaming
- nzbdav - Usenet streaming via SABnzbd-compatible API
- Trakt.tv Integration - Browse trending, popular, and anticipated movies/TV shows
- Smart Search - Search across all configured Stremio addons
- Episode Browser - Navigate TV shows by season and episode
- Direct Streaming - Stream to VLC, IINA, MPV, PotPlayer, Kodi, Infuse, MX Player
- Multiple Sources - Compare quality, size, and source for each title
- Multiple Profiles - Create up to 4 profiles (like Netflix)
- Continue Watching - Track progress across movies and TV shows
- Favorites - Save your favorite movies and shows
- Watch History - Automatic progress tracking
- Next Episode - Automatically shows next episode after completion
- Pre-caching - Automatically cache next 2 episodes
- Background Processing - Queue and process cache jobs
- Multi-source Support - Works with Usenet and torrent sources
- Smart Selection - Prioritizes Usenet URLs, then cached torrents
- Multi-account Switching - Switch between accounts on the fly
- Real-time Progress - Live download status updates
- Tree View Explorer - Hierarchical file browsing
- Batch Operations - Select and manage multiple files
- Drag & Drop - Upload torrents and magnet links easily
- Dark/Light Mode - Automatic theme switching
- Responsive Design - Works on desktop, tablet, and mobile
- Keyboard Shortcuts - Cmd/Ctrl+K for quick search
- Auto-refresh - Configurable refresh intervals
| Service | Torrents | Usenet | Web Downloads | Streaming |
|---|---|---|---|---|
| Real-Debrid | ✅ | ❌ | ✅ | ✅ |
| TorBox | ✅ | ✅ | ✅ | ✅ |
| AllDebrid | ✅ | ❌ | ✅ | ✅ |
| Premiumize | ✅ | ❌ | ✅ | ✅ |
| nzbdav | ❌ | ✅ | ❌ | ✅ |
- Node.js 20+ or Bun
- PostgreSQL 14+
- A debrid account (or nzbdav for Usenet)
# Clone the repository
git clone https://github.com/verlaine9977/StreamUI.git
cd StreamUI
# Install dependencies
bun install
# Configure environment
cp .env.example .env.local
# Edit .env.local with your settings
# Set up database
bunx drizzle-kit push
# Run development server
bun run devOpen http://localhost:3000 to access the app.
version: '3.8'
services:
debridui:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://debridui:debridui@postgres:5432/debridui
- APP_PASSWORD=YourSecurePassword
- BETTER_AUTH_SECRET=your-secret-key-min-32-chars
- TRAKT_CLIENT_ID=your-trakt-client-id
- TRAKT_CLIENT_SECRET=your-trakt-client-secret
depends_on:
- postgres
postgres:
image: postgres:15-alpine
environment:
POSTGRES_USER: debridui
POSTGRES_PASSWORD: debridui
POSTGRES_DB: debridui
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:| Variable | Required | Description |
|---|---|---|
DATABASE_URL |
Yes | PostgreSQL connection string |
APP_PASSWORD |
Yes | Password for login |
BETTER_AUTH_SECRET |
Yes | Secret key for auth (min 32 chars) |
TRAKT_CLIENT_ID |
Yes | Trakt.tv API client ID |
TRAKT_CLIENT_SECRET |
Yes | Trakt.tv API client secret |
NEXT_PUBLIC_CORS_PROXY_URL |
No | CORS proxy for addons |
NEXT_PUBLIC_DISCORD_URL |
No | Discord community link |
- Go to Settings → Accounts → Add Account
- Select account type
- Enter API key (and API URL for nzbdav)
- Click Add Account
nzbdav is a SABnzbd-compatible API for Usenet streaming. To use it:
- Set up usenetstreamer or similar
- Get the API key from the service
- Add account with:
- Type: nzbdav
- API Key: Your API key
- API URL:
http://your-server:port(e.g.,http://nzbdav:3000)
- Go to Settings → Addons
- Click Add Addon
- Enter the addon manifest URL
- Enable/disable and reorder as needed
The continue watching feature tracks your progress across all media:
- Automatic Tracking: Progress is saved when you start watching
- Resume Playback: Click to continue from where you left off
- Episode Navigation: For TV shows, clicking goes directly to the episode
- Next Episode: When you finish an episode, the next one appears automatically
- Remove Items: Click the X to remove from continue watching
Pre-cache content for instant playback:
- Go to Settings → Cache Warmer
- Select options:
- Include Favorites: Cache movies from your favorites
- Include Next Episodes: Cache next 2 episodes from continue watching
- Click Start Caching
- Monitor progress in the panel
How it works:
- Searches configured addons for sources
- Prioritizes Usenet/URL sources (instant streaming)
- Falls back to magnet links (adds to debrid cache)
- For Usenet: triggers the NZB download to start caching
Create multiple profiles for different users:
- Click profile icon in sidebar
- Add Profile: Set name, avatar, and color
- Switch Profiles: Click to switch between profiles
- Each profile has separate:
- Continue watching
- Favorites
- Watch history
Navigate your debrid files:
- Tree View: Hierarchical folder structure
- Search: Filter files by name
- Sort: By name, size, or date
- Actions:
- Stream to player
- Copy download link
- Delete file
- Batch select
Supported external players:
| Player | Platforms | Protocol |
|---|---|---|
| VLC | All | vlc:// |
| IINA | macOS | iina:// |
| MPV | All | mpv:// |
| PotPlayer | Windows | potplayer:// |
| Infuse | macOS/iOS | infuse:// |
| Kodi | All | Custom |
| MX Player | Android | Intent |
All debrid clients implement these core methods:
interface DebridClient {
// Torrent operations
addMagnetLinks(uris: string[]): Promise<Record<string, DebridFileAddStatus>>;
uploadTorrentFiles(files: File[]): Promise<Record<string, DebridFileAddStatus>>;
findTorrents(query: string): Promise<DebridFile[]>;
getTorrentList(params: { offset?: number; limit?: number }): Promise<DebridFileList>;
removeTorrent(id: string): Promise<string>;
// File operations
getTorrentFiles(id: string): Promise<DebridFileNode[]>;
getDownloadLink(params: { fileNode: DebridFileNode }): Promise<DebridLinkInfo>;
// Web downloads
addWebDownloads(links: string[]): Promise<WebDownloadAddResult[]>;
getWebDownloadList(params: { offset: number; limit: number }): Promise<WebDownloadList>;
deleteWebDownload(id: string): Promise<void>;
}Key server actions for data operations:
// Profiles
getProfiles(): Promise<Profile[]>
createProfile(data: ProfileData): Promise<Profile>
updateProfile(id: string, data: ProfileData): Promise<Profile>
deleteProfile(id: string): Promise<void>
// Watch Progress
updateWatchProgress(profileId: string, data: WatchData): Promise<WatchProgress>
getContinueWatching(profileId: string, limit?: number): Promise<WatchProgress[]>
// Favorites
addToFavorites(profileId: string, data: FavoriteData): Promise<Favorite>
removeFromFavorites(profileId: string, imdbId: string): Promise<void>
getFavorites(profileId: string, limit?: number): Promise<Favorite[]>
// Cache Warmer
createCacheWarmerJobs(config: CacheWarmerConfig): Promise<{ created: number }>
processCacheWarmerJob(jobId: string): Promise<CacheWarmerJob | null>
getCacheWarmerProgress(profileId: string): Promise<CacheWarmerProgress>- user - Authentication and user data
- user_accounts - Debrid service accounts (API keys)
- profiles - User profiles (up to 4 per user)
- watch_progress - Continue watching tracking
- favorites - Saved movies and shows
- addons - Stremio addon configurations
- cache_warmer_jobs - Pre-caching job queue
Migrations are in the drizzle/ folder:
# Apply migrations
bunx drizzle-kit push
# Generate new migration
bunx drizzle-kit generateContributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Run
bun run lintto check for errors - Submit a pull request
Important Legal Notice: This project is a client interface only and does not host, store, or distribute any content. Users are solely responsible for ensuring their use complies with all applicable laws, copyright regulations, and third-party service terms.
GPL-3.0-or-later - see LICENSE file for details.