# AIOStreams → Unspooled Feature Gap Analysis (2026-05-23)

## Source
Full browser-based research of `https://github.com/Viren070/AIOStreams` (2k stars, 2,883 commits).
AIOStreams is a Node.js/TypeScript server-side Stremio addon middleware that aggregates
80+ addons with dedup, filtering, sorting, and formatting.

## Architecture Difference
- AIOStreams: server-side middleware (Node.js, SQLite/PostgreSQL, Redis, Docker)
- Unspooled: Android TV app (Kotlin, Jetpack Compose, Room, Hilt)
- Features to copy: **logic layer** only — filtering, sorting, dedup, catalog management

## Implemented Phases

### Phase 1 (commit 7ec683a) — Regex Filters + Addon Groups
- StreamFilterEngine wired into AddonRepository.getStreamsForContent()
- Per-content-type regex filter rules (movies/series/anime) in PreferencesManager (DataStore)
- StreamFilterScreen: tabbed UI for rule management (EXCLUDE/INCLUDE/REQUIRE, FILENAME/ADDON/RELEASE_GROUP)
- AddonGroup model + StremioAddonClientImpl.getStreamsGrouped() with early exit thresholds
- Key file: `app/src/main/java/com/nexstream/app/data/source/StreamFilterEngine.kt`

### Phase 2+3 (commit d71f4c1) — Dedup + Catalog Wiring + Marketplace
- StreamDeduplicator: 4-pass dedup (URL → infoHash → smart hash → fuzzy filename)
  - Quality-aware: keeps higher resolution/encode among duplicates
  - Smart hash: compound key (resolution:encode:release_group:sizeBucket)
  - Levenshtein similarity ≥82% with early termination
- HomeViewModel catalog preferences now consumed:
  - showTraktRows, showGenreRows, genreRowSelection, ottEnabledSet gates
  - Catalog definitions filtered by user toggles before loading
- AddonMarketplace: 20 curated Stremio addon presets across 5 categories
  - Streams: Torrentio, Comet, MediaFusion, Jackettio, Orion, Peerflix, Debridio, StreamFusion, Sootio
  - Catalogs: Cyberflix, Streaming Catalogs, TMDB Addon, Trakt TV
  - Subtitles: OpenSubtitles v3, Plus, SubDL
  - Anime: Kitsu, Tosho
  - Utility: Russian Subtitles
- Key files:
  - `app/src/main/java/com/nexstream/app/data/source/StreamDeduplicator.kt`
  - `app/src/main/java/com/nexstream/app/data/addon/AddonMarketplace.kt`
  - `app/src/main/java/com/nexstream/app/ui/screens/settings/AddonMarketplaceScreen.kt`
  - `app/src/main/java/com/nexstream/app/ui/screens/home/HomeViewModel.kt` (preferences wiring)

## Remaining High-Value Features (Not Yet Implemented)

### P0 — Configurable Sort Chains
AIOStreams stackable sort: resolution → quality → encode → cache status → seeders → size
Unspooled: SourceRanker uses hardcoded weights.
Implementation: SortConfig model → PreferencesManager → modify SourceRanker to accept SortConfig

### P1 — Stream Expression Language (SEL)
AIOStreams custom DSL: `resolution(streams, '2160p')`, `isAnime ? seadex(streams, 'best') : streams`
Requires ANTLR or custom Kotlin DSL parser. High effort, very high value.

### P2 — RPDB Poster Enhancement
AIOStreams auto-upgrades catalog posters via RPDB API. Requires API key + integration.

### P3 — Addon Group UI
Groups are stored in PreferencesManager but no Settings UI exists yet. Need AddonGroupScreen.

## Community Research Notes

### What AIOStreams Users Rave About
1. "One addon to rule them all" — consolidation + dedup (WE HAVE: dedup done)
2. Filtering precision — SEL, regex, conditions (WE HAVE: regex filters done)
3. Sorting control — stackable, content-aware (TODO: configurable sort chains)

### Top Community Pain Points
- Save config even when addon is down
- Better release date filtering
- More addons in internal store (WE HAVE: 20 in marketplace)
- Merging catalog entries
- Sort again after filters/expressions
- Letterboxd & Simkl catalog support
- Multiple account management
- Debrid expiry date display
