Semo is designed to offer a seamless movie and TV show streaming experience. With support for multiple streaming servers, synced watch progress, YouTube trailer playback, and fully customizable subtitles, Semo aims to be your go-to streaming app for enjoying your favorite content.
🗂 Comprehensive Library
- Access almost all movies and TV shows.
- Explore a vast library to find something for everyone using TMDB data.
🎥 Stream Playback
- Play movies and TV shows directly using high-quality HLS or file streams.
- Multiple streaming servers with automatic fallbacks and quality labelling for direct-file sources.
⏳ Synced Watch Progress
- Automatically syncs playback progress for movies and episodes.
- Never lose your spot, even if you switch devices or revisit content later.
🔠 Customizable Subtitles
- Support for .srt subtitle files (converted on the fly to WebVTT for playback).
- Filter subtitles by language and cache downloads for offline reuse.
- Play official trailers via resilient multi-backend YouTube extraction.
- Sniff additional media links directly from provider pages when needed.
Client: Flutter
Server: Firebase
- Architecture
- API services:
- TODOs
Prerequisites:
- Flutter SDK (latest stable version).
- A code editor (e.g., Android Studio, VSCode).
- A Firebase account
Instructions:
- Clone the repository
git clone https://github.com/moses-mbaga/semo.git
cd semo- Install the dependencies:
flutter pub get-
Under the parent directory, create a
.envfile, which will contain the secrets required to run the app. An example can be found in.env.example. -
Auto generate asset and env helpers using build_runner:
dart run build_runner build --delete-conflicting-outputs-
Add Firebase to the app using FlutterFire CLI. You can follow instructions from the official documentation
-
Run the app:
flutter runIf you encounter any issues or have suggestions, please open an issue in the GitHub Issues section.
Enjoy streaming with Semo! 🌟
