sourin-app

sourin

Sourin is a cross-platform video aggregation client: a Flutter UI driven by Rust business logic over dart:ffi, running on Windows, macOS, Android and Android TV, unifying multiple content sources into one app for unified search, playback and download.

v1.4.0-rc2
Published at
1d ago
3
Stars
48
Download
Synced at
1d ago

Latest release

v1.4.0-rc2Oct 18, 2026, 12:58 AMPre-release
Downloads slow? Switch the source anytime above

README

Project Overview

Sourin is a cross-platform video aggregation client that merges many content sources (built-in sites, third-party plugins, Bilibili, Emby/Jellyfin, IPTV live, CCTV) into a single interface for unified search, favorites, follow-up, playback and download.

The UI is Flutter; all business logic lives in Rust and talks to it directly over dart:ffi with no IPC layer. The playback core switched to media_kit + libmpv (bundling full FFmpeg), solving the original HEVC black-screen issue on Windows at the root.

Item Value
Platform Windows, macOS, Android, Android TV
Stack Flutter + Rust, direct dart:ffi
Playback core libmpv (media_kit), d3d11va / MediaCodec HW decode
License MIT

All your video sources in one interface, with a Rust core for unified search, playback and download where HEVC plays reliably.

Key Features

  • Multi-source aggregation: built-in sites, third-party plugins, declarative JSON sources and direct TVBox links, unified into one source list
  • Cross-source search: one query fans out to all sources, streaming results in without waiting for the slowest
  • Cross-source switch: the same show plays from another source, ranked by title similarity with progress migrated
  • Playback: HEVC/H.264/AV1, ASS/SRT subtitles, Bilibili danmaku and custom danmaku servers, with speed, opacity and density all adjustable
  • Full-file download: stitches all HLS segments into one file, one folder per show
  • Cast & remote: DLNA cast to a TV that rewrites embedded m3u8 URLs, phone pairing as a remote
  • Cloud sync: WebDAV backup/restore sharing favorites, history and progress across devices
  • Desktop integration: tray icon, custom title bar, window geometry memory, picture-in-picture window

Target Audience

  • Aggregation enthusiasts who want to manage many video sources in one place
  • Heavy users who need favorites and progress synced across devices
  • TV users who watch on Android TV or big-screen casting
  • Developers who add sources via small JS plugins
  • Media fans who care about HEVC and subtitle format compatibility

Quick Start

  1. Clone the repo and set up the Flutter and Rust toolchain per the README build section
  2. Build the Rust core first: cd rust/sourin_core && cargo build --release
  3. Then build the target platform: flutter build windows --release -t lib/shell.dart
  4. In Settings / Sources, paste a plugin JS, add a TVBox URL, or configure Emby/Bilibili login to add sources
  5. In development, set DATA_DIR_OVERRIDE to a temp dir so real favorites and progress are not touched

Core Advantages

  • Direct FFI: all logic in Rust, Flutter UI only, reusing 81% of the original Rust code
  • Stable decoding: libmpv ships FFmpeg independent of system decoders, so HEVC, AC3 and DTS all play
  • Plugin sandbox: JS plugins run in a QuickJS sandbox; paste source code to add new content sources
  • Migratable data: shares the same data directory as the original, so favorites, history, progress and plugins carry over

System Requirements

Item Requirement
OS Windows, macOS, Android, Android TV
Build tools Flutter (Dart VM must allow JIT), Rust toolchain with cargo
Playback core libmpv (media_kit), d3d11va / MediaCodec HW decode

Notes

  • HEVC black screen: if it occurs, set the hardware decode mode to no for software decoding, or check [PLAY] lines in the logs
  • DRM streams: some sources (notably CCTV) are DRM-encrypted, audio-only playback, the UI states this explicitly and it is not a bug
  • Plugin data: plugin private cache lives in plugins/.data/ and may hold credentials, protect it

Release history

Sort