Repository navigation
Releases: alwayszihanx/MixStream
Releases · alwayszihanx/MixStream
Release list
v3.7.1
[3.7.1] - Latest
📥 Batch Episode Download
- Multi-select episodes — select episodes straight from the list and download a whole season in one action. Works for both extension-backed items (
EpisodeCard) and TMDB/Nuvio shows (MovieSeasonsList). - Select all (N) / This page — no more paging through a 300-episode show 20 episodes at a time.
- Parallel resolution — episodes resolve through a bounded 3-wide worker pool instead of one serial scraper round-trip each, so a 20-episode batch finishes several times faster.
- Skip already-downloaded — re-running a batch no longer re-downloads episodes you already have.
- Robust selection keys — selection is keyed by
S<season>-E<episode>rather than the episode URL, which is empty for TMDB entries and previously made every episode collide on one key. - Stable tracking IDs — stops episodes in a batch clobbering each other's download progress.
🎬 HLS Download & MKV Conversion
- Real MKV output — every download is remuxed from MP4 into a genuine
.mkvby a new pure-Dart remuxer (no FFmpeg dependency). Samples are copied packet-for-packet, so there is no quality loss and A/V sync from the MP4 edit tables is preserved. - HLS support —
.m3u8sources are now downloadable. Segments are fetched concurrently, AES-128 encrypted playlists are decrypted, MPEG-TS is demuxed to H.264/AAC, and the result is written as MKV. - Live playlists rejected clearly — an on-demand-only error instead of hanging or saving a broken file.
- Conversion progress — the Downloads row shows a live percentage while converting.
- Conversion failures surfaced — the original file is always kept and the row reads "Kept as MP4 (MKV conversion failed)" instead of silently reporting success.
- Gentler on the device — conversions are queued (max 2 at a time), so a batch finishing together no longer spawns a burst of isolates.
- Faster path lookups — downloaded-file paths are cached instead of re-probing the filesystem on every rebuild.
🏠 Home Screen
- Regional shelves — 14 new movie & series rows, newest-first so new releases surface automatically: Latest, Hollywood, Bollywood, South Indian, Indonesian, Korean, Turkish, British, French, German, Russian, Chinese, Japanese and Arabic.
- Real industry filtering — shelves use TMDB origin-country filters, splitting Indian cinema correctly into Bollywood (Hindi) and South Indian (Telugu/Tamil/Malayalam/Kannada).
- Genuinely "latest" — the Latest shelf uses a rolling 90-day release window instead of sorting all-time by date, which had been surfacing unrated placeholder entries.
- Per-shelf vote floors — filter out empty entries so the rows stay worth scrolling.
- Progressive loading — shelves appear as each resolves instead of blocking the whole page.
- Single Continue Watching — removed the duplicate section that sat above the hero carousel.
📺 Details Screen
- "3 of 12 downloaded" badge — per-season download progress, read from the download folder in a single pass.
- Converted files preferred — an MKV is returned in place of the MP4 it replaced.
🎬 Nuvio Scraper Layer
- Nuvio-aware batch download — Nuvio is not a
MixStreamProvider, so the batch path now resolves sources through the Nuvio scrapers using the TMDB id plus season/episode. - Scraper sessions now survive to download — cookies collected while scraping are exported and attached to the stream, fixing downloads that failed with 403 while playback worked.
- Downloadable links are no longer hidden — the download-mode filter and the per-row download button now agree, so torrent rows (with debrid) and protocol-relative
//host/file.mp4links appear correctly. - Extension-less links accepted — scraper links without a file extension are probed and accepted on their content type.
- Fewer repeat scraper runs — scraper code is cached in memory, so a batch reads each script once instead of once per episode.
- Reliability ranking — sources now sort by how often each scraper has actually delivered, with a small-sample prior so one lucky hit doesn't win.
🛠 Under the Hood
- Connectivity fix —
connectivity_plusreturns a list of results now; the offline card was comparing against a single value. untranslated-messages-fileis configured inl10n.yamlso CI's translation-coverage gate has the report it expects.
🐛 Fixed
- Matroska
TrackNumberwas written as a variable-length integer instead of a plain integer, producing "Invalid track number" and no duration. - Converted samples shared one reusable buffer, so every block in a file received the same bytes.
- Negative timestamps (from AAC priming edit lists) were never shifted, producing a bogus cluster timestamp of 235 ms and non-monotonic audio.
- MP4
Durationis a float, not an integer, so playback duration was reported as 0.
[3.7.0]
📺 Enhanced Details Screen
- Poster zoom overlay — double-tap any poster to zoom with a floating action menu (Play, Bookmark, Download) for quick access without leaving the screen.
- Scroll-driven hero stretch — the hero poster now stretches and compresses as you scroll, giving a cinematic parallax depth effect on desktop/TV.
- Error & empty states — replaced raw error text with friendly
_DetailsErrorView(with retry button) and_DetailsEmptyViewso the screen is never blank when data fails to load. - Graceful provider fallback — when no registered extension matches an item, the original payload renders immediately and metadata resolution runs in the background instead of crashing.
🔄 Watched Progress Tracking
- WatchProgressRepository — per-episode progress tracking stored persistently, with
markWatched,markUnwatched, andsavePositionmethods. - EpisodeWatchedActionSheet — bottom sheet to mark individual episodes watched/unwatched with reset progress option.
- SeasonWatchedActionSheet — bottom sheet to mark all episodes in a season watched/unwatched, with progress count shown.
- EpisodeWatchRepository — extended to support explicit watched overrides with automatic detection based on playback position (90% threshold).
📡 Connectivity & Offline
- NetworkOfflineCard — persistent connectivity indicator banner shown at the top of the details screen on both mobile and desktop. Auto-updates in real-time via
Connectivity().onConnectivityChanged.
🏠 Enhanced Home Screen
- Continue Watching Hero Slot — hero-sized continue-watching carousel at the top of the home screen so you can pick up where you left off instantly without scrolling.
- ContinueWatchingHeroViewportReserve — dedicated layout spacer ensuring smooth scrolling without content overlap.
🎬 Nuvio Integration
- Improved Nuvio plugin metadata handling and plugin sources sheet.
- Debrid integration wired into Nuvio sources for premium link resolution.
🛠 Under the Hood
- Disabled Impeller rendering backend on Android (fell back to Skia) to fix device-specific rendering regressions.
- Splash pacing rebalanced for a calmer, more cinematic feel.
🎬 Cinematic 7-Stage Splash
- Brand-new intro sequence: the screen opens on pure black, an ambient green glow blooms from the center, and real genre posters (Horror, Thriller, Action, Sci-Fi, Anime, Drama, Comedy, Documentary) fade and scale in from every direction with subtle rotation.
- The posters drift toward the center, collapse into the MixStream logo (
mixstream.png), which then cross-fades into the full wordmark, followed by a light sweep across the logo and a hold on the "Unlimited Movies & Shows" tagline. - The splash now fades to black at the end so it hands off seamlessly into the dark app — no white flash, no jank.
🌑 Dark-Only Mode
- The app is now dark mode only. The system/light theme options have been removed;
ThemeMode.darkis forced app-wide so the experience is consistent everywhere. - The native Android splash and the Flutter splash both use the same deep-dark surface for a continuous, unified look.
🟢 Wordmark Branding
- The home screen AppBar now displays the MixStream wordmark logo (PNG) instead of the plain "MixStream" text.
- The branding is consistent across the splash (logo formation) and the home screen.
🛠 Under the Hood
- Disabled the Impeller rendering backend on Android (fell back to Skia) to fix device-specific rendering regressions (opacity-on-image crashes, blur hangs, full-screen opacity washout).
- Splash pacing rebalanced for a calmer, more cinematic feel (poster emergence and logo hold given more breathing room).
v3.6.9
Changelog
All notable changes to MixStream are documented here. The format loosely follows Keep a Changelog.
[3.6.9] - Latest
🎬 Cinematic 7-Stage Splash
- Brand-new intro sequence: the screen opens on pure black, an ambient green glow blooms from the center, and real genre posters (Horror, Thriller, Action, Sci-Fi, Anime, Drama, Comedy, Documentary) fade and scale in from every direction with subtle rotation.
- The posters drift toward the center, collapse into the MixStream logo (
mixstream.png), which then cross-fades into the full wordmark, followed by a light sweep across the logo and a hold on the "Unlimited Movies & Shows" tagline. - The splash now fades to black at the end so it hands off seamlessly into the dark app — no white flash, no jank.
🌑 Dark-Only Mode
- The app is now dark mode only. The system/light theme options have been removed;
ThemeMode.darkis forced app-wide so the experience is consistent everywhere. - The native Android splash and the Flutter splash both use the same deep-dark surface for a continuous, unified look.
🟢 Wordmark Branding
- The home screen AppBar now displays the MixStream wordmark logo (PNG) instead of the plain "MixStream" text.
- The branding is consistent across the splash (logo formation) and the home screen.
🛠 Under the Hood
- Disabled the Impeller rendering backend on Android (fell back to Skia) to fix device-specific rendering regressions (opacity-on-image crashes, blur hangs, full-screen opacity washout).
- Splash pacing rebalanced for a calmer, more cinematic feel (poster emergence and logo hold given more breathing room).
v3.6.6
Changelogs
All notable changes to MixStream are documented here. The format loosely follows Keep a Changelog.
[3.6.6] - Latest
✨ New Features
- Custom Loading Indicators – Replaced the stock Material spinner everywhere with a hand-crafted dot-pulse loader: glowing dots travel around a ring in a brightening wave (accent gradient cycle), with a compact
.smallvariant (16–20px) for thumbnails, episode cards, and the switch-account screen. - Hero Bookmark Toggle – The hero "Save" placeholder was replaced with a real per-profile Bookmark/Bookmarked button wired to the library. Saved items render a filled, accent-colored bookmark and appear in Library → Bookmarks.
🖥️ Desktop & Window Experience
- Slimmer Title Bar – Reduced custom title bar height (48→36px), compact 28px window buttons and 14px icons for close, fullscreen/always-on-top, and pin controls.
🎬 Hero Carousel Polish
- Gradient Titles – Hero titles now use a Disney-style gradient (white → primary → tertiary) via a
ShaderMask. - Slower Desktop Auto-Advance – Carousel auto-advance is now 12s on desktop (Linux/Windows/macOS) vs 5s on mobile, and pauses when the carousel scrolls off-screen.
- Layout Fix – Dot indicators repositioned fully below the action buttons with a clear gap; title raised so the action row no longer overlaps the dots.
🏠 Home / Explore
- Section Accent Bars – Every section title now shows a slim 4px gradient accent bar (primary → tertiary → secondary).
🧩 Icons
- Icon System Audit – All 143 used icons now resolve to real bundled assets (4500+ SVGs). Fixed mappings for
bookmark-border/bookmark-outline→bookmark-02,delete-sweep→delete-01,queue→check-list, andswap-horiz→exchange-01; removed duplicate override keys.
[3.5.0] - Experience & Navigation Overhaul
🏠 Home Screen
- Netflix-Style Banner – Cinematic hero banner with a three-button action row (Bookmark / Play / Info).
- Continue Watching – Resume progress cards with improved layout and watch-progress updates.
- Collapsible Sections – Tap section titles (Continue Watching, Trending, etc.) to collapse/expand with animated chevron rotation.
- No-Provider Icon Wobble – Items without a provider source play a subtle ±6° wobble to draw attention.
- Retry Button Spin – Error "Try Again" button spins 360° before retrying.
- Gradient Dividers & Improved Empty States – Section separators fade from primary color; empty states feature circular icon containers with guidance text.
- Storage Info Bar – Free-space indicator shown in the library.
📚 Library Screen
- Queue Tab – New dedicated queue management tab.
- Grid/List Toggle – Switch between poster grid and compact list layouts.
- Bookmarks Float Animation – Empty-state icon floats up and down (±4px, 3s cycle).
- Downloads Slide-to-Delete –
Dismissibleswipe-to-delete with red accent and confirmation dialog. - Downloads Status Borders – Left accent border colored by status: green (completed), orange (in-progress), red (failed).
- Downloads Pulsing Empty State – Empty-state icon pulses (1.0→1.08).
👤 Profile
- Profile Avatar & Switch-Account Screen – Per-profile library/bookmarks/history/tracking with a polished account switcher.
- Version Info – App metadata displayed in About.
🎬 Details Screen
- Cast Carousel Staggered Entry – Cast avatars fade in and slide right with staggered timing.
- Trailers Play Icon Pulse – Play overlay pulses (1.0→1.1, 2s repeat).
- Next Airing Widget Pulse – Calendar icon pulses (1.0→1.15) for upcoming episodes.
- Recommendations Staggered Entry – "More Like This" cards reveal with cinematic stagger.
- Press Feedback – Genre chips, provider badges, and Sub/Dub language toggles animate on press; episode sort icon rotates 180° on toggle.
- Share Buttons – Quick-share to socials from the details header.
🎵 Player Loading Overlay
- Spinning Ring – Phase indicator uses a rotating ring (1.5s rotation) instead of a static spinner.
🧭 Navigation
- 40px Nav Tabs – Compact tab bar.
- Bottom Nav Bounce & Crossfade – Tab icons bounce to 1.2× (
easeOutBack) and crossfade on switch.
🔍 Search & Explore
- Staggered Fade-In – Explore sections and search results fade in with staggered timing.
- 12dp Card Radius – Softer, modern card corners across grids and lists.
[3.4.6] - Themes, Player & Infrastructure
🎨 Theme System Overhaul
- 23 curated themes – Nature (Ocean default, Forest, Sunset, Arctic, Volcanic), Seasonal (Spring, Autumn, Winter), Brand (Spotify, Discord, Telegram), Palettes (Neon, Deep, Monochrome, Sepia, Pastel), Time-Based (Dawn, Golden Hour, Midnight), Cultural (Wabi-Sabi, Indian Vibrant, Moroccan), Pure (AMOLED Black).
- Removed 30 legacy themes in favor of the curated collection.
📺 Media Player & Subtitles
- Subtitle Styling – Appearance settings, custom shadows, and text scaling.
- Custom Player Seek Bar – Refactored progress bar with 30-second seek step.
- Netflix-Style Scrim – Subtle overlay scrim on TV/Desktop for control readability.
- Dub Status Filtering – Filter episodes by sub/dub in the side panel, with visual dub badges.
🔗 Integrations & Tracking
- AniList Sync & Metadata – Full AniList tracking plus TMDB metadata enrichment.
- Multi-tracker support – Trakt, Simkl, MAL, AniList.
⚙️ Settings
- Collapsible Groups – Settings groups collapse/expand with animated chevrons and section descriptions.
- Theme Selector Grid – Responsive swatch grid with border highlight on selection.
- About Info Cards – Version, package, and SDK metadata in organized cards.
🛠️ Infrastructure & CI/CD
- Multi-platform release pipeline – GitHub Actions with per-platform build jobs: Android (split + universal APK), Windows (EXE/Inno Setup), Linux (deb/rpm/tar.xz), macOS (DMG), iOS (IPA + xcarchive).
- MixPlug Plugin System – Inline plugin install via
installer.sh(fetchesrepo.json→plugins.json, extracts.mixzips withmeta.json); one-commandmixstreaminstall + clean uninstaller. - Preview Workflow – Auto-generates a release keystore if the signing secret is missing.
- Single Author History & Dual Remote Push – Rewritten to
alwayszihan, force-pushed to GitHub and Codeberg.
🐞 Bug Fixes
- Fixed vertical scroll jitter on recommendations and search screen scroll bugs.
- Fixed AniList logo assets, player padding, and Anilist enrichment failures.
- Resolved Cloudflare cookie bypass and proxy header injection.
- Fixed all 81 static-analysis lint issues (now 0) and the
_InfoEntryprivate-type-in-public-API warning.
Roadmap
- Android TV deep-layout support and focused navigation.
- iOS / macOS builds.
- CloudStream plugin compatibility investigation (own JS plugins are the priority).
- Release signing for distribution builds.
👤 Contributors
- alwayszihan
v3.4.6
Changelogs - v3.4.6
✨ New Features
📺 Media Player & Subtitles
- Subtitle Styling & Customization – Added subtitle appearance settings, custom shadows, and text scaling support.
- Custom Player Seek Bar – Refactored the player progress bar into a custom seek bar component and tuned the seek step to 30 seconds.
- Netflix-Style Scrim – Implemented a subtle player overlay scrim on TV/Desktop to improve readability of player controls and metadata.
- Dub Status Filtering – Filter episodes by sub/dub status in the side panel, and added a visual dub badge to the episode rows.
🔗 Integrations & Tracking
- AniList Sync & Metadata – Full integration for AniList tracking and TMDB metadata enrichment.
- Improved Continuing Watch – Better watch progress updates and layout improvements for Continue Watching cards.
🖥️ Desktop & Window Experience
- Desktop Window Optimization – Configurable default window startup size and improved sidebar contrasts.
- Custom Titlebar & Always on Top – Initial support for custom titlebars, always-on-top toggle, and OS window styling.
🐞 Bug Fixes
- 🛠️ Fixed vertical scroll jitter on recommendations carousel and resolved search screen scroll bugs.
- 🛠️ Fixed AniList logo asset links, player padding issues, and Anilist enrichment failures.
- 🛠️ Resolved Cloudflare cookie bypass and proxy header injection headers.
👤 Contributors
- alwayszihanx
- Telegram : https://t.me/alwayszihan
MixStream v2.6.0
First release with prebuilt binaries:
- Android APK
- Linux x64 bundle