{"id":35135159,"url":"https://github.com/gabrielmaialva33/streamix","last_synced_at":"2026-04-13T05:02:57.421Z","repository":{"id":330909469,"uuid":"1123195597","full_name":"gabrielmaialva33/streamix","owner":"gabrielmaialva33","description":"📺 A premium, consolidated streaming experience bringing all your IPTV providers into one intelligent, beautiful interface.","archived":false,"fork":false,"pushed_at":"2026-01-06T03:44:55.000Z","size":8007,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-07T23:11:01.069Z","etag":null,"topics":["elixir","iptv","liveview","m3u","m3u8","playlists","streaming","xtream-codes"],"latest_commit_sha":null,"homepage":"https://streamix.mahina.cloud","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gabrielmaialva33.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-12-26T11:21:42.000Z","updated_at":"2026-01-06T03:44:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gabrielmaialva33/streamix","commit_stats":null,"previous_names":["gabrielmaialva33/streamix"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/gabrielmaialva33/streamix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielmaialva33%2Fstreamix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielmaialva33%2Fstreamix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielmaialva33%2Fstreamix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielmaialva33%2Fstreamix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gabrielmaialva33","download_url":"https://codeload.github.com/gabrielmaialva33/streamix/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabrielmaialva33%2Fstreamix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28400537,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elixir","iptv","liveview","m3u","m3u8","playlists","streaming","xtream-codes"],"created_at":"2025-12-28T08:49:19.916Z","updated_at":"2026-04-13T05:02:57.408Z","avatar_url":"https://github.com/gabrielmaialva33.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003cimg src=\".github/assets/web-data.png\" alt=\"Streamix\" width=\"200\"\u003e\n  \u003cbr\u003e\n  Streamix\n  \u003cbr\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eA cinematic Phoenix + LiveView streaming platform that unifies Xtream Codes providers, optional GIndex catalogs, premium access, watch parties, and AI-assisted discovery into one polished experience.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"README.pt.md\"\u003ePortugues\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Elixir-1.18+-6e4a7e?style=flat\u0026logo=elixir\" alt=\"Elixir\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Phoenix-1.8.2+-f97316?style=flat\u0026logo=phoenix-framework\" alt=\"Phoenix\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/LiveView-1.1+-0ea5e9?style=flat\u0026logo=phoenix-framework\" alt=\"LiveView\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/TimescaleDB-pg17-1d4ed8?style=flat\u0026logo=postgresql\" alt=\"TimescaleDB\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Redis-7+-dc2626?style=flat\u0026logo=redis\" alt=\"Redis\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Qdrant-Optional-111827?style=flat\" alt=\"Qdrant\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/RabbitMQ-Optional-f59e0b?style=flat\u0026logo=rabbitmq\" alt=\"RabbitMQ\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Tailwind-v4-06b6d4?style=flat\u0026logo=tailwindcss\" alt=\"Tailwind CSS\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/PWA-Enabled-7c3aed?style=flat\" alt=\"PWA\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/License-MIT-16a34a?style=flat\" alt=\"License\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#sparkles-highlights\"\u003eHighlights\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#art-architecture\"\u003eArchitecture\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#rocket-runtime-surfaces\"\u003eRuntime Surfaces\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#computer-stack\"\u003eStack\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#package-quick-start\"\u003eQuick Start\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u0026nbsp;\n  \u003ca href=\"#memo-project-notes\"\u003eProject Notes\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n\u003e [!IMPORTANT]\n\u003e Historical release tags go through `v1.5.0`, while the current `mix.exs` still reports `1.3.0`. The repository\n\u003e state and git history are the source of truth for current capabilities.\n\n\u003e [!NOTE]\n\u003e This repository contains the Phoenix backend and LiveView web app. The older standalone TV app was extracted to a\n\u003e separate repository and is no longer part of this codebase.\n\n## :sparkles: Highlights\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\" valign=\"top\"\u003e\n      \u003ch3\u003eUnified Streaming Platform\u003c/h3\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003cstrong\u003eMulti-provider aggregation\u003c/strong\u003e for Xtream Codes catalogs\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eOptional global provider\u003c/strong\u003e shared across the whole system\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eOptional GIndex ingestion\u003c/strong\u003e for Google Drive-backed libraries\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eLive TV, movies, series, seasons, and episodes\u003c/strong\u003e\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eFavorites, history, and watch progress\u003c/strong\u003e\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eEPG sync\u003c/strong\u003e with now/next style queries\u003c/li\u003e\n      \u003c/ul\u003e\n\n    \u003c/td\u003e\n    \u003ctd width=\"50%\" valign=\"top\"\u003e\n      \u003ch3\u003ePremium Product Surface\u003c/h3\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003cstrong\u003ePremium plans and subscriptions\u003c/strong\u003e\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eAdmin dashboard\u003c/strong\u003e for plans and users\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eWatch parties\u003c/strong\u003e with synchronized playback and room chat\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eSigned stream URLs\u003c/strong\u003e and credential-safe delivery\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003ePWA support\u003c/strong\u003e plus offline metadata sync hooks\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eDark-first UI\u003c/strong\u003e with a client-side theme toggle\u003c/li\u003e\n      \u003c/ul\u003e\n\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\n\u003c/table\u003e\n\n### AI, Delivery, and Infra\n\n- **Semantic search** via Gemini or NVIDIA embeddings plus Qdrant\n- **Recommendations and user taste profiling** when AI services are configured\n- **Phoenix stream proxy** for mixed-content and upstream credential protection\n- **Live stream multiplexer** for shared upstream channel consumption\n- **Circuit breaker** behavior for unstable providers\n- **ConCache L1 + Redis L2** cache layering\n- **Oban-first background work**, with **RabbitMQ + Broadway** as an optional path\n\n## :fire: Why Streamix Feels Different\n\nStreamix is not just an IPTV panel wrapper. The codebase already includes the pieces needed to behave more like a\nreal product surface: premium access gates, signed stream tokens, synchronized watch rooms, optional semantic\ndiscovery, and a cinematic LiveView interface built for actual browsing instead of just dumping provider data on the\nscreen.\n\nThe system is designed to consolidate fragmented upstream sources behind one coherent UX and one coherent domain model.\nThat means the repo is opinionated about security, stream delivery, provider boundaries, and how external services plug\ninto the platform.\n\n## :art: Architecture\n\n### High-Level View\n\n```mermaid\ngraph TD\n    U[User / Client]\n\n    subgraph Streamix[\"Streamix Platform\"]\n        W[Phoenix + LiveView UI]\n        API[REST API v1]\n        ST[StreamToken]\n        SP[Stream Proxy]\n        WP[Watch Party]\n        AI[AI Services]\n        JOBS[Oban Workers]\n    end\n\n    subgraph Core[\"Core Contexts\"]\n        ACC[Accounts + Access]\n        IPTV[IPTV + Library]\n        BILL[Billing]\n        CACHE[ConCache + Redis]\n    end\n\n    subgraph Data[\"Data + Infra\"]\n        DB[(TimescaleDB / PostgreSQL 17)]\n        REDIS[(Redis)]\n        QDRANT[(Qdrant)]\n        RMQ[(RabbitMQ)]\n    end\n\n    subgraph External[\"External Services\"]\n        XT[Xtream Providers]\n        GIDX[GIndex]\n        TMDB[TMDB]\n        EMB[Gemini / NVIDIA]\n    end\n\n    U --\u003e W\n    U --\u003e API\n    W --\u003e ACC\n    W --\u003e IPTV\n    W --\u003e BILL\n    W --\u003e WP\n    API --\u003e ACC\n    API --\u003e IPTV\n    API --\u003e BILL\n    IPTV --\u003e CACHE\n    CACHE --\u003e DB\n    CACHE --\u003e REDIS\n    ST --\u003e SP\n    SP --\u003e XT\n    IPTV --\u003e XT\n    IPTV --\u003e GIDX\n    IPTV --\u003e TMDB\n    AI --\u003e EMB\n    AI --\u003e QDRANT\n    JOBS --\u003e DB\n    JOBS --\u003e RMQ\n```\n\n### Request Flow for Protected Playback\n\n```mermaid\nsequenceDiagram\n    participant User\n    participant UI as LiveView / API\n    participant Token as StreamToken\n    participant Proxy as Stream Proxy\n    participant Upstream as IPTV Provider\n\n    User-\u003e\u003eUI: Request playback\n    UI-\u003e\u003eUI: Check auth, provider access, premium gates\n    UI-\u003e\u003eToken: Generate signed stream token\n    Token--\u003e\u003eUser: Signed playback URL\n    User-\u003e\u003eProxy: Request signed URL\n    Proxy-\u003e\u003eProxy: Validate token and resolve target safely\n    Proxy-\u003e\u003eUpstream: Fetch stream / follow redirects\n    Upstream--\u003e\u003eProxy: HLS / TS / VOD response\n    Proxy--\u003e\u003eUser: Safe playback stream\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eCore modules worth knowing\u003c/strong\u003e\u003c/summary\u003e\n\n| Area                | Main modules                                                                           |\n|---------------------|----------------------------------------------------------------------------------------|\n| Auth and roles      | `Streamix.Accounts`, `Streamix.Access`                                                 |\n| IPTV and catalog    | `Streamix.Iptv`, `Streamix.Library`                                                    |\n| Billing             | `Streamix.Billing`                                                                     |\n| AI                  | `Streamix.AI.SemanticSearch`, `Streamix.AI.UserAnalytics`                              |\n| Realtime rooms      | `Streamix.WatchParty`, `Streamix.WatchParty.RoomServer`                                |\n| Stream delivery     | `StreamixWeb.StreamToken`, `StreamixWeb.StreamController`, `Streamix.Iptv.StreamProxy` |\n| Background jobs     | `Streamix.Workers.*`, `Oban`                                                           |\n| Optional queue path | `Streamix.Queue.*`                                                                     |\n\n\u003c/details\u003e\n\n## :rocket: Runtime Surfaces\n\n### Browser routes\n\n- `/` landing page\n- `/plans`\n- `/login`, `/register`, `/settings`\n- `/browse`, `/browse/movies`, `/browse/series`\n- `/providers`, `/providers/:provider_id/...`\n- `/favorites`, `/history`\n- `/gindex/...`\n- `/party`, `/party/:invite_code`, `/party/:invite_code/watch`\n- `/watch/:type/:id`\n- `/admin`, `/admin/plans`, `/admin/users`\n\n### REST API\n\nMain API surfaces under `/api/v1`:\n\n- `auth` - register, login, logout, me\n- `catalog` - featured, movies, series, channels, categories, stream URLs\n- `search` - semantic search, similar, status, info\n- `recommendations` - personalized, similar, channels, insights, refresh\n- `favorites`\n- `history`\n- `epg`\n- `telemetry/playback`\n- `providers`\n\nHealthcheck:\n\n- `GET /api/health`\n\n## :computer: Stack\n\n### Backend\n\n| Technology  | Version      | Role                        |\n|-------------|--------------|-----------------------------|\n| Elixir      | `~\u003e 1.18`    | Application runtime         |\n| OTP         | 27           | Supervision and concurrency |\n| Phoenix     | `~\u003e 1.8.2`   | Web framework               |\n| LiveView    | `~\u003e 1.1.0`   | Realtime UI                 |\n| Ecto SQL    | `~\u003e 3.13`    | Database layer              |\n| Req + Finch | current deps | HTTP client and pooling     |\n| Oban        | `~\u003e 2.18`    | Background jobs             |\n\n### Data and infra\n\n| Technology                  | Status      | Role                                   |\n|-----------------------------|-------------|----------------------------------------|\n| TimescaleDB / PostgreSQL 17 | required    | primary relational store               |\n| Redis 7                     | recommended | L2 cache and hot-path support          |\n| Qdrant                      | optional    | semantic search and AI recommendations |\n| RabbitMQ 4                  | optional    | Broadway-based distributed queueing    |\n| ConCache                    | built-in    | in-memory L1 cache                     |\n\n### Frontend\n\n| Technology                    | Role                                        |\n|-------------------------------|---------------------------------------------|\n| Tailwind CSS v4               | styling                                     |\n| esbuild                       | JS bundling                                 |\n| npm packages in `assets/`     | browser runtime deps                        |\n| PWA manifest + service worker | installability and offline metadata caching |\n\n## :package: Quick Start\n\n### Prerequisites\n\n- Docker\n- Elixir 1.18+\n- OTP 27+\n- Node.js 20+ and npm\n\n### 1. Start local infrastructure\n\n```bash\ndocker compose up -d\n```\n\nIncluded services:\n\n- TimescaleDB / PostgreSQL 17\n- Redis\n- RabbitMQ\n- Qdrant\n\n### 2. Configure `.env`\n\n```bash\ncp .env.example .env\n```\n\nMinimum required values before `mix setup`:\n\n- `ADMIN_PASSWORD`\n- `PROVIDER_ENCRYPTION_KEY`\n\n### 3. Install JS dependencies\n\n```bash\ncd assets \u0026\u0026 npm ci \u0026\u0026 cd ..\n```\n\n### 4. Setup the application\n\n```bash\nmix setup\n```\n\nThat runs deps, DB setup, seeds, asset setup, and asset build.\n\n### 5. Start Streamix\n\n```bash\nmix phx.server\n```\n\nOpen [http://localhost:4000](http://localhost:4000).\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eEnvironment checklist\u003c/strong\u003e\u003c/summary\u003e\n\nImportant variables in `.env.example`:\n\n- `DATABASE_URL`\n- `TEST_DATABASE_URL` optional; inferred from `DATABASE_URL` when omitted\n- `REDIS_URL`\n- `GLOBAL_PROVIDER_*`\n- `GINDEX_ENABLED` / `GINDEX_URL`\n- `TMDB_API_TOKEN`\n- `GEMINI_API_KEY` or `NVIDIA_API_KEY`\n- `QDRANT_URL`\n- `RABBITMQ_ENABLED`\n- `API_KEYS`\n- `SECRET_KEY_BASE` for production\n- `LIVE_VIEW_SIGNING_SALT` for production\n\n\u003c/details\u003e\n\n## :wrench: Developer Commands\n\n```bash\nmix test\nmix test path/to/test.exs\nmix test path/to/test.exs:42\n\nmix credo --strict\nmix quality\nmix precommit\n\nmix ecto.migrate\nmix ecto.reset\n\nmix assets.build\nmix assets.deploy\n```\n\n## :memo: Project Notes\n\n- The current GitHub Actions workflow builds and pushes `ghcr.io/gabrielmaialva33/streamix:latest` on pushes to\n  `master`.\n- `mix setup` depends on seeds, and seeds require `ADMIN_PASSWORD`.\n- `assets/node_modules` is ignored, so `npm ci` is part of a real first-time setup.\n- AI features are optional and degrade gracefully when embeddings or Qdrant are not configured.\n- The extracted TV app is intentionally out of scope for this repo.\n\n## :handshake: Contributing, Security, License\n\n- [CONTRIBUTING.md](CONTRIBUTING.md)\n- [SECURITY.md](SECURITY.md)\n- [AGENTS.md](AGENTS.md)\n- [LICENSE](LICENSE)\n\n\u003cbr\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://avatars.githubusercontent.com/u/26732067\" alt=\"Gabriel Maia\" width=\"92\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Crafted by \u003cstrong\u003eGabriel Maia\u003c/strong\u003e\u003cbr\u003e\n  \u003ca href=\"mailto:gabrielmaialva33@gmail.com\"\u003egabrielmaialva33@gmail.com\u003c/a\u003e ·\n  \u003ca href=\"https://github.com/gabrielmaialva33\"\u003eGitHub\u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrielmaialva33%2Fstreamix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgabrielmaialva33%2Fstreamix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabrielmaialva33%2Fstreamix/lists"}